Merge pull request #3383 from qlyoung/fix-static-routes-again

staticd: fix null0 routes (again)
This commit is contained in:
Russ White 2018-11-29 15:24:03 -05:00 committed by GitHub
commit 6d51a5f9b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -837,7 +837,7 @@ DEFPY(ip_route_address_interface,
"[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 \
<INTERFACE|Null0>$ifname \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -853,8 +853,8 @@ DEFPY(ip_route_address_interface,
"IP destination prefix\n"
"IP destination prefix mask\n"
"IP gateway address\n"
"IP gateway interface name. Specify 'Null0' (case-insensitive) for a \
null route.\n"
"IP gateway interface name\n"
"Null interface\n"
"Set tag for this route\n"
"Tag value\n"
"Distance value for this route\n"
@ -907,7 +907,7 @@ DEFPY(ip_route_address_interface_vrf,
"[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 \
<INTERFACE|Null0>$ifname \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -922,8 +922,8 @@ DEFPY(ip_route_address_interface_vrf,
"IP destination prefix\n"
"IP destination prefix mask\n"
"IP gateway address\n"
"IP gateway interface name. Specify 'Null0' (case-insensitive) for a \
null route.\n"
"IP gateway interface name\n"
"Null interface\n"
"Set tag for this route\n"
"Tag value\n"
"Distance value for this route\n"
@ -969,7 +969,7 @@ 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> \
<A.B.C.D$gate|<INTERFACE|Null0>$ifname> \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -985,6 +985,7 @@ DEFPY(ip_route,
"IP destination prefix mask\n"
"IP gateway address\n"
"IP gateway interface name\n"
"Null interface\n"
"Set tag for this route\n"
"Tag value\n"
"Distance value for this route\n"
@ -1035,7 +1036,7 @@ DEFPY(ip_route_vrf,
ip_route_vrf_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> \
<A.B.C.D$gate|<INTERFACE|Null0>$ifname> \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -1050,6 +1051,7 @@ DEFPY(ip_route_vrf,
"IP destination prefix mask\n"
"IP gateway address\n"
"IP gateway interface name\n"
"Null interface\n"
"Set tag for this route\n"
"Tag value\n"
"Distance value for this route\n"
@ -1093,7 +1095,7 @@ DEFPY(ip_route_vrf,
DEFPY(ipv6_route_blackhole,
ipv6_route_blackhole_cmd,
"[no] ipv6 route X:X::X:X/M$prefix [from X:X::X:X/M] \
<Null0|reject|blackhole>$flag \
<reject|blackhole>$flag \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -1107,7 +1109,6 @@ DEFPY(ipv6_route_blackhole,
"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"
@ -1132,7 +1133,7 @@ DEFPY(ipv6_route_blackhole,
DEFPY(ipv6_route_blackhole_vrf,
ipv6_route_blackhole_vrf_cmd,
"[no] ipv6 route X:X::X:X/M$prefix [from X:X::X:X/M] \
<Null0|reject|blackhole>$flag \
<reject|blackhole>$flag \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -1145,7 +1146,6 @@ DEFPY(ipv6_route_blackhole_vrf,
"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"
@ -1180,7 +1180,7 @@ DEFPY(ipv6_route_address_interface,
ipv6_route_address_interface_cmd,
"[no] ipv6 route X:X::X:X/M$prefix [from X:X::X:X/M] \
X:X::X:X$gate \
INTERFACE$ifname \
<INTERFACE|Null0>$ifname \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -1198,6 +1198,7 @@ DEFPY(ipv6_route_address_interface,
"IPv6 source prefix\n"
"IPv6 gateway address\n"
"IPv6 gateway interface name\n"
"Null interface\n"
"Set tag for this route\n"
"Tag value\n"
"Distance value for this prefix\n"
@ -1210,6 +1211,7 @@ DEFPY(ipv6_route_address_interface,
{
struct static_vrf *svrf;
struct static_vrf *nh_svrf;
const char *flag;
if (table_str && vrf && !vrf_is_mapped_on_netns(vrf_lookup_by_name(vrf))) {
vty_out(vty,
@ -1233,9 +1235,14 @@ DEFPY(ipv6_route_address_interface,
return CMD_WARNING_CONFIG_FAILED;
}
if (ifname && !strncasecmp(ifname, "Null0", 5)) {
flag = "Null0";
ifname = NULL;
}
return static_route_leak(
vty, svrf, nh_svrf, AFI_IP6, SAFI_UNICAST, no, prefix_str, NULL,
from_str, gate_str, ifname, NULL, tag_str, distance_str, label,
from_str, gate_str, ifname, flag, tag_str, distance_str, label,
table_str, !!onlink);
}
@ -1243,7 +1250,7 @@ DEFPY(ipv6_route_address_interface_vrf,
ipv6_route_address_interface_vrf_cmd,
"[no] ipv6 route X:X::X:X/M$prefix [from X:X::X:X/M] \
X:X::X:X$gate \
INTERFACE$ifname \
<INTERFACE|Null0>$ifname \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -1260,6 +1267,7 @@ DEFPY(ipv6_route_address_interface_vrf,
"IPv6 source prefix\n"
"IPv6 gateway address\n"
"IPv6 gateway interface name\n"
"Null interface\n"
"Set tag for this route\n"
"Tag value\n"
"Distance value for this prefix\n"
@ -1272,6 +1280,7 @@ DEFPY(ipv6_route_address_interface_vrf,
VTY_DECLVAR_CONTEXT(vrf, vrf);
struct static_vrf *svrf = vrf->info;
struct static_vrf *nh_svrf;
const char *flag;
if (table_str && !vrf_is_mapped_on_netns(vrf)) {
vty_out(vty,
@ -1289,16 +1298,21 @@ DEFPY(ipv6_route_address_interface_vrf,
return CMD_WARNING_CONFIG_FAILED;
}
if (ifname && !strncasecmp(ifname, "Null0", 5)) {
flag = "Null0";
ifname = NULL;
}
return static_route_leak(
vty, svrf, nh_svrf, AFI_IP6, SAFI_UNICAST, no, prefix_str, NULL,
from_str, gate_str, ifname, NULL, tag_str, distance_str, label,
from_str, gate_str, ifname, flag, tag_str, distance_str, label,
table_str, !!onlink);
}
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> \
<X:X::X:X$gate|<INTERFACE|Null0>$ifname> \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -1315,6 +1329,7 @@ DEFPY(ipv6_route,
"IPv6 source prefix\n"
"IPv6 gateway address\n"
"IPv6 gateway interface name\n"
"Null interface\n"
"Set tag for this route\n"
"Tag value\n"
"Distance value for this prefix\n"
@ -1326,6 +1341,7 @@ DEFPY(ipv6_route,
{
struct static_vrf *svrf;
struct static_vrf *nh_svrf;
const char *flag;
if (table_str && vrf && !vrf_is_mapped_on_netns(vrf_lookup_by_name(vrf))) {
vty_out(vty,
@ -1349,16 +1365,21 @@ DEFPY(ipv6_route,
return CMD_WARNING_CONFIG_FAILED;
}
if (ifname && !strncasecmp(ifname, "Null0", 5)) {
flag = "Null0";
ifname = NULL;
}
return static_route_leak(
vty, svrf, nh_svrf, AFI_IP6, SAFI_UNICAST, no, prefix_str, NULL,
from_str, gate_str, ifname, NULL, tag_str, distance_str, label,
from_str, gate_str, ifname, flag, tag_str, distance_str, label,
table_str, false);
}
DEFPY(ipv6_route_vrf,
ipv6_route_vrf_cmd,
"[no] ipv6 route X:X::X:X/M$prefix [from X:X::X:X/M] \
<X:X::X:X$gate|INTERFACE$ifname> \
<X:X::X:X$gate|<INTERFACE|Null0>$ifname> \
[{ \
tag (1-4294967295) \
|(1-255)$distance \
@ -1374,6 +1395,7 @@ DEFPY(ipv6_route_vrf,
"IPv6 source prefix\n"
"IPv6 gateway address\n"
"IPv6 gateway interface name\n"
"Null interface\n"
"Set tag for this route\n"
"Tag value\n"
"Distance value for this prefix\n"
@ -1385,6 +1407,7 @@ DEFPY(ipv6_route_vrf,
VTY_DECLVAR_CONTEXT(vrf, vrf);
struct static_vrf *svrf = vrf->info;
struct static_vrf *nh_svrf;
const char *flag;
if (table_str && !vrf_is_mapped_on_netns(vrf)) {
vty_out(vty,
@ -1402,9 +1425,14 @@ DEFPY(ipv6_route_vrf,
return CMD_WARNING_CONFIG_FAILED;
}
if (ifname && !strncasecmp(ifname, "Null0", 5)) {
flag = "Null0";
ifname = NULL;
}
return static_route_leak(
vty, svrf, nh_svrf, AFI_IP6, SAFI_UNICAST, no, prefix_str, NULL,
from_str, gate_str, ifname, NULL, tag_str, distance_str, label,
from_str, gate_str, ifname, flag, tag_str, distance_str, label,
table_str, false);
}