]> git.puffer.fish Git - matthieu/frr.git/commitdiff
Revert "bgpd: fix compiler warnings in nbr cmd"
authorIgor Ryzhov <iryzhov@nfware.com>
Thu, 13 May 2021 22:49:37 +0000 (01:49 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Tue, 3 Aug 2021 19:20:52 +0000 (22:20 +0300)
This reverts commit 555c8ab7ad7a9f60c8d6cc9dd48705f0ee364797.

bgpd/bgp_nb_config.c
bgpd/bgp_vty.c

index 11d0f97de305ca879758e9bf26635d23f4413789..e1998c1c2917cae483eb079fda41cf4c3b8a1534 100644 (file)
@@ -3052,17 +3052,9 @@ int bgp_neighbors_neighbor_update_source_interface_modify(
        struct bgp *bgp;
        const char *peer_str, *source_str;
        struct peer *peer;
-       struct prefix p;
 
        switch (args->event) {
        case NB_EV_VALIDATE:
-               source_str = yang_dnode_get_string(args->dnode, NULL);
-               if (str2prefix(source_str, &p)) {
-                       snprintf(args->errmsg, args->errmsg_len,
-                                "Invalid update-source, remove prefix length");
-                       return NB_ERR_VALIDATION;
-               }
-               break;
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
                return NB_OK;
@@ -5079,17 +5071,9 @@ int bgp_neighbors_unnumbered_neighbor_update_source_interface_modify(
        struct bgp *bgp;
        const char *peer_str, *source_str;
        struct peer *peer;
-       struct prefix p;
 
        switch (args->event) {
        case NB_EV_VALIDATE:
-               source_str = yang_dnode_get_string(args->dnode, NULL);
-               if (str2prefix(source_str, &p)) {
-                       snprintf(args->errmsg, args->errmsg_len,
-                                "Invalid update-source, remove prefix length");
-                       return NB_ERR_VALIDATION;
-               }
-               break;
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
                return NB_OK;
@@ -6961,17 +6945,9 @@ int bgp_peer_groups_peer_group_update_source_interface_modify(
        struct bgp *bgp;
        const char *peer_str, *source_str;
        struct peer *peer;
-       struct prefix p;
 
        switch (args->event) {
        case NB_EV_VALIDATE:
-               source_str = yang_dnode_get_string(args->dnode, NULL);
-               if (str2prefix(source_str, &p)) {
-                       snprintf(args->errmsg, args->errmsg_len,
-                                "Invalid update-source, remove prefix length");
-                       return NB_ERR_VALIDATION;
-               }
-               break;
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
                return NB_OK;
index 2e2014c8a75cc279328fc820d84811f875b87a4b..ff28e111ecb9904d999cc6d3eff56c37fff11512 100644 (file)
@@ -5116,18 +5116,27 @@ DEFUN_YANG(neighbor_activate,
 {
        int idx_peer = 1;
        char base_xpath[XPATH_MAXLEN];
+       char abs_xpath[XPATH_MAXLEN];
+       char nbr_xpath[XPATH_MAXLEN];
        char af_xpath[XPATH_MAXLEN];
        afi_t afi = bgp_node_afi(vty);
        safi_t safi = bgp_node_safi(vty);
 
        snprintf(af_xpath, sizeof(af_xpath), FRR_BGP_AF_XPATH,
                 yang_afi_safi_value2identity(afi, safi));
-       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
-                                    sizeof(base_xpath), af_xpath)
+
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, nbr_xpath,
+                                    sizeof(nbr_xpath), af_xpath)
            < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       nb_cli_enqueue_change(vty, "./enabled", NB_OP_MODIFY, "true");
+       snprintf(base_xpath, sizeof(base_xpath), "%s%s", VTY_CURR_XPATH,
+                nbr_xpath + 1);
+
+       snprintf(abs_xpath, sizeof(abs_xpath), "%s%s/enabled", VTY_CURR_XPATH,
+                nbr_xpath + 1);
+
+       nb_cli_enqueue_change(vty, abs_xpath, NB_OP_MODIFY, "true");
 
        return nb_cli_apply_changes(vty, base_xpath);
 }
@@ -7260,6 +7269,7 @@ DEFUN_YANG (neighbor_update_source,
            < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
+       // NOTE: Check source_str prefix address
        if (str2sockunion(argv[idx_peer_2]->arg, &su) == 0)
                nb_cli_enqueue_change(vty, "./update-source/ip", NB_OP_MODIFY,
                                      argv[idx_peer_2]->arg);
@@ -7280,15 +7290,28 @@ DEFUN_YANG (no_neighbor_update_source,
 {
        int idx_peer = 2;
        char base_xpath[XPATH_MAXLEN];
+       char abs_xpath_ip[XPATH_MAXLEN];
+       char abs_xpath_intf[XPATH_MAXLEN];
 
        if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
                                     sizeof(base_xpath), NULL)
            < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       nb_cli_enqueue_change(vty, "./update-source/ip", NB_OP_DESTROY, NULL);
-       nb_cli_enqueue_change(vty, "./update-source/interface", NB_OP_DESTROY,
-                             NULL);
+       snprintf(abs_xpath_ip, sizeof(abs_xpath_ip), "%s%s/update-source/ip",
+                VTY_CURR_XPATH, base_xpath + 1);
+       snprintf(abs_xpath_intf, sizeof(abs_xpath_intf),
+                "%s%s/update-source/interface", VTY_CURR_XPATH,
+                base_xpath + 1);
+
+       if (yang_dnode_exists(vty->candidate_config->dnode, abs_xpath_ip)) {
+               nb_cli_enqueue_change(vty, "./update-source/ip", NB_OP_DESTROY,
+                                     NULL);
+       } else if (yang_dnode_exists(vty->candidate_config->dnode,
+                                    abs_xpath_intf)) {
+               nb_cli_enqueue_change(vty, "./update-source/interface",
+                                     NB_OP_DESTROY, NULL);
+       }
 
        return nb_cli_apply_changes(vty, base_xpath);
 }