]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Allow rp to configure it's keep alive timer
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 18 Aug 2016 14:00:02 +0000 (10:00 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Dec 2016 01:26:06 +0000 (20:26 -0500)
Allow the end user to supply a RP based keep alive
timer.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_cmd.c
pimd/pim_register.c
pimd/pim_vty.c
pimd/pimd.c
pimd/pimd.h

index 78e0d4671571007c0f3f210f91f0fb3c79bdbd5c..8067219e4586e0ae58f05a13c9165a54ff9791f3 100644 (file)
@@ -2468,13 +2468,40 @@ DEFUN (no_ip_pim_keep_alive,
        NO_STR
        IP_STR
        "pim multicast routing\n"
-       "Keep alive Timer"
-       "Seconds")
+       "Keep alive Timer\n"
+       "Seconds\n")
 {
   qpim_keep_alive_time = PIM_KEEPALIVE_PERIOD;
   return CMD_SUCCESS;
 }
 
+DEFUN (ip_pim_rp_keep_alive,
+       ip_pim_rp_keep_alive_cmd,
+       "ip pim rp keep-alive-timer <31-600>",
+       IP_STR
+       "pim multicast routing\n"
+       "Rendevous Point\n"
+       "Keep alive Timer\n"
+       "Seconds\n")
+{
+  qpim_rp_keep_alive_time = atoi (argv[4]->arg);
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_ip_pim_rp_keep_alive,
+       no_ip_pim_rp_keep_alive_cmd,
+       "no ip pim rp keep-alive-timer <31-600>",
+       NO_STR
+       IP_STR
+       "pim multicast routing\n"
+       "Rendevous Point\n"
+       "Keep alive Timer\n"
+       "Seconds\n")
+{
+  qpim_rp_keep_alive_time = PIM_RP_KEEPALIVE_PERIOD;
+  return CMD_SUCCESS;
+}
+
 DEFUN (ip_pim_rp,
        ip_pim_rp_cmd,
        "ip pim rp A.B.C.D [A.B.C.D/M]",
@@ -4781,6 +4808,8 @@ void pim_cmd_init()
   install_element (CONFIG_NODE, &no_ip_pim_rp_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_rp_keep_alive_cmd);
+  install_element (CONFIG_NODE, &no_ip_pim_rp_keep_alive_cmd);
   install_element (CONFIG_NODE, &ip_ssmpingd_cmd);
   install_element (CONFIG_NODE, &no_ip_ssmpingd_cmd); 
 
index 129f38cbdc6f235e655f8dc290ad824666067f1e..439bb577c9a0e49450847a28f1eadb97d547607c 100644 (file)
@@ -347,7 +347,7 @@ pim_register_recv (struct interface *ifp,
     if ((upstream->sptbit == PIM_UPSTREAM_SPTBIT_TRUE) ||
        (SwitchToSptDesired(&sg))) {
       if (sentRegisterStop) {
-       pim_upstream_keep_alive_timer_start (upstream, PIM_RP_KEEPALIVE_PERIOD);
+       pim_upstream_keep_alive_timer_start (upstream, qpim_rp_keep_alive_time);
       } else {
        pim_upstream_keep_alive_timer_start (upstream, qpim_keep_alive_time);
       }
index bc4acfdb06eb074b219ea37f2ca578bafc9a7f38..85df83287b81e830c4cdf5ad2cd764adb6889ad4 100644 (file)
@@ -144,6 +144,13 @@ int pim_global_config_write(struct vty *vty)
                qpim_keep_alive_time, VTY_NEWLINE);
       ++writes;
     }
+  if (qpim_rp_keep_alive_time != PIM_RP_KEEPALIVE_PERIOD)
+    {
+      vty_out (vty, "ip pim rp keep-alive-timer %d%s",
+               qpim_keep_alive_time, VTY_NEWLINE);
+      ++writes;
+    }
+
   if (qpim_ssmpingd_list) {
     struct listnode *node;
     struct ssmpingd_sock *ss;
index 4323fad0ec1dcd9cfcff759db19378ebb7d5f614..7600637d917071e218fc660adc96d81957cae93c 100644 (file)
@@ -70,6 +70,7 @@ int64_t                   qpim_mroute_del_events = 0;
 int64_t                   qpim_mroute_del_last = 0;
 struct list              *qpim_static_route_list = NULL;
 unsigned int              qpim_keep_alive_time = PIM_KEEPALIVE_PERIOD;
+signed int                qpim_rp_keep_alive_time = 0;
 
 int32_t qpim_register_suppress_time = PIM_REGISTER_SUPPRESSION_TIME_DEFAULT;
 int32_t qpim_register_probe_time = PIM_REGISTER_PROBE_TIME_DEFAULT;
@@ -96,6 +97,8 @@ void pim_init()
 {
   srandom(time(NULL));
 
+  qpim_rp_keep_alive_time = PIM_RP_KEEPALIVE_PERIOD;
+
   pim_rp_init ();
 
   if (!inet_aton(PIM_ALL_PIM_ROUTERS, &qpim_all_pim_routers_addr)) {
index 1118fd2a6218c80e65e2bd91cdb6b5d59ee8843a..268b5ca60fd1e097aeb885f11e64bda670bcf6d1 100644 (file)
@@ -105,6 +105,7 @@ int64_t                   qpim_mroute_del_events;
 int64_t                   qpim_mroute_del_last;
 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;
 
 #define PIM_JP_HOLDTIME (qpim_t_periodic * 7 / 2)