]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: show prefix error message on command failure 6914/head
authorRafael Zalamena <rzalamena@opensourcerouting.org>
Thu, 13 Aug 2020 22:59:47 +0000 (19:59 -0300)
committerRafael Zalamena <rzalamena@opensourcerouting.org>
Thu, 13 Aug 2020 22:59:47 +0000 (19:59 -0300)
Use `args->errmsg` instead of just `zlog_info` for registering the error
so the users don't need to check their log files.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
lib/filter_nb.c

index 41bf3cf7f4c9c711c4f2fa72e89b53dfaaccb58e..91691d2f1d1642e3255abf9baaf364db0760bc71 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "lib/northbound.h"
 #include "lib/prefix.h"
+#include "lib/printfrr.h"
 
 #include "lib/filter.h"
 #include "lib/plist.h"
@@ -39,20 +40,19 @@ ipv4_network_addr(in_addr_t hostaddr, int masklen)
        return hostaddr & mask.s_addr;
 }
 
-static enum nb_error
-prefix_list_length_validate(const struct lyd_node *dnode)
+static enum nb_error prefix_list_length_validate(struct nb_cb_modify_args *args)
 {
-       int type = yang_dnode_get_enum(dnode, "../../type");
+       int type = yang_dnode_get_enum(args->dnode, "../../type");
        const char *xpath_le = NULL, *xpath_ge = NULL;
        struct prefix p;
        uint8_t le, ge;
 
        if (type == YPLT_IPV4) {
-               yang_dnode_get_prefix(&p, dnode, "../ipv4-prefix");
+               yang_dnode_get_prefix(&p, args->dnode, "../ipv4-prefix");
                xpath_le = "../ipv4-prefix-length-lesser-or-equal";
                xpath_ge = "../ipv4-prefix-length-greater-or-equal";
        } else {
-               yang_dnode_get_prefix(&p, dnode, "../ipv6-prefix");
+               yang_dnode_get_prefix(&p, args->dnode, "../ipv6-prefix");
                xpath_le = "../ipv6-prefix-length-lesser-or-equal";
                xpath_ge = "../ipv6-prefix-length-greater-or-equal";
        }
@@ -61,19 +61,18 @@ prefix_list_length_validate(const struct lyd_node *dnode)
         * Check rule:
         * prefix length <= le.
         */
-       if (yang_dnode_exists(dnode, xpath_le)) {
-               le = yang_dnode_get_uint8(dnode, xpath_le);
+       if (yang_dnode_exists(args->dnode, xpath_le)) {
+               le = yang_dnode_get_uint8(args->dnode, xpath_le);
                if (p.prefixlen > le)
                        goto log_and_fail;
-
        }
 
        /*
         * Check rule:
         * prefix length < ge.
         */
-       if (yang_dnode_exists(dnode, xpath_ge)) {
-               ge = yang_dnode_get_uint8(dnode, xpath_ge);
+       if (yang_dnode_exists(args->dnode, xpath_ge)) {
+               ge = yang_dnode_get_uint8(args->dnode, xpath_ge);
                if (p.prefixlen >= ge)
                        goto log_and_fail;
        }
@@ -82,18 +81,21 @@ prefix_list_length_validate(const struct lyd_node *dnode)
         * Check rule:
         * ge <= le.
         */
-       if (yang_dnode_exists(dnode, xpath_le) &&
-           yang_dnode_exists(dnode, xpath_ge)) {
-               le = yang_dnode_get_uint8(dnode, xpath_le);
-               ge = yang_dnode_get_uint8(dnode, xpath_ge);
+       if (yang_dnode_exists(args->dnode, xpath_le)
+           && yang_dnode_exists(args->dnode, xpath_ge)) {
+               le = yang_dnode_get_uint8(args->dnode, xpath_le);
+               ge = yang_dnode_get_uint8(args->dnode, xpath_ge);
                if (ge > le)
                        goto log_and_fail;
        }
 
        return NB_OK;
 
-  log_and_fail:
-       zlog_info("prefix-list: invalid prefix range for %pFX: Make sure that mask length < ge <= le", &p);
+log_and_fail:
+       snprintfrr(
+               args->errmsg, args->errmsg_len,
+               "Invalid prefix range for %pFX: Make sure that mask length < ge <= le",
+               &p);
        return NB_ERR_VALIDATION;
 }
 
@@ -829,7 +831,7 @@ static int lib_prefix_list_entry_ipv4_prefix_length_greater_or_equal_modify(
        struct prefix_list_entry *ple;
 
        if (args->event == NB_EV_VALIDATE &&
-           prefix_list_length_validate(args->dnode) != NB_OK)
+           prefix_list_length_validate(args) != NB_OK)
                return NB_ERR_VALIDATION;
 
        if (args->event != NB_EV_APPLY)
@@ -878,7 +880,7 @@ static int lib_prefix_list_entry_ipv4_prefix_length_lesser_or_equal_modify(
        struct prefix_list_entry *ple;
 
        if (args->event == NB_EV_VALIDATE &&
-           prefix_list_length_validate(args->dnode) != NB_OK)
+           prefix_list_length_validate(args) != NB_OK)
                return NB_ERR_VALIDATION;
 
        if (args->event != NB_EV_APPLY)