diff options
author | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-10-25 16:47:55 +0200 |
---|---|---|
committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-10-25 16:59:05 +0200 |
commit | 3a30f50f3ff40888caddc75b04f915fa0d5456c4 (patch) | |
tree | c8189405d0d18254bcaa1f37ce5882e281273793 | |
parent | lib, ospf6d, ospfd, zebra: Add ZEBRA_STR (diff) | |
download | frr-3a30f50f3ff40888caddc75b04f915fa0d5456c4.tar.xz frr-3a30f50f3ff40888caddc75b04f915fa0d5456c4.zip |
zebra: Allow user to specify work-queue processing hold time
Allow the user to modify the work-queue processing hold time
from 10ms to a value from (0-10000). Make the command hidden
as that it's a semi-dangerous command and it could cause
issues.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
-rw-r--r-- | zebra/zebra_rib.c | 8 | ||||
-rw-r--r-- | zebra/zebra_vty.c | 32 | ||||
-rw-r--r-- | zebra/zserv.h | 1 |
3 files changed, 34 insertions, 7 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index d46e0730e..b5c2bc6da 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -57,12 +57,6 @@ DEFINE_HOOK(rib_update, (struct route_node * rn, const char *reason), /* Should we allow non Quagga processes to delete our routes */ extern int allow_delete; -/* Hold time for RIB process, should be very minimal. - * it is useful to able to set it otherwise for testing, hence exported - * as global here for test-rig code. - */ -int rib_process_hold_time = 10; - /* Each route type's string and default distance value. */ static const struct { int key; @@ -1899,7 +1893,7 @@ static void rib_queue_init(struct zebra_t *zebra) zebra->ribq->spec.completion_func = &meta_queue_process_complete; /* XXX: TODO: These should be runtime configurable via vty */ zebra->ribq->spec.max_retries = 3; - zebra->ribq->spec.hold = rib_process_hold_time; + zebra->ribq->spec.hold = ZEBRA_RIB_PROCESS_HOLD_TIME; if (!(zebra->mq = meta_queue_new())) { zlog_err("%s: could not initialise meta queue!", __func__); diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index d86cc88b4..21a3331f3 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -44,6 +44,7 @@ #include "lib/json.h" #include "zebra/zebra_vxlan.h" #include "zebra/zebra_vty_clippy.c" +#include "zebra/zserv.h" extern int allow_delete; @@ -2695,6 +2696,32 @@ DEFUN (ip_zebra_import_table_distance, return ret; } +DEFUN_HIDDEN (zebra_workqueue_timer, + zebra_workqueue_timer_cmd, + "zebra work-queue (0-10000)", + ZEBRA_STR + "Work Queue\n" + "Time in milliseconds\n") +{ + uint32_t timer = strtoul(argv[2]->arg, NULL, 10); + zebrad.ribq->spec.hold = timer; + + return CMD_SUCCESS; +} + +DEFUN_HIDDEN (no_zebra_workqueue_timer, + no_zebra_workqueue_timer_cmd, + "no zebra work-queue [(0-10000)]", + NO_STR + ZEBRA_STR + "Work Queue\n" + "Time in milliseconds\n") +{ + zebrad.ribq->spec.hold = ZEBRA_RIB_PROCESS_HOLD_TIME; + + return CMD_SUCCESS; +} + DEFUN (no_ip_zebra_import_table, no_ip_zebra_import_table_cmd, "no ip import-table (1-252) [distance (1-255)] [route-map NAME]", @@ -2740,6 +2767,9 @@ static int config_write_protocol(struct vty *vty) if (zebra_rnh_ipv6_default_route) vty_out(vty, "ipv6 nht resolve-via-default\n"); + if (zebrad.ribq->spec.hold != ZEBRA_RIB_PROCESS_HOLD_TIME) + vty_out(vty, "zebra work-queue %u\n", zebrad.ribq->spec.hold); + enum multicast_mode ipv4_multicast_mode = multicast_mode_ipv4_get(); if (ipv4_multicast_mode != MCAST_NO_CONFIG) @@ -2781,6 +2811,8 @@ void zebra_vty_init(void) install_element(CONFIG_NODE, &ip_route_cmd); install_element(CONFIG_NODE, &ip_zebra_import_table_distance_cmd); install_element(CONFIG_NODE, &no_ip_zebra_import_table_cmd); + install_element(CONFIG_NODE, &zebra_workqueue_timer_cmd); + install_element(CONFIG_NODE, &no_zebra_workqueue_timer_cmd); install_element(VIEW_NODE, &show_vrf_cmd); install_element(VIEW_NODE, &show_ip_route_cmd); diff --git a/zebra/zserv.h b/zebra/zserv.h index f661572d5..d847526f2 100644 --- a/zebra/zserv.h +++ b/zebra/zserv.h @@ -132,6 +132,7 @@ struct zebra_t { u_int32_t rtm_table_default; /* rib work queue */ + #define ZEBRA_RIB_PROCESS_HOLD_TIME 10 struct work_queue *ribq; struct meta_queue *mq; |