]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: finish consolidation of prefix-list nb callbacks
authorIgor Ryzhov <iryzhov@nfware.com>
Mon, 29 Mar 2021 19:53:36 +0000 (22:53 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Mon, 29 Mar 2021 21:15:28 +0000 (00:15 +0300)
There was an attempt to consolidate the code in commit fae60215, but the
work was not actually finished and some necessary checks were missed.

Let's finish it.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
lib/filter_nb.c

index 36ce5429c684161a74e0a229a262999fd34f891b..bb34efd34c677d3f716ce4d619cf411b32b004c7 100644 (file)
@@ -152,6 +152,27 @@ prefix_list_nb_validate_v6_af_type(const struct lyd_node *plist_dnode,
        return NB_OK;
 }
 
+static int lib_prefix_list_entry_prefix_length_greater_or_equal_modify(
+       struct nb_cb_modify_args *args)
+{
+       struct prefix_list_entry *ple;
+
+       if (args->event != NB_EV_APPLY)
+               return NB_OK;
+
+       ple = nb_running_get_entry(args->dnode, NULL, true);
+
+       /* Start prefix entry update procedure. */
+       prefix_list_entry_update_start(ple);
+
+       ple->ge = yang_dnode_get_uint8(args->dnode, NULL);
+
+       /* Finish prefix entry update procedure. */
+       prefix_list_entry_update_finish(ple);
+
+       return NB_OK;
+}
+
 static int lib_prefix_list_entry_prefix_length_lesser_or_equal_modify(
        struct nb_cb_modify_args *args)
 {
@@ -1321,26 +1342,20 @@ lib_prefix_list_entry_ipv6_prefix_destroy(struct nb_cb_destroy_args *args)
 static int lib_prefix_list_entry_ipv4_prefix_length_greater_or_equal_modify(
        struct nb_cb_modify_args *args)
 {
-       struct prefix_list_entry *ple;
-
-       if (args->event == NB_EV_VALIDATE &&
-           prefix_list_length_validate(args) != NB_OK)
+       if (args->event == NB_EV_VALIDATE
+           && prefix_list_length_validate(args) != NB_OK)
                return NB_ERR_VALIDATION;
 
-       if (args->event != NB_EV_APPLY)
-               return NB_OK;
-
-       ple = nb_running_get_entry(args->dnode, NULL, true);
-
-       /* Start prefix entry update procedure. */
-       prefix_list_entry_update_start(ple);
-
-       ple->ge = yang_dnode_get_uint8(args->dnode, NULL);
+       if (args->event == NB_EV_VALIDATE) {
+               const struct lyd_node *plist_dnode =
+                       yang_dnode_get_parent(args->dnode, "prefix-list");
 
-       /* Finish prefix entry update procedure. */
-       prefix_list_entry_update_finish(ple);
+               return prefix_list_nb_validate_v4_af_type(
+                       plist_dnode, args->errmsg, args->errmsg_len);
+       }
 
-       return NB_OK;
+       return lib_prefix_list_entry_prefix_length_greater_or_equal_modify(
+               args);
 }
 
 static int lib_prefix_list_entry_ipv4_prefix_length_greater_or_equal_destroy(
@@ -1376,7 +1391,8 @@ static int lib_prefix_list_entry_ipv4_prefix_length_lesser_or_equal_modify(
                        plist_dnode, args->errmsg, args->errmsg_len);
        }
 
-       return lib_prefix_list_entry_prefix_length_lesser_or_equal_modify(args);
+       return lib_prefix_list_entry_prefix_length_lesser_or_equal_modify(
+               args);
 }
 
 static int lib_prefix_list_entry_ipv4_prefix_length_lesser_or_equal_destroy(
@@ -1400,8 +1416,6 @@ static int lib_prefix_list_entry_ipv4_prefix_length_lesser_or_equal_destroy(
 static int lib_prefix_list_entry_ipv6_prefix_length_greater_or_equal_modify(
        struct nb_cb_modify_args *args)
 {
-       struct prefix_list_entry *ple;
-
        if (args->event == NB_EV_VALIDATE
            && prefix_list_length_validate(args) != NB_OK)
                return NB_ERR_VALIDATION;
@@ -1414,20 +1428,8 @@ static int lib_prefix_list_entry_ipv6_prefix_length_greater_or_equal_modify(
                        plist_dnode, args->errmsg, args->errmsg_len);
        }
 
-       if (args->event != NB_EV_APPLY)
-               return NB_OK;
-
-       ple = nb_running_get_entry(args->dnode, NULL, true);
-
-       /* Start prefix entry update procedure. */
-       prefix_list_entry_update_start(ple);
-
-       ple->ge = yang_dnode_get_uint8(args->dnode, NULL);
-
-       /* Finish prefix entry update procedure. */
-       prefix_list_entry_update_finish(ple);
-
-       return NB_OK;
+       return lib_prefix_list_entry_prefix_length_greater_or_equal_modify(
+               args);
 }
 
 static int lib_prefix_list_entry_ipv6_prefix_length_greater_or_equal_destroy(
@@ -1463,24 +1465,19 @@ static int lib_prefix_list_entry_ipv6_prefix_length_lesser_or_equal_modify(
                        plist_dnode, args->errmsg, args->errmsg_len);
        }
 
-       return lib_prefix_list_entry_prefix_length_lesser_or_equal_modify(args);
+       return lib_prefix_list_entry_prefix_length_lesser_or_equal_modify(
+               args);
 }
 
 static int lib_prefix_list_entry_ipv6_prefix_length_lesser_or_equal_destroy(
        struct nb_cb_destroy_args *args)
 {
-       int af_type;
-
        if (args->event == NB_EV_VALIDATE) {
                const struct lyd_node *plist_dnode =
                        yang_dnode_get_parent(args->dnode, "prefix-list");
-               af_type = yang_dnode_get_enum(plist_dnode, "./type");
-               if (af_type != YPLT_IPV6) {
-                       snprintf(args->errmsg, args->errmsg_len,
-                                "prefix-list type %u is mismatched.", af_type);
-                       return NB_ERR_VALIDATION;
-               }
-               return NB_OK;
+
+               return prefix_list_nb_validate_v6_af_type(
+                       plist_dnode, args->errmsg, args->errmsg_len);
        }
 
        return lib_prefix_list_entry_prefix_length_lesser_or_equal_destroy(