diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2023-10-06 12:48:38 -0400 | 
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2023-10-10 10:09:10 -0400 | 
| commit | b2e0c12d723a6464f67491ceb912225f35c9427a (patch) | |
| tree | b1ba1c60ebc20f2f8a44848fb3d8b46c53b55725 /bgpd/bgp_updgrp_adv.c | |
| parent | 69a0d5999003c08f55270dd883be9db2418ac037 (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.c | 2 | 
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);  | 
