From: Ondrej Zajicek Date: Wed, 12 Oct 2022 15:57:26 +0000 (+0200) Subject: Netlink: Parse onlink flag even on direct routes X-Git-Tag: v2.0.11~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=324252975004154cc70623c94f05083bff100209;p=thirdparty%2Fbird.git Netlink: Parse onlink flag even on direct routes While onlink flag is meaningful only with explicit next hops, it can be defined also on direct routes. Parse it also in this case to avoid periodic updates of the same route. Thanks to Marcin Saklak for the bugreport. --- diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c index 8da26e377..d9e81c104 100644 --- a/sysdep/linux/netlink.c +++ b/sysdep/linux/netlink.c @@ -812,11 +812,11 @@ nl_parse_multipath(struct nl_parse_state *s, struct krt_proto *p, const net_addr rv->gw = rta_get_via(a[RTA_VIA]); #endif + if (nh->rtnh_flags & RTNH_F_ONLINK) + rv->flags |= RNF_ONLINK; + if (ipa_nonzero(rv->gw)) { - if (nh->rtnh_flags & RTNH_F_ONLINK) - rv->flags |= RNF_ONLINK; - neighbor *nbr; nbr = neigh_find(&p->p, rv->gw, rv->iface, (rv->flags & RNF_ONLINK) ? NEF_ONLINK : 0); @@ -1708,6 +1708,9 @@ nl_parse_route(struct nl_parse_state *s, struct nlmsghdr *h) ra->nh.gw = rta_get_via(a[RTA_VIA]); #endif + if (i->rtm_flags & RTNH_F_ONLINK) + ra->nh.flags |= RNF_ONLINK; + if (ipa_nonzero(ra->nh.gw)) { /* Silently skip strange 6to4 routes */ @@ -1715,9 +1718,6 @@ nl_parse_route(struct nl_parse_state *s, struct nlmsghdr *h) if ((i->rtm_family == AF_INET6) && ipa_in_netX(ra->nh.gw, (net_addr *) &sit)) return; - if (i->rtm_flags & RTNH_F_ONLINK) - ra->nh.flags |= RNF_ONLINK; - neighbor *nbr; nbr = neigh_find(&p->p, ra->nh.gw, ra->nh.iface, (ra->nh.flags & RNF_ONLINK) ? NEF_ONLINK : 0);