On Mon, Jan 21, 2019 at 10:01:54PM +0100, Eugene Crosser wrote: > On 21/01/2019 21:20, Ondrej Zajicek wrote: > > >> https://gitlab.labs.nic.cz/labs/bird/blob/master/sysdep/linux/netlink.c#L528 > >> > >> Questions: > >> > >> 1. What was the justification for disallowing gateway-less multipath > >> routes? Would it make sense to allow them (in the mainstream code)? > > > > The code differentiated between gateway and gateway-less routes based on > > rta->dest (RTD_ROUTER for gateway, RTD_DEVICE for gateway-less). We > > extended that to have RTD_MULTIPATH, but there was no separate dest for > > each nexthop, so we restricted it to have all nexthops with gateways. > > Also, ECMP routes generated by protocols (e.g. OSPF) are always with > > nexthops, so it was generally not a big limitation. > > > > In BIRD 2.0, we unified this, replaced RTD_ROUTER / RTD_DEVICE / > > RTD_MULTIPATH with RTD_UNICAST, which can handle ECMP routes with mixed > > gateway and gatewa-less nexthops. > > > > > >> 2. Would it be sufficient to simply drop the check for the presence of > >> the gateway address in the message, and return `first` even if gateway > >> address was not present? > > > > Not sure what you mean by `first`. You cannot read RTA_GATEWAY field if > > I was referring to the variable name in the code that I linked to.
If you just returned 'first' without filling rv->gw, you would end with nexthop with undefined/random gateway address, as it was not properly set before. I suggesetd to replace 'return NULL;' in the else branch with 'rv->gw = IPA_NONE;'. > I was looking at the code in the master branch, I assumed that it is 2.x? Not yet, see: https://bird.network.cz/pipermail/bird-users/2019-January/013006.html -- Elen sila lumenn' omentielvo Ondrej 'Santiago' Zajicek (email: [email protected]) OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net) "To err is human -- to blame it on a computer is even more so."
