]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: cleanup reject vs blackhole vs null0 vs Null0
authorDaniel Walton <dwalton@cumulusnetworks.com>
Thu, 14 Sep 2017 18:11:29 +0000 (18:11 +0000)
committerDaniel Walton <dwalton@cumulusnetworks.com>
Thu, 14 Sep 2017 18:11:29 +0000 (18:11 +0000)
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
zebra/zebra_vty.c

index 1ce4f66b16387e169109936755a0d12cdd322050..89ed6ce7b8e25e5bfb2b41a5b6c8da2289a6e7c8 100644 (file)
@@ -166,10 +166,13 @@ static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
        }
 
        /* Null0 static route.  */
-       if ((ifname != NULL)
-           && (strncasecmp(ifname, "Null0", strlen(ifname)) == 0)) {
-               bh_type = STATIC_BLACKHOLE_NULL;
-               ifname = NULL;
+       if (ifname != NULL) {
+               if (strncasecmp(ifname, "Null0", strlen(ifname)) == 0 ||
+                   strncasecmp(ifname, "reject", strlen(ifname)) == 0 ||
+                   strncasecmp(ifname, "blackhole", strlen(ifname)) == 0) {
+                       vty_out(vty, "%% Nexthop interface cannot be Null0, reject or blackhole\n");
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
        }
 
        /* Route flags */
@@ -181,6 +184,9 @@ static int zebra_static_route(struct vty *vty, afi_t afi, safi_t safi,
                case 'b':
                        bh_type = STATIC_BLACKHOLE_DROP;
                        break;
+               case 'N':
+                       bh_type = STATIC_BLACKHOLE_NULL;
+                       break;
                default:
                        vty_out(vty, "%% Malformed flag %s \n", flag_str);
                        return CMD_WARNING_CONFIG_FAILED;
@@ -332,20 +338,48 @@ DEFUN (show_ip_rpf_addr,
        return CMD_SUCCESS;
 }
 
+DEFPY (ip_route_reject,
+       ip_route_reject_cmd,
+       "[no] ip route\
+          <A.B.C.D/M$prefix|A.B.C.D$prefix A.B.C.D$mask> \
+          <Null0|reject|blackhole>$flag                  \
+          [{                                             \
+            tag (1-4294967295)                           \
+            |(1-255)$distance                            \
+            |vrf NAME                                    \
+            |label WORD                                  \
+          }]",
+       NO_STR
+       IP_STR
+       "Establish static routes\n"
+       "IP destination prefix (e.g. 10.0.0.0/8)\n"
+       "IP destination prefix\n"
+       "IP destination prefix mask\n"
+       "Null interface\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 route\n"
+       VRF_CMD_HELP_STR
+       MPLS_LABEL_HELPSTR)
+{
+       return zebra_static_route(vty, AFI_IP, SAFI_UNICAST, no, prefix,
+                                 mask_str, NULL, NULL, NULL, flag,
+                                 tag_str, distance_str, vrf, label);
+}
+
 /* Static route configuration.  */
-DEFPY(ip_route, ip_route_cmd,
+DEFPY(ip_route,
+      ip_route_cmd,
       "[no] ip route\
-          <A.B.C.D/M$prefix|A.B.C.D$prefix A.B.C.D$mask>\
-          <\
-            {A.B.C.D$gate|INTERFACE$ifname}\
-            |null0$ifname\
-            |<reject|blackhole>$flag\
-          >\
-          [{\
-            tag (1-4294967295)\
-            |(1-255)$distance\
-            |vrf NAME\
-            |label WORD\
+       <A.B.C.D/M$prefix|A.B.C.D$prefix A.B.C.D$mask>       \
+       {A.B.C.D$gate|INTERFACE$ifname}                      \
+       [{                                                   \
+         tag (1-4294967295)                                 \
+         |(1-255)$distance                                  \
+         |vrf NAME                                          \
+         |label WORD                                        \
           }]",
       NO_STR IP_STR
       "Establish static routes\n"
@@ -354,9 +388,6 @@ DEFPY(ip_route, ip_route_cmd,
       "IP destination prefix mask\n"
       "IP gateway address\n"
       "IP gateway interface name\n"
-      "Null interface\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 route\n"
@@ -364,9 +395,8 @@ DEFPY(ip_route, ip_route_cmd,
       MPLS_LABEL_HELPSTR)
 {
        return zebra_static_route(vty, AFI_IP, SAFI_UNICAST, no, prefix,
-                                 mask_str, NULL, gate_str, ifname, flag,
+                                 mask_str, NULL, gate_str, ifname, NULL,
                                  tag_str, distance_str, vrf, label);
-       return 0;
 }
 
 /* New RIB.  Detailed information for IPv4 route. */
@@ -1760,19 +1790,46 @@ static int static_config(struct vty *vty, afi_t afi, safi_t safi,
        return write;
 }
 
+DEFPY (ipv6_route_reject,
+       ipv6_route_reject_cmd,
+       "[no] ipv6 route X:X::X:X/M$prefix [from X:X::X:X/M] \
+          <Null0|reject|blackhole>$flag                     \
+          [{                                                \
+            tag (1-4294967295)                              \
+            |(1-255)$distance                               \
+            |vrf NAME                                       \
+            |label WORD                                     \
+          }]",
+       NO_STR
+       IPV6_STR
+       "Establish static routes\n"
+       "IPv6 destination prefix (e.g. 3ffe:506::/32)\n"
+       "IPv6 source-dest route\n"
+       "IPv6 source prefix\n"
+       "Null interface\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
+       MPLS_LABEL_HELPSTR)
+{
+       return zebra_static_route(vty, AFI_IP6, SAFI_UNICAST, no, prefix_str,
+                                 NULL, from_str, NULL, NULL, flag,
+                                 tag_str, distance_str, vrf, label);
+}
+
+
 DEFPY(ipv6_route,
       ipv6_route_cmd,
-      "[no] ipv6 route X:X::X:X/M$prefix [from X:X::X:X/M]\
-          <\
-            {X:X::X:X$gate|INTERFACE$ifname}\
-            |null0$ifname\
-            |<reject|blackhole>$flag\
-          >\
-          [{\
-            tag (1-4294967295)\
-            |(1-255)$distance\
-            |vrf NAME\
-            |label WORD\
+      "[no] ipv6 route X:X::X:X/M$prefix [from X:X::X:X/M] \
+          {X:X::X:X$gate|INTERFACE$ifname}                 \
+          [{                                               \
+            tag (1-4294967295)                             \
+            |(1-255)$distance                              \
+            |vrf NAME                                      \
+            |label WORD                                    \
           }]",
       NO_STR
       IPV6_STR
@@ -1782,9 +1839,6 @@ DEFPY(ipv6_route,
       "IPv6 source prefix\n"
       "IPv6 gateway address\n"
       "IPv6 gateway interface name\n"
-      "Null interface\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"
@@ -1792,7 +1846,7 @@ DEFPY(ipv6_route,
       MPLS_LABEL_HELPSTR)
 {
        return zebra_static_route(vty, AFI_IP6, SAFI_UNICAST, no, prefix_str,
-                                 NULL, from_str, gate_str, ifname, flag,
+                                 NULL, from_str, gate_str, ifname, NULL,
                                  tag_str, distance_str, vrf, label);
 }
 
@@ -2680,6 +2734,7 @@ void zebra_vty_init(void)
        install_element(CONFIG_NODE, &ip_multicast_mode_cmd);
        install_element(CONFIG_NODE, &no_ip_multicast_mode_cmd);
        install_element(CONFIG_NODE, &ip_route_cmd);
+       install_element(CONFIG_NODE, &ip_route_reject_cmd);
        install_element(CONFIG_NODE, &ip_zebra_import_table_distance_cmd);
        install_element(CONFIG_NODE, &no_ip_zebra_import_table_cmd);
 
@@ -2703,6 +2758,7 @@ void zebra_vty_init(void)
        install_element(VIEW_NODE, &show_ip_route_vrf_all_summary_prefix_cmd);
 
        install_element(CONFIG_NODE, &ipv6_route_cmd);
+       install_element(CONFIG_NODE, &ipv6_route_reject_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);