this makes it consistent with arp, where route get has the right
expiry.

note that you cannot have an nd6 llinfo thing without an associated
rtentry, so nd_rt is always safe to deref.

ok?

Index: nd6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/nd6.c,v
retrieving revision 1.183
diff -u -p -r1.183 nd6.c
--- nd6.c       3 Jun 2016 02:08:15 -0000       1.183
+++ nd6.c       3 Jun 2016 03:46:50 -0000
@@ -311,10 +311,10 @@ nd6_llinfo_settimer(struct llinfo_nd6 *l
        s = splsoftnet();
 
        if (secs < 0) {
-               ln->ln_expire = 0;
+               ln->ln_rt->rt_expire = 0;
                timeout_del(&ln->ln_timer_ch);
        } else {
-               ln->ln_expire = time_uptime + secs;
+               ln->ln_rt->rt_expire = time_uptime + secs;
                timeout_add_sec(&ln->ln_timer_ch, secs);
        }
 
@@ -981,7 +981,7 @@ nd6_rtrequest(struct ifnet *ifp, int req
                if (req == RTM_ADD) {
                        /*
                         * gate should have some valid AF_LINK entry,
-                        * and ln->ln_expire should have some lifetime
+                        * and ln expire should have some lifetime
                         * which is specified by ndp command.
                         */
                        ln->ln_state = ND6_LLINFO_REACHABLE;
@@ -1200,7 +1200,7 @@ nd6_ioctl(u_long cmd, caddr_t data, stru
                        splx(s);
                        break;
                }
-               expire = ln->ln_expire;
+               expire = ln->ln_rt->rt_expire;
                if (expire != 0) {
                        expire -= time_uptime;
                        expire += time_second;
Index: nd6.h
===================================================================
RCS file: /cvs/src/sys/netinet6/nd6.h,v
retrieving revision 1.60
diff -u -p -r1.60 nd6.h
--- nd6.h       1 Jun 2016 23:45:19 -0000       1.60
+++ nd6.h       3 Jun 2016 03:46:50 -0000
@@ -144,7 +144,6 @@ struct      llinfo_nd6 {
        TAILQ_ENTRY(llinfo_nd6) ln_list;
        struct  rtentry *ln_rt;
        struct  mbuf *ln_hold;  /* last packet until resolved/timeout */
-       time_t  ln_expire;      /* lifetime for NDP state transition */
        long    ln_asked;       /* number of queries already sent for addr */
        int     ln_byhint;      /* # of times we made it reachable by UL hint */
        short   ln_state;       /* reachability state */
@@ -154,7 +153,7 @@ struct      llinfo_nd6 {
 };
 
 #define ND6_IS_LLINFO_PROBREACH(n) ((n)->ln_state > ND6_LLINFO_INCOMPLETE)
-#define ND6_LLINFO_PERMANENT(n)        ((n)->ln_expire == 0)
+#define ND6_LLINFO_PERMANENT(n)        ((n)->ln_rt->rt_expire == 0)
 
 /* node constants */
 #define MAX_REACHABLE_TIME             3600000 /* msec */

Reply via email to