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 <dslice@nvidia.com>
This commit is contained in:
Don Slice 2020-09-22 06:14:52 -07:00 committed by Donatas Abraitis
parent b3382a4c64
commit 63b70c84b7

View File

@ -289,7 +289,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);
}
}
}
@ -312,7 +320,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);
}
}