From 3e3b55d5c056e9ce069a6439a58b4ee393ff9a25 Mon Sep 17 00:00:00 2001 From: Don Slice Date: Tue, 22 Sep 2020 06:14:52 -0700 Subject: [PATCH] bgpd: allow derived router-id update if previously 0x0 Problem found that if a router-id was not defined or derived initially, the bgp->router_id would be set to 0x0 and used for determining auto-rd values. When bgp received a subsequent router-id update from zebra, bgp would not completely process the update since it was treated as updating an already derived router-id with a new value, which is not desired. This also could leave the auto rd/rt inforamation missing or invalid in some cases. This fix allows updating the derived router-id if the previous value was 0/0. Ticket: CM-31441 Signed-off-by: Don Slice --- bgpd/bgpd.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index b654e85206..3c707b41ca 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -290,7 +290,15 @@ void bgp_router_id_zebra_bump(vrf_id_t vrf_id, const struct prefix *router_id) bgp->name_pretty, bgp->vrf_id, inet_ntoa(*addr)); - bgp_router_id_set(bgp, addr, false); + /* + * if old router-id was 0x0, set flag + * to use this new value + */ + bgp_router_id_set(bgp, addr, + (bgp->router_id.s_addr + == INADDR_ANY) + ? true + : false); } } } @@ -313,7 +321,15 @@ void bgp_router_id_zebra_bump(vrf_id_t vrf_id, const struct prefix *router_id) bgp->name_pretty, bgp->vrf_id, inet_ntoa(*addr)); - bgp_router_id_set(bgp, addr, false); + /* + * if old router-id was 0x0, set flag + * to use this new value + */ + bgp_router_id_set(bgp, addr, + (bgp->router_id.s_addr + == INADDR_ANY) + ? true + : false); } } -- 2.39.5