]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: remove weird blackhole/reject ipv6 static routes
authorRenato Westphal <renato@opensourcerouting.org>
Thu, 27 Jul 2017 14:05:15 +0000 (11:05 -0300)
committerRenato Westphal <renato@opensourcerouting.org>
Fri, 28 Jul 2017 00:45:01 +0000 (21:45 -0300)
This is the v6 counterpart of commit 74d263466b9.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
zebra/zebra_vty.c

index 5cbb55ebd20ab5efe84237735b85ad591fe943cf..7e492ad6b294a592f45f774cb1271ccbf987d809 100644 (file)
@@ -2045,10 +2045,6 @@ int static_ipv6_func(struct vty *vty, int add_cmd, const char *dest_str,
        if (tag_str)
                tag = strtoul(tag_str, NULL, 10);
 
-       /* When gateway is valid IPv6 addrees, then gate is treated as
-          nexthop address other case gate is treated as interface name. */
-       ret = inet_pton(AF_INET6, gate_str, &gate_addr);
-
        /* VRF id */
        zvrf = zebra_vrf_lookup_by_name(vrf_id_str);
 
@@ -2125,6 +2121,23 @@ int static_ipv6_func(struct vty *vty, int add_cmd, const char *dest_str,
                }
        }
 
+       if (gate_str == NULL) {
+               if (add_cmd)
+                       static_add_route(AFI_IP6, SAFI_UNICAST, type, &p, src_p,
+                                        NULL, ifindex, ifname, flag, tag,
+                                        distance, zvrf, &snh_label);
+               else
+                       static_delete_route(AFI_IP6, SAFI_UNICAST, type, &p,
+                                           src_p, NULL, ifindex, tag, distance,
+                                           zvrf, &snh_label);
+
+               return CMD_SUCCESS;
+       }
+
+       /* When gateway is valid IPv6 addrees, then gate is treated as
+          nexthop address other case gate is treated as interface name. */
+       ret = inet_pton(AF_INET6, gate_str, &gate_addr);
+
        if (ifname) {
                /* When ifname is specified.  It must be come with gateway
                   address. */
@@ -2212,14 +2225,12 @@ DEFUN (ipv6_route,
 
 DEFUN (ipv6_route_flags,
        ipv6_route_flags_cmd,
-       "ipv6 route X:X::X:X/M [from X:X::X:X/M] <X:X::X:X|INTERFACE> <reject|blackhole> [{tag (1-4294967295)|(1-255)|vrf NAME}]",
+       "ipv6 route X:X::X:X/M [from X:X::X:X/M] <reject|blackhole> [{tag (1-4294967295)|(1-255)|vrf NAME}]",
        IP_STR
        "Establish static routes\n"
        "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
        "IPv6 source-dest route\n"
        "IPv6 source prefix\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"
@@ -2228,21 +2239,18 @@ DEFUN (ipv6_route_flags,
        VRF_CMD_HELP_STR)
 {
        int idx_ipv6_prefixlen = 2;
-       int idx_ipv6_ifname;
        int idx_reject_blackhole;
        int idx_curr;
        char *src, *tag, *distance, *vrf;
 
        if (strmatch(argv[3]->text, "from")) {
                src = argv[4]->arg;
-               idx_ipv6_ifname = 5;
-               idx_reject_blackhole = 6;
-               idx_curr = 7;
+               idx_reject_blackhole = 5;
+               idx_curr = 6;
        } else {
                src = NULL;
-               idx_ipv6_ifname = 3;
-               idx_reject_blackhole = 4;
-               idx_curr = 5;
+               idx_reject_blackhole = 3;
+               idx_curr = 4;
        }
 
        tag = distance = vrf = NULL;
@@ -2250,9 +2258,8 @@ DEFUN (ipv6_route_flags,
                                      &vrf, NULL);
 
        return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6_ifname]->arg, NULL,
-                               argv[idx_reject_blackhole]->arg, tag, distance,
-                               vrf, NULL);
+                               NULL, NULL, argv[idx_reject_blackhole]->arg,
+                               tag, distance, vrf, NULL);
 }
 
 DEFUN (ipv6_route_ifname,
@@ -2297,54 +2304,6 @@ DEFUN (ipv6_route_ifname,
                                NULL, tag, distance, vrf, NULL);
 }
 
-DEFUN (ipv6_route_ifname_flags,
-       ipv6_route_ifname_flags_cmd,
-       "ipv6 route X:X::X:X/M [from X:X::X:X/M] X:X::X:X INTERFACE <reject|blackhole> [{tag (1-4294967295)|(1-255)|vrf NAME}]",
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 source-dest route\n"
-       "IPv6 source prefix\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"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv6_prefixlen = 2;
-       int idx_ipv6;
-       int idx_interface;
-       int idx_reject_blackhole;
-       int idx_curr;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[3]->text, "from")) {
-               src = argv[4]->arg;
-               idx_ipv6 = 5;
-               idx_interface = 6;
-               idx_reject_blackhole = 7;
-               idx_curr = 8;
-       } else {
-               src = NULL;
-               idx_ipv6 = 3;
-               idx_interface = 4;
-               idx_reject_blackhole = 5;
-               idx_curr = 6;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 1, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6]->arg, argv[idx_interface]->arg,
-                               argv[idx_reject_blackhole]->arg, tag, distance,
-                               vrf, NULL);
-}
-
 DEFUN (no_ipv6_route,
        no_ipv6_route_cmd,
        "no ipv6 route X:X::X:X/M [from X:X::X:X/M] <X:X::X:X|INTERFACE|null0> [{tag (1-4294967295)|(1-255)|vrf NAME}]",
@@ -2388,15 +2347,13 @@ DEFUN (no_ipv6_route,
 
 DEFUN (no_ipv6_route_flags,
        no_ipv6_route_flags_cmd,
-       "no ipv6 route X:X::X:X/M [from X:X::X:X/M] <X:X::X:X|INTERFACE> <reject|blackhole> [{tag (1-4294967295)|(1-255)|vrf NAME}]",
+       "no ipv6 route X:X::X:X/M [from X:X::X:X/M] <reject|blackhole> [{tag (1-4294967295)|(1-255)|vrf NAME}]",
        NO_STR
        IP_STR
        "Establish static routes\n"
        "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
        "IPv6 source-dest route\n"
        "IPv6 source prefix\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"
@@ -2405,21 +2362,18 @@ DEFUN (no_ipv6_route_flags,
        VRF_CMD_HELP_STR)
 {
        int idx_ipv6_prefixlen = 3;
-       int idx_ipv6_ifname;
        int idx_reject_blackhole;
        int idx_curr;
        char *src, *tag, *distance, *vrf;
 
        if (strmatch(argv[4]->text, "from")) {
                src = argv[5]->arg;
-               idx_ipv6_ifname = 6;
-               idx_reject_blackhole = 7;
-               idx_curr = 8;
+               idx_reject_blackhole = 6;
+               idx_curr = 7;
        } else {
                src = NULL;
-               idx_ipv6_ifname = 4;
-               idx_reject_blackhole = 5;
-               idx_curr = 6;
+               idx_reject_blackhole = 4;
+               idx_curr = 5;
        }
 
        tag = distance = vrf = NULL;
@@ -2427,9 +2381,8 @@ DEFUN (no_ipv6_route_flags,
                                      &vrf, NULL);
 
        return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6_ifname]->arg, NULL,
-                               argv[idx_reject_blackhole]->arg, tag, distance,
-                               vrf, NULL);
+                               NULL, NULL, argv[idx_reject_blackhole]->arg,
+                               tag, distance, vrf, NULL);
 }
 
 DEFUN (no_ipv6_route_ifname,
@@ -2475,55 +2428,6 @@ DEFUN (no_ipv6_route_ifname,
                                NULL, tag, distance, vrf, NULL);
 }
 
-DEFUN (no_ipv6_route_ifname_flags,
-       no_ipv6_route_ifname_flags_cmd,
-       "no ipv6 route X:X::X:X/M [from X:X::X:X/M] X:X::X:X INTERFACE <reject|blackhole> [{tag (1-4294967295)|(1-255)|vrf NAME}]",
-       NO_STR
-       IP_STR
-       "Establish static routes\n"
-       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
-       "IPv6 source-dest route\n"
-       "IPv6 source prefix\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"
-       VRF_CMD_HELP_STR)
-{
-       int idx_ipv6_prefixlen = 3;
-       int idx_ipv6;
-       int idx_interface;
-       int idx_reject_blackhole;
-       int idx_curr;
-       char *src, *tag, *distance, *vrf;
-
-       if (strmatch(argv[4]->text, "from")) {
-               src = argv[5]->arg;
-               idx_ipv6 = 6;
-               idx_interface = 7;
-               idx_reject_blackhole = 8;
-               idx_curr = 9;
-       } else {
-               src = NULL;
-               idx_ipv6 = 4;
-               idx_interface = 5;
-               idx_reject_blackhole = 6;
-               idx_curr = 7;
-       }
-
-       tag = distance = vrf = NULL;
-       zebra_vty_ip_route_tdv_helper(argc, argv, idx_curr, &tag, &distance,
-                                     &vrf, NULL);
-
-       return static_ipv6_func(vty, 0, argv[idx_ipv6_prefixlen]->arg, src,
-                               argv[idx_ipv6]->arg, argv[idx_interface]->arg,
-                               argv[idx_reject_blackhole]->arg, tag, distance,
-                               vrf, NULL);
-}
-
 DEFUN (show_ipv6_route,
        show_ipv6_route_cmd,
        "show ipv6 <fib|route> [vrf NAME] [tag (1-4294967295)|X:X::X:X/M longer-prefixes|" FRR_IP6_REDIST_STR_ZEBRA "] [json]",
@@ -3413,11 +3317,9 @@ void zebra_vty_init(void)
        install_element(CONFIG_NODE, &ipv6_route_cmd);
        install_element(CONFIG_NODE, &ipv6_route_flags_cmd);
        install_element(CONFIG_NODE, &ipv6_route_ifname_cmd);
-       install_element(CONFIG_NODE, &ipv6_route_ifname_flags_cmd);
        install_element(CONFIG_NODE, &no_ipv6_route_cmd);
        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, &ip_nht_default_route_cmd);
        install_element(CONFIG_NODE, &no_ip_nht_default_route_cmd);
        install_element(CONFIG_NODE, &ipv6_nht_default_route_cmd);