From: Donald Sharp Date: Fri, 18 Nov 2016 17:50:46 +0000 (-0500) Subject: pimd: Add knob to control # of packets read in at one time X-Git-Tag: frr-3.0-branchpoint~64^2~10^2~72 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=8e4c9ef376c2b376f72b6b061c38107522c3aecc;p=matthieu%2Ffrr.git pimd: Add knob to control # of packets read in at one time Add 'ip pim packets <1-100>' command. Allows you to control the number of packets read in before giving control back to another part of the process. Signed-off-by: Donald Sharp --- diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index aa97907a30..0507ef2681 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -3434,6 +3434,29 @@ DEFUN (no_ip_pim_keep_alive, return CMD_SUCCESS; } +DEFUN (ip_pim_packets, + ip_pim_packets_cmd, + "ip pim packets <1-100>", + IP_STR + "pim multicast routing\n" + "Number of packets to process at one time per fd\n") +{ + qpim_packet_process = atoi (argv[3]->arg); + return CMD_SUCCESS; +} + +DEFUN (no_ip_pim_packets, + no_ip_pim_packets_cmd, + "no ip pim packets <1-100>", + NO_STR + IP_STR + "pim multicast routing\n" + "Number of packets to process at one time per fd\n") +{ + qpim_packet_process = PIM_DEFAULT_PACKET_PROCESS; + return CMD_SUCCESS; +} + DEFUN (ip_pim_rp, ip_pim_rp_cmd, "ip pim rp A.B.C.D [A.B.C.D/M]", @@ -5964,6 +5987,8 @@ void pim_cmd_init() install_element (CONFIG_NODE, &no_ip_pim_register_suppress_cmd); install_element (CONFIG_NODE, &ip_pim_keep_alive_cmd); install_element (CONFIG_NODE, &no_ip_pim_keep_alive_cmd); + install_element (CONFIG_NODE, &ip_pim_packets_cmd); + install_element (CONFIG_NODE, &no_ip_pim_packets_cmd); install_element (CONFIG_NODE, &ip_ssmpingd_cmd); install_element (CONFIG_NODE, &no_ip_ssmpingd_cmd); install_element (CONFIG_NODE, &ip_msdp_peer_cmd); diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index 34fc24c506..01fa529525 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -578,7 +578,7 @@ static int mroute_read(struct thread *t) result = pim_mroute_msg(fd, buf, rd); count++; - if (count % 3 == 0) + if (count % qpim_packet_process == 0) cont = 0; } /* Keep reading */ diff --git a/pimd/pim_pim.c b/pimd/pim_pim.c index 775293ce60..c7fee4a66f 100644 --- a/pimd/pim_pim.c +++ b/pimd/pim_pim.c @@ -353,7 +353,7 @@ static int pim_sock_read(struct thread *t) } count++; - if (count % 3 == 0) + if (count % qpim_packet_process == 0) cont = 0; } diff --git a/pimd/pim_vty.c b/pimd/pim_vty.c index b72602e22e..527ca5a507 100644 --- a/pimd/pim_vty.c +++ b/pimd/pim_vty.c @@ -168,6 +168,12 @@ int pim_global_config_write(struct vty *vty) qpim_keep_alive_time, VTY_NEWLINE); ++writes; } + if (qpim_packet_process != PIM_DEFAULT_PACKET_PROCESS) + { + vty_out (vty, "ip pim packets %d%s", + qpim_packet_process, VTY_NEWLINE); + ++writes; + } if (qpim_ssmpingd_list) { struct listnode *node; diff --git a/pimd/pimd.c b/pimd/pimd.c index bc8b88444a..0e5313906f 100644 --- a/pimd/pimd.c +++ b/pimd/pimd.c @@ -72,6 +72,7 @@ struct list *qpim_static_route_list = NULL; unsigned int qpim_keep_alive_time = PIM_KEEPALIVE_PERIOD; signed int qpim_rp_keep_alive_time = 0; int64_t qpim_nexthop_lookups = 0; +int qpim_packet_process = PIM_DEFAULT_PACKET_PROCESS; int32_t qpim_register_suppress_time = PIM_REGISTER_SUPPRESSION_TIME_DEFAULT; int32_t qpim_register_probe_time = PIM_REGISTER_PROBE_TIME_DEFAULT; diff --git a/pimd/pimd.h b/pimd/pimd.h index 0899d831e6..0f4efe91f0 100644 --- a/pimd/pimd.h +++ b/pimd/pimd.h @@ -119,6 +119,8 @@ int64_t qpim_nexthop_lookups; struct list *qpim_static_route_list; /* list of routes added statically */ extern unsigned int qpim_keep_alive_time; extern signed int qpim_rp_keep_alive_time; +extern int qpim_packet_process; +#define PIM_DEFAULT_PACKET_PROCESS 3 #define PIM_JP_HOLDTIME (qpim_t_periodic * 7 / 2)