The RDE does some magic dance around connected networks and their gateway
which should be done in kroute.c instead. At least then both functions doing
gateway lookups do this magic in the same .c file.
It also makes the RDE code a simpler which is good. The RDE actually no
longer uses this information apart from reporting it to bgpctl.

-- 
:wq Claudio

Index: kroute.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v
retrieving revision 1.295
diff -u -p -r1.295 kroute.c
--- kroute.c    19 Aug 2022 09:11:18 -0000      1.295
+++ kroute.c    23 Aug 2022 09:01:26 -0000
@@ -2265,11 +2265,11 @@ knexthop_send_update(struct knexthop *kn
                kr = kn->kroute;
                n.valid = kroute_validate(kr);
                n.connected = kr->flags & F_CONNECTED;
-               if (kr->nexthop.s_addr != 0) {
+               if (!n.connected) {
                        n.gateway.aid = AID_INET;
                        n.gateway.v4.s_addr = kr->nexthop.s_addr;
-               }
-               if (n.connected) {
+               } else {
+                       n.gateway = n.nexthop;
                        n.net.aid = AID_INET;
                        n.net.v4.s_addr = kr->prefix.s_addr;
                        n.netlen = kr->prefixlen;
@@ -2279,13 +2279,12 @@ knexthop_send_update(struct knexthop *kn
                kr6 = kn->kroute;
                n.valid = kroute6_validate(kr6);
                n.connected = kr6->flags & F_CONNECTED;
-               if (memcmp(&kr6->nexthop, &in6addr_any,
-                   sizeof(struct in6_addr)) != 0) {
+               if (!n.connected) {
                        n.gateway.aid = AID_INET6;
                        n.gateway.v6 = kr6->nexthop;
                        n.gateway.scope_id = kr6->nexthop_scope_id;
-               }
-               if (n.connected) {
+               } else {
+                       n.gateway = n.nexthop;
                        n.net.aid = AID_INET6;
                        n.net.v6 = kr6->prefix;
                        n.net.scope_id = kr6->prefix_scope_id;
Index: rde_rib.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde_rib.c,v
retrieving revision 1.243
diff -u -p -r1.243 rde_rib.c
--- rde_rib.c   10 Aug 2022 14:17:01 -0000      1.243
+++ rde_rib.c   23 Aug 2022 09:01:26 -0000
@@ -1739,12 +1739,10 @@ nexthop_update(struct kroute_nexthop *ms
                TAILQ_REMOVE(&nexthop_runners, nh, runner_l);
        }
 
-       if (msg->connected) {
+       if (msg->connected)
                nh->flags |= NEXTHOP_CONNECTED;
-               nh->true_nexthop = nh->exit_nexthop;
-       } else
-               nh->true_nexthop = msg->gateway;
 
+       nh->true_nexthop = msg->gateway;
        nh->nexthop_net = msg->net;
        nh->nexthop_netlen = msg->netlen;
 

Reply via email to