]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: refactor rtadv.c
authorQuentin Young <qlyoung@cumulusnetworks.com>
Sun, 25 Sep 2016 02:13:43 +0000 (02:13 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Sun, 25 Sep 2016 02:13:43 +0000 (02:13 +0000)
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
zebra/rtadv.c

index ec4736463c7b08fb9b4e3a1ade786fd5bd28e42b..7edba559537122d2e80f1a4e9529e093dc5a28b8 100644 (file)
@@ -1,4 +1,5 @@
 /* Router advertisement
+ * Copyright (C) 2016 Cumulus Networks
  * Copyright (C) 2005 6WIND <jean-mickael.guerin@6wind.com>
  * Copyright (C) 1999 Kunihiro Ishiguro
  *
@@ -987,29 +988,16 @@ DEFUN (ipv6_nd_ra_interval,
   return CMD_SUCCESS;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ipv6 nd ra-interval <1-1800>",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Router Advertisement interval\n"
- *
- * "no ipv6 nd ra-interval msec <1-1800000>",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Router Advertisement interval\n"
- *     "Router Advertisement interval in milliseconds\n"
- *
- */
 DEFUN (no_ipv6_nd_ra_interval,
        no_ipv6_nd_ra_interval_cmd,
-       "no ipv6 nd ra-interval",
+       "no ipv6 nd ra-interval [<(1-1800)|msec (1-1800000)>]",
        NO_STR
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
-       "Router Advertisement interval\n")
+       "Router Advertisement interval\n"
+       "Router Advertisement interval in seconds\n"
+       "Specify millisecond router advertisement interval\n"
+       "Router Advertisement interval in milliseconds\n")
 {
   struct interface *ifp;
   struct zebra_if *zif;
@@ -1031,8 +1019,6 @@ DEFUN (no_ipv6_nd_ra_interval,
   return CMD_SUCCESS;
 }
 
-
-
 DEFUN (ipv6_nd_ra_lifetime,
        ipv6_nd_ra_lifetime_cmd,
        "ipv6 nd ra-lifetime (0-9000)",
@@ -1066,23 +1052,14 @@ DEFUN (ipv6_nd_ra_lifetime,
   return CMD_SUCCESS;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ipv6 nd ra-lifetime <0-9000>",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Router lifetime\n"
- *     "Router lifetime in seconds (0 stands for a non-default gw)\n"
- *
- */
 DEFUN (no_ipv6_nd_ra_lifetime,
        no_ipv6_nd_ra_lifetime_cmd,
-       "no ipv6 nd ra-lifetime",
+       "no ipv6 nd ra-lifetime [(0-9000)]",
        NO_STR
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
-       "Router lifetime\n")
+       "Router lifetime\n"
+       "Router lifetime in seconds (0 stands for a non-default gw)\n")
 {
   struct interface *ifp;
   struct zebra_if *zif;
@@ -1095,7 +1072,6 @@ DEFUN (no_ipv6_nd_ra_lifetime,
   return CMD_SUCCESS;
 }
 
-
 DEFUN (ipv6_nd_reachable_time,
        ipv6_nd_reachable_time_cmd,
        "ipv6 nd reachable-time (1-3600000)",
@@ -1111,23 +1087,14 @@ DEFUN (ipv6_nd_reachable_time,
   return CMD_SUCCESS;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ipv6 nd reachable-time <1-3600000>",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Reachable time\n"
- *     "Reachable time in milliseconds\n"
- *
- */
 DEFUN (no_ipv6_nd_reachable_time,
        no_ipv6_nd_reachable_time_cmd,
-       "no ipv6 nd reachable-time",
+       "no ipv6 nd reachable-time [(1-3600000)]",
        NO_STR
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
-       "Reachable time\n")
+       "Reachable time\n"
+       "Reachable time in milliseconds\n")
 {
   struct interface *ifp;
   struct zebra_if *zif;
@@ -1140,7 +1107,6 @@ DEFUN (no_ipv6_nd_reachable_time,
   return CMD_SUCCESS;
 }
 
-
 DEFUN (ipv6_nd_homeagent_preference,
        ipv6_nd_homeagent_preference_cmd,
        "ipv6 nd home-agent-preference (0-65535)",
@@ -1156,23 +1122,14 @@ DEFUN (ipv6_nd_homeagent_preference,
   return CMD_SUCCESS;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ipv6 nd home-agent-preference <0-65535>",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Home Agent preference\n"
- *     "preference value (default is 0, least preferred)\n"
- *
- */
 DEFUN (no_ipv6_nd_homeagent_preference,
        no_ipv6_nd_homeagent_preference_cmd,
-       "no ipv6 nd home-agent-preference",
+       "no ipv6 nd home-agent-preference [(0-65535)]",
        NO_STR
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
-       "Home Agent preference\n")
+       "Home Agent preference\n"
+       "preference value (default is 0, least preferred)\n")
 {
   struct interface *ifp;
   struct zebra_if *zif;
@@ -1185,7 +1142,6 @@ DEFUN (no_ipv6_nd_homeagent_preference,
   return CMD_SUCCESS;
 }
 
-
 DEFUN (ipv6_nd_homeagent_lifetime,
        ipv6_nd_homeagent_lifetime_cmd,
        "ipv6 nd home-agent-lifetime (0-65520)",
@@ -1201,23 +1157,14 @@ DEFUN (ipv6_nd_homeagent_lifetime,
   return CMD_SUCCESS;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ipv6 nd home-agent-lifetime <0-65520>",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Home Agent lifetime\n"
- *     "Home Agent lifetime in seconds (0 to track ra-lifetime)\n"
- *
- */
 DEFUN (no_ipv6_nd_homeagent_lifetime,
        no_ipv6_nd_homeagent_lifetime_cmd,
-       "no ipv6 nd home-agent-lifetime",
+       "no ipv6 nd home-agent-lifetime [(0-65520)]",
        NO_STR
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
-       "Home Agent lifetime\n")
+       "Home Agent lifetime\n"
+       "Home Agent lifetime in seconds (0 to track ra-lifetime)\n")
 {
   struct interface *ifp;
   struct zebra_if *zif;
@@ -1230,7 +1177,6 @@ DEFUN (no_ipv6_nd_homeagent_lifetime,
   return CMD_SUCCESS;
 }
 
-
 DEFUN (ipv6_nd_managed_config_flag,
        ipv6_nd_managed_config_flag_cmd,
        "ipv6 nd managed-config-flag",
@@ -1379,142 +1325,9 @@ DEFUN (no_ipv6_nd_other_config_flag,
   return CMD_SUCCESS;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "ipv6 nd prefix X:X::X:X/M (no-autoconfig|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Do not use prefix for autoconfiguration\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
- *     "(<0-4294967295>|infinite)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (off-link|) (no-autoconfig|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Do not use prefix for onlink determination\n"
- *     "Do not use prefix for autoconfiguration\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (router-address|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Set Router Address flag\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (no-autoconfig|) (off-link|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Do not use prefix for autoconfiguration\n"
- *     "Do not use prefix for onlink determination\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
- *     "(<0-4294967295>|infinite) (router-address|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Set Router Address flag\n"
- *
- * "ipv6 nd prefix X:X::X:X/M",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
- *     "(<0-4294967295>|infinite) (off-link|) (no-autoconfig|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for onlink determination\n"
- *     "Do not use prefix for autoconfiguration\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
- *     "(<0-4294967295>|infinite) (no-autoconfig|) (off-link|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for autoconfiguration\n"
- *     "Do not use prefix for onlink determination\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (off-link|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Do not use prefix for onlink determination\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
- *     "(<0-4294967295>|infinite) (no-autoconfig|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for autoconfiguration"
- *
- * "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
- *     "(<0-4294967295>|infinite) (off-link|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for onlink determination\n"
- *
- * "ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) "
- *     "(<0-4294967295>|infinite) (no-autoconfig|) (off-link|) (router-address|)",
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for autoconfiguration\n"
- *     "Do not use prefix for onlink determination\n"
- *     "Set Router Address flag\n"
- *
- */
 DEFUN (ipv6_nd_prefix,
        ipv6_nd_prefix_cmd,
-       "ipv6 nd prefix X:X::X:X/M <(0-4294967295)|infinite> <(0-4294967295)|infinite> <off-link> <no-autoconfig> <router-address>",
+       "ipv6 nd prefix X:X::X:X/M [<(0-4294967295)|infinite> <(0-4294967295)|infinite>] [<router-address|off-link [no-autoconfig]|no-autoconfig [off-link]>]",
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Prefix information\n"
@@ -1523,16 +1336,38 @@ DEFUN (ipv6_nd_prefix,
        "Infinite valid lifetime\n"
        "Preferred lifetime in seconds\n"
        "Infinite preferred lifetime\n"
+       "Set Router Address flag\n"
        "Do not use prefix for onlink determination\n"
        "Do not use prefix for autoconfiguration\n"
-       "Set Router Address flag\n")
+       "Do not use prefix for autoconfiguration\n"
+       "Do not use prefix for onlink determination\n")
 {
-  int idx_ipv6_prefixlen = 3;
-  int idx_number_infinite = 4;
-  int idx_number_infinite_2 = 5;
-  int i;
+  /* prelude */
+  char *prefix = argv[3]->arg;
+  int lifetimes = (argc > 4) && (argv[4]->type == RANGE_TKN || strmatch (argv[4]->text, "infinite"));
+  int routeropts = lifetimes ? argc > 6 : argc > 4;
+
+  int idx_routeropts = routeropts ? (lifetimes ? 6 : 4) : 0;
+
+  char *lifetime = NULL, *preflifetime = NULL;
+  int routeraddr = 0, offlink = 0, noautoconf = 0;
+  if (lifetimes)
+  {
+    lifetime     = argv[4]->type == RANGE_TKN ? argv[4]->arg : argv[4]->text;
+    preflifetime = argv[5]->type == RANGE_TKN ? argv[5]->arg : argv[5]->text;
+  }
+  if (routeropts)
+  {
+    routeraddr = strmatch (argv[idx_routeropts]->text, "router-address");
+    if (!routeraddr)
+    {
+      offlink    = (argc > idx_routeropts + 1 || strmatch (argv[idx_routeropts]->text, "off-link"));
+      noautoconf = (argc > idx_routeropts + 1 || strmatch (argv[idx_routeropts]->text, "no-autoconfig"));
+    }
+  }
+
+  /* business */
   int ret;
-  int cursor = 1;
   struct interface *ifp;
   struct zebra_if *zebra_if;
   struct rtadv_prefix rp;
@@ -1540,226 +1375,64 @@ DEFUN (ipv6_nd_prefix,
   ifp = (struct interface *) vty->index;
   zebra_if = ifp->info;
 
-  ret = str2prefix_ipv6 (argv[idx_ipv6_prefixlen]->arg, &rp.prefix);
+  ret = str2prefix_ipv6 (prefix, &rp.prefix);
   if (!ret)
     {
       vty_out (vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
       return CMD_WARNING;
     }
   apply_mask_ipv6 (&rp.prefix); /* RFC4861 4.6.2 */
-  rp.AdvOnLinkFlag = 1;
-  rp.AdvAutonomousFlag = 1;
-  rp.AdvRouterAddressFlag = 0;
+  rp.AdvOnLinkFlag = !offlink;
+  rp.AdvAutonomousFlag = !noautoconf;
+  rp.AdvRouterAddressFlag = routeraddr;
   rp.AdvValidLifetime = RTADV_VALID_LIFETIME;
   rp.AdvPreferredLifetime = RTADV_PREFERRED_LIFETIME;
 
-  if (argc > 1)
-    {
-      if ((isdigit((unsigned char)argv[idx_number_infinite]->arg[0]))
-         || strncmp (argv[idx_number_infinite]->arg, "i", 1) == 0)
-       {
-         if ( strncmp (argv[idx_number_infinite]->arg, "i", 1) == 0)
-           rp.AdvValidLifetime = UINT32_MAX;
-         else
-           rp.AdvValidLifetime = (u_int32_t) strtoll (argv[idx_number_infinite]->arg,
-               (char **)NULL, 10);
-      
-         if ( strncmp (argv[idx_number_infinite_2]->arg, "i", 1) == 0)
-           rp.AdvPreferredLifetime = UINT32_MAX;
-         else
-           rp.AdvPreferredLifetime = (u_int32_t) strtoll (argv[idx_number_infinite_2]->arg,
-               (char **)NULL, 10);
-
-         if (rp.AdvPreferredLifetime > rp.AdvValidLifetime)
-           {
-             vty_out (vty, "Invalid preferred lifetime%s", VTY_NEWLINE);
-             return CMD_WARNING;
-           }
-         cursor = cursor + 2;
-       }
-      if (argc > cursor)
-       {
-         for (i = cursor; i < argc; i++)
-           {
-             if (strncmp (argv[i], "of", 2) == 0)
-               rp.AdvOnLinkFlag = 0;
-             if (strncmp (argv[i], "no", 2) == 0)
-               rp.AdvAutonomousFlag = 0;
-             if (strncmp (argv[i], "ro", 2) == 0)
-               rp.AdvRouterAddressFlag = 1;
-           }
-       }
-    }
+  if (lifetimes)
+  {
+    rp.AdvValidLifetime     = strmatch (lifetime, "infinite") ? UINT32_MAX : strtoll (lifetime, NULL, 10);
+    rp.AdvPreferredLifetime = strmatch (preflifetime, "infinite") ? UINT32_MAX : strtoll (preflifetime, NULL, 10);
+    if (rp.AdvPreferredLifetime > rp.AdvValidLifetime)
+      {
+        vty_out (vty, "Invalid preferred lifetime%s", VTY_NEWLINE);
+        return CMD_WARNING;
+      }
+  }
 
   rtadv_prefix_set (zebra_if, &rp);
 
   return CMD_SUCCESS;
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) (<0-4294967295>|infinite) (no-autoconfig|) (off-link|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for autoconfiguration\n"
- *     "Do not use prefix for onlink determination\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) (<0-4294967295>|infinite) (no-autoconfig|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for autoconfiguration"
- *
- * "no ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) (<0-4294967295>|infinite) (off-link|) (no-autoconfig|) (router-address|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for onlink determination\n"
- *     "Do not use prefix for autoconfiguration\n"
- *     "Set Router Address flag\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) (<0-4294967295>|infinite) (off-link|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for onlink determination\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) (<0-4294967295>|infinite) (no-autoconfig|) (off-link|) (router-address|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Do not use prefix for autoconfiguration\n"
- *     "Do not use prefix for onlink determination\n"
- *     "Set Router Address flag\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (router-address|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Set Router Address flag\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (off-link|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Do not use prefix for onlink determination\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (no-autoconfig|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Do not use prefix for autoconfiguration\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (no-autoconfig|) (off-link|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Do not use prefix for autoconfiguration\n"
- *     "Do not use prefix for onlink determination\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (off-link|) (no-autoconfig|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Do not use prefix for onlink determination\n"
- *     "Do not use prefix for autoconfiguration\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) (<0-4294967295>|infinite) (router-address|)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *     "Set Router Address flag\n"
- *
- * "no ipv6 nd prefix X:X::X:X/M (<0-4294967295>|infinite) (<0-4294967295>|infinite)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Prefix information\n"
- *     "IPv6 prefix\n"
- *     "Valid lifetime in seconds\n"
- *     "Infinite valid lifetime\n"
- *     "Preferred lifetime in seconds\n"
- *     "Infinite preferred lifetime\n"
- *
- */
 DEFUN (no_ipv6_nd_prefix,
        no_ipv6_nd_prefix_cmd,
-       "no ipv6 nd prefix IPV6PREFIX",
-       NO_STR
+       "no ipv6 nd prefix X:X::X:X/M [<(0-4294967295)|infinite> <(0-4294967295)|infinite>] [<router-address|off-link [no-autoconfig]|no-autoconfig [off-link]>]",
+        NO_STR
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
        "Prefix information\n"
-       "IPv6 prefix\n")
+       "IPv6 prefix\n"
+       "Valid lifetime in seconds\n"
+       "Infinite valid lifetime\n"
+       "Preferred lifetime in seconds\n"
+       "Infinite preferred lifetime\n"
+       "Set Router Address flag\n"
+       "Do not use prefix for onlink determination\n"
+       "Do not use prefix for autoconfiguration\n"
+       "Do not use prefix for autoconfiguration\n"
+       "Do not use prefix for onlink determination\n")
 {
   int ret;
   struct interface *ifp;
   struct zebra_if *zebra_if;
   struct rtadv_prefix rp;
 
+  char *prefix = argv[4]->arg;
+
   ifp = (struct interface *) vty->index;
   zebra_if = ifp->info;
 
-  ret = str2prefix_ipv6 (argv[0], &rp.prefix);
+  ret = str2prefix_ipv6 (prefix, &rp.prefix);
   if (!ret)
     {
       vty_out (vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
@@ -1770,25 +1443,13 @@ DEFUN (no_ipv6_nd_prefix,
   ret = rtadv_prefix_reset (zebra_if, &rp);
   if (!ret)
     {
-      vty_out (vty, "Non-exist IPv6 prefix%s", VTY_NEWLINE);
+      vty_out (vty, "Non-existant IPv6 prefix%s", VTY_NEWLINE);
       return CMD_WARNING;
     }
 
   return CMD_SUCCESS;
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
 DEFUN (ipv6_nd_router_preference,
        ipv6_nd_router_preference_cmd,
        "ipv6 nd router-preference <high|medium|low>",
@@ -1820,25 +1481,16 @@ DEFUN (ipv6_nd_router_preference,
   return CMD_ERR_NO_MATCH;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ipv6 nd router-preference (high|medium|low)",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Default router preference\n"
- *     "High default router preference\n"
- *     "Low default router preference\n"
- *     "Medium default router preference (default)\n"
- *
- */
 DEFUN (no_ipv6_nd_router_preference,
        no_ipv6_nd_router_preference_cmd,
-       "no ipv6 nd router-preference",
+       "no ipv6 nd router-preference [<high|medium|low>]",
        NO_STR
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
-       "Default router preference\n")
+       "Default router preference\n"
+       "High default router preference\n"
+       "Medium default router preference (default)\n"
+       "Low default router preference\n")
 {
   struct interface *ifp;
   struct zebra_if *zif;
@@ -1851,7 +1503,6 @@ DEFUN (no_ipv6_nd_router_preference,
   return CMD_SUCCESS;
 }
 
-
 DEFUN (ipv6_nd_mtu,
        ipv6_nd_mtu_cmd,
        "ipv6 nd mtu (1-65535)",
@@ -1867,23 +1518,14 @@ DEFUN (ipv6_nd_mtu,
   return CMD_SUCCESS;
 }
 
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ipv6 nd mtu <1-65535>",
- *     NO_STR
- *     "Interface IPv6 config commands\n"
- *     "Neighbor discovery\n"
- *     "Advertised MTU\n"
- *     "MTU in bytes\n"
- *
- */
 DEFUN (no_ipv6_nd_mtu,
        no_ipv6_nd_mtu_cmd,
-       "no ipv6 nd mtu",
+       "no ipv6 nd mtu [(1-65535)]",
        NO_STR
        "Interface IPv6 config commands\n"
        "Neighbor discovery\n"
-       "Advertised MTU\n")
+       "Advertised MTU\n"
+       "MTU in bytes\n")
 {
   struct interface *ifp = (struct interface *) vty->index;
   struct zebra_if *zif = ifp->info;