2003-06-19 Paul Jakma <paul@dishone.st>

* ospf_vty.c (ospf_area_stub_no_summary): fix typo.
	  (ospf_area_nssa_cmd_handler): new function to handle the
	  area.*nssa commands.
	  (ospf_area_nssa_cmd): changed to call ospf_area_nssa_cmd_handler
	  (ospf_area_nssa_translate_cmd) ditto
	  (ospf_area_nssa_translate_cmd): changed from ALIAS to defun, call
	  ospf_area_nssa_cmd_handler
	  (ospf_area_nssa_translate_no_summary_cmd): ditto
	  (no_ospf_area_nssa_cmd): call ospf_schedule_abr_task()
	  (show_ip_ospf_area): Formatting cleanups. Properly print out NSSA
          area configuration.
	  show_router_lsa_detail: Add missing newline
	  (show_network_lsa_detail): ditto
	  (show_summary_lsa_detail): ditto
	  (show_summary_asbr_lsa_detail): ditto
	  (show_ip_ospf_route_router): fix spacing
	  (config_write_ospf_area): actually write out proper state for NSSA
	  area.
This commit is contained in:
paul 2003-06-22 09:04:47 +00:00
parent e2c6c153d1
commit b0a053be42

View File

@ -1427,7 +1427,7 @@ DEFUN (ospf_area_stub_no_summary,
ret = ospf_area_stub_set (ospf, area_id);
if (ret == 0)
{
vty_out (vty, "%% Area cannot be nssa as it contains a virtual link%s",
vty_out (vty, "%% Area cannot be stub as it contains a virtual link%s",
VTY_NEWLINE);
return CMD_WARNING;
}
@ -1479,13 +1479,8 @@ DEFUN (no_ospf_area_stub_no_summary,
}
#ifdef HAVE_NSSA
DEFUN (ospf_area_nssa,
ospf_area_nssa_cmd,
"area (A.B.C.D|<0-4294967295>) nssa",
"OSPF area parameters\n"
"OSPF area ID in IP address format\n"
"OSPF area ID as a decimal value\n"
"Configure OSPF area as nssa\n")
int
ospf_area_nssa_cmd_handler (struct vty *vty, int argc, char **argv, int nosum)
{
struct ospf *ospf = vty->index;
struct in_addr area_id;
@ -1504,25 +1499,34 @@ DEFUN (ospf_area_nssa,
if (argc > 1)
{
if (strncmp (argv[1], "translate-c", 11) == 0)
ospf_area_nssa_translator_role_set (ospf, area_id,
ospf_area_nssa_translator_role_set (ospf, area_id,
OSPF_NSSA_ROLE_CANDIDATE);
else if (strncmp (argv[1], "translate-n", 11) == 0)
ospf_area_nssa_translator_role_set (ospf, area_id,
ospf_area_nssa_translator_role_set (ospf, area_id,
OSPF_NSSA_ROLE_NEVER);
else if (strncmp (argv[1], "translate-a", 11) == 0)
ospf_area_nssa_translator_role_set (ospf, area_id,
ospf_area_nssa_translator_role_set (ospf, area_id,
OSPF_NSSA_ROLE_ALWAYS);
}
else
{
ospf_area_nssa_translator_role_set (ospf, area_id,
OSPF_NSSA_ROLE_CANDIDATE);
}
if (argc > 2)
if (nosum)
ospf_area_no_summary_set (ospf, area_id);
else
ospf_area_no_summary_unset (ospf, area_id);
ospf_schedule_abr_task (ospf);
return CMD_SUCCESS;
}
ALIAS (ospf_area_nssa,
DEFUN (ospf_area_nssa_translate_no_summary,
ospf_area_nssa_translate_no_summary_cmd,
"area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always) (no-summary|)",
"area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always) no-summary",
"OSPF area parameters\n"
"OSPF area ID in IP address format\n"
"OSPF area ID as a decimal value\n"
@ -1530,10 +1534,12 @@ ALIAS (ospf_area_nssa,
"Configure NSSA-ABR for translate election (default)\n"
"Configure NSSA-ABR to never translate\n"
"Configure NSSA-ABR to always translate\n"
"Do not inject inter-area routes into nssa\n"
"dummy\n")
"Do not inject inter-area routes into nssa\n")
{
return ospf_area_nssa_cmd_handler (vty, argc, argv, 1);
}
ALIAS (ospf_area_nssa,
DEFUN (ospf_area_nssa_translate,
ospf_area_nssa_translate_cmd,
"area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always)",
"OSPF area parameters\n"
@ -1543,6 +1549,20 @@ ALIAS (ospf_area_nssa,
"Configure NSSA-ABR for translate election (default)\n"
"Configure NSSA-ABR to never translate\n"
"Configure NSSA-ABR to always translate\n")
{
return ospf_area_nssa_cmd_handler (vty, argc, argv, 0);
}
DEFUN (ospf_area_nssa,
ospf_area_nssa_cmd,
"area (A.B.C.D|<0-4294967295>) nssa",
"OSPF area parameters\n"
"OSPF area ID in IP address format\n"
"OSPF area ID as a decimal value\n"
"Configure OSPF area as nssa\n")
{
return ospf_area_nssa_cmd_handler (vty, argc, argv, 0);
}
DEFUN (ospf_area_nssa_no_summary,
ospf_area_nssa_no_summary_cmd,
@ -1553,23 +1573,7 @@ DEFUN (ospf_area_nssa_no_summary,
"Configure OSPF area as nssa\n"
"Do not inject inter-area routes into nssa\n")
{
struct ospf *ospf = vty->index;
struct in_addr area_id;
int ret, format;
VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[0]);
ret = ospf_area_nssa_set (ospf, area_id);
if (ret == 0)
{
vty_out (vty, "%% Area cannot be nssa as it contains a virtual link%s",
VTY_NEWLINE);
return CMD_WARNING;
}
ospf_area_no_summary_set (ospf, area_id);
return CMD_SUCCESS;
return ospf_area_nssa_cmd_handler (vty, argc, argv, 1);
}
DEFUN (no_ospf_area_nssa,
@ -1590,6 +1594,8 @@ DEFUN (no_ospf_area_nssa,
ospf_area_nssa_unset (ospf, area_id);
ospf_area_no_summary_unset (ospf, area_id);
ospf_schedule_abr_task (ospf);
return CMD_SUCCESS;
}
@ -2359,24 +2365,23 @@ show_ip_ospf_area (struct vty *vty, struct ospf_area *area)
else
{
if (area->external_routing == OSPF_AREA_STUB)
vty_out (vty, " (Stub%s%s)",
area->no_summary ? ", no summary" : "",
area->shortcut_configured ? "; " : "");
vty_out (vty, " (Stub%s%s)",
area->no_summary ? ", no summary" : "",
area->shortcut_configured ? "; " : "");
#ifdef HAVE_NSSA
else
if (area->external_routing == OSPF_AREA_NSSA)
vty_out (vty, " (NSSA%s%s)",
area->no_summary ? ", no summary" : "",
area->shortcut_configured ? "; " : "");
else if (area->external_routing == OSPF_AREA_NSSA)
vty_out (vty, " (NSSA%s%s)",
area->no_summary ? ", no summary" : "",
area->shortcut_configured ? "; " : "");
#endif /* HAVE_NSSA */
vty_out (vty, "%s", VTY_NEWLINE);
vty_out (vty, " Shortcutting mode: %s",
ospf_shortcut_mode_descr_str[area->shortcut_configured]);
ospf_shortcut_mode_descr_str[area->shortcut_configured]);
vty_out (vty, ", S-bit consensus: %s%s",
area->shortcut_capability ? "ok" : "no", VTY_NEWLINE);
area->shortcut_capability ? "ok" : "no", VTY_NEWLINE);
}
/* Show number of interfaces. */
@ -2389,21 +2394,34 @@ show_ip_ospf_area (struct vty *vty, struct ospf_area *area)
{
vty_out (vty, " It is an NSSA configuration. %s Elected NSSA/ABR performs type-7/type-5 LSA translation. %s", VTY_NEWLINE, VTY_NEWLINE);
if (! IS_OSPF_ABR (area->ospf))
vty_out (vty, " It is not ABR, therefore not Translator. %s",
VTY_NEWLINE);
vty_out (vty, " It is not ABR, therefore not Translator. %s",
VTY_NEWLINE);
else if (area->NSSATranslatorState)
{
vty_out (vty, " We are an ABR and ");
if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
vty_out (vty, "the NSSA Elected Translator. %s",
VTY_NEWLINE);
else if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_ALWAYS)
vty_out (vty, "always an NSSA Translator. %s",
VTY_NEWLINE);
}
else
{
if (area->NSSATranslator)
vty_out (vty, " We are an ABR and the NSSA Elected Translator. %s", VTY_NEWLINE);
else
vty_out (vty, " We are an ABR, but not the NSSA Elected Translator. %s", VTY_NEWLINE);
}
{
vty_out (vty, " We are an ABR, but ");
if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
vty_out (vty, "not the NSSA Elected Translator. %s",
VTY_NEWLINE);
else
vty_out (vty, "not the NSSA Elected Translator. %s",
VTY_NEWLINE);
}
}
#endif /* HAVE_NSSA */
/* Show number of fully adjacent neighbors. */
vty_out (vty, " Number of fully adjacent neighbors in this area:"
" %d%s", area->full_nbrs, VTY_NEWLINE);
" %d%s", area->full_nbrs, VTY_NEWLINE);
/* Show authentication type. */
vty_out (vty, " Area has ");
@ -3278,6 +3296,7 @@ show_router_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
VTY_NEWLINE, VTY_NEWLINE);
show_ip_ospf_database_router_links (vty, rl);
vty_out (vty, "%s", VTY_NEWLINE);
}
return 0;
@ -3324,6 +3343,7 @@ show_summary_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
VTY_NEWLINE);
vty_out (vty, " TOS: 0 Metric: %d%s", GET_METRIC (sl->metric),
VTY_NEWLINE);
vty_out (vty, "%s", VTY_NEWLINE);
}
return 0;
@ -3343,6 +3363,7 @@ show_summary_asbr_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
ip_masklen (sl->mask), VTY_NEWLINE);
vty_out (vty, " TOS: 0 Metric: %d%s", GET_METRIC (sl->metric),
VTY_NEWLINE);
vty_out (vty, "%s", VTY_NEWLINE);
}
return 0;
@ -6514,7 +6535,7 @@ show_ip_ospf_route_router (struct vty *vty, struct route_table *rtrs)
if ((or = getdata (nn)) != NULL)
{
if (flag++)
vty_out(vty," " );
vty_out (vty, "%24s", "");
/* Show path. */
vty_out (vty, "%s [%d] area: %s",
@ -6945,12 +6966,26 @@ config_write_ospf_area (struct vty *vty, struct ospf *ospf)
#endif /* HAVE_NSSA */
)
{
#ifdef HAVE_NSSA
if (area->external_routing == OSPF_AREA_NSSA)
vty_out (vty, " area %s nssa", buf);
else
#endif /* HAVE_NSSA */
if (area->external_routing == OSPF_AREA_STUB)
vty_out (vty, " area %s stub", buf);
#ifdef HAVE_NSSA
else if (area->external_routing == OSPF_AREA_NSSA)
{
vty_out (vty, " area %s nssa", buf);
switch (area->NSSATranslatorRole)
{
case OSPF_NSSA_ROLE_NEVER:
vty_out (vty, " translate-never");
break;
case OSPF_NSSA_ROLE_ALWAYS:
vty_out (vty, " translate-always");
break;
case OSPF_NSSA_ROLE_CANDIDATE:
default:
vty_out (vty, " translate-candidate");
}
}
#endif /* HAVE_NSSA */
if (area->no_summary)
vty_out (vty, " no-summary");