Module Name:    src
Committed By:   ozaki-r
Date:           Wed Jun 21 09:05:31 UTC 2017

Modified Files:
        src/sys/netinet: if_arp.c
        src/sys/netinet6: in6.c nd6.c nd6.h
        src/tests/net/arp: t_arp.sh
        src/tests/net/ndp: t_ndp.sh t_ra.sh
        src/tests/net/net: t_ipv6address.sh

Log Message:
Don't create a permanent L2 cache entry on adding an address to an interface

It was created to copy FreeBSD, however actually the cache isn't
necessary. Remove it to simplify the code and reduce the cost to
maintain it (e.g., keep a consistency with a corresponding local
route).


To generate a diff of this commit:
cvs rdiff -u -r1.251 -r1.252 src/sys/netinet/if_arp.c
cvs rdiff -u -r1.245 -r1.246 src/sys/netinet6/in6.c
cvs rdiff -u -r1.233 -r1.234 src/sys/netinet6/nd6.c
cvs rdiff -u -r1.83 -r1.84 src/sys/netinet6/nd6.h
cvs rdiff -u -r1.25 -r1.26 src/tests/net/arp/t_arp.sh
cvs rdiff -u -r1.21 -r1.22 src/tests/net/ndp/t_ndp.sh
cvs rdiff -u -r1.27 -r1.28 src/tests/net/ndp/t_ra.sh
cvs rdiff -u -r1.13 -r1.14 src/tests/net/net/t_ipv6address.sh

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

Modified files:

Index: src/sys/netinet/if_arp.c
diff -u src/sys/netinet/if_arp.c:1.251 src/sys/netinet/if_arp.c:1.252
--- src/sys/netinet/if_arp.c:1.251	Fri Jun 16 02:24:54 2017
+++ src/sys/netinet/if_arp.c	Wed Jun 21 09:05:31 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_arp.c,v 1.251 2017/06/16 02:24:54 ozaki-r Exp $	*/
+/*	$NetBSD: if_arp.c,v 1.252 2017/06/21 09:05:31 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.251 2017/06/16 02:24:54 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.252 2017/06/21 09:05:31 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -1472,41 +1472,13 @@ arpioctl(u_long cmd, void *data)
 void
 arp_ifinit(struct ifnet *ifp, struct ifaddr *ifa)
 {
-	struct in_addr *ip;
 	struct in_ifaddr *ia = (struct in_ifaddr *)ifa;
 
-	/*
-	 * Warn the user if another station has this IP address,
-	 * but only if the interface IP address is not zero.
-	 */
-	ip = &IA_SIN(ifa)->sin_addr;
-	if (!in_nullhost(*ip) &&
-	    (ia->ia4_flags & (IN_IFF_NOTREADY | IN_IFF_DETACHED)) == 0) {
-		struct llentry *lle;
-
-		/*
-		 * interface address is considered static entry
-		 * because the output of the arp utility shows
-		 * that L2 entry as permanent
-		 */
-		IF_AFDATA_WLOCK(ifp);
-		lle = lla_create(LLTABLE(ifp), (LLE_IFADDR | LLE_STATIC),
-				 (struct sockaddr *)IA_SIN(ifa));
-		IF_AFDATA_WUNLOCK(ifp);
-		if (lle == NULL)
-			log(LOG_INFO, "%s: cannot create arp entry for"
-			    " interface address\n", __func__);
-		else {
-			arp_init_llentry(ifp, lle);
-			LLE_RUNLOCK(lle);
-		}
-	}
-
 	ifa->ifa_rtrequest = arp_rtrequest;
 	ifa->ifa_flags |= RTF_CONNECTED;
 
 	/* ARP will handle DAD for this address. */
-	if (in_nullhost(*ip)) {
+	if (in_nullhost(IA_SIN(ifa)->sin_addr)) {
 		if (ia->ia_dad_stop != NULL)	/* safety */
 			ia->ia_dad_stop(ifa);
 		ia->ia_dad_start = NULL;

Index: src/sys/netinet6/in6.c
diff -u src/sys/netinet6/in6.c:1.245 src/sys/netinet6/in6.c:1.246
--- src/sys/netinet6/in6.c:1.245	Fri Apr 28 05:56:33 2017
+++ src/sys/netinet6/in6.c	Wed Jun 21 09:05:31 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: in6.c,v 1.245 2017/04/28 05:56:33 ozaki-r Exp $	*/
+/*	$NetBSD: in6.c,v 1.246 2017/06/21 09:05:31 ozaki-r Exp $	*/
 /*	$KAME: in6.c,v 1.198 2001/07/18 09:12:38 itojun Exp $	*/
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.245 2017/04/28 05:56:33 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.246 2017/06/21 09:05:31 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1298,10 +1298,11 @@ in6_update_ifa1(struct ifnet *ifp, struc
 			goto cleanup;
 	}
 
-	/* Add local address to lltable, if necessary (ex. on p2p link). */
-	error = nd6_add_ifa_lle(ia);
-	if (error != 0)
-		goto cleanup;
+	if (nd6_need_cache(ifp)) {
+		/* XXX maybe unnecessary */
+		ia->ia_ifa.ifa_rtrequest = nd6_rtrequest;
+		ia->ia_ifa.ifa_flags |= RTF_CONNECTED;
+	}
 
 	/*
 	 * Perform DAD, if needed.

Index: src/sys/netinet6/nd6.c
diff -u src/sys/netinet6/nd6.c:1.233 src/sys/netinet6/nd6.c:1.234
--- src/sys/netinet6/nd6.c:1.233	Fri Jun 16 02:24:54 2017
+++ src/sys/netinet6/nd6.c	Wed Jun 21 09:05:31 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: nd6.c,v 1.233 2017/06/16 02:24:54 ozaki-r Exp $	*/
+/*	$NetBSD: nd6.c,v 1.234 2017/06/21 09:05:31 ozaki-r Exp $	*/
 /*	$KAME: nd6.c,v 1.279 2002/06/08 11:16:51 itojun Exp $	*/
 
 /*
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.233 2017/06/16 02:24:54 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.234 2017/06/21 09:05:31 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -2424,43 +2424,6 @@ nd6_need_cache(struct ifnet *ifp)
 }
 
 /*
- * Add pernament ND6 link-layer record for given
- * interface address.
- *
- * Very similar to IPv4 arp_ifinit(), but:
- * 1) IPv6 DAD is performed in different place
- * 2) It is called by IPv6 protocol stack in contrast to
- * arp_ifinit() which is typically called in SIOCSIFADDR
- * driver ioctl handler.
- *
- */
-int
-nd6_add_ifa_lle(struct in6_ifaddr *ia)
-{
-	struct ifnet *ifp;
-	struct llentry *ln;
-
-	ifp = ia->ia_ifa.ifa_ifp;
-	if (nd6_need_cache(ifp) == 0)
-		return 0;
-	ia->ia_ifa.ifa_rtrequest = nd6_rtrequest;
-	ia->ia_ifa.ifa_flags |= RTF_CONNECTED;
-
-	IF_AFDATA_WLOCK(ifp);
-	ln = lla_create(LLTABLE6(ifp), LLE_IFADDR | LLE_EXCLUSIVE,
-	    sin6tosa(&ia->ia_addr));
-	IF_AFDATA_WUNLOCK(ifp);
-	if (ln == NULL)
-		return ENOBUFS;
-
-	ln->la_expire = 0;  /* for IPv6 this means permanent */
-	ln->ln_state = ND6_LLINFO_REACHABLE;
-
-	LLE_WUNLOCK(ln);
-	return 0;
-}
-
-/*
  * Removes ALL lle records for interface address prefix.
  * XXXME: That's probably not we really want to do, we need
  * to remove address record only and keep other records

Index: src/sys/netinet6/nd6.h
diff -u src/sys/netinet6/nd6.h:1.83 src/sys/netinet6/nd6.h:1.84
--- src/sys/netinet6/nd6.h:1.83	Wed Feb 22 03:02:55 2017
+++ src/sys/netinet6/nd6.h	Wed Jun 21 09:05:31 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: nd6.h,v 1.83 2017/02/22 03:02:55 ozaki-r Exp $	*/
+/*	$NetBSD: nd6.h,v 1.84 2017/06/21 09:05:31 ozaki-r Exp $	*/
 /*	$KAME: nd6.h,v 1.95 2002/06/08 11:31:06 itojun Exp $	*/
 
 /*
@@ -447,7 +447,6 @@ void nd6_cache_lladdr(struct ifnet *, st
 int nd6_sysctl(int, void *, size_t *, void *, size_t);
 int nd6_need_cache(struct ifnet *);
 void nd6_llinfo_release_pkts(struct llentry *, struct ifnet *);
-int nd6_add_ifa_lle(struct in6_ifaddr *);
 void nd6_rem_ifa_lle(struct in6_ifaddr *);
 
 /* nd6_nbr.c */

Index: src/tests/net/arp/t_arp.sh
diff -u src/tests/net/arp/t_arp.sh:1.25 src/tests/net/arp/t_arp.sh:1.26
--- src/tests/net/arp/t_arp.sh:1.25	Wed Jun 21 03:10:42 2017
+++ src/tests/net/arp/t_arp.sh	Wed Jun 21 09:05:31 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: t_arp.sh,v 1.25 2017/06/21 03:10:42 ozaki-r Exp $
+#	$NetBSD: t_arp.sh,v 1.26 2017/06/21 09:05:31 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -134,8 +134,8 @@ setup_src_server()
 	# Sanity check
 	$DEBUG && rump.ifconfig shmif0
 	$DEBUG && rump.arp -n -a
-	atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
-	atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
+	atf_check -s not-exit:0 -e match:'no entry' rump.arp -n $IP4SRC
+	atf_check -s not-exit:0 -e match:'no entry' rump.arp -n $IP4DST
 }
 
 test_cache_expiration()
@@ -156,16 +156,16 @@ test_cache_expiration()
 	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
 
 	$DEBUG && rump.arp -n -a
-	atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
+	atf_check -s not-exit:0 -e match:'no entry' rump.arp -n $IP4SRC
 	# Should be cached
 	atf_check -s exit:0 -o ignore rump.arp -n $IP4DST
 
 	atf_check -s exit:0 sleep $(($arp_keep + $bonus))
 
 	$DEBUG && rump.arp -n -a
-	atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
+	atf_check -s not-exit:0 -e match:'no entry' rump.arp -n $IP4SRC
 	# Should be expired
-	atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
+	atf_check -s not-exit:0 -e match:'no entry' rump.arp -n $IP4DST
 }
 
 arp_cache_expiration_5s_body()
@@ -195,9 +195,6 @@ arp_command_body()
 
 	export RUMP_SERVER=$SOCKSRC
 
-	# We can delete the entry for the interface's IP address
-	atf_check -s exit:0 -o ignore rump.arp -d $IP4SRC
-
 	# Add and delete a static entry
 	$DEBUG && rump.arp -n -a
 	atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10
@@ -323,9 +320,10 @@ arp_cache_overwriting_body()
 	export RUMP_SERVER=$SOCKSRC
 
 	# Cannot overwrite a permanent cache
-	atf_check -s not-exit:0 -e match:'File exists' \
-	    rump.arp -s $IP4SRC b2:a0:20:00:00:ff
+	atf_check -s exit:0 rump.arp -s $IP4SRC b2:a0:20:00:00:ff
 	$DEBUG && rump.arp -n -a
+	atf_check -s not-exit:0 -e match:'File exists' \
+	    rump.arp -s $IP4SRC b2:a0:20:00:00:fe
 
 	atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
 	$DEBUG && rump.arp -n -a

Index: src/tests/net/ndp/t_ndp.sh
diff -u src/tests/net/ndp/t_ndp.sh:1.21 src/tests/net/ndp/t_ndp.sh:1.22
--- src/tests/net/ndp/t_ndp.sh:1.21	Mon Jun 19 10:57:37 2017
+++ src/tests/net/ndp/t_ndp.sh	Wed Jun 21 09:05:31 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ndp.sh,v 1.21 2017/06/19 10:57:37 ozaki-r Exp $
+#	$NetBSD: t_ndp.sh,v 1.22 2017/06/21 09:05:31 ozaki-r Exp $
 #
 # Copyright (c) 2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -99,8 +99,8 @@ setup_src_server()
 	# Sanity check
 	$DEBUG && rump.ifconfig shmif0
 	$DEBUG && rump.ndp -n -a
-	atf_check -s exit:0 -o ignore rump.ndp -n $IP6SRC
-	atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST
+	atf_check -s not-exit:0 -o ignore -e match:'no entry' rump.ndp -n $IP6SRC
+	atf_check -s not-exit:0 -o ignore -e match:'no entry' rump.ndp -n $IP6DST
 }
 
 get_timeout()
@@ -126,7 +126,7 @@ ndp_cache_expiration_body()
 	atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
 
 	$DEBUG && rump.ndp -n -a
-	atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC
+	atf_check -s not-exit:0 -o ignore -e match:'no entry' rump.ndp -n $IP6SRC
 	# Should be cached
 	atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST
 
@@ -135,7 +135,7 @@ ndp_cache_expiration_body()
 	atf_check -s exit:0 sleep $(($timeout + 1))
 
 	$DEBUG && rump.ndp -n -a
-	atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC
+	atf_check -s not-exit:0 -o ignore -e match:'no entry' rump.ndp -n $IP6SRC
 	# Expired but remains until GC sweaps it (1 day)
 	atf_check -s exit:0 -o match:"$ONEDAYISH" rump.ndp -n $IP6DST
 
@@ -160,9 +160,6 @@ ndp_commands_body()
 
 	export RUMP_SERVER=$SOCKSRC
 
-	# We can delete the entry for the interface's IP address
-	atf_check -s exit:0 -o match:"$IP6SRC" rump.ndp -d $IP6SRC
-
 	# Add and delete a static entry
 	$DEBUG && rump.ndp -n -a
 	atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10
@@ -229,8 +226,9 @@ ndp_cache_overwriting_body()
 	export RUMP_SERVER=$SOCKSRC
 
 	# Cannot overwrite a permanent cache
-	atf_check -s not-exit:0 -e ignore rump.ndp -s $IP6SRC b2:a0:20:00:00:ff
+	atf_check -s exit:0 rump.ndp -s $IP6SRC b2:a0:20:00:00:ff
 	$DEBUG && rump.ndp -n -a
+	atf_check -s not-exit:0 -e ignore rump.ndp -s $IP6SRC b2:a0:20:00:00:fe
 
 	atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
 	$DEBUG && rump.ndp -n -a

Index: src/tests/net/ndp/t_ra.sh
diff -u src/tests/net/ndp/t_ra.sh:1.27 src/tests/net/ndp/t_ra.sh:1.28
--- src/tests/net/ndp/t_ra.sh:1.27	Fri May 26 01:14:38 2017
+++ src/tests/net/ndp/t_ra.sh	Wed Jun 21 09:05:31 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ra.sh,v 1.27 2017/05/26 01:14:38 ozaki-r Exp $
+#	$NetBSD: t_ra.sh,v 1.28 2017/06/21 09:05:31 ozaki-r Exp $
 #
 # Copyright (c) 2015 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -149,7 +149,7 @@ check_entries()
 	atf_check -s exit:0 \
 	    -o match:"$ll_srv%shmif0 +$mac_srv +shmif0 +$ONEDAYISH S R" \
 	    rump.ndp -n -a
-	atf_check -s exit:0 -o match:$addr_prefix rump.ndp -n -a
+	atf_check -s exit:0 -o not-match:$addr_prefix rump.ndp -n -a
 	atf_check -s exit:0 \
 	    -o match:"$addr_prefix.+<(TENTATIVE,)?AUTOCONF>" \
 	    rump.ifconfig shmif0 inet6
@@ -277,7 +277,7 @@ ra_flush_prefix_entries_body()
 	atf_check -s exit:0 -o empty rump.ndp -p
 	atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
 	atf_check -s exit:0 -o match:"$ONEDAYISH S R" rump.ndp -n -a
-	atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
+	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
 	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
 	unset RUMP_SERVER
 
@@ -335,7 +335,7 @@ ra_flush_defrouter_entries_body()
 	atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p
 	atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
 	atf_check -s exit:0 -o match:"$ONEDAYISH S R" rump.ndp -n -a
-	atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
+	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
 	atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6
 	unset RUMP_SERVER
 
@@ -763,7 +763,7 @@ ra_defrouter_expiration_body()
 	atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p
 	atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
 	atf_check -s exit:0 -o match:"$ONEDAYISH S R" rump.ndp -n -a
-	atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
+	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
 	atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6
 	unset RUMP_SERVER
 
@@ -828,7 +828,7 @@ ra_prefix_expiration_body()
 	atf_check -s exit:0 -o empty rump.ndp -p
 	atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
 	atf_check -s exit:0 -o match:"$ONEDAYISH S R" rump.ndp -n -a
-	atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
+	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
 	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
 	unset RUMP_SERVER
 

Index: src/tests/net/net/t_ipv6address.sh
diff -u src/tests/net/net/t_ipv6address.sh:1.13 src/tests/net/net/t_ipv6address.sh:1.14
--- src/tests/net/net/t_ipv6address.sh:1.13	Fri May 26 01:14:38 2017
+++ src/tests/net/net/t_ipv6address.sh	Wed Jun 21 09:05:31 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: t_ipv6address.sh,v 1.13 2017/05/26 01:14:38 ozaki-r Exp $
+#	$NetBSD: t_ipv6address.sh,v 1.14 2017/06/21 09:05:31 ozaki-r Exp $
 #
 # Copyright (c) 2015 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -364,7 +364,7 @@ linklocal_ops_body()
 	    rump.route get -inet6 ${src_if0_lladdr}
 
 	# ndp
-	atf_check -s exit:0 -o match:"${src_if0_lladdr}" \
+	atf_check -s not-exit:0 -o ignore -e match:'no entry' \
 	    rump.ndp -n ${src_if0_lladdr}%shmif0
 
 	# ndp without an interface name (zone index)

Reply via email to