* 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      */