On Thu, Mar 09, 2017 at 02:20:28PM +0200, Lennert Buytenhek wrote:
On Mon, Mar 06, 2017 at 07:41:44PM +0200, Lennert Buytenhek wrote:
Hi!
bgp_init() in proto/bgp/bgp.c does:
P->accept_ra_types = c->secondary ? RA_ACCEPTED : RA_OPTIMAL;
and then bgp_rx_open() in proto/bgp/packets.c does:
if (p->add_path_tx) p->p.accept_ra_types = RA_ANY;
As bgp_init() seems to only be called at configuration time, this means that if you have add path tx, and you have a peer that advertises rx add path and then reconnects without advertising rx add path, you will still have RA_ANY set on the sending side and not have the correct behavior of only sending the optimal route. (This is easy to verify.)
Not entirely sure how you'd want to fix this, but perhaps replicating the RA_ACCEPTED / RA_OPTIONAL assignment in bgp_rx_open() (or just moving it there) would do the trick?
In other words, something like this?
Hi Thanks for the bugreport and patch. We already found and fixed the bug during work on 2.0 branch [*], but we forgot to fix it in 1.6 branch. Your patch should be OK. [*] https://gitlab.labs.nic.cz/labs/bird/blob/int-new/proto/bgp/bgp.c#L528 -- Elen sila lumenn' omentielvo Ondrej 'Santiago' Zajicek (email: santiago@crfreenet.org) OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net) "To err is human -- to blame it on a computer is even more so."