]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Refactor 'no ipv6 route XXXX' for new cli
authorDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 26 Sep 2016 14:01:50 +0000 (10:01 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 26 Sep 2016 22:29:04 +0000 (18:29 -0400)
Refactor the 'no ipv6 route XXXX' commands to
work under the new cli and to collapse the code
to a much smaller set.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
zebra/zebra_vty.c

index ea911653fa047b80614d0778c1db779f4699317b..121c0c0c0494acf70a506ab0fb183207387a46c2 100644 (file)
@@ -2406,7 +2406,6 @@ static_config_ipv4 (struct vty *vty, safi_t safi, const char *cmd)
   return write;
 }
 
-#ifdef HAVE_IPV6
 /* General fucntion for IPv6 static route. */
 static int
 static_ipv6_func (struct vty *vty, int add_cmd, const char *dest_str,
@@ -2652,550 +2651,36 @@ DEFUN (ipv6_route_ifname_flags,
 
 DEFUN (no_ipv6_route,
        no_ipv6_route_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE>",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, NULL, NULL, NULL, NULL);
-}
-
-DEFUN (no_ipv6_route_tag,
-       no_ipv6_route_tag_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> tag (1-65535)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_number = 6;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, NULL, argv[idx_number]->arg, NULL, NULL);
-}
-
-DEFUN (no_ipv6_route_flags,
-       no_ipv6_route_flags_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> <reject|blackhole>",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_reject_blackhole = 5;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, argv[idx_reject_blackhole]->arg, NULL, NULL, NULL);
-}
-
-DEFUN (no_ipv6_route_flags_tag,
-       no_ipv6_route_flags_tag_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> <reject|blackhole> tag (1-65535)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_reject_blackhole = 5;
-  int idx_number = 7;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, argv[idx_reject_blackhole]->arg, argv[idx_number]->arg, NULL, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname,
-       no_ipv6_route_ifname_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, NULL, NULL, NULL, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname_tag,
-       no_ipv6_route_ifname_tag_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag (1-65535)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_number = 7;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, NULL, argv[idx_number]->arg, NULL, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname_flags,
-       no_ipv6_route_ifname_flags_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <reject|blackhole>",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_reject_blackhole = 6;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, argv[idx_reject_blackhole]->arg, NULL, NULL, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname_flags_tag,
-       no_ipv6_route_ifname_flags_tag_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <reject|blackhole> tag (1-65535)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_reject_blackhole = 6;
-  int idx_number = 8;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, argv[idx_reject_blackhole]->arg, argv[idx_number]->arg, NULL, NULL);
-}
-
-DEFUN (no_ipv6_route_pref,
-       no_ipv6_route_pref_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> (1-255)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Distance value for this prefix\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_number = 5;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, NULL, NULL, argv[idx_number]->arg, NULL);
-}
-
-DEFUN (no_ipv6_route_pref_tag,
-       no_ipv6_route_pref_tag_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> tag (1-65535) (1-255)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_number = 6;
-  int idx_number_2 = 7;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, NULL, argv[idx_number]->arg, argv[idx_number_2]->arg, NULL);
-}
-
-DEFUN (no_ipv6_route_flags_pref,
-       no_ipv6_route_flags_pref_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> <reject|blackhole> (1-255)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Distance value for this prefix\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_reject_blackhole = 5;
-  int idx_number = 6;
-  /* We do not care about argv[idx_reject_blackhole]->arg */
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, argv[idx_reject_blackhole]->arg, NULL, argv[idx_number]->arg, NULL);
-}
-
-DEFUN (no_ipv6_route_flags_pref_tag,
-       no_ipv6_route_flags_pref_tag_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> <reject|blackhole> tag (1-65535) (1-255)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_reject_blackhole = 5;
-  int idx_number = 7;
-  int idx_number_2 = 8;
-  /* We do not care about argv[idx_reject_blackhole]->arg */
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, argv[idx_reject_blackhole]->arg, argv[idx_number]->arg, argv[idx_number_2]->arg, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname_pref,
-       no_ipv6_route_ifname_pref_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (1-255)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Distance value for this prefix\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_number = 6;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, NULL, NULL, argv[idx_number]->arg, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname_pref_tag,
-       no_ipv6_route_ifname_pref_tag_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag (1-65535) (1-255)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_number = 7;
-  int idx_number_2 = 8;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, NULL, argv[idx_number]->arg, argv[idx_number_2]->arg, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname_flags_pref,
-       no_ipv6_route_ifname_flags_pref_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <reject|blackhole> (1-255)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Distance value for this prefix\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_reject_blackhole = 6;
-  int idx_number = 7;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, argv[idx_reject_blackhole]->arg, NULL, argv[idx_number]->arg, NULL);
-}
-
-DEFUN (no_ipv6_route_ifname_flags_pref_tag,
-       no_ipv6_route_ifname_flags_pref_tag_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <reject|blackhole> tag (1-65535) (1-255)",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n")
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_reject_blackhole = 6;
-  int idx_number = 8;
-  int idx_number_2 = 9;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, argv[idx_reject_blackhole]->arg, argv[idx_number]->arg, argv[idx_number_2]->arg, NULL);
-}
-
-
-DEFUN (no_ipv6_route_vrf,
-       no_ipv6_route_vrf_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_name = 6;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, NULL, NULL, NULL, argv[idx_name]->arg);
-}
-
-DEFUN (no_ipv6_route_tag_vrf,
-       no_ipv6_route_tag_vrf_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> tag (1-65535) " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_number = 6;
-  int idx_name = 8;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, NULL, argv[idx_number]->arg, NULL, argv[idx_name]->arg);
-}
-
-DEFUN (no_ipv6_route_flags_vrf,
-       no_ipv6_route_flags_vrf_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> <reject|blackhole> " VRF_CMD_STR,
+       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> [tag (1-65535)] [(1-255)] [vrf NAME]",
        NO_STR
        IP_STR
        "Establish static routes\n"
        "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
        "IPv6 gateway address\n"
        "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_reject_blackhole = 5;
-  int idx_name = 7;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, argv[idx_reject_blackhole]->arg, NULL, NULL, argv[idx_name]->arg);
-}
-
-DEFUN (no_ipv6_route_flags_tag_vrf,
-       no_ipv6_route_flags_tag_vrf_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> <reject|blackhole> tag (1-65535) " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
        "Set tag for this route\n"
        "Tag value\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_reject_blackhole = 5;
-  int idx_number = 7;
-  int idx_name = 9;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, argv[idx_reject_blackhole]->arg, argv[idx_number]->arg, NULL, argv[idx_name]->arg);
-}
-
-DEFUN (no_ipv6_route_ifname_vrf,
-       no_ipv6_route_ifname_vrf_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_name = 7;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, NULL, NULL, NULL, argv[idx_name]->arg);
-}
-
-DEFUN (no_ipv6_route_ifname_tag_vrf,
-       no_ipv6_route_ifname_tag_vrf_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag (1-65535) " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_number = 7;
-  int idx_name = 9;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, NULL, argv[idx_number]->arg, NULL, argv[idx_name]->arg);
-}
-
-DEFUN (no_ipv6_route_ifname_flags_vrf,
-       no_ipv6_route_ifname_flags_vrf_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <reject|blackhole> " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_reject_blackhole = 6;
-  int idx_name = 8;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, argv[idx_reject_blackhole]->arg, NULL, NULL, argv[idx_name]->arg);
-}
-
-DEFUN (no_ipv6_route_ifname_flags_tag_vrf,
-       no_ipv6_route_ifname_flags_tag_vrf_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <reject|blackhole> tag (1-65535) " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_reject_blackhole = 6;
-  int idx_number = 8;
-  int idx_name = 10;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, argv[idx_reject_blackhole]->arg, argv[idx_number]->arg, NULL, argv[idx_name]->arg);
-}
-
-DEFUN (no_ipv6_route_pref_vrf,
-       no_ipv6_route_pref_vrf_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> (1-255) " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
        "Distance value for this prefix\n"
        VRF_CMD_HELP_STR)
 {
   int idx_ipv6_prefixlen = 3;
   int idx_ipv6_ifname = 4;
-  int idx_number = 5;
-  int idx_name = 7;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, NULL, NULL, argv[idx_number]->arg, argv[idx_name]->arg);
-}
+  int idx_curr = 5;
+  char *tag, *distance, *vrf;
 
-DEFUN (no_ipv6_route_pref_tag_vrf,
-       no_ipv6_route_pref_tag_vrf_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> tag (1-65535) (1-255) " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Set tag for this route\n"
-       "Tag value\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_number = 6;
-  int idx_number_2 = 7;
-  int idx_name = 9;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, NULL, argv[idx_number]->arg, argv[idx_number_2]->arg, argv[idx_name]->arg);
-}
+  tag = distance = vrf = NULL;
+  zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf);
 
-DEFUN (no_ipv6_route_flags_pref_vrf,
-       no_ipv6_route_flags_pref_vrf_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> <reject|blackhole> (1-255) " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6_ifname = 4;
-  int idx_reject_blackhole = 5;
-  int idx_number = 6;
-  int idx_name = 8;
-  /* We do not care about argv[idx_reject_blackhole]->arg */
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, argv[idx_reject_blackhole]->arg, NULL, argv[idx_number]->arg, argv[idx_name]->arg);
+  return static_ipv6_func (vty, 0,
+                          argv[idx_ipv6_prefixlen]->arg,
+                          argv[idx_ipv6_ifname]->arg,
+                          NULL, NULL,
+                          tag, distance, vrf);
 }
 
-DEFUN (no_ipv6_route_flags_pref_tag_vrf,
-       no_ipv6_route_flags_pref_tag_vrf_cmd,
-       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> <reject|blackhole> tag (1-65535) (1-255) " VRF_CMD_STR,
+DEFUN (no_ipv6_route_flags,
+       no_ipv6_route_flags_cmd,
+       "no ipv6 route X:X::X:X/M <X:X::X:X|INTERFACE> <reject|blackhole> [tag (1-65535)] [(1-255)] [vrf NAME]",
        NO_STR
        IP_STR
        "Establish static routes\n"
@@ -3212,36 +2697,23 @@ DEFUN (no_ipv6_route_flags_pref_tag_vrf,
   int idx_ipv6_prefixlen = 3;
   int idx_ipv6_ifname = 4;
   int idx_reject_blackhole = 5;
-  int idx_number = 7;
-  int idx_number_2 = 8;
-  int idx_name = 10;
-  /* We do not care about argv[idx_reject_blackhole]->arg */
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6_ifname]->arg, NULL, argv[idx_reject_blackhole]->arg, argv[idx_number]->arg, argv[idx_number_2]->arg, argv[idx_name]->arg);
-}
+  int idx_curr = 5;
+  char *tag, *distance, *vrf;
 
-DEFUN (no_ipv6_route_ifname_pref_vrf,
-       no_ipv6_route_ifname_pref_vrf_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (1-255) " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_number = 6;
-  int idx_name = 8;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, NULL, NULL, argv[idx_number]->arg, argv[idx_name]->arg);
+  tag = distance = vrf = NULL;
+  zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf);
+
+  return static_ipv6_func (vty, 0,
+                          argv[idx_ipv6_prefixlen]->arg,
+                          argv[idx_ipv6_ifname]->arg,
+                          NULL,
+                          argv[idx_reject_blackhole]->arg,
+                          tag, distance, vrf);
 }
 
-DEFUN (no_ipv6_route_ifname_pref_tag_vrf,
-       no_ipv6_route_ifname_pref_tag_vrf_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE tag (1-65535) (1-255) " VRF_CMD_STR,
+DEFUN (no_ipv6_route_ifname,
+       no_ipv6_route_ifname_cmd,
+       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE [tag (1-65535)] [(1-255)] [vrf NAME]",
        NO_STR
        IP_STR
        "Establish static routes\n"
@@ -3256,38 +2728,23 @@ DEFUN (no_ipv6_route_ifname_pref_tag_vrf,
   int idx_ipv6_prefixlen = 3;
   int idx_ipv6 = 4;
   int idx_interface = 5;
-  int idx_number = 7;
-  int idx_number_2 = 8;
-  int idx_name = 10;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, NULL, argv[idx_number]->arg, argv[idx_number_2]->arg, argv[idx_name]->arg);
-}
+  int idx_curr = 6;
+  char *tag, *distance, *vrf;
 
-DEFUN (no_ipv6_route_ifname_flags_pref_vrf,
-       no_ipv6_route_ifname_flags_pref_vrf_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <reject|blackhole> (1-255) " VRF_CMD_STR,
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 gateway address\n"
-       "IPv6 gateway interface name\n"
-       "Emit an ICMP unreachable when matched\n"
-       "Silently discard pkts when matched\n"
-       "Distance value for this prefix\n"
-       VRF_CMD_HELP_STR)
-{
-  int idx_ipv6_prefixlen = 3;
-  int idx_ipv6 = 4;
-  int idx_interface = 5;
-  int idx_reject_blackhole = 6;
-  int idx_number = 7;
-  int idx_name = 9;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, argv[idx_reject_blackhole]->arg, NULL, argv[idx_number]->arg, argv[idx_name]->arg);
+  tag = distance = vrf = NULL;
+  zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf);
+
+  return static_ipv6_func (vty, 0,
+                          argv[idx_ipv6_prefixlen]->arg,
+                          argv[idx_ipv6]->arg,
+                          argv[idx_interface]->arg,
+                          NULL,
+                          tag, distance, vrf);
 }
 
-DEFUN (no_ipv6_route_ifname_flags_pref_tag_vrf,
-       no_ipv6_route_ifname_flags_pref_tag_vrf_cmd,
-       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <reject|blackhole> tag (1-65535) (1-255) " VRF_CMD_STR,
+DEFUN (no_ipv6_route_ifname_flags,
+       no_ipv6_route_ifname_flags_cmd,
+       "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <reject|blackhole> [tag (1-65535)] [(1-255)] [vrf NAME]",
        NO_STR
        IP_STR
        "Establish static routes\n"
@@ -3305,10 +2762,18 @@ DEFUN (no_ipv6_route_ifname_flags_pref_tag_vrf,
   int idx_ipv6 = 4;
   int idx_interface = 5;
   int idx_reject_blackhole = 6;
-  int idx_number = 8;
-  int idx_number_2 = 9;
-  int idx_name = 11;
-  return static_ipv6_func (vty, 0, argv[idx_ipv6_prefixlen]->arg, argv[idx_ipv6]->arg, argv[idx_interface]->arg, argv[idx_reject_blackhole]->arg, argv[idx_number]->arg, argv[idx_number_2]->arg, argv[idx_name]->arg);
+  int idx_curr = 7;
+  char *tag, *distance, *vrf;
+
+  tag = distance = vrf = NULL;
+  zebra_vty_ip_route_tdv_helper (argc, argv, idx_curr, &tag, &distance, &vrf);
+
+  return static_ipv6_func (vty, 0,
+                          argv[idx_ipv6_prefixlen]->arg,
+                          argv[idx_ipv6]->arg,
+                          argv[idx_interface]->arg,
+                          argv[idx_reject_blackhole]->arg,
+                          tag, distance, vrf);
 }
 
 /*
@@ -4204,7 +3669,6 @@ static_config_ipv6 (struct vty *vty)
     }
   return write;
 }
-#endif /* HAVE_IPV6 */
 
 DEFUN (allow_external_route_update,
        allow_external_route_update_cmd,
@@ -4261,9 +3725,7 @@ zebra_ip_config (struct vty *vty)
 
   write += static_config_ipv4 (vty, SAFI_UNICAST, "ip route");
   write += static_config_ipv4 (vty, SAFI_MULTICAST, "ip mroute");
-#ifdef HAVE_IPV6
   write += static_config_ipv6 (vty);
-#endif /* HAVE_IPV6 */
 
   write += zebra_import_table_config (vty);
   return write;
@@ -4546,18 +4008,6 @@ zebra_vty_init (void)
   install_element (CONFIG_NODE, &no_ipv6_route_flags_cmd);
   install_element (CONFIG_NODE, &no_ipv6_route_ifname_cmd);
   install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_pref_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_flags_pref_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_pref_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_pref_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_tag_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_flags_tag_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_tag_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_tag_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_pref_tag_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_flags_pref_tag_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_pref_tag_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_pref_tag_cmd);
   install_element (CONFIG_NODE, &ip_nht_default_route_cmd);
   install_element (CONFIG_NODE, &no_ip_nht_default_route_cmd);
   install_element (CONFIG_NODE, &ipv6_nht_default_route_cmd);
@@ -4583,24 +4033,6 @@ zebra_vty_init (void)
   install_element (ENABLE_NODE, &show_ipv6_mroute_cmd);
 
   /* Commands for VRF */
-
-  install_element (CONFIG_NODE, &no_ipv6_route_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_flags_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_pref_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_flags_pref_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_pref_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_pref_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_tag_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_flags_tag_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_tag_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_tag_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_pref_tag_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_flags_pref_tag_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_pref_tag_vrf_cmd);
-  install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_pref_tag_vrf_cmd);
-
   install_element (VIEW_NODE, &show_ipv6_route_vrf_all_cmd);
   install_element (VIEW_NODE, &show_ipv6_route_vrf_all_tag_cmd);
   install_element (VIEW_NODE, &show_ipv6_route_vrf_all_summary_cmd);