On Tue, Aug 23, 2022 at 11:06:05AM +0200, Claudio Jeker wrote:
> 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.
ok tb
>
> --
> :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;
>
>