Instead of passing either a struct kroute or struct kroute6 pointer
use kr_tofull() and use struct kroute_full. This makes the code in
bgpd_filternexthop() a lot cleaner.
--
:wq Claudio
Index: bgpd.c
===
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.c,v
retrieving revision 1.246
diff -u -p -r1.246 bgpd.c
--- bgpd.c 15 Jun 2022 10:10:03 - 1.246
+++ bgpd.c 22 Jun 2022 14:18:21 -
@@ -1114,25 +1114,19 @@ send_network(int type, struct network_co
}
int
-bgpd_filternexthop(struct kroute *kr, struct kroute6 *kr6)
+bgpd_filternexthop(struct kroute_full *kf)
{
/* kernel routes are never filtered */
- if (kr && kr->flags & F_KERNEL && kr->prefixlen != 0)
- return (0);
- if (kr6 && kr6->flags & F_KERNEL && kr6->prefixlen != 0)
+ if (kf->flags & F_KERNEL && kf->prefixlen != 0)
return (0);
if (cflags & BGPD_FLAG_NEXTHOP_BGP) {
- if (kr && kr->flags & F_BGPD)
- return (0);
- if (kr6 && kr6->flags & F_BGPD)
+ if (kf->flags & F_BGPD)
return (0);
}
if (cflags & BGPD_FLAG_NEXTHOP_DEFAULT) {
- if (kr && kr->prefixlen == 0)
- return (0);
- if (kr6 && kr6->prefixlen == 0)
+ if (kf->prefixlen == 0)
return (0);
}
Index: bgpd.h
===
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v
retrieving revision 1.432
diff -u -p -r1.432 bgpd.h
--- bgpd.h 19 Jun 2022 10:30:09 - 1.432
+++ bgpd.h 22 Jun 2022 14:18:21 -
@@ -1268,7 +1268,7 @@ void send_nexthop_update(struct kroute
voidsend_imsg_session(int, pid_t, void *, uint16_t);
int send_network(int, struct network_config *,
struct filter_set_head *);
-int bgpd_filternexthop(struct kroute *, struct kroute6 *);
+int bgpd_filternexthop(struct kroute_full *);
voidset_pollfd(struct pollfd *, struct imsgbuf *);
int handle_pollfd(struct pollfd *, struct imsgbuf *);
Index: kroute.c
===
RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v
retrieving revision 1.260
diff -u -p -r1.260 kroute.c
--- kroute.c19 Jun 2022 10:30:09 - 1.260
+++ kroute.c22 Jun 2022 14:18:21 -
@@ -2494,8 +2494,9 @@ kroute_match(struct ktable *kt, struct b
for (i = 32; i >= 0; i--) {
applymask(&masked, key, i);
if ((kr = kroute_find(kt, &masked, i, RTP_ANY)) != NULL)
- if (matchall || bgpd_filternexthop(&kr->r, NULL) == 0)
- return (kr);
+ if (matchall ||
+ bgpd_filternexthop(kr_tofull(&kr->r)) == 0)
+ return (kr);
}
return (NULL);
@@ -2512,7 +2513,8 @@ kroute6_match(struct ktable *kt, struct
for (i = 128; i >= 0; i--) {
applymask(&masked, key, i);
if ((kr6 = kroute6_find(kt, &masked, i, RTP_ANY)) != NULL)
- if (matchall || bgpd_filternexthop(NULL, &kr6->r) == 0)
+ if (matchall ||
+ bgpd_filternexthop(kr6_tofull(&kr6->r)) == 0)
return (kr6);
}