]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: convert send-community to transactional cli 8296/head
authorChirag Shah <chirag@nvidia.com>
Sat, 20 Mar 2021 05:19:39 +0000 (22:19 -0700)
committerChirag Shah <chirag@nvidia.com>
Sat, 20 Mar 2021 05:23:00 +0000 (22:23 -0700)
[no] neighbor <A.B.C.D|X:X::X:X|WORD> send-community

Signed-off-by: Chirag Shah <chirag@nvidia.com>
bgpd/bgp_vty.c

index 4b012430d9bf4acd51f1ab15d65699daf0b70733..d77cd8ec71e584bddb943d62738b3c1cf8eed946 100644 (file)
@@ -6139,10 +6139,28 @@ DEFUN_YANG (neighbor_send_community,
            "Send Community attribute to this neighbor\n")
 {
        int idx_peer = 1;
+       char *peer_str = argv[idx_peer]->arg;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char std_xpath[XPATH_MAXLEN];
+       afi_t afi = bgp_node_afi(vty);
+       safi_t safi = bgp_node_safi(vty);
 
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_SEND_COMMUNITY);
+       snprintf(af_xpath, sizeof(af_xpath), FRR_BGP_AF_XPATH,
+                yang_afi_safi_value2identity(afi, safi));
+
+       if (peer_and_group_lookup_nb(vty, peer_str, base_xpath,
+                                    sizeof(base_xpath), af_xpath)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(std_xpath, sizeof(std_xpath),
+                "./%s/send-community/send-community",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, std_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_send_community, neighbor_send_community_hidden_cmd,
@@ -6159,10 +6177,28 @@ DEFUN_YANG (no_neighbor_send_community,
            "Send Community attribute to this neighbor\n")
 {
        int idx_peer = 2;
+       char *peer_str = argv[idx_peer]->arg;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char std_xpath[XPATH_MAXLEN];
+       afi_t afi = bgp_node_afi(vty);
+       safi_t safi = bgp_node_safi(vty);
 
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_SEND_COMMUNITY);
+       snprintf(af_xpath, sizeof(af_xpath), FRR_BGP_AF_XPATH,
+                yang_afi_safi_value2identity(afi, safi));
+
+       if (peer_and_group_lookup_nb(vty, peer_str, base_xpath,
+                                    sizeof(base_xpath), af_xpath)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(std_xpath, sizeof(std_xpath),
+                "./%s/send-community/send-community",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, std_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_send_community, no_neighbor_send_community_hidden_cmd,