]> git.puffer.fish Git - matthieu/frr.git/commitdiff
Revert "staticd: Accept full blackhole typed keywords for ip_route_cmd"
authorIgor Ryzhov <iryzhov@nfware.com>
Tue, 30 Jan 2024 20:51:46 +0000 (22:51 +0200)
committerIgor Ryzhov <iryzhov@nfware.com>
Thu, 1 Feb 2024 22:25:15 +0000 (00:25 +0200)
This reverts commit 76b2bc97e73874d882d5cf021972cfca84656cef.

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`

staticd/static_nb_config.c
staticd/static_vty.c

index 2fee908d5d1e26d9015faaf92ec1db616db52a85..78378371b0a1f8bd822006dea94a0bb1f25f1bf9 100644 (file)
@@ -136,8 +136,7 @@ static bool static_nexthop_create(struct nb_cb_create_args *args)
        switch (args->event) {
        case NB_EV_VALIDATE:
                ifname = yang_dnode_get_string(args->dnode, "interface");
-               nh_type = yang_dnode_get_enum(args->dnode, "nh-type");
-               if (ifname != NULL && nh_type != STATIC_BLACKHOLE) {
+               if (ifname != NULL) {
                        if (strcasecmp(ifname, "Null0") == 0
                            || strcasecmp(ifname, "reject") == 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;
        enum static_nh_type nh_type;
-       const char *nh_ifname;
-       const char *nh_vrf;
 
        switch (args->event) {
        case NB_EV_VALIDATE:
                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) {
                        snprintf(args->errmsg, args->errmsg_len,
                                 "nexthop type is not the blackhole type");
index 05f23f54d1c93a918540fb4c9c8396c9ea04c3fa..a18028ed087cff7ffa962a898760000b56282037 100644 (file)
@@ -60,8 +60,6 @@ struct static_route_args {
        bool bfd_multi_hop;
        const char *bfd_source;
        const char *bfd_profile;
-
-       const char *input;
 };
 
 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
                buf_gate_str = "";
 
-       if (args->gateway == NULL && args->interface_name == NULL) {
+       if (args->gateway == NULL && args->interface_name == NULL)
                type = STATIC_BLACKHOLE;
-               /* If this is blackhole/reject flagged route, then
-                * 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) {
+       else if (args->gateway && args->interface_name) {
                if (args->afi == AFI_IP)
                        type = STATIC_IPV4_GATEWAY_IFNAME;
                else
@@ -553,8 +540,6 @@ DEFPY_YANG(ip_route_blackhole,
       "Table to configure\n"
       "The table number to configure\n")
 {
-       int idx_flag = 0;
-
        struct static_route_args args = {
                .delete = !!no,
                .afi = AFI_IP,
@@ -569,9 +554,6 @@ DEFPY_YANG(ip_route_blackhole,
                .vrf = vrf,
        };
 
-       if (flag && argv_find(argv, argc, flag, &idx_flag))
-               args.input = argv[idx_flag]->arg;
-
        return static_route_nb_run(vty, &args);
 }
 
@@ -600,8 +582,6 @@ DEFPY_YANG(ip_route_blackhole_vrf,
       "Table to configure\n"
       "The table number to configure\n")
 {
-       int idx_flag = 0;
-
        struct static_route_args args = {
                .delete = !!no,
                .afi = AFI_IP,
@@ -623,9 +603,6 @@ DEFPY_YANG(ip_route_blackhole_vrf,
         */
        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);
 }
 
@@ -916,8 +893,6 @@ DEFPY_YANG(ipv6_route_blackhole,
       "Table to configure\n"
       "The table number to configure\n")
 {
-       int idx_flag = 0;
-
        struct static_route_args args = {
                .delete = !!no,
                .afi = AFI_IP6,
@@ -932,9 +907,6 @@ DEFPY_YANG(ipv6_route_blackhole,
                .vrf = vrf,
        };
 
-       if (flag && argv_find(argv, argc, flag, &idx_flag))
-               args.input = argv[idx_flag]->arg;
-
        return static_route_nb_run(vty, &args);
 }
 
@@ -963,8 +935,6 @@ DEFPY_YANG(ipv6_route_blackhole_vrf,
       "Table to configure\n"
       "The table number to configure\n")
 {
-       int idx_flag = 0;
-
        struct static_route_args args = {
                .delete = !!no,
                .afi = AFI_IP6,
@@ -986,9 +956,6 @@ DEFPY_YANG(ipv6_route_blackhole_vrf,
         */
        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);
 }