Module Name:    src
Committed By:   ozaki-r
Date:           Mon Jun 26 03:13:40 UTC 2017

Modified Files:
        src/sys/net: rtsock.c
        src/tests/net/arp: t_arp.sh
        src/tests/net/ndp: t_ndp.sh
        src/usr.sbin/arp: arp.c
        src/usr.sbin/ndp: ndp.c

Log Message:
Fix usage of routing messages on arp -d and ndp -d

It didn't work as we expected; we should set RTA_GATEWAY not
RTA_IFP on RTM_GET to return an if_index and the kernel should
use it on RTM_DELETE.


To generate a diff of this commit:
cvs rdiff -u -r1.219 -r1.220 src/sys/net/rtsock.c
cvs rdiff -u -r1.27 -r1.28 src/tests/net/arp/t_arp.sh
cvs rdiff -u -r1.24 -r1.25 src/tests/net/ndp/t_ndp.sh
cvs rdiff -u -r1.56 -r1.57 src/usr.sbin/arp/arp.c
cvs rdiff -u -r1.48 -r1.49 src/usr.sbin/ndp/ndp.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/rtsock.c
diff -u src/sys/net/rtsock.c:1.219 src/sys/net/rtsock.c:1.220
--- src/sys/net/rtsock.c:1.219	Fri Jun 23 05:46:10 2017
+++ src/sys/net/rtsock.c	Mon Jun 26 03:13:40 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtsock.c,v 1.219 2017/06/23 05:46:10 ozaki-r Exp $	*/
+/*	$NetBSD: rtsock.c,v 1.220 2017/06/26 03:13:40 ozaki-r Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.219 2017/06/23 05:46:10 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.220 2017/06/26 03:13:40 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -856,8 +856,10 @@ COMPATNAME(route_output)(struct mbuf *m,
 		if (info.rti_info[RTAX_GATEWAY] &&
 		    (info.rti_info[RTAX_GATEWAY]->sa_family == AF_LINK) &&
 		    (rtm->rtm_flags & RTF_LLDATA) != 0) {
+			const struct sockaddr_dl *sdlp =
+			    satocsdl(info.rti_info[RTAX_GATEWAY]);
 			error = lla_rt_output(rtm->rtm_type, rtm->rtm_flags,
-			    rtm->rtm_rmx.rmx_expire, &info, 0);
+			    rtm->rtm_rmx.rmx_expire, &info, sdlp->sdl_index);
 			break;
 		}
 #endif /* INET */

Index: src/tests/net/arp/t_arp.sh
diff -u src/tests/net/arp/t_arp.sh:1.27 src/tests/net/arp/t_arp.sh:1.28
--- src/tests/net/arp/t_arp.sh:1.27	Thu Jun 22 10:06:33 2017
+++ src/tests/net/arp/t_arp.sh	Mon Jun 26 03:13:40 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: t_arp.sh,v 1.27 2017/06/22 10:06:33 ozaki-r Exp $
+#	$NetBSD: t_arp.sh,v 1.28 2017/06/26 03:13:40 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -647,15 +647,15 @@ arp_rtm_body()
 
 	str="RTM_GET.+<UP,DONE,LLINFO>"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_GET $file
-	str="<DST,GATEWAY,IFP,IFA>"
+	str="<DST,GATEWAY>"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_GET $file
-	str="$IP4DST $macaddr_dst $macaddr_src $IP4SRC"
+	str="$IP4DST $macaddr_dst"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_GET $file
 	str="RTM_DELETE.+<UP,DONE,LLINFO>"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_DELETE $file
-	str="<DST,GATEWAY,IFP,IFA>"
+	str="<DST,GATEWAY>"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_DELETE $file
-	str="$IP4DST $macaddr_dst $macaddr_src $IP4SRC"
+	str="$IP4DST $macaddr_dst"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_DELETE $file
 
 	rump_server_destroy_ifaces

Index: src/tests/net/ndp/t_ndp.sh
diff -u src/tests/net/ndp/t_ndp.sh:1.24 src/tests/net/ndp/t_ndp.sh:1.25
--- src/tests/net/ndp/t_ndp.sh:1.24	Thu Jun 22 10:06:34 2017
+++ src/tests/net/ndp/t_ndp.sh	Mon Jun 26 03:13:40 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ndp.sh,v 1.24 2017/06/22 10:06:34 ozaki-r Exp $
+#	$NetBSD: t_ndp.sh,v 1.25 2017/06/26 03:13:40 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -446,15 +446,15 @@ ndp_rtm_body()
 
 	str="RTM_GET.+<UP,DONE,LLINFO>"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_GET $file
-	str="<DST,GATEWAY,IFP,IFA>"
+	str="<DST,GATEWAY>"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_GET $file
-	str="$IP6DST $macaddr_dst $macaddr_src $IP6SRC"
+	str="$IP6DST $macaddr_dst"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_GET $file
 	str="RTM_DELETE.+<UP,DONE,LLINFO>"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_DELETE $file
-	str="<DST,GATEWAY,IFP,IFA>"
+	str="<DST,GATEWAY>"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_DELETE $file
-	str="$IP6DST $macaddr_dst $macaddr_src $IP6SRC"
+	str="$IP6DST $macaddr_dst"
 	atf_check -s exit:0 -o match:"$str" grep -A 3 RTM_DELETE $file
 
 	rump_server_destroy_ifaces

Index: src/usr.sbin/arp/arp.c
diff -u src/usr.sbin/arp/arp.c:1.56 src/usr.sbin/arp/arp.c:1.57
--- src/usr.sbin/arp/arp.c:1.56	Tue Jun  6 19:59:10 2017
+++ src/usr.sbin/arp/arp.c	Mon Jun 26 03:13:40 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: arp.c,v 1.56 2017/06/06 19:59:10 ryo Exp $ */
+/*	$NetBSD: arp.c,v 1.57 2017/06/26 03:13:40 ozaki-r Exp $ */
 
 /*
  * Copyright (c) 1984, 1993
@@ -42,7 +42,7 @@ __COPYRIGHT("@(#) Copyright (c) 1984, 19
 #if 0
 static char sccsid[] = "@(#)arp.c	8.3 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: arp.c,v 1.56 2017/06/06 19:59:10 ryo Exp $");
+__RCSID("$NetBSD: arp.c,v 1.57 2017/06/26 03:13:40 ozaki-r Exp $");
 #endif
 #endif /* not lint */
 
@@ -660,7 +660,7 @@ rtmsg(const int s, const int cmd, const 
 		break;
 	case RTM_GET:
 		rtm->rtm_flags |= RTF_LLDATA;
-		rtm->rtm_addrs |= RTA_DST | RTA_IFP;
+		rtm->rtm_addrs |= RTA_DST | RTA_GATEWAY;
 	}
 
 #define NEXTADDR(w, s) \

Index: src/usr.sbin/ndp/ndp.c
diff -u src/usr.sbin/ndp/ndp.c:1.48 src/usr.sbin/ndp/ndp.c:1.49
--- src/usr.sbin/ndp/ndp.c:1.48	Mon Sep 19 19:13:14 2016
+++ src/usr.sbin/ndp/ndp.c	Mon Jun 26 03:13:40 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ndp.c,v 1.48 2016/09/19 19:13:14 christos Exp $	*/
+/*	$NetBSD: ndp.c,v 1.49 2017/06/26 03:13:40 ozaki-r Exp $	*/
 /*	$KAME: ndp.c,v 1.121 2005/07/13 11:30:13 keiichi Exp $	*/
 
 /*
@@ -813,7 +813,7 @@ rtmsg(int cmd)
 		break;
 	case RTM_GET:
 		rtm->rtm_flags |= RTF_LLDATA;
-		rtm->rtm_addrs |= RTA_DST | RTA_IFP;
+		rtm->rtm_addrs |= RTA_DST | RTA_GATEWAY;
 	}
 #define NEXTADDR(w, s) \
 	if (rtm->rtm_addrs & (w)) { \

Reply via email to