diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 61666eb164..81712c5893 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -5167,63 +5167,27 @@ ALIAS_HIDDEN(no_neighbor_activate, no_neighbor_activate_hidden_cmd, NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2 "Enable the Address Family for this Neighbor\n") -DEFUN (neighbor_set_peer_group, - neighbor_set_peer_group_cmd, - "neighbor peer-group PGNAME", - NEIGHBOR_STR - NEIGHBOR_ADDR_STR2 - "Member of the peer-group\n" - "Peer-group name\n") +DEFUN_YANG (neighbor_set_peer_group, + neighbor_set_peer_group_cmd, + "neighbor peer-group PGNAME", + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Member of the peer-group\n" + "Peer-group name\n") { - VTY_DECLVAR_CONTEXT(bgp, bgp); int idx_peer = 1; int idx_word = 3; - int ret; - as_t as; - union sockunion su; - struct peer *peer; - struct peer_group *group; + char base_xpath[XPATH_MAXLEN]; - ret = str2sockunion(argv[idx_peer]->arg, &su); - if (ret < 0) { - peer = peer_lookup_by_conf_if(bgp, argv[idx_peer]->arg); - if (!peer) { - vty_out(vty, "%% Malformed address or name: %s\n", - argv[idx_peer]->arg); - return CMD_WARNING_CONFIG_FAILED; - } - } else { - if (peer_address_self_check(bgp, &su)) { - vty_out(vty, - "%% Can not configure the local system as neighbor\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - /* Disallow for dynamic neighbor. */ - peer = peer_lookup(bgp, &su); - if (peer && peer_dynamic_neighbor(peer)) { - vty_out(vty, - "%% Operation not allowed on a dynamic neighbor\n"); - return CMD_WARNING_CONFIG_FAILED; - } - } - - group = peer_group_lookup(bgp, argv[idx_word]->arg); - if (!group) { - vty_out(vty, "%% Configure the peer-group first\n"); + if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath, + sizeof(base_xpath), NULL) + < 0) return CMD_WARNING_CONFIG_FAILED; - } - ret = peer_group_bind(bgp, &su, peer, group, &as); + nb_cli_enqueue_change(vty, "./peer-group", NB_OP_MODIFY, + argv[idx_word]->arg); - if (ret == BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT) { - vty_out(vty, - "%% Peer with AS %u cannot be in this peer-group, members must be all internal or all external\n", - as); - return CMD_WARNING_CONFIG_FAILED; - } - - return bgp_vty_return(vty, ret); + return nb_cli_apply_changes(vty, base_xpath); } ALIAS_HIDDEN(neighbor_set_peer_group, neighbor_set_peer_group_hidden_cmd,