Hi! I have ibgp setup where I receive number of routes with indirect nexthops. "nexthop qualify via bgp" is configured. I'm using snapshot from 31.11.2016 and current bgpd sources.
When I start bgpd it usually comes up with either some or none of the indirect nexthops resolved: # bgpctl show nex Flags: * = nexthop valid Nexthop Route Prio Gateway Iface 10.150.0.10 * 10.150.0.12 10.150.0.0/23 48 10.150.8.1 <~50 nexthops some working some not removed> * 10.150.8.1 10.150.8.0/24 4 connected vio0 (UP, active) "bgpctl reload" always fixes the problem and all nexthops are resolved to 10.150.0.0/23 -> 10.150.8.1 I have tried to find a way to fix it properly but so far I have managed to get it working with following definitely wrong patch. There seems to be race somewhere between nexthop insertion and validation. Any idea where should I look or what to check? vio0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 lladdr 55:54:00:0b:39:f1 index 1 priority 0 llprio 3 groups: core egress media: Ethernet autoselect status: active inet 10.150.8.5 netmask 0xffffff00 broadcast 10.150.8.255 config: AS 65001 router-id 10.150.8.5 nexthop qualify via bgp network inet connected neighbor 10.150.8.1 { remote-as 65001 } match from any prefix 0.0.0.0/0 prefixlen >= 1 set rtlabel INT match to any set localpref 90 Index: kroute.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v retrieving revision 1.210 diff -u -p -r1.210 kroute.c --- kroute.c 5 Oct 2016 07:38:06 -0000 1.210 +++ kroute.c 3 Nov 2016 19:15:49 -0000 @@ -897,6 +897,8 @@ kr_nexthop_add(u_int rtableid, struct bg return (-1); } + RB_FOREACH(h, knexthop_tree, KT2KNT(kt)) + knexthop_validate(kt, h); return (0); }