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_ */