From 01408ede34dc6970d24483ae7447206b6e5d201e Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 18 Aug 2016 10:00:02 -0400 Subject: [PATCH] pimd: Allow rp to configure it's keep alive timer Allow the end user to supply a RP based keep alive timer. Signed-off-by: Donald Sharp --- pimd/pim_cmd.c | 33 +++++++++++++++++++++++++++++++-- pimd/pim_register.c | 2 +- pimd/pim_vty.c | 7 +++++++ pimd/pimd.c | 3 +++ pimd/pimd.h | 1 + 5 files changed, 43 insertions(+), 3 deletions(-) diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 78e0d46715..8067219e45 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -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); diff --git a/pimd/pim_register.c b/pimd/pim_register.c index 129f38cbdc..439bb577c9 100644 --- a/pimd/pim_register.c +++ b/pimd/pim_register.c @@ -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); } diff --git a/pimd/pim_vty.c b/pimd/pim_vty.c index bc4acfdb06..85df83287b 100644 --- a/pimd/pim_vty.c +++ b/pimd/pim_vty.c @@ -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; diff --git a/pimd/pimd.c b/pimd/pimd.c index 4323fad0ec..7600637d91 100644 --- a/pimd/pimd.c +++ b/pimd/pimd.c @@ -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)) { diff --git a/pimd/pimd.h b/pimd/pimd.h index 1118fd2a62..268b5ca60f 100644 --- a/pimd/pimd.h +++ b/pimd/pimd.h @@ -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) -- 2.39.5