]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: Add knob to control # of packets read in at one time
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 18 Nov 2016 17:50:46 +0000 (12:50 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Dec 2016 01:26:16 +0000 (20:26 -0500)
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 <sharpd@cumulusnetworks.com>
pimd/pim_cmd.c
pimd/pim_mroute.c
pimd/pim_pim.c
pimd/pim_vty.c
pimd/pimd.c
pimd/pimd.h

index aa97907a3027d60a698c183e637c71fe3e749bae..0507ef26814a5a8697cd867009c032db667c9264 100644 (file)
@@ -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);
index 34fc24c5061b65c35b20f65d2b3c49be9416b355..01fa5295258bdf360bb96b4bf36b8c73f4b877a3 100644 (file)
@@ -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 */
index 775293ce60a2cef9a36747bd3ca5a01dd263ef9a..c7fee4a66f3e61e2b1117ab568f34094077c843d 100644 (file)
@@ -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;
     }
 
index b72602e22e7be95705e9019e36c4a5330d67291d..527ca5a507d39b80fb2807b3a33cc009df58faee 100644 (file)
@@ -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;
index bc8b88444aa0a9700fe7c19291939d30b0ad5d2d..0e5313906f7d7acbb30f8ca2cf2f416d8e72b565 100644 (file)
@@ -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;
index 0899d831e6547306f5c0e02b87d95913496ddd78..0f4efe91f023723874440a88b400e8a4daffd851 100644 (file)
@@ -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)