summaryrefslogtreecommitdiff
path: root/bgpd/bgp_updgrp_adv.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2023-10-06 12:48:38 -0400
committerDonald Sharp <sharpd@nvidia.com>2023-10-10 10:09:10 -0400
commitb2e0c12d723a6464f67491ceb912225f35c9427a (patch)
treeb1ba1c60ebc20f2f8a44848fb3d8b46c53b55725 /bgpd/bgp_updgrp_adv.c
parent69a0d5999003c08f55270dd883be9db2418ac037 (diff)
bgpd: Convert the bgp_advertise_attr->adv to a fifo
BGP is storing outgoing updates in a couple of different fifo's. This is to ensure proper packet packing of all bgp_dests that happen to use the same attribute. How it's all put together currently: On initial update BGP walks through all the bgp_dest's in a table. For each path being sent a bgp_advertise is created. This bgp_advertise is placed in fifo order on the bgp_synchronize->update queue. The bgp_advertise has a pointer to the bgp_advertise_attr which is associated iwth the actual attribute that is being sent to it's peer. In turn this bgp_advertise is placed in a fifo off of the bgp_advertise_attr structure. As such as we have paths that share an attribute, the path/dest is placed on the bgp_syncrhonize->update fifo as well as being placed on the fifo associated with the advertised attribute. On actual creation of a packet. The first item in the bgp_synchronize->update fifo is popped. The bgp_advertise_attr pointer is grabbed, we fill out the nlri part of the bgp packet and then walk the bgp_advertise_attr fifo to place paths/dests in the packet. As each path/dest is placed in the packet it is removed from both the bgp_synchronize->update fifo and the bgp_advertise_attr fifo. The whole point of this change is to switch the *next, *prev pointers in the bgp_advertise structure with a typesafe data structure. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'bgpd/bgp_updgrp_adv.c')
-rw-r--r--bgpd/bgp_updgrp_adv.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/bgpd/bgp_updgrp_adv.c b/bgpd/bgp_updgrp_adv.c
index ccbb23ebb4..35ffec7d02 100644
--- a/bgpd/bgp_updgrp_adv.c
+++ b/bgpd/bgp_updgrp_adv.c
@@ -479,7 +479,7 @@ bgp_advertise_clean_subgroup(struct update_subgroup *subgrp,
bgp_advertise_delete(baa, adv);
/* Fetch next advertise candidate. */
- next = baa->adv;
+ next = bgp_advertise_attr_fifo_first(&baa->fifo);
/* Unintern BGP advertise attribute. */
bgp_advertise_attr_unintern(subgrp->hash, baa);