Re: bgpd use struct kroute_full for bgpd_filternexthop

2022-06-22 Thread Theo Buehler
On Wed, Jun 22, 2022 at 04:46:41PM +0200, Claudio Jeker wrote:
> 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.

Nice.

ok tb



bgpd use struct kroute_full for bgpd_filternexthop

2022-06-22 Thread Claudio Jeker
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);
}