ospf6d: Add the missing ospf6 running check in show cmds
SYMPTOM:
If some of the ospfv3 commands like 'show ipv6 ospf6 route' are executed
with ospf6d daemon running but before having any ospfv3 configuration, then
ospf6d crash is seen.
ISSUE:
There are a few show commands, which are (unlike others) not checking if
ospf6 instance is initialized already.
FIX:
Add the missing checks, by using OSPF6_CMD_CHECK_RUNNING() in the commands
where its needed and not yet used.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Pradosh Mohapatra <pmohapat@cumulusnetworks.com>
Dinesh Dutt <ddutt@cumulusnetworks.com>
diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c
index 0967482..1861fe7 100644
--- a/ospf6d/ospf6_area.c
+++ b/ospf6d/ospf6_area.c
@@ -666,6 +666,8 @@
struct ospf6_route *route;
struct prefix prefix;
+ OSPF6_CMD_CHECK_RUNNING ();
+
ospf6_linkstate_prefix (ospf6->router_id, htonl (0), &prefix);
for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
@@ -701,6 +703,8 @@
struct ospf6_route *route;
struct prefix prefix;
+ OSPF6_CMD_CHECK_RUNNING ();
+
ospf6_linkstate_prefix (ospf6->router_id, htonl (0), &prefix);
if (inet_pton (AF_INET, argv[0], &area_id) != 1)
@@ -747,6 +751,8 @@
struct ospf6_route_table *spf_table;
unsigned char tmp_debug_ospf6_spf = 0;
+ OSPF6_CMD_CHECK_RUNNING ();
+
inet_pton (AF_INET, argv[0], &router_id);
ospf6_linkstate_prefix (router_id, htonl (0), &prefix);
diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c
index 6db1ca9..265a178 100644
--- a/ospf6d/ospf6_asbr.c
+++ b/ospf6d/ospf6_asbr.c
@@ -1291,6 +1291,8 @@
{
struct ospf6_route *route;
+ OSPF6_CMD_CHECK_RUNNING ();
+
ospf6_redistribute_show_config (vty);
for (route = ospf6_route_head (ospf6->external_table); route;
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c
index 145a88e..7ec4309 100644
--- a/ospf6d/ospf6_top.c
+++ b/ospf6d/ospf6_top.c
@@ -1155,6 +1155,8 @@
ROUTE_STR
)
{
+ OSPF6_CMD_CHECK_RUNNING ();
+
ospf6_route_table_show (vty, argc, argv, ospf6->route_table);
return CMD_SUCCESS;
}
@@ -1186,6 +1188,8 @@
const char *sargv[CMD_ARGC_MAX];
int i, sargc;
+ OSPF6_CMD_CHECK_RUNNING ();
+
/* copy argv to sargv and then append "match" */
for (i = 0; i < argc; i++)
sargv[i] = argv[i];
@@ -1220,6 +1224,8 @@
sargv[sargc++] = "detail";
sargv[sargc] = NULL;
+ OSPF6_CMD_CHECK_RUNNING ();
+
ospf6_route_table_show (vty, sargc, sargv, ospf6->route_table);
return CMD_SUCCESS;
}
@@ -1284,6 +1290,8 @@
sargv[sargc++] = "detail";
sargv[sargc] = NULL;
+ OSPF6_CMD_CHECK_RUNNING ();
+
ospf6_route_table_show (vty, sargc, sargv, ospf6->route_table);
return CMD_SUCCESS;
}
diff --git a/ospf6d/ospf6d.c b/ospf6d/ospf6d.c
index f9b0322..eae01af 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -1690,6 +1690,8 @@
struct listnode *node;
struct ospf6_area *oa;
+ OSPF6_CMD_CHECK_RUNNING ();
+
for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
{
vty_out (vty, "%s SPF Result in Area %s%s%s",
@@ -1738,6 +1740,8 @@
struct listnode *node;
struct ospf6_area *oa;
+ OSPF6_CMD_CHECK_RUNNING ();
+
/* copy argv to sargv and then append "detail" */
for (i = 0; i < argc; i++)
sargv[i] = argv[i];