summaryrefslogtreecommitdiffstats
path: root/ospf6d/ospf6_lsa.c
diff options
context:
space:
mode:
authorDinesh Dutt <ddutt@cumulusnetworks.com>2013-08-24 07:54:31 +0000
committerDavid Lamparter <equinox@opensourcerouting.org>2013-11-07 18:15:42 -0800
commit09df4574b95dbb5880eb2d3c3c3c900687a9a3ef (patch)
treeb332c0a50379a5efea3ecb9e29931dcd03e0a0ab /ospf6d/ospf6_lsa.c
parentac58e143f7278d5faaad7a8672e48328b03cffa5 (diff)
downloadquagga-09df4574b95dbb5880eb2d3c3c3c900687a9a3ef.tar.bz2
quagga-09df4574b95dbb5880eb2d3c3c3c900687a9a3ef.tar.xz
ospf6d: enable the commands to support detailed debugging of LSAs.
The code for the commands exists, but it hasn't been defined in the definition of the command itself. This patch fixes that. Signed-off-by: Dinesh G Dutt <ddutt at cumulusnetworks.com> Reviewed-by: Scott Feldman <sfeldma at cumulusnetworks.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'ospf6d/ospf6_lsa.c')
-rw-r--r--ospf6d/ospf6_lsa.c177
1 files changed, 31 insertions, 146 deletions
diff --git a/ospf6d/ospf6_lsa.c b/ospf6d/ospf6_lsa.c
index 18398800..3be08ef6 100644
--- a/ospf6d/ospf6_lsa.c
+++ b/ospf6d/ospf6_lsa.c
@@ -74,7 +74,7 @@ ospf6_unknown_lsa_show (struct vty *vty, struct ospf6_lsa *lsa)
struct ospf6_lsa_handler unknown_handler =
{
OSPF6_LSTYPE_UNKNOWN,
- "Unknown",
+ "unknown",
ospf6_unknown_lsa_show,
OSPF6_LSA_DEBUG,
};
@@ -748,7 +748,7 @@ ospf6_lsa_handler_name (struct ospf6_lsa_handler *h)
unsigned int i;
unsigned int size = strlen (h->name);
- if (!strcmp(h->name, "Unknown") &&
+ if (!strcmp(h->name, "unknown") &&
h->type != OSPF6_LSTYPE_UNKNOWN)
{
snprintf (buf, sizeof (buf), "%#04hx", h->type);
@@ -768,7 +768,7 @@ ospf6_lsa_handler_name (struct ospf6_lsa_handler *h)
DEFUN (debug_ospf6_lsa_type,
debug_ospf6_lsa_hex_cmd,
- "debug ospf6 lsa XXXX/0xXXXX",
+ "debug ospf6 lsa (router|network|inter-prefix|inter-router|as-ext|grp-mbr|type7|link|intra-prefix|unknown)",
DEBUG_STR
OSPF6_STR
"Debug Link State Advertisements (LSAs)\n"
@@ -777,44 +777,21 @@ DEFUN (debug_ospf6_lsa_type,
{
unsigned int i;
struct ospf6_lsa_handler *handler = NULL;
- unsigned long val;
- char *endptr = NULL;
- u_int16_t type = 0;
assert (argc);
- if ((strlen (argv[0]) == 6 && ! strncmp (argv[0], "0x", 2)) ||
- (strlen (argv[0]) == 4))
- {
- val = strtoul (argv[0], &endptr, 16);
- if (*endptr == '\0')
- type = val;
- }
-
for (i = 0; i < vector_active (ospf6_lsa_handler_vector); i++)
{
handler = vector_slot (ospf6_lsa_handler_vector, i);
if (handler == NULL)
continue;
- if (type && handler->type == type)
+ if (strncmp (argv[0], ospf6_lsa_handler_name(handler), strlen(argv[0])) == 0)
break;
if (! strcasecmp (argv[0], handler->name))
break;
handler = NULL;
}
- if (type && handler == NULL)
- {
- handler = (struct ospf6_lsa_handler *)
- malloc (sizeof (struct ospf6_lsa_handler));
- memset (handler, 0, sizeof (struct ospf6_lsa_handler));
- handler->type = type;
- handler->name = "Unknown";
- handler->show = ospf6_unknown_lsa_show;
- vector_set_index (ospf6_lsa_handler_vector,
- handler->type & OSPF6_LSTYPE_FCODE_MASK, handler);
- }
-
if (handler == NULL)
handler = &unknown_handler;
@@ -822,7 +799,7 @@ DEFUN (debug_ospf6_lsa_type,
{
if (! strcmp (argv[1], "originate"))
SET_FLAG (handler->debug, OSPF6_LSA_DEBUG_ORIGINATE);
- if (! strcmp (argv[1], "examin"))
+ if (! strcmp (argv[1], "examine"))
SET_FLAG (handler->debug, OSPF6_LSA_DEBUG_EXAMIN);
if (! strcmp (argv[1], "flooding"))
SET_FLAG (handler->debug, OSPF6_LSA_DEBUG_FLOOD);
@@ -833,9 +810,18 @@ DEFUN (debug_ospf6_lsa_type,
return CMD_SUCCESS;
}
+ALIAS (debug_ospf6_lsa_type,
+ debug_ospf6_lsa_hex_detail_cmd,
+ "debug ospf6 lsa (router|network|inter-prefix|inter-router|as-ext|grp-mbr|type7|link|intra-prefix|unknown) (originate|examine|flooding)",
+ DEBUG_STR
+ OSPF6_STR
+ "Debug Link State Advertisements (LSAs)\n"
+ "Specify LS type as Hexadecimal\n"
+ )
+
DEFUN (no_debug_ospf6_lsa_type,
no_debug_ospf6_lsa_hex_cmd,
- "no debug ospf6 lsa XXXX/0xXXXX",
+ "no debug ospf6 lsa (router|network|inter-prefix|inter-router|as-ext|grp-mbr|type7|link|intra-prefix|unknown)",
NO_STR
DEBUG_STR
OSPF6_STR
@@ -845,26 +831,15 @@ DEFUN (no_debug_ospf6_lsa_type,
{
u_int i;
struct ospf6_lsa_handler *handler = NULL;
- unsigned long val;
- char *endptr = NULL;
- u_int16_t type = 0;
assert (argc);
- if ((strlen (argv[0]) == 6 && ! strncmp (argv[0], "0x", 2)) ||
- (strlen (argv[0]) == 4))
- {
- val = strtoul (argv[0], &endptr, 16);
- if (*endptr == '\0')
- type = val;
- }
-
for (i = 0; i < vector_active (ospf6_lsa_handler_vector); i++)
{
handler = vector_slot (ospf6_lsa_handler_vector, i);
if (handler == NULL)
continue;
- if (type && handler->type == type)
+ if (strncmp (argv[0], ospf6_lsa_handler_name(handler), strlen(argv[0])) == 0)
break;
if (! strcasecmp (argv[0], handler->name))
break;
@@ -877,7 +852,7 @@ DEFUN (no_debug_ospf6_lsa_type,
{
if (! strcmp (argv[1], "originate"))
UNSET_FLAG (handler->debug, OSPF6_LSA_DEBUG_ORIGINATE);
- if (! strcmp (argv[1], "examin"))
+ if (! strcmp (argv[1], "examine"))
UNSET_FLAG (handler->debug, OSPF6_LSA_DEBUG_EXAMIN);
if (! strcmp (argv[1], "flooding"))
UNSET_FLAG (handler->debug, OSPF6_LSA_DEBUG_FLOOD);
@@ -885,120 +860,30 @@ DEFUN (no_debug_ospf6_lsa_type,
else
UNSET_FLAG (handler->debug, OSPF6_LSA_DEBUG);
- if (handler->debug == 0 &&
- !strcmp(handler->name, "Unknown") && type != OSPF6_LSTYPE_UNKNOWN)
- {
- free (handler);
- vector_slot (ospf6_lsa_handler_vector, i) = NULL;
- }
-
return CMD_SUCCESS;
}
-struct cmd_element debug_ospf6_lsa_type_cmd;
-struct cmd_element debug_ospf6_lsa_type_detail_cmd;
-struct cmd_element no_debug_ospf6_lsa_type_cmd;
-struct cmd_element no_debug_ospf6_lsa_type_detail_cmd;
+ALIAS (no_debug_ospf6_lsa_type,
+ no_debug_ospf6_lsa_hex_detail_cmd,
+ "no debug ospf6 lsa (router|network|inter-prefix|inter-router|as-ext|grp-mbr|type7|link|intra-prefix) (originate|examine|flooding)",
+ NO_STR
+ DEBUG_STR
+ OSPF6_STR
+ "Debug Link State Advertisements (LSAs)\n"
+ "Specify LS type as Hexadecimal\n"
+ )
void
install_element_ospf6_debug_lsa (void)
{
- u_int i;
- struct ospf6_lsa_handler *handler;
-#define STRSIZE 256
-#define DOCSIZE 1024
- static char strbuf[STRSIZE];
- static char docbuf[DOCSIZE];
- static char detail_strbuf[STRSIZE];
- static char detail_docbuf[DOCSIZE];
- char *str, *no_str;
- char *doc, *no_doc;
-
- strbuf[0] = '\0';
- no_str = &strbuf[strlen (strbuf)];
- strncat (strbuf, "no ", STRSIZE - strlen (strbuf));
- str = &strbuf[strlen (strbuf)];
-
- strncat (strbuf, "debug ospf6 lsa (", STRSIZE - strlen (strbuf));
- for (i = 0; i < vector_active (ospf6_lsa_handler_vector); i++)
- {
- handler = vector_slot (ospf6_lsa_handler_vector, i);
- if (handler == NULL)
- continue;
- strncat (strbuf, ospf6_lsa_handler_name (handler),
- STRSIZE - strlen (strbuf));
- strncat (strbuf, "|", STRSIZE - strlen (strbuf));
- }
- strbuf[strlen (strbuf) - 1] = ')';
- strbuf[strlen (strbuf)] = '\0';
-
- docbuf[0] = '\0';
- no_doc = &docbuf[strlen (docbuf)];
- strncat (docbuf, NO_STR, DOCSIZE - strlen (docbuf));
- doc = &docbuf[strlen (docbuf)];
-
- strncat (docbuf, DEBUG_STR, DOCSIZE - strlen (docbuf));
- strncat (docbuf, OSPF6_STR, DOCSIZE - strlen (docbuf));
- strncat (docbuf, "Debug Link State Advertisements (LSAs)\n",
- DOCSIZE - strlen (docbuf));
-
- for (i = 0; i < vector_active (ospf6_lsa_handler_vector); i++)
- {
- handler = vector_slot (ospf6_lsa_handler_vector, i);
- if (handler == NULL)
- continue;
- strncat (docbuf, "Debug ", DOCSIZE - strlen (docbuf));
- strncat (docbuf, handler->name, DOCSIZE - strlen (docbuf));
- strncat (docbuf, "-LSA\n", DOCSIZE - strlen (docbuf));
- }
- docbuf[strlen (docbuf)] = '\0';
-
- debug_ospf6_lsa_type_cmd.string = str;
- debug_ospf6_lsa_type_cmd.func = debug_ospf6_lsa_type;
- debug_ospf6_lsa_type_cmd.doc = doc;
-
- no_debug_ospf6_lsa_type_cmd.string = no_str;
- no_debug_ospf6_lsa_type_cmd.func = no_debug_ospf6_lsa_type;
- no_debug_ospf6_lsa_type_cmd.doc = no_doc;
-
- strncpy (detail_strbuf, strbuf, STRSIZE);
- strncat (detail_strbuf, " (originate|examin|flooding)",
- STRSIZE - strlen (detail_strbuf));
- detail_strbuf[strlen (detail_strbuf)] = '\0';
- no_str = &detail_strbuf[0];
- str = &detail_strbuf[strlen ("no ")];
-
- strncpy (detail_docbuf, docbuf, DOCSIZE);
- strncat (detail_docbuf, "Debug Originating LSA\n",
- DOCSIZE - strlen (detail_docbuf));
- strncat (detail_docbuf, "Debug Examining LSA\n",
- DOCSIZE - strlen (detail_docbuf));
- strncat (detail_docbuf, "Debug Flooding LSA\n",
- DOCSIZE - strlen (detail_docbuf));
- detail_docbuf[strlen (detail_docbuf)] = '\0';
- no_doc = &detail_docbuf[0];
- doc = &detail_docbuf[strlen (NO_STR)];
-
- debug_ospf6_lsa_type_detail_cmd.string = str;
- debug_ospf6_lsa_type_detail_cmd.func = debug_ospf6_lsa_type;
- debug_ospf6_lsa_type_detail_cmd.doc = doc;
-
- no_debug_ospf6_lsa_type_detail_cmd.string = no_str;
- no_debug_ospf6_lsa_type_detail_cmd.func = no_debug_ospf6_lsa_type;
- no_debug_ospf6_lsa_type_detail_cmd.doc = no_doc;
-
install_element (ENABLE_NODE, &debug_ospf6_lsa_hex_cmd);
- install_element (ENABLE_NODE, &debug_ospf6_lsa_type_cmd);
- install_element (ENABLE_NODE, &debug_ospf6_lsa_type_detail_cmd);
+ install_element (ENABLE_NODE, &debug_ospf6_lsa_hex_detail_cmd);
install_element (ENABLE_NODE, &no_debug_ospf6_lsa_hex_cmd);
- install_element (ENABLE_NODE, &no_debug_ospf6_lsa_type_cmd);
- install_element (ENABLE_NODE, &no_debug_ospf6_lsa_type_detail_cmd);
+ install_element (ENABLE_NODE, &no_debug_ospf6_lsa_hex_detail_cmd);
install_element (CONFIG_NODE, &debug_ospf6_lsa_hex_cmd);
- install_element (CONFIG_NODE, &debug_ospf6_lsa_type_cmd);
- install_element (CONFIG_NODE, &debug_ospf6_lsa_type_detail_cmd);
+ install_element (CONFIG_NODE, &debug_ospf6_lsa_hex_detail_cmd);
install_element (CONFIG_NODE, &no_debug_ospf6_lsa_hex_cmd);
- install_element (CONFIG_NODE, &no_debug_ospf6_lsa_type_cmd);
- install_element (CONFIG_NODE, &no_debug_ospf6_lsa_type_detail_cmd);
+ install_element (CONFIG_NODE, &no_debug_ospf6_lsa_hex_detail_cmd);
}
int
@@ -1019,7 +904,7 @@ config_write_ospf6_debug_lsa (struct vty *vty)
vty_out (vty, "debug ospf6 lsa %s originate%s",
ospf6_lsa_handler_name (handler), VNL);
if (CHECK_FLAG (handler->debug, OSPF6_LSA_DEBUG_EXAMIN))
- vty_out (vty, "debug ospf6 lsa %s examin%s",
+ vty_out (vty, "debug ospf6 lsa %s examine%s",
ospf6_lsa_handler_name (handler), VNL);
if (CHECK_FLAG (handler->debug, OSPF6_LSA_DEBUG_FLOOD))
vty_out (vty, "debug ospf6 lsa %s flooding%s",