From: Vipin Kumar <[email protected]>

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 <[email protected]>
Reviewed-by: Pradosh Mohapatra <[email protected]>
             Dinesh Dutt <[email protected]>
---
 ospf6d/ospf6_area.c | 6 ++++++
 ospf6d/ospf6_asbr.c | 2 ++
 ospf6d/ospf6_top.c  | 8 ++++++++
 ospf6d/ospf6d.c     | 4 ++++
 4 files changed, 20 insertions(+)

diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c
index 9b70422..05c2a90 100644
--- a/ospf6d/ospf6_area.c
+++ b/ospf6d/ospf6_area.c
@@ -666,6 +666,8 @@ DEFUN (show_ipv6_ospf6_spf_tree,
   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 @@ DEFUN (show_ipv6_ospf6_area_spf_tree,
   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 @@ DEFUN (show_ipv6_ospf6_simulate_spf_tree_root,
   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 a954812..dc7f1ce 100644
--- a/ospf6d/ospf6_asbr.c
+++ b/ospf6d/ospf6_asbr.c
@@ -1290,6 +1290,8 @@ DEFUN (show_ipv6_ospf6_redistribute,
 {
   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 7fffba8..f574344 100644
--- a/ospf6d/ospf6_top.c
+++ b/ospf6d/ospf6_top.c
@@ -721,6 +721,8 @@ DEFUN (show_ipv6_ospf6_route,
        ROUTE_STR
        )
 {
+  OSPF6_CMD_CHECK_RUNNING ();
+
   ospf6_route_table_show (vty, argc, argv, ospf6->route_table);
   return CMD_SUCCESS;
 }
@@ -752,6 +754,8 @@ DEFUN (show_ipv6_ospf6_route_match,
   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];
@@ -786,6 +790,8 @@ DEFUN (show_ipv6_ospf6_route_match_detail,
   sargv[sargc++] = "detail";
   sargv[sargc] = NULL;
 
+  OSPF6_CMD_CHECK_RUNNING ();
+
   ospf6_route_table_show (vty, sargc, sargv, ospf6->route_table);
   return CMD_SUCCESS;
 }
@@ -850,6 +856,8 @@ DEFUN (show_ipv6_ospf6_route_type_detail,
   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 63d3f11..3e00d86 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -1690,6 +1690,8 @@ DEFUN (show_ipv6_ospf6_linkstate,
   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 @@ DEFUN (show_ipv6_ospf6_linkstate_detail,
   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];
-- 
1.9.1


_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to