From: Daniel Walton Date: Thu, 14 Sep 2017 18:11:29 +0000 (+0000) Subject: zebra: cleanup reject vs blackhole vs null0 vs Null0 X-Git-Tag: frr-4.0-dev~265^2~2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=bb92922eaa5f80b0aaa9d11defcbc5670a2c9d12;p=mirror%2Ffrr.git zebra: cleanup reject vs blackhole vs null0 vs Null0 Signed-off-by: Daniel Walton --- diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index 1ce4f66b16..89ed6ce7b8 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -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\ + \ + $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$gate|INTERFACE$ifname}\ - |null0$ifname\ - |$flag\ - >\ - [{\ - tag (1-4294967295)\ - |(1-255)$distance\ - |vrf NAME\ - |label WORD\ + \ + {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] \ + $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\ - |$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);