On Mon, Sep 02, 2013 at 12:43:51PM +0200, Martin Pieuchot wrote:
> Diff below is just a small refactoring of two similar code chunks to
> inform user processes that something changed regarding a route.
> 
> I'd like to get this in because it removes one use of rt_addrinfo in
> netinet6.
> 
> There's no functional change, ok?

Less code is always good.  OK bluhm@

> 
> Index: net/route.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/net/route.c,v
> retrieving revision 1.145
> diff -u -p -r1.145 route.c
> --- net/route.c       28 Aug 2013 06:58:57 -0000      1.145
> +++ net/route.c       2 Sep 2013 10:18:59 -0000
> @@ -346,17 +345,7 @@ rtalloc1(struct sockaddr *dst, int flags
>                               goto miss;
>                       }
>                       /* Inform listeners of the new route */
> -                     bzero(&info, sizeof(info));
> -                     info.rti_info[RTAX_DST] = rt_key(rt);
> -                     info.rti_info[RTAX_NETMASK] = rt_mask(rt);
> -                     info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
> -                     if (rt->rt_ifp != NULL) {
> -                             info.rti_info[RTAX_IFP] =
> -                                 
> TAILQ_FIRST(&rt->rt_ifp->if_addrlist)->ifa_addr;
> -                             info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
> -                     }
> -                     rt_missmsg(RTM_ADD, &info, rt->rt_flags,
> -                         rt->rt_ifp, 0, tableid);
> +                     rt_msg(rt, RTM_ADD, tableid);
>               } else
>                       rt->rt_refcnt++;
>       } else {
> @@ -410,6 +399,25 @@ rtfree(struct rtentry *rt)
>               Free(rt_key(rt));
>               pool_put(&rtentry_pool, rt);
>       }
> +}
> +
> +/* tell the change to user processes watching the routing socket. */
> +void
> +rt_msg(struct rtentry *rt, int cmd, u_int tableid)
> +{
> +     struct rt_addrinfo info;
> +
> +     bzero(&info, sizeof(info));
> +     info.rti_info[RTAX_DST] = rt_key(rt);
> +     info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
> +     info.rti_info[RTAX_NETMASK] = rt_mask(rt);
> +     if (rt->rt_ifp != NULL) {
> +             info.rti_info[RTAX_IFP] =
> +                 TAILQ_FIRST(&rt->rt_ifp->if_addrlist)->ifa_addr;
> +             info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
> +     }
> +
> +     rt_missmsg(cmd, &info, rt->rt_flags, rt->rt_ifp, 0, tableid);
>  }
>  
>  void
> Index: net/route.h
> ===================================================================
> RCS file: /home/ncvs/src/sys/net/route.h,v
> retrieving revision 1.78
> diff -u -p -r1.78 route.h
> --- net/route.h       19 Sep 2012 16:14:01 -0000      1.78
> +++ net/route.h       2 Sep 2013 10:18:59 -0000
> @@ -369,6 +369,7 @@ void       rt_ifmsg(struct ifnet *);
>  void  rt_ifannouncemsg(struct ifnet *, int);
>  void  rt_maskedcopy(struct sockaddr *,
>           struct sockaddr *, struct sockaddr *);
> +void  rt_msg(struct rtentry *, int, u_int);
>  void  rt_missmsg(int, struct rt_addrinfo *, int, struct ifnet *, int,
>           u_int);
>  void  rt_newaddrmsg(int, struct ifaddr *, int, struct rtentry *);
> Index: netinet6/nd6_rtr.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/netinet6/nd6_rtr.c,v
> retrieving revision 1.72
> diff -u -p -r1.72 nd6_rtr.c
> --- netinet6/nd6_rtr.c        1 Jul 2013 14:22:20 -0000       1.72
> +++ netinet6/nd6_rtr.c        2 Sep 2013 10:18:59 -0000
> @@ -70,7 +70,6 @@ void pfxrtr_add(struct nd_prefix *, stru
>  void pfxrtr_del(struct nd_pfxrouter *);
>  struct nd_pfxrouter *find_pfxlist_reachable_router(struct nd_prefix *);
>  void defrouter_delreq(struct nd_defrouter *);
> -void nd6_rtmsg(int, struct rtentry *);
>  void purge_detached(struct ifnet *);
>  
>  void in6_init_address_ltimes(struct nd_prefix *, struct in6_addrlifetime *);
> @@ -410,26 +409,6 @@ nd6_ra_input(struct mbuf *m, int off, in
>  /*
>   * default router list processing sub routines
>   */
> -
> -/* tell the change to user processes watching the routing socket. */
> -void
> -nd6_rtmsg(int cmd, struct rtentry *rt)
> -{
> -     struct rt_addrinfo info;
> -
> -     bzero((caddr_t)&info, sizeof(info));
> -     info.rti_info[RTAX_DST] = rt_key(rt);
> -     info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
> -     info.rti_info[RTAX_NETMASK] = rt_mask(rt);
> -     if (rt->rt_ifp) {
> -             info.rti_info[RTAX_IFP] =
> -                 TAILQ_FIRST(&rt->rt_ifp->if_addrlist)->ifa_addr;
> -             info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
> -     }
> -
> -     rt_missmsg(cmd, &info, rt->rt_flags, rt->rt_ifp, 0, 0);
> -}
> -
>  void
>  defrouter_addreq(struct nd_defrouter *new)
>  {
> @@ -459,7 +438,7 @@ defrouter_addreq(struct nd_defrouter *ne
>       error = rtrequest1(RTM_ADD, &info, RTP_DEFAULT, &newrt,
>           new->ifp->if_rdomain);
>       if (newrt) {
> -             nd6_rtmsg(RTM_ADD, newrt); /* tell user process */
> +             rt_msg(newrt, RTM_ADD, 0); /* tell user process */
>               newrt->rt_refcnt--;
>       }
>       if (error == 0)
> @@ -563,7 +542,7 @@ defrouter_delreq(struct nd_defrouter *dr
>       rtrequest1(RTM_DELETE, &info, RTP_DEFAULT, &oldrt,
>           dr->ifp->if_rdomain);
>       if (oldrt) {
> -             nd6_rtmsg(RTM_DELETE, oldrt);
> +             rt_msg(oldrt, RTM_DELETE, 0);
>               if (oldrt->rt_refcnt <= 0) {
>                       /*
>                        * XXX: borrowed from the RTM_DELETE case of
> @@ -1637,7 +1616,7 @@ nd6_prefix_onlink(struct nd_prefix *pr)
>       error = rtrequest1(RTM_ADD, &info, RTP_CONNECTED, &rt, ifp->if_rdomain);
>       if (error == 0) {
>               if (rt != NULL) /* this should be non NULL, though */
> -                     nd6_rtmsg(RTM_ADD, rt);
> +                     rt_msg(rt, RTM_ADD, 0);
>               pr->ndpr_stateflags |= NDPRF_ONLINK;
>       } else {
>               nd6log((LOG_ERR, "nd6_prefix_onlink: failed to add route for a"
> @@ -1692,7 +1671,7 @@ nd6_prefix_offlink(struct nd_prefix *pr)
>  
>               /* report the route deletion to the routing socket. */
>               if (rt != NULL)
> -                     nd6_rtmsg(RTM_DELETE, rt);
> +                     rt_msg(rt, RTM_DELETE, 0);
>  
>               /*
>                * There might be the same prefix on another interface,

Reply via email to