* isisd.[ch]: Introduce oldmetric flag for area and transition
metricstyle command. With metricstyle wide only extended TLVs
should be used.
diff --git a/isisd/ChangeLog b/isisd/ChangeLog
index a695800..139985e 100644
--- a/isisd/ChangeLog
+++ b/isisd/ChangeLog
@@ -1,3 +1,9 @@
+2005-09-26 Hasso Tepper <hasso at quagga.net>
+
+ * isisd.[ch]: Introduce oldmetric flag for area and transition
+ metricstyle command. With metricstyle wide only extended TLVs
+ should be used.
+
2005-09-25 Hasso Tepper <hasso at quagga.net>
* dict.[ch]: Revert all nonfunctional changes. It's external module
diff --git a/isisd/isisd.c b/isisd/isisd.c
index 1f0167b..2a60b88 100644
--- a/isisd/isisd.c
+++ b/isisd/isisd.c
@@ -126,6 +126,7 @@
area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
area->dynhostname = 1;
+ area->oldmetric = 1;
area->lsp_frag_threshold = 90;
#ifdef TOPOLOGY_GENERATE
memcpy (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS, ISIS_SYS_ID_LEN);
@@ -1356,40 +1357,50 @@
DEFUN (metric_style,
metric_style_cmd,
- "metric-style (narrow|wide)",
+ "metric-style (narrow|transition|wide)",
"Use old-style (ISO 10589) or new-style packet formats\n"
"Use old style of TLVs with narrow metric\n"
+ "Send and accept both styles of TLVs during transition\n"
"Use new style of TLVs to carry wider metric\n")
{
struct isis_area *area;
area = vty->index;
assert (area);
- if (!strcmp (argv[0], "wide"))
- area->newmetric = 1;
- else
- area->newmetric = 0;
+
+ if (strncmp (argv[0], "w", 1) == 0)
+ {
+ area->newmetric = 1;
+ area->oldmetric = 0;
+ }
+ else if (strncmp (argv[0], "t", 1) == 0)
+ {
+ area->newmetric = 1;
+ area->oldmetric = 1;
+ }
+ else if (strncmp (argv[0], "n", 1) == 0)
+ {
+ area->newmetric = 0;
+ area->oldmetric = 1;
+ }
return CMD_SUCCESS;
}
DEFUN (no_metric_style,
no_metric_style_cmd,
- "no metric-style (narrow|wide)",
+ "no metric-style",
NO_STR
- "Use old-style (ISO 10589) or new-style packet formats\n"
- "Use old style of TLVs with narrow metric\n"
- "Use new style of TLVs to carry wider metric\n")
+ "Use old-style (ISO 10589) or new-style packet formats\n")
{
struct isis_area *area;
area = vty->index;
assert (area);
- if (!strcmp (argv[0], "wide"))
- area->newmetric = 0;
- else
- area->newmetric = 1;
+ /* Default is narrow metric. */
+ area->newmetric = 0;
+ area->oldmetric = 1;
return CMD_SUCCESS;
}
@@ -1891,9 +1902,13 @@
/* ISIS - Metric-Style - when true displays wide */
if (area->newmetric)
{
- vty_out (vty, " metric-style wide%s", VTY_NEWLINE);
+ if (!area->oldmetric)
+ vty_out (vty, " metric-style wide%s", VTY_NEWLINE);
+ else
+ vty_out (vty, " metric-style transition%s", VTY_NEWLINE);
write++;
}
+
/* ISIS - Area is-type (level-1-2 is default) */
if (area->is_type == IS_LEVEL_1)
{
diff --git a/isisd/isisd.h b/isisd/isisd.h
index e66f60e..e61376e 100644
--- a/isisd/isisd.h
+++ b/isisd/isisd.h
@@ -104,6 +104,7 @@
char dynhostname;
/* do we support new style metrics? */
char newmetric;
+ char oldmetric;
/* identifies the routing instance */
char *area_tag;
/* area addresses for this area */