forked from Mirror/frr
Revert "staticd: Accept full blackhole typed keywords for ip_route_cmd"
This reverts commit 76b2bc97e7
.
This change is wrong for several reasons:
- it is backwards incompatible - previously it was always possible to
create blackhole/reject routes using shortened versions of the words
and it suddenly became impossible if there's an interface in the
system with the same name
- it uses operational data for validation which is prohibited
- it doesn't really solve the problem with inability to create routes
using interface names like `bla` or `rej`
This commit is contained in:
parent
9d8fd14b56
commit
d205208f57
|
@ -136,8 +136,7 @@ static bool static_nexthop_create(struct nb_cb_create_args *args)
|
||||||
switch (args->event) {
|
switch (args->event) {
|
||||||
case NB_EV_VALIDATE:
|
case NB_EV_VALIDATE:
|
||||||
ifname = yang_dnode_get_string(args->dnode, "interface");
|
ifname = yang_dnode_get_string(args->dnode, "interface");
|
||||||
nh_type = yang_dnode_get_enum(args->dnode, "nh-type");
|
if (ifname != NULL) {
|
||||||
if (ifname != NULL && nh_type != STATIC_BLACKHOLE) {
|
|
||||||
if (strcasecmp(ifname, "Null0") == 0
|
if (strcasecmp(ifname, "Null0") == 0
|
||||||
|| strcasecmp(ifname, "reject") == 0
|
|| strcasecmp(ifname, "reject") == 0
|
||||||
|| strcasecmp(ifname, "blackhole") == 0) {
|
|| strcasecmp(ifname, "blackhole") == 0) {
|
||||||
|
@ -465,33 +464,10 @@ static int static_nexthop_bh_type_modify(struct nb_cb_modify_args *args)
|
||||||
{
|
{
|
||||||
struct static_nexthop *nh;
|
struct static_nexthop *nh;
|
||||||
enum static_nh_type nh_type;
|
enum static_nh_type nh_type;
|
||||||
const char *nh_ifname;
|
|
||||||
const char *nh_vrf;
|
|
||||||
|
|
||||||
switch (args->event) {
|
switch (args->event) {
|
||||||
case NB_EV_VALIDATE:
|
case NB_EV_VALIDATE:
|
||||||
nh_type = yang_dnode_get_enum(args->dnode, "../nh-type");
|
nh_type = yang_dnode_get_enum(args->dnode, "../nh-type");
|
||||||
nh_ifname = yang_dnode_get_string(args->dnode, "../interface");
|
|
||||||
nh_vrf = yang_dnode_get_string(args->dnode, "../vrf");
|
|
||||||
if (nh_ifname && nh_vrf) {
|
|
||||||
struct vrf *vrf = vrf_lookup_by_name(nh_vrf);
|
|
||||||
|
|
||||||
if (!vrf) {
|
|
||||||
snprintf(args->errmsg, args->errmsg_len,
|
|
||||||
"nexthop vrf %s not found", nh_vrf);
|
|
||||||
return NB_ERR_VALIDATION;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct interface *ifp = if_lookup_by_name(nh_ifname,
|
|
||||||
vrf->vrf_id);
|
|
||||||
|
|
||||||
if (ifp && (!strmatch(nh_ifname, "blackhole") ||
|
|
||||||
!strmatch(nh_ifname, "reject"))) {
|
|
||||||
snprintf(args->errmsg, args->errmsg_len,
|
|
||||||
"nexthop interface name must be (reject, blackhole)");
|
|
||||||
return NB_ERR_VALIDATION;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (nh_type != STATIC_BLACKHOLE) {
|
if (nh_type != STATIC_BLACKHOLE) {
|
||||||
snprintf(args->errmsg, args->errmsg_len,
|
snprintf(args->errmsg, args->errmsg_len,
|
||||||
"nexthop type is not the blackhole type");
|
"nexthop type is not the blackhole type");
|
||||||
|
|
|
@ -60,8 +60,6 @@ struct static_route_args {
|
||||||
bool bfd_multi_hop;
|
bool bfd_multi_hop;
|
||||||
const char *bfd_source;
|
const char *bfd_source;
|
||||||
const char *bfd_profile;
|
const char *bfd_profile;
|
||||||
|
|
||||||
const char *input;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int static_route_nb_run(struct vty *vty, struct static_route_args *args)
|
static int static_route_nb_run(struct vty *vty, struct static_route_args *args)
|
||||||
|
@ -153,20 +151,9 @@ static int static_route_nb_run(struct vty *vty, struct static_route_args *args)
|
||||||
else
|
else
|
||||||
buf_gate_str = "";
|
buf_gate_str = "";
|
||||||
|
|
||||||
if (args->gateway == NULL && args->interface_name == NULL) {
|
if (args->gateway == NULL && args->interface_name == NULL)
|
||||||
type = STATIC_BLACKHOLE;
|
type = STATIC_BLACKHOLE;
|
||||||
/* If this is blackhole/reject flagged route, then
|
else if (args->gateway && args->interface_name) {
|
||||||
* specify interface_name with the value of what was really
|
|
||||||
* entered.
|
|
||||||
* interface_name will be validated later in NB functions
|
|
||||||
* to check if we don't create blackhole/reject routes that
|
|
||||||
* match the real interface names.
|
|
||||||
* E.g.: `ip route 10.0.0.1/32 bla` will create a blackhole
|
|
||||||
* route despite the real interface named `bla` exists.
|
|
||||||
*/
|
|
||||||
if (args->input)
|
|
||||||
args->interface_name = args->input;
|
|
||||||
} else if (args->gateway && args->interface_name) {
|
|
||||||
if (args->afi == AFI_IP)
|
if (args->afi == AFI_IP)
|
||||||
type = STATIC_IPV4_GATEWAY_IFNAME;
|
type = STATIC_IPV4_GATEWAY_IFNAME;
|
||||||
else
|
else
|
||||||
|
@ -553,8 +540,6 @@ DEFPY_YANG(ip_route_blackhole,
|
||||||
"Table to configure\n"
|
"Table to configure\n"
|
||||||
"The table number to configure\n")
|
"The table number to configure\n")
|
||||||
{
|
{
|
||||||
int idx_flag = 0;
|
|
||||||
|
|
||||||
struct static_route_args args = {
|
struct static_route_args args = {
|
||||||
.delete = !!no,
|
.delete = !!no,
|
||||||
.afi = AFI_IP,
|
.afi = AFI_IP,
|
||||||
|
@ -569,9 +554,6 @@ DEFPY_YANG(ip_route_blackhole,
|
||||||
.vrf = vrf,
|
.vrf = vrf,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (flag && argv_find(argv, argc, flag, &idx_flag))
|
|
||||||
args.input = argv[idx_flag]->arg;
|
|
||||||
|
|
||||||
return static_route_nb_run(vty, &args);
|
return static_route_nb_run(vty, &args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -600,8 +582,6 @@ DEFPY_YANG(ip_route_blackhole_vrf,
|
||||||
"Table to configure\n"
|
"Table to configure\n"
|
||||||
"The table number to configure\n")
|
"The table number to configure\n")
|
||||||
{
|
{
|
||||||
int idx_flag = 0;
|
|
||||||
|
|
||||||
struct static_route_args args = {
|
struct static_route_args args = {
|
||||||
.delete = !!no,
|
.delete = !!no,
|
||||||
.afi = AFI_IP,
|
.afi = AFI_IP,
|
||||||
|
@ -623,9 +603,6 @@ DEFPY_YANG(ip_route_blackhole_vrf,
|
||||||
*/
|
*/
|
||||||
assert(args.prefix);
|
assert(args.prefix);
|
||||||
|
|
||||||
if (flag && argv_find(argv, argc, flag, &idx_flag))
|
|
||||||
args.input = argv[idx_flag]->arg;
|
|
||||||
|
|
||||||
return static_route_nb_run(vty, &args);
|
return static_route_nb_run(vty, &args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -916,8 +893,6 @@ DEFPY_YANG(ipv6_route_blackhole,
|
||||||
"Table to configure\n"
|
"Table to configure\n"
|
||||||
"The table number to configure\n")
|
"The table number to configure\n")
|
||||||
{
|
{
|
||||||
int idx_flag = 0;
|
|
||||||
|
|
||||||
struct static_route_args args = {
|
struct static_route_args args = {
|
||||||
.delete = !!no,
|
.delete = !!no,
|
||||||
.afi = AFI_IP6,
|
.afi = AFI_IP6,
|
||||||
|
@ -932,9 +907,6 @@ DEFPY_YANG(ipv6_route_blackhole,
|
||||||
.vrf = vrf,
|
.vrf = vrf,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (flag && argv_find(argv, argc, flag, &idx_flag))
|
|
||||||
args.input = argv[idx_flag]->arg;
|
|
||||||
|
|
||||||
return static_route_nb_run(vty, &args);
|
return static_route_nb_run(vty, &args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -963,8 +935,6 @@ DEFPY_YANG(ipv6_route_blackhole_vrf,
|
||||||
"Table to configure\n"
|
"Table to configure\n"
|
||||||
"The table number to configure\n")
|
"The table number to configure\n")
|
||||||
{
|
{
|
||||||
int idx_flag = 0;
|
|
||||||
|
|
||||||
struct static_route_args args = {
|
struct static_route_args args = {
|
||||||
.delete = !!no,
|
.delete = !!no,
|
||||||
.afi = AFI_IP6,
|
.afi = AFI_IP6,
|
||||||
|
@ -986,9 +956,6 @@ DEFPY_YANG(ipv6_route_blackhole_vrf,
|
||||||
*/
|
*/
|
||||||
assert(args.prefix);
|
assert(args.prefix);
|
||||||
|
|
||||||
if (flag && argv_find(argv, argc, flag, &idx_flag))
|
|
||||||
args.input = argv[idx_flag]->arg;
|
|
||||||
|
|
||||||
return static_route_nb_run(vty, &args);
|
return static_route_nb_run(vty, &args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue