]> git.puffer.fish Git - matthieu/frr.git/commit
bgpd: Convert the bgp_advertise_attr->adv to a fifo
authorDonald Sharp <sharpd@nvidia.com>
Fri, 6 Oct 2023 16:48:38 +0000 (12:48 -0400)
committerMark Stapp <mjs@cisco.com>
Tue, 26 Mar 2024 19:09:09 +0000 (15:09 -0400)
commit7cc87f17c5aa17feb74ade2555d236a290b813ef
tree5f71dbff1b0a9dcaeb246fdd9cd172a860708dd3
parent9d97725444070761479ecbafb06ca35e3d5c7ee7
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>
(cherry picked from commit b2e0c12d723a6464f67491ceb912225f35c9427a)

# Conflicts:
# bgpd/bgp_advertise.c
bgpd/bgp_advertise.c
bgpd/bgp_advertise.h
bgpd/bgp_updgrp_adv.c