mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 18:56:40 +00:00
zebra: Move ribq from zebrad to zrouter
The zrouter should own this data structure and it should not be defined in zserv.h Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
b3d43ff471
commit
489a961429
@ -201,9 +201,6 @@ int zebra_finalize(struct thread *dummy)
|
|||||||
/* Stop dplane thread and finish any cleanup */
|
/* Stop dplane thread and finish any cleanup */
|
||||||
zebra_dplane_shutdown();
|
zebra_dplane_shutdown();
|
||||||
|
|
||||||
work_queue_free_and_null(&zebrad.ribq);
|
|
||||||
meta_queue_free(zebrad.mq);
|
|
||||||
|
|
||||||
zebra_router_terminate();
|
zebra_router_terminate();
|
||||||
|
|
||||||
frr_fini();
|
frr_fini();
|
||||||
|
@ -2180,8 +2180,8 @@ static wq_item_status meta_queue_process(struct work_queue *dummy, void *data)
|
|||||||
queue_len, queue_limit);
|
queue_len, queue_limit);
|
||||||
|
|
||||||
/* Ensure that the meta-queue is actually enqueued */
|
/* Ensure that the meta-queue is actually enqueued */
|
||||||
if (work_queue_empty(zebrad.ribq))
|
if (work_queue_empty(zrouter.ribq))
|
||||||
work_queue_add(zebrad.ribq, zebrad.mq);
|
work_queue_add(zrouter.ribq, zebrad.mq);
|
||||||
|
|
||||||
return WQ_QUEUE_BLOCKED;
|
return WQ_QUEUE_BLOCKED;
|
||||||
}
|
}
|
||||||
@ -2270,7 +2270,7 @@ void rib_queue_add(struct route_node *rn)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (zebrad.ribq == NULL) {
|
if (zrouter.ribq == NULL) {
|
||||||
flog_err(EC_ZEBRA_WQ_NONEXISTENT,
|
flog_err(EC_ZEBRA_WQ_NONEXISTENT,
|
||||||
"%s: work_queue does not exist!", __func__);
|
"%s: work_queue does not exist!", __func__);
|
||||||
return;
|
return;
|
||||||
@ -2284,8 +2284,8 @@ void rib_queue_add(struct route_node *rn)
|
|||||||
* holder, if necessary, then push the work into it in any case.
|
* holder, if necessary, then push the work into it in any case.
|
||||||
* This semantics was introduced after 0.99.9 release.
|
* This semantics was introduced after 0.99.9 release.
|
||||||
*/
|
*/
|
||||||
if (work_queue_empty(zebrad.ribq))
|
if (work_queue_empty(zrouter.ribq))
|
||||||
work_queue_add(zebrad.ribq, zebrad.mq);
|
work_queue_add(zrouter.ribq, zebrad.mq);
|
||||||
|
|
||||||
rib_meta_queue_add(zebrad.mq, rn);
|
rib_meta_queue_add(zebrad.mq, rn);
|
||||||
|
|
||||||
@ -2325,22 +2325,21 @@ static void rib_queue_init(struct zebra_t *zebra)
|
|||||||
{
|
{
|
||||||
assert(zebra);
|
assert(zebra);
|
||||||
|
|
||||||
if (!(zebra->ribq =
|
if (!(zrouter.ribq = work_queue_new(zrouter.master,
|
||||||
work_queue_new(zrouter.master,
|
"route_node processing"))) {
|
||||||
"route_node processing"))) {
|
|
||||||
flog_err(EC_ZEBRA_WQ_NONEXISTENT,
|
flog_err(EC_ZEBRA_WQ_NONEXISTENT,
|
||||||
"%s: could not initialise work queue!", __func__);
|
"%s: could not initialise work queue!", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fill in the work queue spec */
|
/* fill in the work queue spec */
|
||||||
zebra->ribq->spec.workfunc = &meta_queue_process;
|
zrouter.ribq->spec.workfunc = &meta_queue_process;
|
||||||
zebra->ribq->spec.errorfunc = NULL;
|
zrouter.ribq->spec.errorfunc = NULL;
|
||||||
zebra->ribq->spec.completion_func = &meta_queue_process_complete;
|
zrouter.ribq->spec.completion_func = &meta_queue_process_complete;
|
||||||
/* XXX: TODO: These should be runtime configurable via vty */
|
/* XXX: TODO: These should be runtime configurable via vty */
|
||||||
zebra->ribq->spec.max_retries = 3;
|
zrouter.ribq->spec.max_retries = 3;
|
||||||
zebra->ribq->spec.hold = ZEBRA_RIB_PROCESS_HOLD_TIME;
|
zrouter.ribq->spec.hold = ZEBRA_RIB_PROCESS_HOLD_TIME;
|
||||||
zebra->ribq->spec.retry = ZEBRA_RIB_PROCESS_RETRY_TIME;
|
zrouter.ribq->spec.retry = ZEBRA_RIB_PROCESS_RETRY_TIME;
|
||||||
|
|
||||||
if (!(zebra->mq = meta_queue_new())) {
|
if (!(zebra->mq = meta_queue_new())) {
|
||||||
flog_err(EC_ZEBRA_WQ_NONEXISTENT,
|
flog_err(EC_ZEBRA_WQ_NONEXISTENT,
|
||||||
|
@ -188,6 +188,9 @@ void zebra_router_terminate(void)
|
|||||||
zebra_router_free_table(zrt);
|
zebra_router_free_table(zrt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
work_queue_free_and_null(&zrouter.ribq);
|
||||||
|
meta_queue_free(zebrad.mq);
|
||||||
|
|
||||||
zebra_vxlan_disable();
|
zebra_vxlan_disable();
|
||||||
zebra_mlag_terminate();
|
zebra_mlag_terminate();
|
||||||
|
|
||||||
|
@ -73,6 +73,11 @@ struct zebra_router {
|
|||||||
|
|
||||||
/* The default table used for this router */
|
/* The default table used for this router */
|
||||||
uint32_t rtm_table_default;
|
uint32_t rtm_table_default;
|
||||||
|
|
||||||
|
/* rib work queue */
|
||||||
|
#define ZEBRA_RIB_PROCESS_HOLD_TIME 10
|
||||||
|
#define ZEBRA_RIB_PROCESS_RETRY_TIME 1
|
||||||
|
struct work_queue *ribq;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct zebra_router zrouter;
|
extern struct zebra_router zrouter;
|
||||||
|
@ -2485,7 +2485,7 @@ DEFUN_HIDDEN (zebra_workqueue_timer,
|
|||||||
"Time in milliseconds\n")
|
"Time in milliseconds\n")
|
||||||
{
|
{
|
||||||
uint32_t timer = strtoul(argv[2]->arg, NULL, 10);
|
uint32_t timer = strtoul(argv[2]->arg, NULL, 10);
|
||||||
zebrad.ribq->spec.hold = timer;
|
zrouter.ribq->spec.hold = timer;
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -2498,7 +2498,7 @@ DEFUN_HIDDEN (no_zebra_workqueue_timer,
|
|||||||
"Work Queue\n"
|
"Work Queue\n"
|
||||||
"Time in milliseconds\n")
|
"Time in milliseconds\n")
|
||||||
{
|
{
|
||||||
zebrad.ribq->spec.hold = ZEBRA_RIB_PROCESS_HOLD_TIME;
|
zrouter.ribq->spec.hold = ZEBRA_RIB_PROCESS_HOLD_TIME;
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -2548,8 +2548,8 @@ static int config_write_protocol(struct vty *vty)
|
|||||||
if (zebra_rnh_ipv6_default_route)
|
if (zebra_rnh_ipv6_default_route)
|
||||||
vty_out(vty, "ipv6 nht resolve-via-default\n");
|
vty_out(vty, "ipv6 nht resolve-via-default\n");
|
||||||
|
|
||||||
if (zebrad.ribq->spec.hold != ZEBRA_RIB_PROCESS_HOLD_TIME)
|
if (zrouter.ribq->spec.hold != ZEBRA_RIB_PROCESS_HOLD_TIME)
|
||||||
vty_out(vty, "zebra work-queue %u\n", zebrad.ribq->spec.hold);
|
vty_out(vty, "zebra work-queue %u\n", zrouter.ribq->spec.hold);
|
||||||
|
|
||||||
if (zebrad.packets_to_process != ZEBRA_ZAPI_PACKETS_TO_PROCESS)
|
if (zebrad.packets_to_process != ZEBRA_ZAPI_PACKETS_TO_PROCESS)
|
||||||
vty_out(vty, "zebra zapi-packets %u\n",
|
vty_out(vty, "zebra zapi-packets %u\n",
|
||||||
|
@ -175,10 +175,6 @@ DECLARE_KOOH(zserv_client_close, (struct zserv *client), (client));
|
|||||||
|
|
||||||
/* Zebra instance */
|
/* Zebra instance */
|
||||||
struct zebra_t {
|
struct zebra_t {
|
||||||
/* rib work queue */
|
|
||||||
#define ZEBRA_RIB_PROCESS_HOLD_TIME 10
|
|
||||||
#define ZEBRA_RIB_PROCESS_RETRY_TIME 1
|
|
||||||
struct work_queue *ribq;
|
|
||||||
struct meta_queue *mq;
|
struct meta_queue *mq;
|
||||||
|
|
||||||
/* LSP work queue */
|
/* LSP work queue */
|
||||||
|
Loading…
Reference in New Issue
Block a user