forked from Mirror/frr
Merge pull request #16774 from donaldsharp/bgp_give_some_ordering_increases
Bgp give some ordering increases
This commit is contained in:
commit
da96ad08cd
|
@ -4011,8 +4011,9 @@ static struct bgp_process_queue *bgp_processq_alloc(struct bgp *bgp)
|
|||
return pqnode;
|
||||
}
|
||||
|
||||
void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
||||
struct bgp_path_info *pi, afi_t afi, safi_t safi)
|
||||
static void bgp_process_internal(struct bgp *bgp, struct bgp_dest *dest,
|
||||
struct bgp_path_info *pi, afi_t afi,
|
||||
safi_t safi, bool early_process)
|
||||
{
|
||||
#define ARBITRARY_PROCESS_QLEN 10000
|
||||
struct work_queue *wq = bgp->process_queue;
|
||||
|
@ -4075,9 +4076,8 @@ void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
|||
struct work_queue_item *item = work_queue_last_item(wq);
|
||||
pqnode = item->data;
|
||||
|
||||
if (CHECK_FLAG(pqnode->flags, BGP_PROCESS_QUEUE_EOIU_MARKER)
|
||||
|| pqnode->bgp != bgp
|
||||
|| pqnode->queued >= ARBITRARY_PROCESS_QLEN)
|
||||
if (CHECK_FLAG(pqnode->flags, BGP_PROCESS_QUEUE_EOIU_MARKER) ||
|
||||
(pqnode->queued >= ARBITRARY_PROCESS_QLEN && !early_process))
|
||||
pqnode = bgp_processq_alloc(bgp);
|
||||
else
|
||||
pqnode_reuse = 1;
|
||||
|
@ -4091,7 +4091,10 @@ void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
|||
|
||||
/* can't be enqueued twice */
|
||||
assert(STAILQ_NEXT(dest, pq) == NULL);
|
||||
STAILQ_INSERT_TAIL(&pqnode->pqueue, dest, pq);
|
||||
if (early_process)
|
||||
STAILQ_INSERT_HEAD(&pqnode->pqueue, dest, pq);
|
||||
else
|
||||
STAILQ_INSERT_TAIL(&pqnode->pqueue, dest, pq);
|
||||
pqnode->queued++;
|
||||
|
||||
if (!pqnode_reuse)
|
||||
|
@ -4100,6 +4103,18 @@ void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
|||
return;
|
||||
}
|
||||
|
||||
void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
||||
struct bgp_path_info *pi, afi_t afi, safi_t safi)
|
||||
{
|
||||
bgp_process_internal(bgp, dest, pi, afi, safi, false);
|
||||
}
|
||||
|
||||
void bgp_process_early(struct bgp *bgp, struct bgp_dest *dest,
|
||||
struct bgp_path_info *pi, afi_t afi, safi_t safi)
|
||||
{
|
||||
bgp_process_internal(bgp, dest, pi, afi, safi, true);
|
||||
}
|
||||
|
||||
void bgp_add_eoiu_mark(struct bgp *bgp)
|
||||
{
|
||||
struct bgp_process_queue *pqnode;
|
||||
|
|
|
@ -804,10 +804,20 @@ extern void bgp_withdraw(struct peer *peer, const struct prefix *p,
|
|||
int sub_type, struct prefix_rd *prd,
|
||||
mpls_label_t *label, uint8_t num_labels);
|
||||
|
||||
/* for bgp_nexthop and bgp_damp */
|
||||
/*
|
||||
* Add a route to be processed for bgp bestpath through the bgp
|
||||
* workqueue. This route is added to the end of all other routes
|
||||
* queued for processing
|
||||
*
|
||||
* bgp_process_early adds the route for processing at the beginning
|
||||
* of the current queue for processing.
|
||||
*/
|
||||
extern void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
||||
struct bgp_path_info *pi, afi_t afi, safi_t safi);
|
||||
|
||||
extern void bgp_process_early(struct bgp *bgp, struct bgp_dest *dest,
|
||||
struct bgp_path_info *pi, afi_t afi, safi_t safi);
|
||||
|
||||
/*
|
||||
* Add an end-of-initial-update marker to the process queue. This is just a
|
||||
* queue element with NULL bgp node.
|
||||
|
|
Loading…
Reference in a new issue