summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEverton Marques <everton.marques@gmail.com>2014-07-22 14:52:57 -0300
committerDavid Lamparter <equinox@opensourcerouting.org>2015-02-04 06:07:58 +0100
commit3456a80f5f8e6e44c30453bd92eabf5faf7ab25b (patch)
tree878fe14709ab997bdd7f793e1bf102edece1995c
parentee61109c045f3c9960ec52912ebdbb8998ac63a1 (diff)
downloadquagga-3456a80f5f8e6e44c30453bd92eabf5faf7ab25b.tar.bz2
quagga-3456a80f5f8e6e44c30453bd92eabf5faf7ab25b.tar.xz
pimd: clear zclient-update: Reset zclient update connection to zebra daemon
-rw-r--r--pimd/COMMANDS1
-rw-r--r--pimd/pim_cmd.c13
-rw-r--r--pimd/pim_zebra.c37
-rw-r--r--pimd/pimd.c1
-rw-r--r--pimd/pimd.h1
5 files changed, 34 insertions, 19 deletions
diff --git a/pimd/COMMANDS b/pimd/COMMANDS
index 425ac822..2dedea06 100644
--- a/pimd/COMMANDS
+++ b/pimd/COMMANDS
@@ -60,6 +60,7 @@ debug commands:
clear ip mroute Reset multicast routes
clear ip pim interfaces Reset PIM interfaces
clear ip pim oil Rescan PIM OIL (output interface list)
+ clear zclient-update Reset zclient update connection to zebra daemon
debug igmp IGMP protocol activity
debug mroute PIM interaction with kernel MFC cache
debug pim PIM protocol activity
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index 9363e3c9..a49264a3 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -27,6 +27,7 @@
#include "command.h"
#include "if.h"
#include "prefix.h"
+#include "zclient.h"
#include "pimd.h"
#include "pim_cmd.h"
@@ -1562,6 +1563,17 @@ DEFUN (pim_interface,
return CMD_SUCCESS;
}
+DEFUN (clear_zclient_update,
+ clear_zclient_update_cmd,
+ "clear zclient-update",
+ CLEAR_STR
+ "Reset zclient update connection to zebra daemon\n")
+{
+ zclient_reset(qpim_zclient_update);
+
+ return CMD_SUCCESS;
+}
+
DEFUN (clear_ip_interfaces,
clear_ip_interfaces_cmd,
"clear ip interfaces",
@@ -4312,6 +4324,7 @@ void pim_cmd_init()
install_element (ENABLE_NODE, &clear_ip_mroute_cmd);
install_element (ENABLE_NODE, &clear_ip_pim_interfaces_cmd);
install_element (ENABLE_NODE, &clear_ip_pim_oil_cmd);
+ install_element (ENABLE_NODE, &clear_zclient_update_cmd);
install_element (ENABLE_NODE, &show_ip_igmp_interface_cmd);
install_element (ENABLE_NODE, &show_ip_igmp_join_cmd);
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index e080c04f..44046dbb 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -644,7 +644,6 @@ static int redist_read_ipv4_route(int command, struct zclient *zclient,
void pim_zebra_init()
{
- struct zclient *zclient;
int i;
#ifdef HAVE_TCP_ZEBRA
@@ -654,35 +653,35 @@ void pim_zebra_init()
#endif
/* Socket for receiving updates from Zebra daemon */
- zclient = zclient_new();
-
- zclient->router_id_update = pim_router_id_update;
- zclient->router_id_update = pim_router_id_update_zebra;
- zclient->interface_add = pim_zebra_if_add;
- zclient->interface_delete = pim_zebra_if_del;
- zclient->interface_up = pim_zebra_if_state_up;
- zclient->interface_down = pim_zebra_if_state_down;
- zclient->interface_address_add = pim_zebra_if_address_add;
- zclient->interface_address_delete = pim_zebra_if_address_del;
- zclient->ipv4_route_add = redist_read_ipv4_route;
- zclient->ipv4_route_delete = redist_read_ipv4_route;
-
- zclient_init(zclient, ZEBRA_ROUTE_PIM);
+ qpim_zclient_update = zclient_new();
+
+ qpim_zclient_update->zclient_broken = zclient_broken;
+ qpim_zclient_update->router_id_update = pim_router_id_update_zebra;
+ qpim_zclient_update->interface_add = pim_zebra_if_add;
+ qpim_zclient_update->interface_delete = pim_zebra_if_del;
+ qpim_zclient_update->interface_up = pim_zebra_if_state_up;
+ qpim_zclient_update->interface_down = pim_zebra_if_state_down;
+ qpim_zclient_update->interface_address_add = pim_zebra_if_address_add;
+ qpim_zclient_update->interface_address_delete = pim_zebra_if_address_del;
+ qpim_zclient_update->ipv4_route_add = redist_read_ipv4_route;
+ qpim_zclient_update->ipv4_route_delete = redist_read_ipv4_route;
+
+ zclient_init(qpim_zclient_update, ZEBRA_ROUTE_PIM);
zlog_info("zclient_init cleared redistribution request");
- zassert(zclient->redist_default == ZEBRA_ROUTE_PIM);
+ zassert(qpim_zclient_update->redist_default == ZEBRA_ROUTE_PIM);
/* Request all redistribution */
for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
- if (i == zclient->redist_default)
+ if (i == qpim_zclient_update->redist_default)
continue;
- zclient->redist[i] = 1;
+ qpim_zclient_update->redist[i] = 1;
zlog_info("%s: requesting redistribution for %s (%i)",
__PRETTY_FUNCTION__, zebra_route_string(i), i);
}
/* Request default information */
- zclient->default_information = 1;
+ qpim_zclient_update->default_information = 1;
zlog_info("%s: requesting default information redistribution",
__PRETTY_FUNCTION__);
diff --git a/pimd/pimd.c b/pimd/pimd.c
index 49ddc212..855defcc 100644
--- a/pimd/pimd.c
+++ b/pimd/pimd.c
@@ -51,6 +51,7 @@ int qpim_mroute_oif_highest_vif_index = -1;
struct list *qpim_channel_oil_list = 0;
int qpim_t_periodic = PIM_DEFAULT_T_PERIODIC; /* Period between Join/Prune Messages */
struct list *qpim_upstream_list = 0;
+struct zclient *qpim_zclient_update = 0;
struct zclient *qpim_zclient_lookup = 0;
struct pim_assert_metric qpim_infinite_assert_metric;
long qpim_rpf_cache_refresh_delay_msec = 10000;
diff --git a/pimd/pimd.h b/pimd/pimd.h
index 68b11994..b0a1b648 100644
--- a/pimd/pimd.h
+++ b/pimd/pimd.h
@@ -80,6 +80,7 @@ struct list *qpim_channel_oil_list; /* list of struct channel_oil *
struct in_addr qpim_all_pim_routers_addr;
int qpim_t_periodic; /* Period between Join/Prune Messages */
struct list *qpim_upstream_list; /* list of struct pim_upstream */
+struct zclient *qpim_zclient_update;
struct zclient *qpim_zclient_lookup;
struct pim_assert_metric qpim_infinite_assert_metric;
long qpim_rpf_cache_refresh_delay_msec;