]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: finish all zebra CHECK ME's
authorQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 28 Sep 2016 04:47:43 +0000 (04:47 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 28 Sep 2016 04:47:43 +0000 (04:47 +0000)
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
zebra/interface.c
zebra/zebra_vty.c

index c1fbc9cdd3cf82fa247867cb88e1a9e36cb98780..676b6ed0df3f8e02019737fe543b04f46b5872f6 100644 (file)
@@ -1298,19 +1298,12 @@ struct cmd_node vrf_node =
 };
 
 /* Show all interfaces to vty. */
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show interface vrf NAME",
- *     SHOW_STR
- *     "Interface status and configuration\n"
- *     VRF_CMD_HELP_STR
- *
- */
 DEFUN (show_interface,
        show_interface_cmd,
-       "show interface",
+       "show interface [vrf NAME]",
        SHOW_STR
-       "Interface status and configuration\n")
+       "Interface status and configuration\n"
+       VRF_CMD_HELP_STR)
 {
   struct listnode *node;
   struct interface *ifp;
@@ -1318,8 +1311,8 @@ DEFUN (show_interface,
 
   interface_update_stats ();
 
-  if (argc > 0)
-    VRF_GET_ID (vrf_id, argv[2]->arg);
+  if (argc > 2)
+    VRF_GET_ID (vrf_id, argv[3]->arg);
 
   /* All interface print. */
   for (ALL_LIST_ELEMENTS_RO (vrf_iflist (vrf_id), node, ifp))
@@ -1385,17 +1378,9 @@ DEFUN (show_interface_name_vrf,
 }
 
 /* Show specified interface to vty. */
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show interface IFNAME",
- *     SHOW_STR
- *     "Interface status and configuration\n"
- *     "Interface name\n"
- *
- */
 DEFUN (show_interface_name_vrf_all,
        show_interface_name_vrf_all_cmd,
-       "show interface IFNAME vrf all",
+       "show interface IFNAME [vrf all]",
        SHOW_STR
        "Interface status and configuration\n"
        "Interface name\n"
@@ -1470,26 +1455,18 @@ if_show_description (struct vty *vty, vrf_id_t vrf_id)
     }
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show interface description vrf NAME",
- *     SHOW_STR
- *     "Interface status and configuration\n"
- *     "Interface description\n"
- *     VRF_CMD_HELP_STR
- *
- */
 DEFUN (show_interface_desc,
        show_interface_desc_cmd,
-       "show interface description",
+       "show interface description [vrf NAME]",
        SHOW_STR
        "Interface status and configuration\n"
-       "Interface description\n")
+       "Interface description\n"
+       VRF_CMD_HELP_STR)
 {
   vrf_id_t vrf_id = VRF_DEFAULT;
 
-  if (argc > 0)
-    VRF_GET_ID (vrf_id, argv[3]->arg);
+  if (argc > 3)
+    VRF_GET_ID (vrf_id, argv[4]->arg);
 
   if_show_description (vty, vrf_id);
 
@@ -1704,19 +1681,12 @@ DEFUN (bandwidth_if,
   return CMD_SUCCESS;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no bandwidth <1-100000>",
- *     NO_STR
- *     "Set bandwidth informational parameter\n"
- *     "Bandwidth in megabits\n"
- *
- */
 DEFUN (no_bandwidth_if,
        no_bandwidth_if_cmd,
-       "no bandwidth",
+       "no bandwidth [(1-100000)]",
        NO_STR
-       "Set bandwidth informational parameter\n")
+       "Set bandwidth informational parameter\n"
+       "Bandwidth in megabits\n")
 {
   struct interface *ifp;   
   
@@ -2100,93 +2070,79 @@ DEFUN (no_link_params_inter_as,
 }
 
 /* RFC7471: OSPF Traffic Engineering (TE) Metric extensions & draft-ietf-isis-metric-extensions-07.txt */
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "delay <0-16777215> min <0-16777215> max <0-16777215>",
- *     "Unidirectional Average Link Delay (optionally Minimum and Maximum delays)\n"
- *     "Average delay in micro-second as decimal (0...16777215)\n"
- *     "Minimum delay\n"
- *     "Minimum delay in micro-second as decimal (0...16777215)\n"
- *     "Maximum delay\n"
- *     "Maximum delay in micro-second as decimal (0...16777215)\n"
- *
- */
 DEFUN (link_params_delay,
        link_params_delay_cmd,
-       "delay (0-16777215)",
+       "delay (0-16777215) [min (0-16777215) max (0-16777215)]",
        "Unidirectional Average Link Delay\n"
-       "Average delay in micro-second as decimal (0...16777215)\n")
+       "Average delay in micro-second as decimal (0...16777215)\n"
+       "Minimum delay\n"
+       "Minimum delay in micro-second as decimal (0...16777215)\n"
+       "Maximum delay\n"
+       "Maximum delay in micro-second as decimal (0...16777215)\n")
 {
-  int idx_number = 1;
+  /* Get and Check new delay values */
+  u_int32_t delay = 0, low = 0, high = 0;
+  VTY_GET_ULONG("delay", delay, argv[1]->arg);
+  if (argc == 6)
+  {
+    VTY_GET_ULONG("minimum delay", low, argv[3]->arg);
+    VTY_GET_ULONG("maximum delay", high, argv[5]->arg);
+  }
 
   struct interface *ifp = (struct interface *) vty->index;
   struct if_link_params *iflp = if_link_params_get (ifp);
-  u_int32_t delay = 0, low = 0, high = 0;
   u_int8_t update = 0;
 
-  /* Get and Check new delay values */
-  VTY_GET_ULONG("delay", delay, argv[idx_number]->arg);
-  switch (argc)
-    {
-    case 1:
-      /* Check new delay value against old Min and Max delays if set */
-      if (IS_PARAM_SET(iflp, LP_MM_DELAY)
-          && (delay <= iflp->min_delay || delay >= iflp->max_delay))
-        {
-          vty_out (vty, "Average delay should be comprise between Min (%d) and Max (%d) delay%s",
-                   iflp->min_delay, iflp->max_delay, VTY_NEWLINE);
-          return CMD_WARNING;
-        }
-      /* Update delay if value is not set or change */
-      if (IS_PARAM_UNSET(iflp, LP_DELAY)|| iflp->av_delay != delay)
-        {
-          iflp->av_delay = delay;
-          SET_PARAM(iflp, LP_DELAY);
-          update = 1;
-        }
-      /* Unset Min and Max delays if already set */
-      if (IS_PARAM_SET(iflp, LP_MM_DELAY))
-        {
-          iflp->min_delay = 0;
-          iflp->max_delay = 0;
-          UNSET_PARAM(iflp, LP_MM_DELAY);
-          update = 1;
-        }
-      break;
-    case 2:
-      vty_out (vty, "You should specify both Minimum and Maximum delay with Average delay%s",
-               VTY_NEWLINE);
-      return CMD_WARNING;
-    break;
-    case 3:
-      VTY_GET_ULONG("minimum delay", low, argv[3]->arg);
-      VTY_GET_ULONG("maximum delay", high, argv[5]->arg);
-      /* Check new delays value coherency */
-      if (delay <= low || delay >= high)
-        {
-          vty_out (vty, "Average delay should be comprise between Min (%d) and Max (%d) delay%s",
-                   low, high, VTY_NEWLINE);
-          return CMD_WARNING;
-        }
-      /* Update Delays if needed */
-      if (IS_PARAM_UNSET(iflp, LP_DELAY)
-          || IS_PARAM_UNSET(iflp, LP_MM_DELAY)
-          || iflp->av_delay != delay
-          || iflp->min_delay != low
-          || iflp->max_delay != high)
-        {
-          iflp->av_delay = delay;
-          SET_PARAM(iflp, LP_DELAY);
-          iflp->min_delay = low;
-          iflp->max_delay = high;
-          SET_PARAM(iflp, LP_MM_DELAY);
-          update = 1;
-        }
-      break;
-    default:
-      return CMD_WARNING;
-      break;
-    }
+  if (argc == 2)
+  {
+    /* Check new delay value against old Min and Max delays if set */
+    if (IS_PARAM_SET(iflp, LP_MM_DELAY)
+        && (delay <= iflp->min_delay || delay >= iflp->max_delay))
+      {
+        vty_out (vty, "Average delay should be comprise between Min (%d) and Max (%d) delay%s",
+                 iflp->min_delay, iflp->max_delay, VTY_NEWLINE);
+        return CMD_WARNING;
+      }
+    /* Update delay if value is not set or change */
+    if (IS_PARAM_UNSET(iflp, LP_DELAY)|| iflp->av_delay != delay)
+      {
+        iflp->av_delay = delay;
+        SET_PARAM(iflp, LP_DELAY);
+        update = 1;
+      }
+    /* Unset Min and Max delays if already set */
+    if (IS_PARAM_SET(iflp, LP_MM_DELAY))
+      {
+        iflp->min_delay = 0;
+        iflp->max_delay = 0;
+        UNSET_PARAM(iflp, LP_MM_DELAY);
+        update = 1;
+      }
+  }
+  else
+  {
+    /* Check new delays value coherency */
+    if (delay <= low || delay >= high)
+      {
+        vty_out (vty, "Average delay should be comprise between Min (%d) and Max (%d) delay%s",
+                 low, high, VTY_NEWLINE);
+        return CMD_WARNING;
+      }
+    /* Update Delays if needed */
+    if (IS_PARAM_UNSET(iflp, LP_DELAY)
+        || IS_PARAM_UNSET(iflp, LP_MM_DELAY)
+        || iflp->av_delay != delay
+        || iflp->min_delay != low
+        || iflp->max_delay != high)
+      {
+        iflp->av_delay = delay;
+        SET_PARAM(iflp, LP_DELAY);
+        iflp->min_delay = low;
+        iflp->max_delay = high;
+        SET_PARAM(iflp, LP_MM_DELAY);
+        update = 1;
+      }
+  }
 
   /* force protocols to update LINK STATE due to parameters change */
   if (update == 1 && if_is_operative (ifp))
@@ -2195,7 +2151,6 @@ DEFUN (link_params_delay,
   return CMD_SUCCESS;
 }
 
-
 DEFUN (no_link_params_delay,
        no_link_params_delay_cmd,
        "no delay",
index 88036f44bd0644223c9ec92cfea71fe61e488bea..ddcffb5d4dbc22d579cd62f5458e976634856e52 100644 (file)
@@ -181,19 +181,9 @@ zebra_static_ipv4 (struct vty *vty, safi_t safi, int add_cmd,
 }
 
 /* Static unicast routes for multicast RPF lookup. */
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "ip mroute A.B.C.D/M (A.B.C.D|INTERFACE)",
- *     IP_STR
- *     "Configure static unicast route into MRIB for multicast RPF lookup\n"
- *     "IP destination prefix (e.g. 10.0.0.0/8)\n"
- *     "Nexthop address\n"
- *     "Nexthop interface name\n"
- *
- */
 DEFUN (ip_mroute_dist,
        ip_mroute_dist_cmd,
-       "ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> (1-255)",
+       "ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> [(1-255)]",
        IP_STR
        "Configure static unicast route into MRIB for multicast RPF lookup\n"
        "IP destination prefix (e.g. 10.0.0.0/8)\n"
@@ -201,27 +191,16 @@ DEFUN (ip_mroute_dist,
        "Nexthop interface name\n"
        "Distance\n")
 {
-  int idx_ipv4_prefixlen = 2;
-  int idx_ipv4_ifname = 3;
-  int idx_number = 4;
-  return zebra_static_ipv4 (vty, SAFI_MULTICAST, 1, argv[idx_ipv4_prefixlen]->arg, NULL, argv[idx_ipv4_ifname]->arg, NULL, NULL, argc > 2 ? argv[idx_number]->arg : NULL, NULL);
-}
+  char *destprefix = argv[2]->arg;
+  char *nexthop = argv[3]->arg;
+  char *distance = (argc == 5) ? argv[4]->arg : NULL;
 
+  return zebra_static_ipv4 (vty, SAFI_MULTICAST, 1, destprefix, NULL, nexthop, NULL, NULL, distance, NULL);
+}
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ip mroute A.B.C.D/M (A.B.C.D|INTERFACE)",
- *     NO_STR
- *     IP_STR
- *     "Configure static unicast route into MRIB for multicast RPF lookup\n"
- *     "IP destination prefix (e.g. 10.0.0.0/8)\n"
- *     "Nexthop address\n"
- *     "Nexthop interface name\n"
- *
- */
 DEFUN (no_ip_mroute_dist,
        no_ip_mroute_dist_cmd,
-       "no ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> (1-255)",
+       "no ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> [(1-255)]",
        IP_STR
        "Configure static unicast route into MRIB for multicast RPF lookup\n"
        "IP destination prefix (e.g. 10.0.0.0/8)\n"
@@ -229,12 +208,12 @@ DEFUN (no_ip_mroute_dist,
        "Nexthop interface name\n"
        "Distance\n")
 {
-  int idx_ipv4_prefixlen = 3;
-  int idx_ipv4_ifname = 4;
-  int idx_number = 5;
-  return zebra_static_ipv4 (vty, SAFI_MULTICAST, 0, argv[idx_ipv4_prefixlen]->arg, NULL, argv[idx_ipv4_ifname]->arg, NULL, NULL, argc > 2 ? argv[idx_number]->arg : NULL, NULL);
-}
+  char *destprefix = argv[2]->arg;
+  char *nexthop = argv[3]->arg;
+  char *distance = (argc == 5) ? argv[4]->arg : NULL;
 
+  return zebra_static_ipv4 (vty, SAFI_MULTICAST, 0, destprefix, NULL, nexthop, NULL, NULL, distance, NULL);
+}
 
 DEFUN (ip_multicast_mode,
        ip_multicast_mode_cmd,
@@ -248,17 +227,17 @@ DEFUN (ip_multicast_mode,
        "Lookup both, use entry with lower distance\n"
        "Lookup both, use entry with longer prefix\n")
 {
-  int idx_rpf_lookup_mode = 3;
+  char *mode = argv[3]->text;
 
-  if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "u", 1))
+  if (strmatch (mode, "urib-only"))
     multicast_mode_ipv4_set (MCAST_URIB_ONLY);
-  else if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "mrib-o", 6))
+  else if (strmatch (mode, "mrib-only"))
     multicast_mode_ipv4_set (MCAST_MRIB_ONLY);
-  else if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "mrib-t", 6))
+  else if (strmatch (mode, "mrib-then-urib"))
     multicast_mode_ipv4_set (MCAST_MIX_MRIB_FIRST);
-  else if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "low", 3))
+  else if (strmatch (mode, "lower-distance"))
     multicast_mode_ipv4_set (MCAST_MIX_DISTANCE);
-  else if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "lon", 3))
+  else if (strmatch (mode, "longer-prefix"))
     multicast_mode_ipv4_set (MCAST_MIX_PFXLEN);
   else
     {
@@ -269,18 +248,9 @@ DEFUN (ip_multicast_mode,
   return CMD_SUCCESS;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ip multicast rpf-lookup-mode",
- *     NO_STR
- *     IP_STR
- *     "Multicast options\n"
- *     "RPF lookup behavior\n"
- *
- */
 DEFUN (no_ip_multicast_mode,
        no_ip_multicast_mode_cmd,
-       "no ip multicast rpf-lookup-mode <urib-only|mrib-only|mrib-then-urib|lower-distance|longer-prefix>",
+       "no ip multicast rpf-lookup-mode [<urib-only|mrib-only|mrib-then-urib|lower-distance|longer-prefix>]",
        NO_STR
        IP_STR
        "Multicast options\n"
@@ -2776,23 +2746,15 @@ DEFUN (no_ipv6_route_ifname_flags,
                           tag, distance, vrf);
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show ipv6 route  " VRF_CMD_STR " [json]",
- *     SHOW_STR
- *     IP_STR
- *     "IPv6 routing table\n"
- *     VRF_CMD_HELP_STR
- *
- */
 DEFUN (show_ipv6_route,
        show_ipv6_route_cmd,
-       "show ipv6 route [json]",
+       "show ipv6 route [vrf NAME] [json]",
        SHOW_STR
        IP_STR
-       "IPv6 routing table\n")
+       "IPv6 routing table\n"
+       VRF_CMD_HELP_STR
+       "Output JSON\n")
 {
-  int idx_json = 3;
   struct route_table *table;
   struct route_node *rn;
   struct rib *rib;
@@ -2802,33 +2764,36 @@ DEFUN (show_ipv6_route,
   char buf[BUFSIZ];
   json_object *json = NULL;
   json_object *json_prefix = NULL;
-  u_char uj = use_json(argc, argv);
 
-  if (argc > 0 && argv[idx_json]->arg && strcmp(argv[idx_json]->arg, "json") != 0)
-    {
-     if (!(zvrf = zebra_vrf_list_lookup_by_name (argv[idx_json]->arg)))
-        {
-          if (uj)
-            vty_out (vty, "{}%s", VTY_NEWLINE);
-          else
-            vty_out (vty, "vrf %s not defined%s", argv[idx_json]->arg, VTY_NEWLINE);
-          return CMD_SUCCESS;
-        }
+  int vrf = (argc > 3 && strmatch (argv[3]->text, "vrf"));
+  int uj = vrf ? argc == 6 : argc == 4;
+  char *vrfname = vrf ? argv[4]->arg : NULL;
 
-      if (zvrf->vrf_id == VRF_UNKNOWN)
-        {
-          if (uj)
-            vty_out (vty, "{}%s", VTY_NEWLINE);
-          else
-            vty_out (vty, "vrf %s inactive%s", argv[idx_json]->arg, VTY_NEWLINE);
-          return CMD_SUCCESS;
-        }
-      else
-        vrf_id = zvrf->vrf_id;
-    }
+  if (vrf)
+  {
+    if (!(zvrf = zebra_vrf_list_lookup_by_name (vrfname)))
+       {
+         if (uj)
+           vty_out (vty, "{}%s", VTY_NEWLINE);
+         else
+           vty_out (vty, "vrf %s not defined%s", vrfname, VTY_NEWLINE);
+         return CMD_SUCCESS;
+       }
+
+     if (zvrf->vrf_id == VRF_UNKNOWN)
+       {
+         if (uj)
+           vty_out (vty, "{}%s", VTY_NEWLINE);
+         else
+           vty_out (vty, "vrf %s inactive%s", vrfname, VTY_NEWLINE);
+         return CMD_SUCCESS;
+       }
+     else
+       vrf_id = zvrf->vrf_id;
+  }
 
   table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
-  if (! table)
+  if (!table)
     {
       if (uj)
         vty_out (vty, "{}%s", VTY_NEWLINE);
@@ -2981,26 +2946,15 @@ DEFUN (show_ipv6_route_prefix_longer,
   return CMD_SUCCESS;
 }
 
-
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show ipv6 route "  VRF_CMD_STR "  " QUAGGA_IP6_REDIST_STR_ZEBRA,
- *     SHOW_STR
- *     IP_STR
- *     "IP routing table\n"
- *     VRF_CMD_HELP_STR
- *     QUAGGA_IP6_REDIST_HELP_STR_ZEBRA
- *
- */
 DEFUN (show_ipv6_route_protocol,
        show_ipv6_route_protocol_cmd,
-       "show ipv6 route  <kernel|connected|static|ripng|ospf6|isis|bgp|table>",
+       "show ipv6 route [vrf NAME] <kernel|connected|static|ripng|ospf6|isis|bgp|table>",
        SHOW_STR
        IP_STR
        "IP routing table\n"
+       VRF_CMD_HELP_STR
        QUAGGA_IP6_REDIST_HELP_STR_ZEBRA)
 {
-  int idx_protocol = 3;
   int type;
   struct route_table *table;
   struct route_node *rn;
@@ -3008,13 +2962,16 @@ DEFUN (show_ipv6_route_protocol,
   int first = 1;
   vrf_id_t vrf_id = VRF_DEFAULT;
 
-  if ( argc >1 )
+  char *vrfname = (argc == 6) ? argv[4]->arg : NULL;
+  char *proto = argv[argc - 1]->text;
+
+  if (vrfname)
     {
-      VRF_GET_ID (vrf_id, argv[4]->arg);
-      type = proto_redistnum (AFI_IP6, argv[idx_protocol]->arg);
+      VRF_GET_ID (vrf_id, vrfname);
+      type = proto_redistnum (AFI_IP6, proto);
     }
   else
-    type = proto_redistnum (AFI_IP6, argv[4]->arg);
+    type = proto_redistnum (AFI_IP6, proto);
 
   if (type < 0)
     {
@@ -3731,65 +3688,9 @@ zebra_ip_config (struct vty *vty)
   return write;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "ip import-table <1-252>",
- *     IP_STR
- *     "import routes from non-main kernel table\n"
- *     "kernel routing table id\n"
- *
- */
 DEFUN (ip_zebra_import_table_distance,
        ip_zebra_import_table_distance_cmd,
-       "ip import-table (1-252) distance (1-255)",
-       IP_STR
-       "import routes from non-main kernel table\n"
-       "kernel routing table id\n"
-       "Distance for imported routes\n"
-       "Default distance value\n")
-{
-  int idx_number = 2;
-  int idx_number_2 = 4;
-  u_int32_t table_id = 0;
-  int distance = ZEBRA_TABLE_DISTANCE_DEFAULT;
-
-  if (argc)
-    VTY_GET_INTEGER("table", table_id, argv[idx_number]->arg);
-
-  if (!is_zebra_valid_kernel_table(table_id))
-    {
-      vty_out(vty, "Invalid routing table ID, %d. Must be in range 1-252%s",
-             table_id, VTY_NEWLINE);
-      return CMD_WARNING;
-    }
-
-  if (is_zebra_main_routing_table(table_id))
-    {
-      vty_out(vty, "Invalid routing table ID, %d. Must be non-default table%s",
-             table_id, VTY_NEWLINE);
-      return CMD_WARNING;
-    }
-
-  if (argc > 1)
-    VTY_GET_INTEGER_RANGE("distance", distance, argv[idx_number_2]->arg, 1, 255);
-  return (zebra_import_table(AFI_IP, table_id, distance, NULL, 1));
-
-}
-
-
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "ip import-table <1-252> route-map WORD",
- *     IP_STR
- *     "import routes from non-main kernel table\n"
- *     "kernel routing table id\n"
- *     "route-map for filtering\n"
- *     "route-map name\n"
- *
- */
-DEFUN (ip_zebra_import_table_distance_routemap,
-       ip_zebra_import_table_distance_routemap_cmd,
-       "ip import-table (1-252) distance (1-255) route-map WORD",
+       "ip import-table (1-252) [distance (1-255)] [route-map WORD>]",
        IP_STR
        "import routes from non-main kernel table\n"
        "kernel routing table id\n"
@@ -3798,15 +3699,14 @@ DEFUN (ip_zebra_import_table_distance_routemap,
        "route-map for filtering\n"
        "route-map name\n")
 {
-  int idx_number = 2;
-  int idx_number_2 = 4;
-  int idx_word = 6;
   u_int32_t table_id = 0;
-  int distance = ZEBRA_TABLE_DISTANCE_DEFAULT;
-  const char *rmap_name;
 
-  if (argc)
-    VTY_GET_INTEGER("table", table_id, argv[idx_number]->arg);
+  VTY_GET_INTEGER("table", table_id, argv[2]->arg);
+  int distance = ZEBRA_TABLE_DISTANCE_DEFAULT;
+  char *rmap = strmatch (argv[argc - 2]->text, "route-map") ?
+               XSTRDUP(MTYPE_ROUTE_MAP_NAME, argv[argc - 1]->arg) : NULL;
+  if (argc == 7 || (argc == 5 && !rmap))
+    VTY_GET_INTEGER_RANGE("distance", distance, argv[4]->arg, 1, 255);
 
   if (!is_zebra_valid_kernel_table(table_id))
     {
@@ -3818,44 +3718,23 @@ DEFUN (ip_zebra_import_table_distance_routemap,
   if (is_zebra_main_routing_table(table_id))
     {
       vty_out(vty, "Invalid routing table ID, %d. Must be non-default table%s",
-             table_id, VTY_NEWLINE);
+              table_id, VTY_NEWLINE);
       return CMD_WARNING;
     }
 
-  if (argc > 2)
-    {
-      VTY_GET_INTEGER_RANGE("distance", distance, argv[idx_number_2]->arg, 1, 255);
-      rmap_name =  XSTRDUP (MTYPE_ROUTE_MAP_NAME, argv[idx_word]->arg);
-    }
-  else
-    rmap_name = XSTRDUP (MTYPE_ROUTE_MAP_NAME, argv[idx_number_2]->arg);
-
-  return (zebra_import_table(AFI_IP, table_id, distance, rmap_name, 1));
+  return (zebra_import_table(AFI_IP, table_id, distance, rmap, 1));
 }
 
-
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ip import-table <1-252> distance <1-255> {route-map NAME}",
- *     IP_STR
- *     "import routes from non-main kernel table to main table"
- *     "kernel routing table id\n"
- *     "distance to be used\n"
- *
- */
 DEFUN (no_ip_zebra_import_table,
        no_ip_zebra_import_table_cmd,
-       "no ip import-table (1-252) [route-map NAME]",
+       "no ip import-table (1-252) [distance (1-255)] [route-map NAME]",
        NO_STR
        IP_STR
        "import routes from non-main kernel table\n"
        "kernel routing table id\n")
 {
-  int idx_number = 3;
   u_int32_t table_id = 0;
-
-  if (argc)
-    VTY_GET_INTEGER("table", table_id, argv[idx_number]->arg);
+  VTY_GET_INTEGER("table", table_id, argv[3]->arg);
 
   if (!is_zebra_valid_kernel_table(table_id))
     {
@@ -3877,7 +3756,6 @@ DEFUN (no_ip_zebra_import_table,
   return (zebra_import_table(AFI_IP, table_id, 0, NULL, 0));
 }
 
-
 static int
 config_write_protocol (struct vty *vty)
 {
@@ -3934,7 +3812,6 @@ zebra_vty_init (void)
   install_element (CONFIG_NODE, &no_ip_route_mask_cmd);
   install_element (CONFIG_NODE, &no_ip_route_mask_flags2_cmd);
   install_element (CONFIG_NODE, &ip_zebra_import_table_distance_cmd);
-  install_element (CONFIG_NODE, &ip_zebra_import_table_distance_routemap_cmd);
   install_element (CONFIG_NODE, &no_ip_zebra_import_table_cmd);
 
   install_element (VIEW_NODE, &show_vrf_cmd);