anyone? should slaacd just poll?

On Wed, Apr 18, 2018 at 07:49:41PM +0200, Florian Obser wrote:
> On Wed, Apr 18, 2018 at 05:05:59PM +0200, Florian Obser wrote:
> > This is to inform userland (i.e. slaacd(8)) when duplicate address
> > detection finishes.
> > 
> > Not a big fan of the lock/unlock dance but I guess it can't be helped
> > for now.
> > 
> > Comments, OKs?
> 
> Theo points out that I suck at naming things. I guess we already knew
> that.
> 
> How about RTM_CHGADDRATTR, we are changing the attribute of an
> address. Also fixes a tab vs. space in previous.
> 
> diff --git net/route.h net/route.h
> index 3c89348cb43..5fa12578e45 100644
> --- net/route.h
> +++ net/route.h
> @@ -241,6 +241,7 @@ struct rt_msghdr {
>  #define RTM_INVALIDATE       0x11    /* Invalidate cache of L2 route */
>  #define RTM_BFD              0x12    /* bidirectional forwarding detection */
>  #define RTM_PROPOSAL 0x13    /* proposal for netconfigd */
> +#define RTM_CHGADDRATTR      0x14    /* address attribute change */
>  
>  #define RTV_MTU              0x1     /* init or lock _mtu */
>  #define RTV_HOPCOUNT 0x2     /* init or lock _hopcount */
> diff --git netinet6/nd6_nbr.c netinet6/nd6_nbr.c
> index cb5c04c24ed..ef1644aa6f6 100644
> --- netinet6/nd6_nbr.c
> +++ netinet6/nd6_nbr.c
> @@ -1102,6 +1102,11 @@ nd6_dad_start(struct ifaddr *ifa)
>       KASSERT(ia6->ia6_flags & IN6_IFF_TENTATIVE);
>       if ((ia6->ia6_flags & IN6_IFF_ANYCAST) || (!ip6_dad_count)) {
>               ia6->ia6_flags &= ~IN6_IFF_TENTATIVE;
> +
> +             KERNEL_LOCK();
> +             rtm_addr(RTM_CHGADDRATTR, ifa);
> +             KERNEL_UNLOCK();
> +
>               return;
>       }
>  
> @@ -1250,6 +1255,10 @@ nd6_dad_timer(void *xifa)
>                        */
>                       ia6->ia6_flags &= ~IN6_IFF_TENTATIVE;
>  
> +                     KERNEL_LOCK();
> +                     rtm_addr(RTM_CHGADDRATTR, ifa);
> +                     KERNEL_UNLOCK();
> +
>                       nd6log((LOG_DEBUG,
>                           "%s: DAD complete for %s - no duplicates found\n",
>                           ifa->ifa_ifp->if_xname,
> @@ -1293,6 +1302,11 @@ nd6_dad_duplicated(struct dadq *dp)
>           ia6->ia_ifp->if_xname);
>  
>       TAILQ_REMOVE(&dadq, dp, dad_list);
> +
> +     KERNEL_LOCK();
> +     rtm_addr(RTM_CHGADDRATTR, dp->dad_ifa);
> +     KERNEL_UNLOCK();
> +
>       ifafree(dp->dad_ifa);
>       free(dp, M_IP6NDP, sizeof(*dp));
>       ip6_dad_pending--;
> 
> 
> 
> -- 
> I'm not entirely sure you are real.
> 

-- 
I'm not entirely sure you are real.

Reply via email to