svn commit: r287318 - in head/sys: net netinet6

Alexander V. Chernikov melifaro at FreeBSD.org
Mon Aug 31 05:03:37 UTC 2015


Author: melifaro
Date: Mon Aug 31 05:03:36 2015
New Revision: 287318
URL: https://svnweb.freebsd.org/changeset/base/287318

Log:
  Simplify lla_rt_output()/nd6_add_ifa_lle() by setting lle state in
    alloc handler, based on flags.

Modified:
  head/sys/net/if_llatbl.c
  head/sys/netinet6/in6.c
  head/sys/netinet6/nd6.c

Modified: head/sys/net/if_llatbl.c
==============================================================================
--- head/sys/net/if_llatbl.c	Sun Aug 30 23:58:53 2015	(r287317)
+++ head/sys/net/if_llatbl.c	Mon Aug 31 05:03:36 2015	(r287318)
@@ -592,7 +592,10 @@ lla_rt_output(struct rt_msghdr *rtm, str
 	switch (rtm->rtm_type) {
 	case RTM_ADD:
 		/* Add static LLE */
-		lle = lltable_alloc_entry(llt, 0, dst);
+		laflags = 0;
+		if (rtm->rtm_rmx.rmx_expire == 0)
+			laflags = LLE_STATIC;
+		lle = lltable_alloc_entry(llt, laflags, dst);
 		if (lle == NULL)
 			return (ENOMEM);
 
@@ -600,22 +603,8 @@ lla_rt_output(struct rt_msghdr *rtm, str
 		if ((rtm->rtm_flags & RTF_ANNOUNCE))
 			lle->la_flags |= LLE_PUB;
 		lle->la_flags |= LLE_VALID;
-#ifdef INET6
-		/*
-		 * ND6
-		 */
-		if (dst->sa_family == AF_INET6)
-			lle->ln_state = ND6_LLINFO_REACHABLE;
-#endif
-		/*
-		 * NB: arp and ndp always set (RTF_STATIC | RTF_HOST)
-		 */
+		lle->la_expire = rtm->rtm_rmx.rmx_expire;
 
-		if (rtm->rtm_rmx.rmx_expire == 0) {
-			lle->la_flags |= LLE_STATIC;
-			lle->la_expire = 0;
-		} else
-			lle->la_expire = rtm->rtm_rmx.rmx_expire;
 		laflags = lle->la_flags;
 
 		/* Try to link new entry */

Modified: head/sys/netinet6/in6.c
==============================================================================
--- head/sys/netinet6/in6.c	Sun Aug 30 23:58:53 2015	(r287317)
+++ head/sys/netinet6/in6.c	Mon Aug 31 05:03:36 2015	(r287318)
@@ -2264,6 +2264,9 @@ in6_lltable_alloc(struct lltable *llt, u
 		lle->la_flags |= (LLE_VALID | LLE_STATIC);
 	}
 
+	if ((lle->la_flags & LLE_STATIC) != 0)
+		lle->ln_state = ND6_LLINFO_REACHABLE;
+
 	return (lle);
 }
 

Modified: head/sys/netinet6/nd6.c
==============================================================================
--- head/sys/netinet6/nd6.c	Sun Aug 30 23:58:53 2015	(r287317)
+++ head/sys/netinet6/nd6.c	Mon Aug 31 05:03:36 2015	(r287318)
@@ -2275,9 +2275,6 @@ nd6_add_ifa_lle(struct in6_ifaddr *ia)
 	if (ln == NULL)
 		return (ENOBUFS);
 
-	ln->la_expire = 0;  /* for IPv6 this means permanent */
-	ln->ln_state = ND6_LLINFO_REACHABLE;
-
 	IF_AFDATA_WLOCK(ifp);
 	LLE_WLOCK(ln);
 	/* Unlink any entry if exists */


More information about the svn-src-all mailing list