]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: allow derived router-id update if previously 0x0 7171/head
authorDon Slice <dslice@nvidia.com>
Tue, 22 Sep 2020 13:14:52 +0000 (06:14 -0700)
committerDon Slice <dslice@nvidia.com>
Thu, 24 Sep 2020 15:31:33 +0000 (08:31 -0700)
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>
bgpd/bgpd.c

index b654e85206e24209782b6632a8608e32e9c070c2..3c707b41caab32c4e6217da58538c41dd4bcb8ae 100644 (file)
@@ -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);
                                }
                        }