Change the logic and name of bgpd_filternexthop(). This function applies
the 'nexthop qualify via' config setting. Instead of telling if the route
is filtered (true) or not (false) flip the logic around and rename the
function to bgpd_oknexthop(). Also flip the internal logic around to
simplify the logic in bgpd_oknexthop().

Adjust the kroute_match() code accordingly (which makes that code easier
to understand).

This is just a refactor and should not change behaviour.
-- 
:wq Claudio

Index: bgpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.c,v
retrieving revision 1.251
diff -u -p -r1.251 bgpd.c
--- bgpd.c      22 Jul 2022 17:26:58 -0000      1.251
+++ bgpd.c      23 Jul 2022 08:53:58 -0000
@@ -1115,23 +1115,27 @@ send_network(int type, struct network_co
        return (0);
 }
 
+/*
+ * Return true if a route can be used for nexthop resolution.
+ */
 int
-bgpd_filternexthop(struct kroute_full *kf)
+bgpd_oknexthop(struct kroute_full *kf)
 {
-       /* kernel routes are never filtered */
-       if (kf->flags & F_KERNEL && kf->prefixlen != 0)
-               return (0);
-
-       if (cflags & BGPD_FLAG_NEXTHOP_BGP) {
-               if (kf->flags & F_BGPD)
+       if (kf->flags & F_BGPD) {
+               if (cflags & BGPD_FLAG_NEXTHOP_BGP)
+                       return (1);
+               else
                        return (0);
        }
 
-       if (cflags & BGPD_FLAG_NEXTHOP_DEFAULT) {
-               if (kf->prefixlen == 0)
+       if (kf->prefixlen == 0) {
+               if (cflags & BGPD_FLAG_NEXTHOP_DEFAULT)
+                       return (1);
+               else
                        return (0);
        }
 
+       /* any other route is fine */
        return (1);
 }
 
Index: bgpd.h
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v
retrieving revision 1.444
diff -u -p -r1.444 bgpd.h
--- bgpd.h      22 Jul 2022 17:26:58 -0000      1.444
+++ bgpd.h      23 Jul 2022 08:54:09 -0000
@@ -1265,7 +1265,7 @@ void               send_nexthop_update(struct kroute
 void            send_imsg_session(int, pid_t, void *, uint16_t);
 int             send_network(int, struct network_config *,
                     struct filter_set_head *);
-int             bgpd_filternexthop(struct kroute_full *);
+int             bgpd_oknexthop(struct kroute_full *);
 void            set_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.278
diff -u -p -r1.278 kroute.c
--- kroute.c    22 Jul 2022 17:26:58 -0000      1.278
+++ kroute.c    23 Jul 2022 08:55:27 -0000
@@ -2444,7 +2444,7 @@ knexthop_send_update(struct knexthop *kn
 }
 
 struct kroute *
-kroute_match(struct ktable *kt, struct bgpd_addr *key, int matchall)
+kroute_match(struct ktable *kt, struct bgpd_addr *key, int matchany)
 {
        int                      i;
        struct kroute           *kr;
@@ -2453,8 +2453,7 @@ 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_tofull(kr)) == 0)
+                       if (matchany || bgpd_oknexthop(kr_tofull(kr)))
                                return (kr);
        }
 
@@ -2462,7 +2461,7 @@ kroute_match(struct ktable *kt, struct b
 }
 
 struct kroute6 *
-kroute6_match(struct ktable *kt, struct bgpd_addr *key, int matchall)
+kroute6_match(struct ktable *kt, struct bgpd_addr *key, int matchany)
 {
        int                      i;
        struct kroute6          *kr6;
@@ -2471,8 +2470,7 @@ 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(kr6_tofull(kr6)) == 0)
+                       if (matchany || bgpd_oknexthop(kr6_tofull(kr6)))
                                return (kr6);
        }
 

Reply via email to