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;
|
return pqnode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
static void bgp_process_internal(struct bgp *bgp, struct bgp_dest *dest,
|
||||||
struct bgp_path_info *pi, afi_t afi, safi_t safi)
|
struct bgp_path_info *pi, afi_t afi,
|
||||||
|
safi_t safi, bool early_process)
|
||||||
{
|
{
|
||||||
#define ARBITRARY_PROCESS_QLEN 10000
|
#define ARBITRARY_PROCESS_QLEN 10000
|
||||||
struct work_queue *wq = bgp->process_queue;
|
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);
|
struct work_queue_item *item = work_queue_last_item(wq);
|
||||||
pqnode = item->data;
|
pqnode = item->data;
|
||||||
|
|
||||||
if (CHECK_FLAG(pqnode->flags, BGP_PROCESS_QUEUE_EOIU_MARKER)
|
if (CHECK_FLAG(pqnode->flags, BGP_PROCESS_QUEUE_EOIU_MARKER) ||
|
||||||
|| pqnode->bgp != bgp
|
(pqnode->queued >= ARBITRARY_PROCESS_QLEN && !early_process))
|
||||||
|| pqnode->queued >= ARBITRARY_PROCESS_QLEN)
|
|
||||||
pqnode = bgp_processq_alloc(bgp);
|
pqnode = bgp_processq_alloc(bgp);
|
||||||
else
|
else
|
||||||
pqnode_reuse = 1;
|
pqnode_reuse = 1;
|
||||||
|
@ -4091,6 +4091,9 @@ void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
||||||
|
|
||||||
/* can't be enqueued twice */
|
/* can't be enqueued twice */
|
||||||
assert(STAILQ_NEXT(dest, pq) == NULL);
|
assert(STAILQ_NEXT(dest, pq) == NULL);
|
||||||
|
if (early_process)
|
||||||
|
STAILQ_INSERT_HEAD(&pqnode->pqueue, dest, pq);
|
||||||
|
else
|
||||||
STAILQ_INSERT_TAIL(&pqnode->pqueue, dest, pq);
|
STAILQ_INSERT_TAIL(&pqnode->pqueue, dest, pq);
|
||||||
pqnode->queued++;
|
pqnode->queued++;
|
||||||
|
|
||||||
|
@ -4100,6 +4103,18 @@ void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
||||||
return;
|
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)
|
void bgp_add_eoiu_mark(struct bgp *bgp)
|
||||||
{
|
{
|
||||||
struct bgp_process_queue *pqnode;
|
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,
|
int sub_type, struct prefix_rd *prd,
|
||||||
mpls_label_t *label, uint8_t num_labels);
|
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,
|
extern void bgp_process(struct bgp *bgp, struct bgp_dest *dest,
|
||||||
struct bgp_path_info *pi, afi_t afi, safi_t safi);
|
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
|
* Add an end-of-initial-update marker to the process queue. This is just a
|
||||||
* queue element with NULL bgp node.
|
* queue element with NULL bgp node.
|
||||||
|
|
Loading…
Reference in a new issue