This changes rtable_mpath_reprio() to take the prefixlen as argument
instead of the mask. ART is using the prefixlen internally and since we
switched to ART some time ago it no longer makes sense to convert the
prefixlen into a mask and back again.

OK?
-- 
:wq Claudio

Index: net/route.c
===================================================================
RCS file: /cvs/src/sys/net/route.c,v
retrieving revision 1.378
diff -u -p -r1.378 route.c
--- net/route.c 27 Sep 2018 12:36:57 -0000      1.378
+++ net/route.c 23 Nov 2018 09:44:34 -0000
@@ -1626,8 +1626,8 @@ rt_if_linkstate_change(struct rtentry *r
 
                /* bring route up */
                rt->rt_flags |= RTF_UP;
-               error = rtable_mpath_reprio(id, rt_key(rt),
-                   rt_plen2mask(rt, &sa_mask), rt->rt_priority & RTP_MASK, rt);
+               error = rtable_mpath_reprio(id, rt_key(rt), rt_plen(rt),
+                   rt->rt_priority & RTP_MASK, rt);
        } else {
                /*
                 * Remove redirected and cloned routes (mainly ARP)
@@ -1646,8 +1646,8 @@ rt_if_linkstate_change(struct rtentry *r
 
                /* take route down */
                rt->rt_flags &= ~RTF_UP;
-               error = rtable_mpath_reprio(id, rt_key(rt),
-                   rt_plen2mask(rt, &sa_mask), rt->rt_priority | RTP_DOWN, rt);
+               error = rtable_mpath_reprio(id, rt_key(rt), rt_plen(rt),
+                   rt->rt_priority | RTP_DOWN, rt);
        }
        if_group_routechange(rt_key(rt), rt_plen2mask(rt, &sa_mask));
 
Index: net/rtable.c
===================================================================
RCS file: /cvs/src/sys/net/rtable.c,v
retrieving revision 1.66
diff -u -p -r1.66 rtable.c
--- net/rtable.c        20 Nov 2018 10:28:08 -0000      1.66
+++ net/rtable.c        23 Nov 2018 09:43:16 -0000
@@ -731,13 +731,12 @@ rtable_mpath_capable(unsigned int rtable
 
 int
 rtable_mpath_reprio(unsigned int rtableid, struct sockaddr *dst,
-    struct sockaddr *mask, uint8_t prio, struct rtentry *rt)
+    int plen, uint8_t prio, struct rtentry *rt)
 {
        struct art_root                 *ar;
        struct art_node                 *an;
        struct srp_ref                   sr;
        uint8_t                         *addr;
-       int                              plen;
        int                              error = 0;
 
        ar = rtable_get(rtableid, dst->sa_family);
@@ -745,9 +744,6 @@ rtable_mpath_reprio(unsigned int rtablei
                return (EAFNOSUPPORT);
 
        addr = satoaddr(ar, dst);
-       plen = rtable_satoplen(dst->sa_family, mask);
-       if (plen == -1)
-               return (EINVAL);
 
        rw_enter_write(&ar->ar_lock);
        an = art_lookup(ar, addr, plen, &sr);
Index: net/rtable.h
===================================================================
RCS file: /cvs/src/sys/net/rtable.h,v
retrieving revision 1.21
diff -u -p -r1.21 rtable.h
--- net/rtable.h        9 Sep 2018 10:07:38 -0000       1.21
+++ net/rtable.h        23 Nov 2018 09:43:38 -0000
@@ -70,6 +70,6 @@ int            rtable_walk(unsigned int, sa_famil
 int             rtable_mpath_capable(unsigned int, sa_family_t);
 struct rtentry *rtable_mpath_match(unsigned int, struct rtentry *,
                     struct sockaddr *, uint8_t);
-int             rtable_mpath_reprio(unsigned int, struct sockaddr *,
-                    struct sockaddr *, uint8_t, struct rtentry *);
+int             rtable_mpath_reprio(unsigned int, struct sockaddr *, int,
+                    uint8_t, struct rtentry *);
 #endif /* _NET_RTABLE_H_ */

Reply via email to