]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: neighbor peergrp config to transactional cli
authorChirag Shah <chirag@nvidia.com>
Wed, 16 Sep 2020 04:56:10 +0000 (21:56 -0700)
committerChirag Shah <chirag@nvidia.com>
Tue, 27 Oct 2020 18:27:03 +0000 (11:27 -0700)
Signed-off-by: Chirag Shah <chirag@nvidia.com>
bgpd/bgp_nb.c
bgpd/bgp_nb.h
bgpd/bgp_nb_config.c
bgpd/bgp_vty.c
bgpd/bgp_vty.h
bgpd/bgpd.c
bgpd/bgpd.h
yang/frr-bgp-common-structure.yang
yang/frr-bgp-neighbor.yang
yang/frr-bgp-peer-group.yang
yang/frr-bgp.yang

index 333ca3cce9cafd0daf9a7885fa87fb624eb6e1d7..b6070e030aa2171701f9452854c4e60cf87b932e 100644 (file)
@@ -606,10 +606,17 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .modify = bgp_neighbors_neighbor_ebgp_multihop_disable_connected_check_modify,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/local-as",
+                       .cbs = {
+                               .apply_finish = bgp_neighbors_neighbor_local_as_apply_finish,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/local-as/local-as",
                        .cbs = {
                                .modify = bgp_neighbors_neighbor_local_as_local_as_modify,
+                               .destroy = bgp_neighbors_neighbor_local_as_local_as_destroy,
                        }
                },
                {
@@ -666,10 +673,17 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .destroy = bgp_neighbors_neighbor_bfd_options_check_cp_failure_destroy,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/admin-shutdown",
+                       .cbs = {
+                               .apply_finish = bgp_neighbors_neighbor_admin_shutdown_apply_finish,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/admin-shutdown/enable",
                        .cbs = {
                                .modify = bgp_neighbors_neighbor_admin_shutdown_enable_modify,
+                               .destroy = bgp_neighbors_neighbor_admin_shutdown_enable_destroy,
                        }
                },
                {
@@ -737,6 +751,7 @@ const struct frr_yang_module_info frr_bgp_info = {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/afi-safis/afi-safi/enabled",
                        .cbs = {
                                .modify = bgp_neighbors_neighbor_afi_safis_afi_safi_enabled_modify,
+                               .destroy = bgp_neighbors_neighbor_afi_safis_afi_safi_enabled_destroy,
                        }
                },
                {
@@ -842,10 +857,17 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .destroy = bgp_neighbors_unnumbered_neighbor_update_source_interface_destroy,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/neighbor-remote-as",
+                       .cbs = {
+                               .apply_finish = bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_apply_finish,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/neighbor-remote-as/remote-as-type",
                        .cbs = {
                                .modify = bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_type_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_type_destroy,
                        }
                },
                {
@@ -875,10 +897,17 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .modify = bgp_neighbors_unnumbered_neighbor_ebgp_multihop_disable_connected_check_modify,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/local-as",
+                       .cbs = {
+                               .apply_finish = bgp_neighbors_unnumbered_neighbor_local_as_apply_finish,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/local-as/local-as",
                        .cbs = {
                                .modify = bgp_neighbors_unnumbered_neighbor_local_as_local_as_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_local_as_local_as_destroy,
                        }
                },
                {
@@ -935,10 +964,17 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .destroy = bgp_neighbors_unnumbered_neighbor_bfd_options_check_cp_failure_destroy,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/admin-shutdown",
+                       .cbs = {
+                               .apply_finish = bgp_neighbors_unnumbered_neighbor_admin_shutdown_apply_finish,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/admin-shutdown/enable",
                        .cbs = {
                                .modify = bgp_neighbors_unnumbered_neighbor_admin_shutdown_enable_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_admin_shutdown_enable_destroy,
                        }
                },
                {
@@ -1006,6 +1042,7 @@ const struct frr_yang_module_info frr_bgp_info = {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/enabled",
                        .cbs = {
                                .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_enabled_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_enabled_destroy,
                        }
                },
                {
@@ -1112,10 +1149,17 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .destroy = bgp_peer_groups_peer_group_update_source_interface_destroy,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/neighbor-remote-as",
+                       .cbs = {
+                               .apply_finish = bgp_peer_group_neighbor_remote_as_apply_finish,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/neighbor-remote-as/remote-as-type",
                        .cbs = {
                                .modify = bgp_peer_groups_peer_group_neighbor_remote_as_remote_as_type_modify,
+                               .destroy = bgp_peer_groups_peer_group_neighbor_remote_as_remote_as_type_destroy,
                        }
                },
                {
@@ -1145,10 +1189,17 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .modify = bgp_peer_groups_peer_group_ebgp_multihop_disable_connected_check_modify,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/local-as",
+                       .cbs = {
+                               .apply_finish = bgp_peer_groups_peer_group_local_as_apply_finish,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/local-as/local-as",
                        .cbs = {
                                .modify = bgp_peer_groups_peer_group_local_as_local_as_modify,
+                               .destroy = bgp_peer_groups_peer_group_local_as_local_as_destroy,
                        }
                },
                {
@@ -1205,10 +1256,17 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .destroy = bgp_peer_groups_peer_group_bfd_options_check_cp_failure_destroy,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/admin-shutdown",
+                       .cbs = {
+                               .apply_finish = bgp_peer_groups_peer_group_admin_shutdown_apply_finish,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/admin-shutdown/enable",
                        .cbs = {
                                .modify = bgp_peer_groups_peer_group_admin_shutdown_enable_modify,
+                               .destroy = bgp_peer_groups_peer_group_admin_shutdown_enable_destroy,
                        }
                },
                {
@@ -1276,6 +1334,7 @@ const struct frr_yang_module_info frr_bgp_info = {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/enabled",
                        .cbs = {
                                .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_enabled_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_enabled_destroy,
                        }
                },
                {
index 532021425fafc9d7dc1954ba55f98be4a05e0e4c..5a9d602795987624c7bfb24b920e8833f7283d1e 100644 (file)
@@ -210,6 +210,8 @@ int bgp_neighbors_neighbor_update_source_interface_destroy(
        struct nb_cb_destroy_args *args);
 int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_type_modify(
        struct nb_cb_modify_args *args);
+int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_type_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_modify(
        struct nb_cb_modify_args *args);
 int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_destroy(
@@ -226,6 +228,8 @@ int bgp_neighbors_neighbor_ebgp_multihop_disable_connected_check_modify(
        struct nb_cb_modify_args *args);
 int bgp_neighbors_neighbor_local_as_local_as_modify(
        struct nb_cb_modify_args *args);
+int bgp_neighbors_neighbor_local_as_local_as_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_neighbors_neighbor_local_as_no_prepend_modify(
        struct nb_cb_modify_args *args);
 int bgp_neighbors_neighbor_local_as_no_prepend_destroy(
@@ -256,6 +260,8 @@ int bgp_neighbors_neighbor_bfd_options_check_cp_failure_destroy(
        struct nb_cb_destroy_args *args);
 int bgp_neighbors_neighbor_admin_shutdown_enable_modify(
        struct nb_cb_modify_args *args);
+int bgp_neighbors_neighbor_admin_shutdown_enable_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_neighbors_neighbor_admin_shutdown_message_modify(
        struct nb_cb_modify_args *args);
 int bgp_neighbors_neighbor_admin_shutdown_message_destroy(
@@ -290,6 +296,8 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_destroy(
        struct nb_cb_destroy_args *args);
 int bgp_neighbors_neighbor_afi_safis_afi_safi_enabled_modify(
        struct nb_cb_modify_args *args);
+int bgp_neighbors_neighbor_afi_safis_afi_safi_enabled_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_neighbors_unnumbered_neighbor_create(struct nb_cb_create_args *args);
 int bgp_neighbors_unnumbered_neighbor_destroy(struct nb_cb_destroy_args *args);
 int bgp_neighbors_unnumbered_neighbor_v6only_modify(
@@ -336,6 +344,8 @@ int bgp_neighbors_unnumbered_neighbor_update_source_interface_destroy(
        struct nb_cb_destroy_args *args);
 int bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_type_modify(
        struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_type_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_modify(
        struct nb_cb_modify_args *args);
 int bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_destroy(
@@ -352,6 +362,8 @@ int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_disable_connected_check_modi
        struct nb_cb_modify_args *args);
 int bgp_neighbors_unnumbered_neighbor_local_as_local_as_modify(
        struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_local_as_local_as_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_neighbors_unnumbered_neighbor_local_as_no_prepend_modify(
        struct nb_cb_modify_args *args);
 int bgp_neighbors_unnumbered_neighbor_local_as_no_prepend_destroy(
@@ -382,6 +394,8 @@ int bgp_neighbors_unnumbered_neighbor_bfd_options_check_cp_failure_destroy(
        struct nb_cb_destroy_args *args);
 int bgp_neighbors_unnumbered_neighbor_admin_shutdown_enable_modify(
        struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_admin_shutdown_enable_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_neighbors_unnumbered_neighbor_admin_shutdown_message_modify(
        struct nb_cb_modify_args *args);
 int bgp_neighbors_unnumbered_neighbor_admin_shutdown_message_destroy(
@@ -416,6 +430,8 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_destroy(
        struct nb_cb_destroy_args *args);
 int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_enabled_modify(
        struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_enabled_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_peer_groups_peer_group_create(struct nb_cb_create_args *args);
 int bgp_peer_groups_peer_group_destroy(struct nb_cb_destroy_args *args);
 int bgp_peer_groups_peer_group_ipv4_listen_range_create(
@@ -462,6 +478,8 @@ int bgp_peer_groups_peer_group_update_source_interface_destroy(
        struct nb_cb_destroy_args *args);
 int bgp_peer_groups_peer_group_neighbor_remote_as_remote_as_type_modify(
        struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_neighbor_remote_as_remote_as_type_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_peer_groups_peer_group_neighbor_remote_as_remote_as_modify(
        struct nb_cb_modify_args *args);
 int bgp_peer_groups_peer_group_neighbor_remote_as_remote_as_destroy(
@@ -478,6 +496,8 @@ int bgp_peer_groups_peer_group_ebgp_multihop_disable_connected_check_modify(
        struct nb_cb_modify_args *args);
 int bgp_peer_groups_peer_group_local_as_local_as_modify(
        struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_local_as_local_as_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_peer_groups_peer_group_local_as_no_prepend_modify(
        struct nb_cb_modify_args *args);
 int bgp_peer_groups_peer_group_local_as_no_prepend_destroy(
@@ -508,6 +528,8 @@ int bgp_peer_groups_peer_group_bfd_options_check_cp_failure_destroy(
        struct nb_cb_destroy_args *args);
 int bgp_peer_groups_peer_group_admin_shutdown_enable_modify(
        struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_admin_shutdown_enable_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_peer_groups_peer_group_admin_shutdown_message_modify(
        struct nb_cb_modify_args *args);
 int bgp_peer_groups_peer_group_admin_shutdown_message_destroy(
@@ -542,6 +564,8 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_destroy(
        struct nb_cb_destroy_args *args);
 int bgp_peer_groups_peer_group_afi_safis_afi_safi_enabled_modify(
        struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_enabled_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_global_afi_safis_afi_safi_ipv4_unicast_network_config_create(
        struct nb_cb_create_args *args);
 int bgp_global_afi_safis_afi_safi_ipv4_unicast_network_config_destroy(
@@ -3577,6 +3601,22 @@ void bgp_global_afi_safi_ip_unicast_redistribution_list_apply_finish(
        struct nb_cb_apply_finish_args *args);
 void bgp_global_afi_safis_afi_safi_route_flap_dampening_apply_finish(
        struct nb_cb_apply_finish_args *args);
+void bgp_neighbors_neighbor_local_as_apply_finish(
+       struct nb_cb_apply_finish_args *args);
+void bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_apply_finish(
+       struct nb_cb_apply_finish_args *args);
+void bgp_neighbors_unnumbered_neighbor_local_as_apply_finish(
+       struct nb_cb_apply_finish_args *args);
+void bgp_peer_group_neighbor_remote_as_apply_finish(
+       struct nb_cb_apply_finish_args *args);
+void bgp_neighbors_neighbor_admin_shutdown_apply_finish(
+       struct nb_cb_apply_finish_args *args);
+void bgp_neighbors_unnumbered_neighbor_admin_shutdown_apply_finish(
+       struct nb_cb_apply_finish_args *args);
+void bgp_peer_groups_peer_group_admin_shutdown_apply_finish(
+       struct nb_cb_apply_finish_args *args);
+void bgp_peer_groups_peer_group_local_as_apply_finish(
+       struct nb_cb_apply_finish_args *args);
 
 /* xpath macros */
 /* route-list */
@@ -3592,5 +3632,17 @@ void bgp_global_afi_safis_afi_safi_route_flap_dampening_apply_finish(
 #define FRR_BGP_AFI_SAFI_REDIST_XPATH                                          \
        "./global/afi-safis/afi-safi[afi-safi-name='%s']/%s/"                  \
        "redistribution-list[route-type='%s'][route-instance='%s']"
+#define FRR_BGP_NEIGHBOR_NUM_XPATH "./neighbors/neighbor[remote-address='%s']%s"
+#define FRR_BGP_NEIGHBOR_UNNUM_XPATH                                           \
+       "./neighbors/unnumbered-neighbor[interface='%s']%s"
+#define FRR_BGP_PEER_GROUP_XPATH                                               \
+       "./peer-groups/peer-group[peer-group-name='%s']%s"
+#define FRR_BGP_NEIGHBOR_NUM_AFI_SAFI_XPATH                                    \
+       "./neighbors/neighbor[remote-address='%s']/afi-safis/afi-safi[afi-safi-name='%s']"
+#define FRR_BGP_NEIGHBOR_UNNUM_AFI_SAFI_XPATH                                  \
+       "./neighbors/neighbor[interface='%s']/afi-safis/afi-safi[afi-safi-name='%s']"
+#define FRR_BGP_PEER_GROUP_AFI_SAFI_XPATH                                      \
+       "./peer-groups/peer-group[peer-group-name='%s']/afi-safis/afi-safi[afi-safi-name='%s']"
+#define FRR_BGP_AF_XPATH "/afi-safis/afi-safi[afi-safi-name='%s']"
 
 #endif
index 66dfa2aea7bb967008f690cf52f82badeea83a7f..3196c5f74584188c40618e0255b973f914315a6f 100644 (file)
@@ -2090,18 +2090,73 @@ int bgp_global_afi_safis_afi_safi_destroy(struct nb_cb_destroy_args *args)
        return NB_OK;
 }
 
+static struct peer *bgp_neighbor_peer_lookup(struct bgp *bgp,
+                                            const char *peer_str, char *errmsg,
+                                            size_t errmsg_len)
+{
+       struct peer *peer = NULL;
+       union sockunion su;
+
+       str2sockunion(peer_str, &su);
+       peer = peer_lookup(bgp, &su);
+       if (!peer) {
+               snprintf(errmsg, errmsg_len,
+                        "Specify remote-as or peer-group commands first");
+               return NULL;
+       }
+       if (peer_dynamic_neighbor(peer)) {
+               snprintf(errmsg, errmsg_len,
+                        "Operation not allowed on a dynamic neighbor\n");
+               return NULL;
+       }
+       return peer;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor
  */
 int bgp_neighbors_neighbor_create(struct nb_cb_create_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       union sockunion su;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
+
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "./remote-address");
+
+               bgp = nb_running_get_entry(args->dnode, NULL, false);
+               if (!bgp)
+                       return NB_OK;
+
+               str2sockunion(peer_str, &su);
+               if (peer_address_self_check(bgp, &su)) {
+                       snprintf(
+                               args->errmsg, args->errmsg_len,
+                               "Can not configure the local system as neighbor");
+                       return NB_ERR_VALIDATION;
+               }
+
+               break;
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               /* Once bgp instance available check self peer addr */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "./remote-address");
+               str2sockunion(peer_str, &su);
+               if (peer_address_self_check(bgp, &su)) {
+                       snprintf(
+                               args->errmsg, args->errmsg_len,
+                               "Can not configure the local system as neighbor");
+                       return NB_ERR_INCONSISTENCY;
+               }
                break;
        }
 
@@ -2110,12 +2165,65 @@ int bgp_neighbors_neighbor_create(struct nb_cb_create_args *args)
 
 int bgp_neighbors_neighbor_destroy(struct nb_cb_destroy_args *args)
 {
+
+       struct bgp *bgp;
+       const char *peer_str;
+       union sockunion su;
+       struct peer *peer = NULL;
+       struct peer *other;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
+               bgp = nb_running_get_entry(args->dnode, NULL, false);
+               if (!bgp)
+                       return NB_OK;
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "./remote-address");
+               str2sockunion(peer_str, &su);
+
+               peer = peer_lookup(bgp, &su);
+               if (peer) {
+                       if (peer_dynamic_neighbor(peer)) {
+                               snprintf(
+                                       args->errmsg, args->errmsg_len,
+                                       "Operation not allowed on a dynamic neighbor");
+                               return NB_ERR_VALIDATION;
+                       }
+               }
+               break;
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "./remote-address");
+               str2sockunion(peer_str, &su);
+
+               peer = peer_lookup(bgp, &su);
+               if (peer) {
+                       if (peer_dynamic_neighbor(peer)) {
+                               snprintf(
+                                       args->errmsg, args->errmsg_len,
+                                       "Operation not allowed on a dynamic neighbor");
+                               return NB_ERR_INCONSISTENCY;
+                       }
+
+                       other = peer->doppelganger;
+
+                       if (CHECK_FLAG(peer->flags, PEER_FLAG_CAPABILITY_ENHE))
+                               bgp_zebra_terminate_radv(peer->bgp, peer);
+
+                       peer_notify_unconfig(peer);
+                       peer_delete(peer);
+                       if (other && other->status != Deleted) {
+                               peer_notify_unconfig(other);
+                               peer_delete(other);
+                       }
+               }
+
                break;
        }
 
@@ -2129,12 +2237,38 @@ int bgp_neighbors_neighbor_destroy(struct nb_cb_destroy_args *args)
 int bgp_neighbors_neighbor_local_interface_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *intf_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "BGP invalid peer %s", peer_str);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               if (peer->conf_if) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "BGP invalid peer %s", peer_str);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               intf_str = yang_dnode_get_string(args->dnode, NULL);
+
+               peer_interface_set(peer, intf_str);
+
                break;
        }
 
@@ -2144,12 +2278,35 @@ int bgp_neighbors_neighbor_local_interface_modify(
 int bgp_neighbors_neighbor_local_interface_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "BGP invalid peer %s", peer_str);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               if (peer->conf_if) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "BGP invalid peer %s", peer_str);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               peer_interface_unset(peer);
+
                break;
        }
 
@@ -2162,12 +2319,31 @@ int bgp_neighbors_neighbor_local_interface_destroy(
  */
 int bgp_neighbors_neighbor_local_port_modify(struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t port;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "BGP invalid peer %s", peer_str);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               port = yang_dnode_get_uint16(args->dnode, NULL);
+               peer_port_set(peer, port);
+
                break;
        }
 
@@ -2176,12 +2352,33 @@ int bgp_neighbors_neighbor_local_port_modify(struct nb_cb_modify_args *args)
 
 int bgp_neighbors_neighbor_local_port_destroy(struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t port;
+       struct servent *sp;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "BGP invalid peer %s", peer_str);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               sp = getservbyname("bgp", "tcp");
+               port = (sp == NULL) ? BGP_PORT_DEFAULT : ntohs(sp->s_port);
+               peer_port_set(peer, port);
+
                break;
        }
 
@@ -2194,12 +2391,67 @@ int bgp_neighbors_neighbor_local_port_destroy(struct nb_cb_destroy_args *args)
  */
 int bgp_neighbors_neighbor_peer_group_modify(struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *peer_grp_str;
+       struct peer *peer;
+       struct peer_group *group;
+       union sockunion su;
+       as_t as;
+       int ret = 0;
+       char prgrp_xpath[XPATH_MAXLEN];
+       const struct lyd_node *bgp_dnode;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
+               peer_grp_str = yang_dnode_get_string(args->dnode, NULL);
+               bgp_dnode = yang_dnode_get_parent(args->dnode, "bgp");
+               snprintf(prgrp_xpath, sizeof(prgrp_xpath),
+                        FRR_BGP_PEER_GROUP_XPATH, peer_grp_str, "");
+
+               if (!yang_dnode_exists(bgp_dnode, prgrp_xpath)) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "Configure the peer-group first %s",
+                                peer_grp_str);
+                       return NB_ERR_VALIDATION;
+               }
+
+               break;
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+
+               str2sockunion(peer_str, &su);
+
+               peer_grp_str = yang_dnode_get_string(args->dnode, NULL);
+               group = peer_group_lookup(bgp, peer_grp_str);
+               if (!group) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "Configure the peer-group first %s",
+                                peer_grp_str);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               ret = peer_group_bind(bgp, &su, peer, group, &as);
+
+               if (ret == BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT) {
+                       snprintf(
+                               args->errmsg, args->errmsg_len,
+                               "Peer with AS %u cannot be in this peer-group, members must be all internal or all external\n",
+                               as);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -2208,12 +2460,33 @@ int bgp_neighbors_neighbor_peer_group_modify(struct nb_cb_modify_args *args)
 
 int bgp_neighbors_neighbor_peer_group_destroy(struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+
+               if (CHECK_FLAG(peer->flags, PEER_FLAG_CAPABILITY_ENHE))
+                       bgp_zebra_terminate_radv(peer->bgp, peer);
+
+               peer_notify_unconfig(peer);
+               ret = peer_delete(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -2226,12 +2499,29 @@ int bgp_neighbors_neighbor_peer_group_destroy(struct nb_cb_destroy_args *args)
  */
 int bgp_neighbors_neighbor_password_modify(struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *passwrd_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               passwrd_str = yang_dnode_get_string(args->dnode, NULL);
+
+               peer_password_set(peer, passwrd_str);
+
                break;
        }
 
@@ -2240,12 +2530,26 @@ int bgp_neighbors_neighbor_password_modify(struct nb_cb_modify_args *args)
 
 int bgp_neighbors_neighbor_password_destroy(struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_password_unset(peer);
+
                break;
        }
 
@@ -2258,12 +2562,44 @@ int bgp_neighbors_neighbor_password_destroy(struct nb_cb_destroy_args *args)
  */
 int bgp_neighbors_neighbor_ttl_security_modify(struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+       uint8_t gtsm_hops;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               gtsm_hops = yang_dnode_get_uint8(args->dnode, NULL);
+               /*
+                * If 'neighbor swpX', then this is for directly connected
+                * peers, we should not accept a ttl-security hops value greater
+                * than 1.
+                */
+               if (peer->conf_if && (gtsm_hops > BGP_GTSM_HOPS_CONNECTED)) {
+                       snprintf(
+                               args->errmsg, args->errmsg_len,
+                               "%d is directly connected peer, hops cannot exceed 1\n",
+                               gtsm_hops);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               ret = peer_ttl_security_hops_set(peer, gtsm_hops);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret))
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -2272,12 +2608,31 @@ int bgp_neighbors_neighbor_ttl_security_modify(struct nb_cb_modify_args *args)
 
 int bgp_neighbors_neighbor_ttl_security_destroy(struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               ret = peer_ttl_security_hops_unset(peer);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
+
                break;
        }
 
@@ -2309,12 +2664,28 @@ int bgp_neighbors_neighbor_solo_modify(struct nb_cb_modify_args *args)
 int bgp_neighbors_neighbor_enforce_first_as_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+
+               enable = yang_dnode_get_bool(args->dnode, NULL);
+
+               peer_flag_modify_nb(bgp, peer_str, peer,
+                                   PEER_FLAG_ENFORCE_FIRST_AS, enable,
+                                   args->errmsg, args->errmsg_len);
                break;
        }
 
@@ -2327,12 +2698,30 @@ int bgp_neighbors_neighbor_enforce_first_as_modify(
  */
 int bgp_neighbors_neighbor_description_modify(struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *desc_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               desc_str = yang_dnode_get_string(args->dnode, NULL);
+
+               peer_description_set(peer, desc_str);
+
                break;
        }
 
@@ -2341,12 +2730,26 @@ int bgp_neighbors_neighbor_description_modify(struct nb_cb_modify_args *args)
 
 int bgp_neighbors_neighbor_description_destroy(struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_description_unset(peer);
+
                break;
        }
 
@@ -2359,12 +2762,32 @@ int bgp_neighbors_neighbor_description_destroy(struct nb_cb_destroy_args *args)
  */
 int bgp_neighbors_neighbor_passive_mode_modify(struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool set = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               set = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (peer_flag_modify_nb(bgp, peer_str, peer, PEER_FLAG_PASSIVE,
+                                       set, args->errmsg, args->errmsg_len)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -2378,12 +2801,29 @@ int bgp_neighbors_neighbor_passive_mode_modify(struct nb_cb_modify_args *args)
 int bgp_neighbors_neighbor_capability_options_dynamic_capability_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+
+               enable = yang_dnode_get_bool(args->dnode, NULL);
+
+               peer_flag_modify_nb(bgp, peer_str, peer,
+                                   PEER_FLAG_DYNAMIC_CAPABILITY, enable,
+                                   args->errmsg, args->errmsg_len);
+
                break;
        }
 
@@ -2416,12 +2856,29 @@ int bgp_neighbors_neighbor_capability_options_strict_capability_modify(
 int bgp_neighbors_neighbor_capability_options_extended_nexthop_capability_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+
+               enable = yang_dnode_get_bool(args->dnode, NULL);
+
+               peer_flag_modify_nb(bgp, peer_str, peer,
+                                   PEER_FLAG_CAPABILITY_ENHE, enable,
+                                   args->errmsg, args->errmsg_len);
+
                break;
        }
 
@@ -2473,12 +2930,30 @@ int bgp_neighbors_neighbor_capability_options_override_capability_modify(
 int bgp_neighbors_neighbor_update_source_ip_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str, *source_str;
+       struct peer *peer;
+       union sockunion su;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               source_str = yang_dnode_get_string(args->dnode, NULL);
+
+               str2sockunion(source_str, &su);
+               peer_update_source_addr_set(peer, &su);
+
                break;
        }
 
@@ -2488,12 +2963,26 @@ int bgp_neighbors_neighbor_update_source_ip_modify(
 int bgp_neighbors_neighbor_update_source_ip_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_update_source_unset(peer);
+
                break;
        }
 
@@ -2507,12 +2996,28 @@ int bgp_neighbors_neighbor_update_source_ip_destroy(
 int bgp_neighbors_neighbor_update_source_interface_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str, *source_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               source_str = yang_dnode_get_string(args->dnode, NULL);
+
+               peer_update_source_if_set(peer, source_str);
+
                break;
        }
 
@@ -2522,24 +3027,78 @@ int bgp_neighbors_neighbor_update_source_interface_modify(
 int bgp_neighbors_neighbor_update_source_interface_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_update_source_unset(peer);
+
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/neighbor-remote-as/remote-as-type
+ */
+int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_type_modify(
+       struct nb_cb_modify_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       int as_type = AS_SPECIFIED;
+       union sockunion su;
+       int ret;
+       as_t as = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               as_type = yang_dnode_get_enum(args->dnode, "../remote-as-type");
+               /* When remote-as-type is as-specified, the peer will be
+                * created in remote_as_modify callback */
+               if (yang_dnode_exists(args->dnode, "../remote-as"))
+                       return NB_OK;
+
+               str2sockunion(peer_str, &su);
+               ret = peer_remote_as(bgp, &su, NULL, &as, as_type, AFI_IP,
+                                    SAFI_UNICAST);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
+
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/neighbor-remote-as/remote-as-type
- */
-int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_type_modify(
-       struct nb_cb_modify_args *args)
+int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_type_destroy(
+       struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -2560,12 +3119,34 @@ int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_type_modify(
 int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       int as_type = AS_SPECIFIED;
+       union sockunion su;
+       int ret;
+       as_t as = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               as_type = yang_dnode_get_enum(args->dnode, "../remote-as-type");
+               as = yang_dnode_get_uint32(args->dnode, NULL);
+
+               str2sockunion(peer_str, &su);
+               ret = peer_remote_as(bgp, &su, NULL, &as, as_type, AFI_IP,
+                                    SAFI_UNICAST);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
+
                break;
        }
 
@@ -2594,12 +3175,46 @@ int bgp_neighbors_neighbor_neighbor_remote_as_remote_as_destroy(
 int bgp_neighbors_neighbor_ebgp_multihop_enabled_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool set = false;
+       int ret = 0;
+       uint8_t ttl = MAXTTL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               if (peer->conf_if) {
+                       ret = BGP_ERR_INVALID_FOR_DIRECT_PEER;
+                       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len,
+                                            ret);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               set = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (set)
+                       ret = peer_ebgp_multihop_set(peer, ttl);
+               else
+                       ret = peer_ebgp_multihop_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
+
                break;
        }
 
@@ -2609,12 +3224,32 @@ int bgp_neighbors_neighbor_ebgp_multihop_enabled_modify(
 int bgp_neighbors_neighbor_ebgp_multihop_enabled_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               ret = peer_ebgp_multihop_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
+
                break;
        }
 
@@ -2628,12 +3263,39 @@ int bgp_neighbors_neighbor_ebgp_multihop_enabled_destroy(
 int bgp_neighbors_neighbor_ebgp_multihop_multihop_ttl_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret = 0;
+       uint8_t ttl = MAXTTL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               if (peer->conf_if) {
+                       ret = BGP_ERR_INVALID_FOR_DIRECT_PEER;
+                       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len,
+                                            ret);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               ttl = yang_dnode_get_uint8(args->dnode, NULL);
+
+               ret = peer_ebgp_multihop_set(peer, ttl);
+
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -2643,12 +3305,29 @@ int bgp_neighbors_neighbor_ebgp_multihop_multihop_ttl_modify(
 int bgp_neighbors_neighbor_ebgp_multihop_multihop_ttl_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               ret = peer_ebgp_multihop_unset(peer);
+
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -2662,18 +3341,74 @@ int bgp_neighbors_neighbor_ebgp_multihop_multihop_ttl_destroy(
 int bgp_neighbors_neighbor_ebgp_multihop_disable_connected_check_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool set = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               set = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (peer_flag_modify_nb(bgp, peer_str, peer,
+                                       PEER_FLAG_DISABLE_CONNECTED_CHECK, set,
+                                       args->errmsg, args->errmsg_len)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/local-as
+ */
+void bgp_neighbors_neighbor_local_as_apply_finish(
+       struct nb_cb_apply_finish_args *args)
+{
+       struct bgp *bgp;
+       int ret;
+       as_t as = 0;
+       const char *peer_str;
+       struct peer *peer = NULL;
+       bool no_prepend = 0;
+       bool replace_as = 0;
+
+       bgp = nb_running_get_entry(args->dnode, NULL, true);
+       peer_str = yang_dnode_get_string(args->dnode, "../remote-address");
+       peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                       args->errmsg_len);
+
+       if (yang_dnode_exists(args->dnode, "./local-as"))
+               as = yang_dnode_get_uint32(args->dnode, "./local-as");
+       if (yang_dnode_exists(args->dnode, "./no-prepend"))
+               no_prepend = yang_dnode_get_bool(args->dnode, "./no-prepend");
+       if (yang_dnode_exists(args->dnode, "./no-replace-as"))
+               replace_as =
+                       yang_dnode_get_bool(args->dnode, "./no-replace-as");
+
+       if (!as && !no_prepend && !replace_as)
+               ret = peer_local_as_unset(peer);
+       else
+               ret = peer_local_as_set(peer, as, no_prepend, replace_as);
+       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/local-as/local-as
@@ -2693,6 +3428,40 @@ int bgp_neighbors_neighbor_local_as_local_as_modify(
        return NB_OK;
 }
 
+int bgp_neighbors_neighbor_local_as_local_as_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       struct bgp *bgp;
+       int ret;
+       const char *peer_str;
+       struct peer *peer;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+
+
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+
+               ret = peer_local_as_unset(peer);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
+
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/local-as/no-prepend
@@ -2935,6 +3704,34 @@ int bgp_neighbors_neighbor_bfd_options_check_cp_failure_destroy(
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/admin-shutdown
+ */
+void bgp_neighbors_neighbor_admin_shutdown_apply_finish(
+       struct nb_cb_apply_finish_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+       const char *message;
+
+       bgp = nb_running_get_entry(args->dnode, NULL, true);
+       peer_str = yang_dnode_get_string(args->dnode, "../remote-address");
+       peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                       args->errmsg_len);
+
+       if (yang_dnode_exists(args->dnode, "./message")) {
+               message = yang_dnode_get_string(args->dnode, "./message");
+               peer_tx_shutdown_message_set(peer, message);
+       }
+       enable = yang_dnode_get_bool(args->dnode, "./enable");
+
+       peer_flag_modify_nb(bgp, peer_str, peer, PEER_FLAG_SHUTDOWN, enable,
+                           args->errmsg, args->errmsg_len);
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/admin-shutdown/enable
@@ -2954,6 +3751,21 @@ int bgp_neighbors_neighbor_admin_shutdown_enable_modify(
        return NB_OK;
 }
 
+int bgp_neighbors_neighbor_admin_shutdown_enable_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/admin-shutdown/message
@@ -3097,12 +3909,30 @@ int bgp_neighbors_neighbor_graceful_restart_graceful_restart_disable_destroy(
 int bgp_neighbors_neighbor_timers_advertise_interval_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t routeadv;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               routeadv = yang_dnode_get_uint16(args->dnode, NULL);
+
+               ret = peer_advertise_interval_set(peer, routeadv);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3112,12 +3942,28 @@ int bgp_neighbors_neighbor_timers_advertise_interval_modify(
 int bgp_neighbors_neighbor_timers_advertise_interval_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+
+               ret = peer_advertise_interval_unset(peer);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3131,12 +3977,30 @@ int bgp_neighbors_neighbor_timers_advertise_interval_destroy(
 int bgp_neighbors_neighbor_timers_connect_time_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t connect;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               connect = yang_dnode_get_uint16(args->dnode, NULL);
+
+               ret = peer_timers_connect_set(peer, connect);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3146,12 +4010,28 @@ int bgp_neighbors_neighbor_timers_connect_time_modify(
 int bgp_neighbors_neighbor_timers_connect_time_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+
+               ret = peer_timers_connect_unset(peer);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3165,12 +4045,37 @@ int bgp_neighbors_neighbor_timers_connect_time_destroy(
 int bgp_neighbors_neighbor_timers_hold_time_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t keepalive = 0;
+       uint16_t holdtime = 0;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               keepalive = yang_dnode_get_uint16(args->dnode, "../keepalive");
+               holdtime = yang_dnode_get_uint16(args->dnode, NULL);
+
+               if (keepalive != BGP_DEFAULT_KEEPALIVE
+                   && holdtime != BGP_DEFAULT_HOLDTIME) {
+                       ret = peer_timers_set(peer, keepalive, holdtime);
+               } else
+                       ret = peer_timers_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3184,12 +4089,44 @@ int bgp_neighbors_neighbor_timers_hold_time_modify(
 int bgp_neighbors_neighbor_timers_keepalive_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t keepalive = 0, curr_keep = 0;
+       uint16_t holdtime = 0;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../remote-address");
+               peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                               args->errmsg_len);
+               keepalive = yang_dnode_get_uint16(args->dnode, NULL);
+               holdtime = yang_dnode_get_uint16(args->dnode, "../hold-time");
+
+               if (keepalive != BGP_DEFAULT_KEEPALIVE
+                   && holdtime != BGP_DEFAULT_HOLDTIME) {
+                       if (peer->holdtime == holdtime) {
+                               curr_keep = (keepalive < holdtime / 3
+                                                    ? keepalive
+                                                    : holdtime / 3);
+                               if (curr_keep == keepalive)
+                                       return NB_OK;
+                       }
+                       ret = peer_timers_set(peer, keepalive, holdtime);
+               } else
+                       ret = peer_timers_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3236,6 +4173,49 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_destroy(
  */
 int bgp_neighbors_neighbor_afi_safis_afi_safi_enabled_modify(
        struct nb_cb_modify_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *af_name;
+       afi_t afi;
+       safi_t safi;
+       bool activate = false;
+       int ret = 0;
+       union sockunion su;
+       struct peer *peer;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               af_name =
+                       yang_dnode_get_string(args->dnode, "../afi-safi-name");
+               yang_afi_safi_identity2value(af_name, &afi, &safi);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../../remote-address");
+               str2sockunion(peer_str, &su);
+               peer = peer_lookup(bgp, &su);
+
+               activate = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (activate)
+                       ret = peer_activate(peer, afi, safi);
+               else
+                       ret = peer_deactivate(peer, afi, safi);
+
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
+               break;
+       }
+
+       return NB_OK;
+}
+
+int bgp_neighbors_neighbor_afi_safis_afi_safi_enabled_destroy(
+       struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -3249,18 +4229,91 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_enabled_modify(
        return NB_OK;
 }
 
+static struct peer *bgp_unnumbered_neighbor_peer_lookup(struct bgp *bgp,
+                                                       const char *peer_str,
+                                                       char *errmsg,
+                                                       size_t errmsg_len)
+{
+       struct peer *peer = NULL;
+
+       /* Not IP, could match either peer configured on interface or a
+        * group. */
+       peer = peer_lookup_by_conf_if(bgp, peer_str);
+       if (!peer) {
+               snprintf(errmsg, errmsg_len,
+                        "Specify remote-as or peer-group commands first");
+               return NULL;
+       }
+       if (peer_dynamic_neighbor(peer)) {
+               snprintf(errmsg, errmsg_len,
+                        "Operation not allowed on a dynamic neighbor\n");
+               return NULL;
+       }
+
+       return peer;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor
  */
 int bgp_neighbors_unnumbered_neighbor_create(struct nb_cb_create_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *peer_grp_str = NULL;
+       bool v6_only = false;
+       int as_type = AS_UNSPECIFIED;
+       as_t as = 0;
+       char prgrp_xpath[XPATH_MAXLEN];
+       const struct lyd_node *bgp_dnode;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
+               peer_str = yang_dnode_get_string(args->dnode, "./interface");
+               bgp_dnode = yang_dnode_get_parent(args->dnode, "bgp");
+               snprintf(prgrp_xpath, sizeof(prgrp_xpath),
+                        FRR_BGP_PEER_GROUP_XPATH, peer_str, "");
+
+               if (yang_dnode_exists(bgp_dnode, prgrp_xpath)) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "Name conflict with peer-group: %s", peer_str);
+                       return NB_ERR_VALIDATION;
+               }
+
+               break;
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "./interface");
+
+               if (yang_dnode_exists(args->dnode, "./peer-group"))
+                       peer_grp_str = yang_dnode_get_string(args->dnode,
+                                                            "./peer-group");
+
+               if (yang_dnode_exists(args->dnode, "./v6-only"))
+                       v6_only = yang_dnode_get_bool(args->dnode, "./v6-only");
+
+               if (yang_dnode_exists(args->dnode,
+                                     "./neighbor-remote-as/remote-as-type")) {
+                       as_type = yang_dnode_get_enum(
+                               args->dnode,
+                               "./neighbor-remote-as/remote-as-type");
+                       if (yang_dnode_exists(args->dnode,
+                                             "./neighbor-remote-as/remote-as"))
+                               as = yang_dnode_get_uint32(
+                                       args->dnode,
+                                       "./neighbor-remote-as/remote-as");
+               }
+
+               if (peer_conf_interface_create(bgp, peer_str, AFI_IP,
+                                              SAFI_UNICAST, v6_only,
+                                              peer_grp_str, as_type, as,
+                                              args->errmsg, args->errmsg_len))
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3269,12 +4322,34 @@ int bgp_neighbors_unnumbered_neighbor_create(struct nb_cb_create_args *args)
 
 int bgp_neighbors_unnumbered_neighbor_destroy(struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+
+               peer_str = yang_dnode_get_string(args->dnode, "./interface");
+               /* look up for neighbor by interface name config. */
+               peer = peer_lookup_by_conf_if(bgp, peer_str);
+               if (peer) {
+                       /* Request zebra to terminate IPv6 RAs on this
+                        * interface. */
+                       if (peer->ifp)
+                               bgp_zebra_terminate_radv(peer->bgp, peer);
+                       peer_notify_unconfig(peer);
+                       peer_delete(peer);
+               } else {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "Create the peer-group first");
+                       return NB_ERR_INCONSISTENCY;
+               }
+
                break;
        }
 
@@ -3288,12 +4363,26 @@ int bgp_neighbors_unnumbered_neighbor_destroy(struct nb_cb_destroy_args *args)
 int bgp_neighbors_unnumbered_neighbor_v6only_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       bool v6_only = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+
+               v6_only = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (peer_conf_interface_create(
+                           bgp, peer_str, AFI_IP, SAFI_UNICAST, v6_only, NULL,
+                           AS_UNSPECIFIED, 0, args->errmsg, args->errmsg_len))
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3307,12 +4396,60 @@ int bgp_neighbors_unnumbered_neighbor_v6only_modify(
 int bgp_neighbors_unnumbered_neighbor_peer_group_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *peer_grp_str;
+       struct peer *peer;
+       struct peer_group *group;
+       union sockunion su;
+       as_t as;
+       int ret = 0;
+       char prgrp_xpath[XPATH_MAXLEN];
+       const struct lyd_node *bgp_dnode;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
+               peer_grp_str = yang_dnode_get_string(args->dnode, NULL);
+               bgp_dnode = yang_dnode_get_parent(args->dnode, "bgp");
+               snprintf(prgrp_xpath, sizeof(prgrp_xpath),
+                        FRR_BGP_PEER_GROUP_XPATH, peer_grp_str, "");
+
+               if (!yang_dnode_exists(bgp_dnode, prgrp_xpath)) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "Configure the peer-group first %s",
+                                peer_grp_str);
+                       return NB_ERR_VALIDATION;
+               }
+
+               break;
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+
+               peer_grp_str = yang_dnode_get_string(args->dnode, NULL);
+               group = peer_group_lookup(bgp, peer_grp_str);
+               if (!group) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "Configure the peer-group first\n");
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               ret = peer_group_bind(bgp, &su, peer, group, &as);
+               if (ret == BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT) {
+                       snprintf(
+                               args->errmsg, args->errmsg_len,
+                               "Peer with AS %u cannot be in this peer-group, members must be all internal or all external\n",
+                               as);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -3322,12 +4459,33 @@ int bgp_neighbors_unnumbered_neighbor_peer_group_modify(
 int bgp_neighbors_unnumbered_neighbor_peer_group_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../remote-address");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+
+               if (CHECK_FLAG(peer->flags, PEER_FLAG_CAPABILITY_ENHE))
+                       bgp_zebra_terminate_radv(peer->bgp, peer);
+
+               peer_notify_unconfig(peer);
+               ret = peer_delete(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3341,12 +4499,27 @@ int bgp_neighbors_unnumbered_neighbor_peer_group_destroy(
 int bgp_neighbors_unnumbered_neighbor_password_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *passwrd_str;
+       struct peer *peer = NULL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               passwrd_str = yang_dnode_get_string(args->dnode, NULL);
+               peer_password_set(peer, passwrd_str);
+
                break;
        }
 
@@ -3356,12 +4529,25 @@ int bgp_neighbors_unnumbered_neighbor_password_modify(
 int bgp_neighbors_unnumbered_neighbor_password_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer = NULL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_password_unset(peer);
+
                break;
        }
 
@@ -3375,12 +4561,44 @@ int bgp_neighbors_unnumbered_neighbor_password_destroy(
 int bgp_neighbors_unnumbered_neighbor_ttl_security_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+       uint8_t gtsm_hops;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               gtsm_hops = yang_dnode_get_uint8(args->dnode, NULL);
+               /*
+                * If 'neighbor swpX', then this is for directly connected
+                * peers, we should not accept a ttl-security hops value greater
+                * than 1.
+                */
+               if (peer->conf_if && (gtsm_hops > BGP_GTSM_HOPS_CONNECTED)) {
+                       snprintf(
+                               args->errmsg, args->errmsg_len,
+                               "%d is directly connected peer, hops cannot exceed 1\n",
+                               gtsm_hops);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               ret = peer_ttl_security_hops_set(peer, gtsm_hops);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3390,12 +4608,27 @@ int bgp_neighbors_unnumbered_neighbor_ttl_security_modify(
 int bgp_neighbors_unnumbered_neighbor_ttl_security_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               ret = peer_ttl_security_hops_unset(peer);
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -3428,12 +4661,28 @@ int bgp_neighbors_unnumbered_neighbor_solo_modify(
 int bgp_neighbors_unnumbered_neighbor_enforce_first_as_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+
+               enable = yang_dnode_get_bool(args->dnode, NULL);
+
+               peer_flag_modify_nb(bgp, peer_str, peer,
+                                   PEER_FLAG_ENFORCE_FIRST_AS, enable,
+                                   args->errmsg, args->errmsg_len);
+
                break;
        }
 
@@ -3447,12 +4696,29 @@ int bgp_neighbors_unnumbered_neighbor_enforce_first_as_modify(
 int bgp_neighbors_unnumbered_neighbor_description_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *desc_str;
+       struct peer *peer = NULL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               desc_str = yang_dnode_get_string(args->dnode, NULL);
+
+               peer_description_set(peer, desc_str);
+
                break;
        }
 
@@ -3462,12 +4728,26 @@ int bgp_neighbors_unnumbered_neighbor_description_modify(
 int bgp_neighbors_unnumbered_neighbor_description_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer = NULL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_description_unset(peer);
+
                break;
        }
 
@@ -3481,12 +4761,31 @@ int bgp_neighbors_unnumbered_neighbor_description_destroy(
 int bgp_neighbors_unnumbered_neighbor_passive_mode_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool set = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode, "../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               set = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (peer_flag_modify_nb(bgp, peer_str, peer, PEER_FLAG_PASSIVE,
+                                       set, args->errmsg, args->errmsg_len)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -3500,12 +4799,31 @@ int bgp_neighbors_unnumbered_neighbor_passive_mode_modify(
 int bgp_neighbors_unnumbered_neighbor_capability_options_dynamic_capability_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               enable = yang_dnode_get_bool(args->dnode, NULL);
+
+               peer_flag_modify_nb(bgp, peer_str, peer,
+                                   PEER_FLAG_DYNAMIC_CAPABILITY, enable,
+                                   args->errmsg, args->errmsg_len);
+
                break;
        }
 
@@ -3538,12 +4856,31 @@ int bgp_neighbors_unnumbered_neighbor_capability_options_strict_capability_modif
 int bgp_neighbors_unnumbered_neighbor_capability_options_extended_nexthop_capability_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               enable = yang_dnode_get_bool(args->dnode, NULL);
+
+               peer_flag_modify_nb(bgp, peer_str, peer,
+                                   PEER_FLAG_CAPABILITY_ENHE, enable,
+                                   args->errmsg, args->errmsg_len);
+
                break;
        }
 
@@ -3595,12 +4932,30 @@ int bgp_neighbors_unnumbered_neighbor_capability_options_override_capability_mod
 int bgp_neighbors_unnumbered_neighbor_update_source_ip_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str, *source_str;
+       struct peer *peer;
+       union sockunion su;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               source_str = yang_dnode_get_string(args->dnode, NULL);
+
+               str2sockunion(source_str, &su);
+               peer_update_source_addr_set(peer, &su);
+
                break;
        }
 
@@ -3610,12 +4965,26 @@ int bgp_neighbors_unnumbered_neighbor_update_source_ip_modify(
 int bgp_neighbors_unnumbered_neighbor_update_source_ip_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_update_source_unset(peer);
+
                break;
        }
 
@@ -3629,12 +4998,28 @@ int bgp_neighbors_unnumbered_neighbor_update_source_ip_destroy(
 int bgp_neighbors_unnumbered_neighbor_update_source_interface_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str, *source_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               source_str = yang_dnode_get_string(args->dnode, NULL);
+
+               peer_update_source_if_set(peer, source_str);
+
                break;
        }
 
@@ -3643,6 +5028,74 @@ int bgp_neighbors_unnumbered_neighbor_update_source_interface_modify(
 
 int bgp_neighbors_unnumbered_neighbor_update_source_interface_destroy(
        struct nb_cb_destroy_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_update_source_unset(peer);
+
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/neighbor-remote-as
+ */
+void bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_apply_finish(
+       struct nb_cb_apply_finish_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       int as_type = AS_SPECIFIED;
+       int ret;
+       as_t as = 0;
+       struct peer *peer = NULL;
+       afi_t afi = AFI_IP;
+       safi_t safi = SAFI_UNICAST;
+
+       bgp = nb_running_get_entry(args->dnode, NULL, true);
+       peer_str = yang_dnode_get_string(args->dnode, "../interface");
+       as_type = yang_dnode_get_enum(args->dnode, "./remote-as-type");
+       if (yang_dnode_exists(args->dnode, "./remote-as"))
+               as = yang_dnode_get_uint32(args->dnode, "./remote-as");
+
+       peer = peer_lookup_by_conf_if(bgp, peer_str);
+
+       ret = peer_remote_as(bgp, NULL, peer_str, &as, as_type, afi, safi);
+
+       if (ret < 0 && !peer) {
+               snprintf(args->errmsg, args->errmsg_len,
+                        "Create the peer-group or interface first");
+               return;
+       }
+
+       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+}
+
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/neighbor-remote-as/remote-as-type
+ */
+int bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_type_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -3656,19 +5109,27 @@ int bgp_neighbors_unnumbered_neighbor_update_source_interface_destroy(
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/neighbor-remote-as/remote-as-type
- */
-int bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_type_modify(
-       struct nb_cb_modify_args *args)
+int bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_type_destroy(
+       struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = peer_lookup_by_conf_if(bgp, peer_str);
+
+               /* remote-as set to 0 and as_type to unspecified */
+               peer_as_change(peer, 0, AS_UNSPECIFIED);
+
                break;
        }
 
@@ -3716,12 +5177,42 @@ int bgp_neighbors_unnumbered_neighbor_neighbor_remote_as_remote_as_destroy(
 int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_enabled_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool set = false;
+       int ret = 0;
+       uint8_t ttl = MAXTTL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = peer_lookup_by_conf_if(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               if (peer->conf_if) {
+                       ret = BGP_ERR_INVALID_FOR_DIRECT_PEER;
+                       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len,
+                                            ret);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               set = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (set)
+                       ret = peer_ebgp_multihop_set(peer, ttl);
+               else
+                       ret = peer_ebgp_multihop_unset(peer);
+
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -3731,12 +5222,28 @@ int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_enabled_modify(
 int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_enabled_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = peer_lookup_by_conf_if(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               ret = peer_ebgp_multihop_unset(peer);
+
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -3750,12 +5257,38 @@ int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_enabled_destroy(
 int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_multihop_ttl_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret = 0;
+       uint8_t ttl = MAXTTL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = peer_lookup_by_conf_if(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               if (peer->conf_if) {
+                       ret = BGP_ERR_INVALID_FOR_DIRECT_PEER;
+                       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len,
+                                            ret);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               ttl = yang_dnode_get_uint8(args->dnode, NULL);
+
+               ret = peer_ebgp_multihop_set(peer, ttl);
+
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -3765,12 +5298,28 @@ int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_multihop_ttl_modify(
 int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_multihop_ttl_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = peer_lookup_by_conf_if(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               ret = peer_ebgp_multihop_unset(peer);
+
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -3784,18 +5333,75 @@ int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_multihop_ttl_destroy(
 int bgp_neighbors_unnumbered_neighbor_ebgp_multihop_disable_connected_check_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool set = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = peer_lookup_by_conf_if(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               set = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (peer_flag_modify_nb(bgp, peer_str, peer,
+                                       PEER_FLAG_DISABLE_CONNECTED_CHECK, set,
+                                       args->errmsg, args->errmsg_len)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/local-as
+ */
+void bgp_neighbors_unnumbered_neighbor_local_as_apply_finish(
+       struct nb_cb_apply_finish_args *args)
+{
+       struct bgp *bgp;
+       int ret;
+       as_t as = 0;
+       const char *peer_str;
+       struct peer *peer = NULL;
+       bool no_prepend = 0;
+       bool replace_as = 0;
+
+       bgp = nb_running_get_entry(args->dnode, NULL, true);
+       peer_str = yang_dnode_get_string(args->dnode, "../interface");
+
+       peer = bgp_unnumbered_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                                  args->errmsg_len);
+
+       if (yang_dnode_exists(args->dnode, "./local-as"))
+               as = yang_dnode_get_uint32(args->dnode, "./local-as");
+       if (yang_dnode_exists(args->dnode, "./no-prepend"))
+               no_prepend = yang_dnode_get_bool(args->dnode, "./no-prepend");
+       if (yang_dnode_exists(args->dnode, "./no-replace-as"))
+               replace_as =
+                       yang_dnode_get_bool(args->dnode, "./no-replace-as");
+
+       if (!as && !no_prepend && !replace_as)
+               ret = peer_local_as_unset(peer);
+       else
+               ret = peer_local_as_set(peer, as, no_prepend, replace_as);
+
+       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/local-as/local-as
@@ -3815,6 +5421,21 @@ int bgp_neighbors_unnumbered_neighbor_local_as_local_as_modify(
        return NB_OK;
 }
 
+int bgp_neighbors_unnumbered_neighbor_local_as_local_as_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/local-as/no-prepend
@@ -4057,6 +5678,34 @@ int bgp_neighbors_unnumbered_neighbor_bfd_options_check_cp_failure_destroy(
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/admin-shutdown
+ */
+void bgp_neighbors_unnumbered_neighbor_admin_shutdown_apply_finish(
+       struct nb_cb_apply_finish_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+       const char *message;
+
+       bgp = nb_running_get_entry(args->dnode, NULL, true);
+       peer_str = yang_dnode_get_string(args->dnode, "../interface");
+       peer = bgp_unnumbered_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                                  args->errmsg_len);
+
+       if (yang_dnode_exists(args->dnode, "./message")) {
+               message = yang_dnode_get_string(args->dnode, "./message");
+               peer_tx_shutdown_message_set(peer, message);
+       }
+       enable = yang_dnode_get_bool(args->dnode, "./enable");
+
+       peer_flag_modify_nb(bgp, peer_str, peer, PEER_FLAG_SHUTDOWN, enable,
+                           args->errmsg, args->errmsg_len);
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/admin-shutdown/enable
@@ -4076,6 +5725,21 @@ int bgp_neighbors_unnumbered_neighbor_admin_shutdown_enable_modify(
        return NB_OK;
 }
 
+int bgp_neighbors_unnumbered_neighbor_admin_shutdown_enable_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/admin-shutdown/message
@@ -4219,12 +5883,28 @@ int bgp_neighbors_unnumbered_neighbor_graceful_restart_graceful_restart_disable_
 int bgp_neighbors_unnumbered_neighbor_timers_advertise_interval_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t routeadv;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               routeadv = yang_dnode_get_uint16(args->dnode, NULL);
+
+               ret = peer_advertise_interval_set(peer, routeadv);
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -4234,12 +5914,26 @@ int bgp_neighbors_unnumbered_neighbor_timers_advertise_interval_modify(
 int bgp_neighbors_unnumbered_neighbor_timers_advertise_interval_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+
+               ret = peer_advertise_interval_unset(peer);
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -4253,12 +5947,28 @@ int bgp_neighbors_unnumbered_neighbor_timers_advertise_interval_destroy(
 int bgp_neighbors_unnumbered_neighbor_timers_connect_time_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t connect;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               connect = yang_dnode_get_uint16(args->dnode, NULL);
+
+               ret = peer_timers_connect_set(peer, connect);
+               bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+
                break;
        }
 
@@ -4268,12 +5978,27 @@ int bgp_neighbors_unnumbered_neighbor_timers_connect_time_modify(
 int bgp_neighbors_unnumbered_neighbor_timers_connect_time_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+               ret = peer_timers_connect_unset(peer);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4287,12 +6012,38 @@ int bgp_neighbors_unnumbered_neighbor_timers_connect_time_destroy(
 int bgp_neighbors_unnumbered_neighbor_timers_hold_time_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t keepalive = 0;
+       uint16_t holdtime = 0;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+
+               keepalive = yang_dnode_get_uint16(args->dnode, "../keepalive");
+               holdtime = yang_dnode_get_uint16(args->dnode, NULL);
+
+               if (keepalive != BGP_DEFAULT_KEEPALIVE
+                   && holdtime != BGP_DEFAULT_HOLDTIME) {
+                       ret = peer_timers_set(peer, keepalive, holdtime);
+               } else
+                       ret = peer_timers_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4306,12 +6057,45 @@ int bgp_neighbors_unnumbered_neighbor_timers_hold_time_modify(
 int bgp_neighbors_unnumbered_neighbor_timers_keepalive_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t keepalive = 0, curr_keep = 0;
+       uint16_t holdtime = 0;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str =
+                       yang_dnode_get_string(args->dnode, "../../interface");
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+
+               keepalive = yang_dnode_get_uint16(args->dnode, NULL);
+               holdtime = yang_dnode_get_uint16(args->dnode, "../hold-time");
+
+               if (keepalive != BGP_DEFAULT_KEEPALIVE
+                   && holdtime != BGP_DEFAULT_HOLDTIME) {
+                       if (peer->holdtime == holdtime) {
+                               curr_keep = (keepalive < holdtime / 3
+                                                    ? keepalive
+                                                    : holdtime / 3);
+                               if (curr_keep == keepalive)
+                                       return NB_OK;
+                       }
+                       ret = peer_timers_set(peer, keepalive, holdtime);
+               } else
+                       ret = peer_timers_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4337,7 +6121,71 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_create(
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/enabled
+ */
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_enabled_modify(
+       struct nb_cb_modify_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *af_name;
+       afi_t afi;
+       safi_t safi;
+       bool activate = false;
+       int ret = 0;
+       struct peer *peer;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               af_name =
+                       yang_dnode_get_string(args->dnode, "../afi-safi-name");
+               yang_afi_safi_identity2value(af_name, &afi, &safi);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../../interface");
+
+               peer = bgp_unnumbered_neighbor_peer_lookup(
+                       bgp, peer_str, args->errmsg, args->errmsg_len);
+
+               activate = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (activate)
+                       ret = peer_activate(peer, afi, safi);
+               else
+                       ret = peer_deactivate(peer, afi, safi);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
+               break;
+       }
+
+       return NB_OK;
+}
+
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_enabled_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -4352,23 +6200,14 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_destroy(
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/enabled
- */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_enabled_modify(
-       struct nb_cb_modify_args *args)
+static struct peer *bgp_peer_group_peer_lookup(struct bgp *bgp,
+                                              const char *peer_str)
 {
-       switch (args->event) {
-       case NB_EV_VALIDATE:
-       case NB_EV_PREPARE:
-       case NB_EV_ABORT:
-       case NB_EV_APPLY:
-               /* TODO: implement me. */
-               break;
-       }
+       struct peer *peer = NULL;
+       struct peer_group *group = NULL;
 
-       return NB_OK;
+       group = peer_group_lookup(bgp, peer_str);
+       return peer = group->conf;
 }
 
 /*
@@ -4377,12 +6216,49 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_enabled_modify(
  */
 int bgp_peer_groups_peer_group_create(struct nb_cb_create_args *args)
 {
+       const char *peer_grp_str;
+       struct peer *peer;
+       struct peer_group *group;
+       struct bgp *bgp;
+       char unnbr_xpath[XPATH_MAXLEN];
+       const struct lyd_node *bgp_dnode;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
+               peer_grp_str =
+                       yang_dnode_get_string(args->dnode, "./peer-group-name");
+               bgp_dnode = yang_dnode_get_parent(args->dnode, "bgp");
+               snprintf(unnbr_xpath, sizeof(unnbr_xpath),
+                        FRR_BGP_NEIGHBOR_UNNUM_XPATH, peer_grp_str, "");
+
+               if (yang_dnode_exists(bgp_dnode, unnbr_xpath)) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "Name conflict with interface: %s",
+                                peer_grp_str);
+                       return NB_ERR_VALIDATION;
+               }
+
+               break;
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_grp_str =
+                       yang_dnode_get_string(args->dnode, "./peer-group-name");
+               peer = peer_lookup_by_conf_if(bgp, peer_grp_str);
+               if (peer) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "Name conflict with interface:");
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               group = peer_group_get(bgp, peer_grp_str);
+               if (!group) {
+                       snprintf(args->errmsg, args->errmsg_len,
+                                "BGP failed to find or create peer-group");
+                       return NB_ERR_INCONSISTENCY;
+               }
                break;
        }
 
@@ -4391,12 +6267,26 @@ int bgp_peer_groups_peer_group_create(struct nb_cb_create_args *args)
 
 int bgp_peer_groups_peer_group_destroy(struct nb_cb_destroy_args *args)
 {
+       const char *peer_grp_str;
+       struct peer_group *group;
+       struct bgp *bgp;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_grp_str =
+                       yang_dnode_get_string(args->dnode, "./peer-group-name");
+
+               group = peer_group_lookup(bgp, peer_grp_str);
+               if (group) {
+                       peer_group_notify_unconfig(group);
+                       peer_group_delete(group);
+               }
+
                break;
        }
 
@@ -4477,12 +6367,25 @@ int bgp_peer_groups_peer_group_ipv6_listen_range_destroy(
  */
 int bgp_peer_groups_peer_group_password_modify(struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *passwrd_str;
+       struct peer *peer = NULL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               passwrd_str = yang_dnode_get_string(args->dnode, NULL);
+               peer_password_set(peer, passwrd_str);
+
                break;
        }
 
@@ -4491,12 +6394,23 @@ int bgp_peer_groups_peer_group_password_modify(struct nb_cb_modify_args *args)
 
 int bgp_peer_groups_peer_group_password_destroy(struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer = NULL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               peer_password_unset(peer);
+
                break;
        }
 
@@ -4510,12 +6424,44 @@ int bgp_peer_groups_peer_group_password_destroy(struct nb_cb_destroy_args *args)
 int bgp_peer_groups_peer_group_ttl_security_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+       uint8_t gtsm_hops;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               gtsm_hops = yang_dnode_get_uint8(args->dnode, NULL);
+               /*
+                * If 'neighbor swpX', then this is for directly connected
+                * peers, we should not accept a ttl-security hops value greater
+                * than 1.
+                */
+               if (peer->conf_if && (gtsm_hops > BGP_GTSM_HOPS_CONNECTED)) {
+                       snprintf(
+                               args->errmsg, args->errmsg_len,
+                               "%d is directly connected peer, hops cannot exceed 1\n",
+                               gtsm_hops);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               ret = peer_ttl_security_hops_set(peer, gtsm_hops);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4525,12 +6471,29 @@ int bgp_peer_groups_peer_group_ttl_security_modify(
 int bgp_peer_groups_peer_group_ttl_security_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               ret = peer_ttl_security_hops_unset(peer);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4562,12 +6525,28 @@ int bgp_peer_groups_peer_group_solo_modify(struct nb_cb_modify_args *args)
 int bgp_peer_groups_peer_group_enforce_first_as_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               enable = yang_dnode_get_bool(args->dnode, NULL);
+
+               peer_flag_modify_nb(bgp, peer_str, peer,
+                                   PEER_FLAG_ENFORCE_FIRST_AS, enable,
+                                   args->errmsg, args->errmsg_len);
+
                break;
        }
 
@@ -4581,12 +6560,26 @@ int bgp_peer_groups_peer_group_enforce_first_as_modify(
 int bgp_peer_groups_peer_group_description_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *desc_str;
+       struct peer *peer = NULL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               desc_str = yang_dnode_get_string(args->dnode, NULL);
+
+               peer_description_set(peer, desc_str);
+
                break;
        }
 
@@ -4596,12 +6589,25 @@ int bgp_peer_groups_peer_group_description_modify(
 int bgp_peer_groups_peer_group_description_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer = NULL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_description_unset(peer);
+
                break;
        }
 
@@ -4615,12 +6621,31 @@ int bgp_peer_groups_peer_group_description_destroy(
 int bgp_peer_groups_peer_group_passive_mode_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool set = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               set = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (peer_flag_modify_nb(bgp, peer_str, peer, PEER_FLAG_PASSIVE,
+                                       set, args->errmsg, args->errmsg_len)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4634,12 +6659,30 @@ int bgp_peer_groups_peer_group_passive_mode_modify(
 int bgp_peer_groups_peer_group_capability_options_dynamic_capability_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               enable = yang_dnode_get_bool(args->dnode, NULL);
+
+               peer_flag_modify_nb(bgp, peer_str, peer,
+                                   PEER_FLAG_DYNAMIC_CAPABILITY, enable,
+                                   args->errmsg, args->errmsg_len);
+
                break;
        }
 
@@ -4672,12 +6715,30 @@ int bgp_peer_groups_peer_group_capability_options_strict_capability_modify(
 int bgp_peer_groups_peer_group_capability_options_extended_nexthop_capability_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               enable = yang_dnode_get_bool(args->dnode, NULL);
+
+               peer_flag_modify_nb(bgp, peer_str, peer,
+                                   PEER_FLAG_CAPABILITY_ENHE, enable,
+                                   args->errmsg, args->errmsg_len);
+
                break;
        }
 
@@ -4729,12 +6790,29 @@ int bgp_peer_groups_peer_group_capability_options_override_capability_modify(
 int bgp_peer_groups_peer_group_update_source_ip_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str, *source_str;
+       struct peer *peer;
+       union sockunion su;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               source_str = yang_dnode_get_string(args->dnode, NULL);
+
+               str2sockunion(source_str, &su);
+               peer_update_source_addr_set(peer, &su);
+
                break;
        }
 
@@ -4744,12 +6822,25 @@ int bgp_peer_groups_peer_group_update_source_ip_modify(
 int bgp_peer_groups_peer_group_update_source_ip_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_update_source_unset(peer);
+
                break;
        }
 
@@ -4763,12 +6854,27 @@ int bgp_peer_groups_peer_group_update_source_ip_destroy(
 int bgp_peer_groups_peer_group_update_source_interface_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str, *source_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               source_str = yang_dnode_get_string(args->dnode, NULL);
+
+               peer_update_source_if_set(peer, source_str);
+
                break;
        }
 
@@ -4778,18 +6884,58 @@ int bgp_peer_groups_peer_group_update_source_interface_modify(
 int bgp_peer_groups_peer_group_update_source_interface_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               peer_update_source_unset(peer);
+
                break;
        }
 
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/neighbor-remote-as
+ */
+void bgp_peer_group_neighbor_remote_as_apply_finish(
+       struct nb_cb_apply_finish_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       int as_type = AS_SPECIFIED;
+       int ret;
+       as_t as = 0;
+
+       bgp = nb_running_get_entry(args->dnode, NULL, true);
+       peer_str = yang_dnode_get_string(args->dnode, "../peer-group-name");
+       as_type = yang_dnode_get_enum(args->dnode, "./remote-as-type");
+       if (yang_dnode_exists(args->dnode, "./remote-as"))
+               as = yang_dnode_get_uint32(args->dnode, "./remote-as");
+
+       ret = peer_group_remote_as(bgp, peer_str, &as, as_type);
+       if (ret < 0) {
+               snprintf(args->errmsg, args->errmsg_len,
+                        "Create the peer-group or interface first");
+               return;
+       }
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/neighbor-remote-as/remote-as-type
@@ -4809,6 +6955,32 @@ int bgp_peer_groups_peer_group_neighbor_remote_as_remote_as_type_modify(
        return NB_OK;
 }
 
+int bgp_peer_groups_peer_group_neighbor_remote_as_remote_as_type_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer_group *group;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               group = peer_group_lookup(bgp, peer_str);
+               if (group)
+                       peer_group_remote_as_delete(group);
+
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/neighbor-remote-as/remote-as
@@ -4850,12 +7022,44 @@ int bgp_peer_groups_peer_group_neighbor_remote_as_remote_as_destroy(
 int bgp_peer_groups_peer_group_ebgp_multihop_enabled_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool set = false;
+       int ret = 0;
+       uint8_t ttl = MAXTTL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               if (peer->conf_if) {
+                       ret = BGP_ERR_INVALID_FOR_DIRECT_PEER;
+                       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len,
+                                            ret);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               set = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (set)
+                       ret = peer_ebgp_multihop_set(peer, ttl);
+               else
+                       ret = peer_ebgp_multihop_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4865,12 +7069,30 @@ int bgp_peer_groups_peer_group_ebgp_multihop_enabled_modify(
 int bgp_peer_groups_peer_group_ebgp_multihop_enabled_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               ret = peer_ebgp_multihop_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4884,12 +7106,40 @@ int bgp_peer_groups_peer_group_ebgp_multihop_enabled_destroy(
 int bgp_peer_groups_peer_group_ebgp_multihop_multihop_ttl_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret = 0;
+       uint8_t ttl = MAXTTL;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               if (peer->conf_if) {
+                       ret = BGP_ERR_INVALID_FOR_DIRECT_PEER;
+                       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len,
+                                            ret);
+                       return NB_ERR_INCONSISTENCY;
+               }
+
+               ttl = yang_dnode_get_uint8(args->dnode, NULL);
+
+               ret = peer_ebgp_multihop_set(peer, ttl);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4899,12 +7149,30 @@ int bgp_peer_groups_peer_group_ebgp_multihop_multihop_ttl_modify(
 int bgp_peer_groups_peer_group_ebgp_multihop_multihop_ttl_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               ret = peer_ebgp_multihop_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -4918,18 +7186,77 @@ int bgp_peer_groups_peer_group_ebgp_multihop_multihop_ttl_destroy(
 int bgp_peer_groups_peer_group_ebgp_multihop_disable_connected_check_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool set = false;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               if (!peer)
+                       return NB_ERR_INCONSISTENCY;
+
+               set = yang_dnode_get_bool(args->dnode, NULL);
+
+               if (peer_flag_modify_nb(bgp, peer_str, peer,
+                                       PEER_FLAG_DISABLE_CONNECTED_CHECK, set,
+                                       args->errmsg, args->errmsg_len)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/local-as
+ */
+void bgp_peer_groups_peer_group_local_as_apply_finish(
+       struct nb_cb_apply_finish_args *args)
+{
+       struct bgp *bgp;
+       int ret;
+       as_t as = 0;
+       const char *peer_str;
+       struct peer *peer = NULL;
+       bool no_prepend = false;
+       bool replace_as = false;
+
+       bgp = nb_running_get_entry(args->dnode, NULL, true);
+       peer_str = yang_dnode_get_string(args->dnode, "../peer-group-name");
+
+       peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+       if (yang_dnode_exists(args->dnode, "./local-as"))
+               as = yang_dnode_get_uint32(args->dnode, "./local-as");
+
+       if (yang_dnode_exists(args->dnode, "./local-as"))
+               as = yang_dnode_get_uint32(args->dnode, "./local-as");
+       if (yang_dnode_exists(args->dnode, "./no-prepend"))
+               no_prepend = yang_dnode_get_bool(args->dnode, "./no-prepend");
+       if (yang_dnode_exists(args->dnode, "./no-replace-as"))
+               replace_as =
+                       yang_dnode_get_bool(args->dnode, "./no-replace-as");
+
+       if (!as && !no_prepend && !replace_as)
+               ret = peer_local_as_unset(peer);
+       else
+               ret = peer_local_as_set(peer, as, no_prepend, replace_as);
+
+       bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/local-as/local-as
@@ -4949,6 +7276,36 @@ int bgp_peer_groups_peer_group_local_as_local_as_modify(
        return NB_OK;
 }
 
+int bgp_peer_groups_peer_group_local_as_local_as_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               ret = peer_local_as_unset(peer);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/local-as/no-prepend
@@ -5191,6 +7548,33 @@ int bgp_peer_groups_peer_group_bfd_options_check_cp_failure_destroy(
        return NB_OK;
 }
 
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/admin-shutdown
+ */
+void bgp_peer_groups_peer_group_admin_shutdown_apply_finish(
+       struct nb_cb_apply_finish_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       bool enable = false;
+       const char *message;
+
+       bgp = nb_running_get_entry(args->dnode, NULL, true);
+       peer_str = yang_dnode_get_string(args->dnode, "../peer-group-name");
+       peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+       if (yang_dnode_exists(args->dnode, "./message")) {
+               message = yang_dnode_get_string(args->dnode, "./message");
+               peer_tx_shutdown_message_set(peer, message);
+       }
+       enable = yang_dnode_get_bool(args->dnode, "./enable");
+
+       peer_flag_modify_nb(bgp, peer_str, peer, PEER_FLAG_SHUTDOWN, enable,
+                           args->errmsg, args->errmsg_len);
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/admin-shutdown/enable
@@ -5210,6 +7594,21 @@ int bgp_peer_groups_peer_group_admin_shutdown_enable_modify(
        return NB_OK;
 }
 
+int bgp_peer_groups_peer_group_admin_shutdown_enable_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/admin-shutdown/message
@@ -5353,12 +7752,29 @@ int bgp_peer_groups_peer_group_graceful_restart_graceful_restart_disable_destroy
 int bgp_peer_groups_peer_group_timers_advertise_interval_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t routeadv;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               routeadv = yang_dnode_get_uint16(args->dnode, NULL);
+
+               ret = peer_advertise_interval_set(peer, routeadv);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -5368,12 +7784,27 @@ int bgp_peer_groups_peer_group_timers_advertise_interval_modify(
 int bgp_peer_groups_peer_group_timers_advertise_interval_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               ret = peer_advertise_interval_unset(peer);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -5387,12 +7818,29 @@ int bgp_peer_groups_peer_group_timers_advertise_interval_destroy(
 int bgp_peer_groups_peer_group_timers_connect_time_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t connect;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+               connect = yang_dnode_get_uint16(args->dnode, NULL);
+
+               ret = peer_timers_connect_set(peer, connect);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -5402,12 +7850,27 @@ int bgp_peer_groups_peer_group_timers_connect_time_modify(
 int bgp_peer_groups_peer_group_timers_connect_time_destroy(
        struct nb_cb_destroy_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       int ret;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               ret = peer_timers_connect_unset(peer);
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -5421,12 +7884,37 @@ int bgp_peer_groups_peer_group_timers_connect_time_destroy(
 int bgp_peer_groups_peer_group_timers_hold_time_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t keepalive = 0;
+       uint16_t holdtime = 0;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               keepalive = yang_dnode_get_uint16(args->dnode, "../keepalive");
+               holdtime = yang_dnode_get_uint16(args->dnode, NULL);
+
+               if (keepalive != BGP_DEFAULT_KEEPALIVE
+                   && holdtime != BGP_DEFAULT_HOLDTIME) {
+                       ret = peer_timers_set(peer, keepalive, holdtime);
+               } else
+                       ret = peer_timers_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -5440,12 +7928,49 @@ int bgp_peer_groups_peer_group_timers_hold_time_modify(
 int bgp_peer_groups_peer_group_timers_keepalive_modify(
        struct nb_cb_modify_args *args)
 {
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       uint16_t keepalive = 0, curr_keep = 0;
+       uint16_t holdtime = 0;
+       int ret = 0;
+
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               keepalive = yang_dnode_get_uint16(args->dnode, NULL);
+               holdtime = yang_dnode_get_uint16(args->dnode, "../hold-time");
+
+               if (keepalive != BGP_DEFAULT_KEEPALIVE
+                   && holdtime != BGP_DEFAULT_HOLDTIME) {
+                       if (peer->holdtime == holdtime) {
+                               curr_keep = (keepalive < holdtime / 3
+                                                    ? keepalive
+                                                    : holdtime / 3);
+                               if (curr_keep == keepalive) {
+                                       // zlog_debug("%s holdtime %u keepalive
+                                       // %u value is already set, skipping
+                                       // update.",
+                                       //   __func__, holdtime, keepalive);
+                                       return NB_OK;
+                               }
+                       }
+                       ret = peer_timers_set(peer, keepalive, holdtime);
+               } else
+                       ret = peer_timers_unset(peer);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
                break;
        }
 
@@ -5492,6 +8017,48 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_destroy(
  */
 int bgp_peer_groups_peer_group_afi_safis_afi_safi_enabled_modify(
        struct nb_cb_modify_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       const char *af_name;
+       afi_t afi;
+       safi_t safi;
+       bool activate = false;
+       int ret = 0;
+       struct peer *peer;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               bgp = nb_running_get_entry(args->dnode, NULL, true);
+               af_name =
+                       yang_dnode_get_string(args->dnode, "../afi-safi-name");
+               yang_afi_safi_identity2value(af_name, &afi, &safi);
+               peer_str = yang_dnode_get_string(args->dnode,
+                                                "../../../peer-group-name");
+               peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+               activate = yang_dnode_get_bool(args->dnode, NULL);
+               if (activate)
+                       ret = peer_activate(peer, afi, safi);
+               else
+                       ret = peer_deactivate(peer, afi, safi);
+
+               if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret)
+                   < 0)
+                       return NB_ERR_INCONSISTENCY;
+
+               break;
+       }
+
+       return NB_OK;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_enabled_destroy(
+       struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -11165,6 +13732,36 @@ int bgp_global_bmp_config_target_list_afi_safis_afi_safi_ipv6_multicast_common_c
        return NB_OK;
 }
 
+static int bgp_neighbor_afi_safi_flag_modify(struct nb_cb_modify_args *args,
+                                            uint32_t flags, bool set)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       const struct lyd_node *nbr_dnode;
+       const struct lyd_node *nbr_af_dnode;
+       const char *af_name;
+       afi_t afi;
+       safi_t safi;
+
+       nbr_af_dnode = yang_dnode_get_parent(args->dnode, "afi-safi");
+       af_name = yang_dnode_get_string(nbr_af_dnode, "./afi-safi-name");
+       yang_afi_safi_identity2value(af_name, &afi, &safi);
+
+       nbr_dnode = yang_dnode_get_parent(nbr_af_dnode, "neighbor");
+       bgp = nb_running_get_entry(nbr_dnode, NULL, true);
+       peer_str = yang_dnode_get_string(nbr_dnode, "./remote-address");
+       peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                       args->errmsg_len);
+
+       if (peer_af_flag_modify_nb(peer, afi, safi, flags, set, args->errmsg,
+                                  args->errmsg_len)
+           < 0)
+               return NB_ERR_INCONSISTENCY;
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/afi-safis/afi-safi/ipv4-unicast/add-paths/path-type
@@ -11263,8 +13860,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_as_path_options_repla
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11626,8 +14227,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_nexthop_self_next_hop
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11645,8 +14250,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_nexthop_self_next_hop
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11664,8 +14273,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_private_as_remove_pri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11683,8 +14296,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_private_as_remove_pri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11702,29 +14319,98 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_private_as_remove_pri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/afi-safis/afi-safi/ipv4-unicast/private-as/remove-private-as-replace
+ */
+int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_private_as_remove_private_as_replace_modify(
+       struct nb_cb_modify_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/neighbor/afi-safis/afi-safi/ipv4-unicast/private-as/remove-private-as-replace
- */
-int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_private_as_remove_private_as_replace_modify(
-       struct nb_cb_modify_args *args)
+static int bgp_neighbor_afi_safi_weight_modify(struct nb_cb_modify_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       const struct lyd_node *nbr_dnode;
+       const struct lyd_node *nbr_af_dnode;
+       const char *af_name;
+       uint16_t weight;
+       afi_t afi;
+       safi_t safi;
+       int ret;
+
+       nbr_af_dnode = yang_dnode_get_parent(args->dnode, "afi-safi");
+       af_name = yang_dnode_get_string(nbr_af_dnode, "./afi-safi-name");
+       yang_afi_safi_identity2value(af_name, &afi, &safi);
+
+       nbr_dnode = yang_dnode_get_parent(nbr_af_dnode, "neighbor");
+       bgp = nb_running_get_entry(nbr_dnode, NULL, true);
+       peer_str = yang_dnode_get_string(nbr_dnode, "./remote-address");
+       peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                       args->errmsg_len);
+
+       weight = yang_dnode_get_uint16(args->dnode, NULL);
+
+       ret = peer_weight_set(peer, afi, safi, weight);
+       if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret) < 0)
+               return NB_ERR_INCONSISTENCY;
+
+       return NB_OK;
+}
+
+static int bgp_neighbor_afi_safi_weight_destroy(struct nb_cb_destroy_args *args)
 {
-       switch (args->event) {
-       case NB_EV_VALIDATE:
-       case NB_EV_PREPARE:
-       case NB_EV_ABORT:
-       case NB_EV_APPLY:
-               /* TODO: implement me. */
-               break;
-       }
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       const struct lyd_node *nbr_dnode;
+       const struct lyd_node *nbr_af_dnode;
+       const char *af_name;
+       afi_t afi;
+       safi_t safi;
+       int ret;
+
+       nbr_af_dnode = yang_dnode_get_parent(args->dnode, "afi-safi");
+       af_name = yang_dnode_get_string(nbr_af_dnode, "./afi-safi-name");
+       yang_afi_safi_identity2value(af_name, &afi, &safi);
+
+       nbr_dnode = yang_dnode_get_parent(nbr_af_dnode, "neighbor");
+       bgp = nb_running_get_entry(nbr_dnode, NULL, true);
+       peer_str = yang_dnode_get_string(nbr_dnode, "./remote-address");
+       peer = bgp_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                       args->errmsg_len);
+
+       ret = peer_weight_unset(peer, afi, safi);
+       if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret) < 0)
+               return NB_ERR_INCONSISTENCY;
 
        return NB_OK;
 }
@@ -11740,8 +14426,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_weight_weight_attribu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -11755,8 +14443,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_weight_weight_attribu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -11774,8 +14464,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_route_reflector_route
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11793,8 +14487,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_route_server_route_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11812,8 +14510,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_send_community_send_c
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11831,8 +14533,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_send_community_send_e
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11850,8 +14556,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_send_community_send_l
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11869,8 +14579,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_soft_reconfiguration_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11888,8 +14602,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_as_pat
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11907,8 +14625,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_next_h
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -11926,8 +14648,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_med_un
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -12493,8 +15219,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_as_path_options_repla
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -12512,8 +15242,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_as_pat
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -12531,8 +15265,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_next_h
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -12550,8 +15288,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_med_un
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -12962,8 +15704,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_nexthop_self_next_hop
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -12981,8 +15727,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_nexthop_self_next_hop
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13000,8 +15750,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_private_as_remove_pri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13019,8 +15773,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_private_as_remove_pri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13038,8 +15796,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_private_as_remove_pri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13057,8 +15819,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_private_as_remove_pri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13076,8 +15842,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_route_reflector_route
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13095,8 +15865,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_route_server_route_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13114,8 +15888,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_send_community_send_c
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13133,8 +15911,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_send_community_send_e
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13152,8 +15934,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_send_community_send_l
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13171,8 +15957,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_soft_reconfiguration_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13190,8 +15980,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_weight_weight_attribu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -13205,8 +15997,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_unicast_weight_weight_attribu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -13311,8 +16105,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_as_path_options_rep
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13330,8 +16128,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_as_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13349,8 +16151,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13368,8 +16174,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_med_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13780,8 +16590,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_nexthop_self_next_h
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13799,8 +16613,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_nexthop_self_next_h
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13818,8 +16636,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_private_as_remove_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13837,8 +16659,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_private_as_remove_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13856,8 +16682,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_private_as_remove_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13875,8 +16705,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_private_as_remove_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13894,8 +16728,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_route_reflector_rou
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13913,8 +16751,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_route_server_route_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13932,8 +16774,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_send_community_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13951,8 +16797,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_send_community_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13970,8 +16820,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_send_community_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -13989,8 +16843,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_soft_reconfiguratio
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14008,8 +16866,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_weight_weight_attri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -14023,8 +16883,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_multicast_weight_weight_attri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -14129,8 +16991,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_as_path_options_rep
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14148,8 +17014,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_as_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14167,8 +17037,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14186,8 +17060,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_med_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14598,8 +17476,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_nexthop_self_next_h
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14617,8 +17499,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_nexthop_self_next_h
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14636,8 +17522,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_private_as_remove_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14655,8 +17545,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_private_as_remove_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14674,8 +17568,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_private_as_remove_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14693,8 +17591,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_private_as_remove_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14712,8 +17614,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_route_reflector_rou
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14731,8 +17637,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_route_server_route_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14750,8 +17660,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_send_community_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14769,8 +17683,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_send_community_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14788,8 +17706,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_send_community_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14807,8 +17729,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_soft_reconfiguratio
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14826,8 +17752,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_weight_weight_attri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -14841,8 +17769,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_multicast_weight_weight_attri
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -14947,8 +17877,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_optio
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14966,8 +17900,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unchange
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -14985,8 +17923,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unchange
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15004,8 +17946,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unchange
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15416,8 +18362,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_nexthop_self_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15435,8 +18385,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_nexthop_self_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15454,8 +18408,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15473,8 +18431,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15492,8 +18454,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15511,8 +18477,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15530,8 +18500,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_route_reflect
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15549,8 +18523,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_route_server_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15568,8 +18546,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_send_communit
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15587,8 +18569,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_send_communit
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15606,8 +18592,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_send_communit
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15625,8 +18615,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_soft_reconfig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15644,8 +18638,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_weight_weight
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -15659,8 +18655,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_weight_weight
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -15765,8 +18763,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_optio
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15784,8 +18786,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unchange
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15803,8 +18809,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unchange
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -15822,8 +18832,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unchange
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16234,8 +19248,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_nexthop_self_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16253,8 +19271,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_nexthop_self_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16272,8 +19294,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16291,8 +19317,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16310,8 +19340,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16329,8 +19363,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16348,8 +19386,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_route_reflect
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16367,8 +19409,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_route_server_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16386,8 +19432,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_send_communit
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16405,8 +19455,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_send_communit
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16424,8 +19478,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_send_communit
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16443,8 +19501,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_soft_reconfig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16462,8 +19524,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_weight_weight
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -16477,8 +19541,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_weight_weight
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -16583,8 +19649,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16602,8 +19672,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16621,8 +19695,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16640,8 +19718,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16950,8 +20032,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_nexthop_self_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16969,8 +20055,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_nexthop_self_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -16988,8 +20078,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17007,8 +20101,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17026,8 +20124,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17045,8 +20147,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17064,8 +20170,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_route_reflector
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17083,8 +20193,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_route_server_ro
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17102,8 +20216,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17121,8 +20239,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17140,8 +20262,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17159,8 +20285,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_soft_reconfigur
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17178,8 +20308,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_weight_weight_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -17193,8 +20325,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_weight_weight_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -17299,8 +20433,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17318,8 +20456,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17337,8 +20479,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17356,8 +20502,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17666,8 +20816,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_nexthop_self_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17685,8 +20839,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_nexthop_self_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17704,8 +20862,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17723,8 +20885,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17742,8 +20908,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17761,8 +20931,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17780,8 +20954,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_route_reflector
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17799,8 +20977,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_route_server_ro
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17818,8 +21000,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17837,8 +21023,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17856,8 +21046,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17875,8 +21069,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_soft_reconfigur
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -17894,8 +21092,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_weight_weight_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -17909,8 +21109,10 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_weight_weight_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -17996,8 +21198,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l2vpn_evpn_as_path_options_replace
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18015,8 +21221,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_as_path_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18034,8 +21244,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_next_hop
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18053,8 +21267,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_med_unch
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18072,8 +21290,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l2vpn_evpn_nexthop_self_next_hop_s
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18091,8 +21313,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l2vpn_evpn_nexthop_self_next_hop_s
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18110,8 +21336,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l2vpn_evpn_route_reflector_route_r
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18129,8 +21359,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l2vpn_evpn_route_server_route_serv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18148,8 +21382,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l2vpn_evpn_soft_reconfiguration_mo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18167,8 +21405,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_reflector_rout
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18186,8 +21428,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_server_route_s
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18205,8 +21451,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv4_flowspec_soft_reconfiguration
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18224,8 +21474,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_reflector_rout
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18243,8 +21497,12 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_server_route_s
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18262,14 +21520,49 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_flowspec_soft_reconfiguration
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
+static int
+bgp_unnumbered_neighbor_afi_safi_flag_modify(struct nb_cb_modify_args *args,
+                                            uint32_t flags, bool set)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       const struct lyd_node *nbr_dnode;
+       const struct lyd_node *nbr_af_dnode;
+       const char *af_name;
+       afi_t afi;
+       safi_t safi;
+
+       nbr_af_dnode = yang_dnode_get_parent(args->dnode, "afi-safi");
+       af_name = yang_dnode_get_string(nbr_af_dnode, "./afi-safi-name");
+       yang_afi_safi_identity2value(af_name, &afi, &safi);
+
+       nbr_dnode = yang_dnode_get_parent(nbr_af_dnode, "unnumbered-neighbor");
+       bgp = nb_running_get_entry(nbr_dnode, NULL, true);
+       peer_str = yang_dnode_get_string(nbr_dnode, "./interface");
+       peer = bgp_unnumbered_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                                  args->errmsg_len);
+
+       if (peer_af_flag_modify_nb(peer, afi, safi, flags, set, args->errmsg,
+                                  args->errmsg_len)
+           < 0)
+               return NB_ERR_INCONSISTENCY;
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-unicast/add-paths/path-type
@@ -18368,8 +21661,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_as_path_op
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18731,8 +22028,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_nexthop_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18750,8 +22051,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_nexthop_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18769,8 +22074,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_private_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18788,8 +22097,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_private_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18807,8 +22120,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_private_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18826,14 +22143,80 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_private_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
+static int
+bgp_unnumbered_neighbor_afi_safi_weight_modify(struct nb_cb_modify_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       const struct lyd_node *nbr_dnode;
+       const char *af_name;
+       uint16_t weight;
+       afi_t afi;
+       safi_t safi;
+       const struct lyd_node *nbr_af_dnode;
+       int ret;
+
+       nbr_af_dnode = yang_dnode_get_parent(args->dnode, "afi-safi");
+       af_name = yang_dnode_get_string(nbr_af_dnode, "./afi-safi-name");
+       yang_afi_safi_identity2value(af_name, &afi, &safi);
+
+       nbr_dnode = yang_dnode_get_parent(nbr_af_dnode, "unnumbered-neighbor");
+       bgp = nb_running_get_entry(nbr_dnode, NULL, true);
+       peer_str = yang_dnode_get_string(nbr_dnode, "./interface");
+       peer = bgp_unnumbered_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                                  args->errmsg_len);
+
+       weight = yang_dnode_get_uint16(args->dnode, NULL);
+
+       ret = peer_weight_set(peer, afi, safi, weight);
+       if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret) < 0)
+               return NB_ERR_INCONSISTENCY;
+
+       return NB_OK;
+}
+
+static int
+bgp_unnumbered_neighbor_afi_safi_weight_destroy(struct nb_cb_destroy_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       const struct lyd_node *nbr_dnode;
+       const struct lyd_node *nbr_af_dnode;
+       const char *af_name;
+       afi_t afi;
+       safi_t safi;
+       int ret;
+
+       bgp = nb_running_get_entry(args->dnode, NULL, true);
+       nbr_dnode = yang_dnode_get_parent(args->dnode, "unnumbered-neighbor");
+       peer_str = yang_dnode_get_string(nbr_dnode, "./interface");
+       peer = bgp_unnumbered_neighbor_peer_lookup(bgp, peer_str, args->errmsg,
+                                                  args->errmsg_len);
+       nbr_af_dnode = yang_dnode_get_parent(args->dnode, "afi-safi");
+       af_name = yang_dnode_get_string(nbr_af_dnode, "./afi-safi-name");
+       yang_afi_safi_identity2value(af_name, &afi, &safi);
+
+       ret = peer_weight_unset(peer, afi, safi);
+       if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret) < 0)
+               return NB_ERR_INCONSISTENCY;
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-unicast/weight/weight-attribute
@@ -18845,8 +22228,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_weight_wei
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -18860,8 +22245,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_weight_wei
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -18879,8 +22266,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_route_refl
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18898,8 +22289,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_route_serv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18917,8 +22312,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_send_commu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18936,8 +22335,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_send_commu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18955,8 +22358,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_send_commu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18974,8 +22381,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_soft_recon
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -18993,8 +22404,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_attr_uncha
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -19012,8 +22427,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_attr_uncha
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -19031,8 +22450,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_unicast_attr_uncha
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -19598,8 +23021,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_as_path_op
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -19617,8 +23044,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_attr_uncha
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -19636,8 +23067,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_attr_uncha
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -19655,8 +23090,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_attr_uncha
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20067,8 +23506,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_nexthop_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20086,8 +23529,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_nexthop_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20105,8 +23552,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_private_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20124,8 +23575,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_private_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20143,8 +23598,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_private_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20162,8 +23621,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_private_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20181,8 +23644,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_route_refl
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20200,8 +23667,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_route_serv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20219,8 +23690,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_send_commu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20238,8 +23713,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_send_commu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20257,8 +23736,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_send_commu
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20276,8 +23759,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_soft_recon
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20295,8 +23782,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_weight_wei
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -20310,8 +23799,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_unicast_weight_wei
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -20416,8 +23907,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_as_path_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20435,8 +23930,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_attr_unc
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20454,8 +23953,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_attr_unc
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20473,8 +23976,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_attr_unc
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20885,8 +24392,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_nexthop_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20904,8 +24415,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_nexthop_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20923,8 +24438,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_private_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20942,8 +24461,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_private_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20961,8 +24484,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_private_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20980,8 +24507,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_private_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -20999,8 +24530,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_route_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21018,8 +24553,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_route_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21037,8 +24576,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_send_com
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21056,8 +24599,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_send_com
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21075,8 +24622,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_send_com
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21094,8 +24645,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_soft_rec
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21113,8 +24668,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_weight_w
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -21128,8 +24685,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_multicast_weight_w
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -21234,8 +24793,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_as_path_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21253,8 +24816,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_attr_unc
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21272,8 +24839,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_attr_unc
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21291,8 +24862,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_attr_unc
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21703,8 +25278,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_nexthop_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21722,8 +25301,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_nexthop_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21741,8 +25324,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_private_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21760,8 +25347,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_private_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21779,8 +25370,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_private_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21798,8 +25393,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_private_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21817,8 +25416,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_route_re
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21836,8 +25439,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_route_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21855,8 +25462,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_send_com
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21874,8 +25485,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_send_com
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21893,8 +25508,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_send_com
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21912,8 +25531,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_soft_rec
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -21931,8 +25554,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_weight_w
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -21946,8 +25571,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_multicast_weight_w
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -22052,8 +25679,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22071,8 +25702,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_at
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22090,8 +25725,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_at
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22109,8 +25748,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_at
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22521,8 +26164,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22540,8 +26187,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22559,8 +26210,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_pr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22578,8 +26233,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_pr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22597,8 +26256,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_pr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22616,8 +26279,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_pr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22635,8 +26302,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_ro
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22654,8 +26325,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_ro
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22673,8 +26348,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22692,8 +26371,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22711,8 +26394,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22730,8 +26417,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_so
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22749,8 +26440,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_we
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -22764,8 +26457,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_labeled_unicast_we
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -22870,8 +26565,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22889,8 +26588,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_at
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22908,8 +26611,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_at
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -22927,8 +26634,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_at
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23339,8 +27050,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23358,8 +27073,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23377,8 +27096,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_pr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23396,8 +27119,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_pr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23415,8 +27142,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_pr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23434,8 +27165,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_pr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23453,8 +27188,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_ro
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23472,8 +27211,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_ro
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23491,8 +27234,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23510,8 +27257,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23529,8 +27280,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23548,8 +27303,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_so
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23567,8 +27326,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_we
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -23582,8 +27343,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_we
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -23688,8 +27451,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23707,8 +27474,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23726,8 +27497,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -23745,8 +27520,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24055,8 +27834,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24074,8 +27857,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24093,8 +27880,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_priv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24112,8 +27903,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_priv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24131,8 +27926,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_priv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24150,8 +27949,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_priv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24169,8 +27972,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_rout
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24188,8 +27995,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_rout
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24207,8 +28018,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24226,8 +28041,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24245,8 +28064,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24264,8 +28087,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_soft
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24283,8 +28110,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_weig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -24298,8 +28127,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_weig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -24404,8 +28235,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24423,8 +28258,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24442,8 +28281,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24461,8 +28304,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24771,8 +28618,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24790,8 +28641,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24809,8 +28664,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_priv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24828,8 +28687,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_priv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24847,8 +28710,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_priv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24866,8 +28733,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_priv
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24885,8 +28756,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_rout
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24904,8 +28779,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_rout
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24923,8 +28802,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24942,8 +28825,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24961,8 +28848,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_send
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24980,8 +28871,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_soft
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -24999,8 +28894,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_weig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -25014,8 +28911,10 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l3vpn_ipv6_unicast_weig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -25101,8 +29000,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_as_path_opti
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25120,8 +29023,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_attr_unchang
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25139,8 +29046,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_attr_unchang
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25158,8 +29069,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_attr_unchang
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25177,8 +29092,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_nexthop_self
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25196,8 +29115,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_nexthop_self
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25215,8 +29138,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_route_reflec
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25234,8 +29161,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_route_server
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25253,8 +29184,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_soft_reconfi
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25272,8 +29207,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_ref
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25291,8 +29230,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_ser
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25310,8 +29253,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_soft_reco
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25329,8 +29276,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_ref
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25348,8 +29299,12 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_ser
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25367,14 +29322,46 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_soft_reco
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
+static int bgp_peer_group_afi_safi_flag_modify(struct nb_cb_modify_args *args,
+                                              uint32_t flags, bool set)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       const struct lyd_node *nbr_dnode;
+       const struct lyd_node *nbr_af_dnode;
+       const char *af_name;
+       afi_t afi;
+       safi_t safi;
+
+       nbr_af_dnode = yang_dnode_get_parent(args->dnode, "afi-safi");
+       af_name = yang_dnode_get_string(nbr_af_dnode, "./afi-safi-name");
+       yang_afi_safi_identity2value(af_name, &afi, &safi);
+       nbr_dnode = yang_dnode_get_parent(nbr_af_dnode, "peer-group");
+       bgp = nb_running_get_entry(nbr_dnode, NULL, true);
+       peer_str = yang_dnode_get_string(nbr_dnode, "./peer-group-name");
+       peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+       if (peer_af_flag_modify_nb(peer, afi, safi, flags, set, args->errmsg,
+                                  args->errmsg_len)
+           < 0)
+               return NB_ERR_INCONSISTENCY;
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/add-paths/path-type
@@ -25473,8 +29460,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_r
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25836,8 +29827,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_nexthop_self_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25855,8 +29850,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_nexthop_self_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25874,8 +29873,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25893,8 +29896,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25912,8 +29919,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -25931,14 +29942,77 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
+static int bgp_peer_group_afi_safi_weight_modify(struct nb_cb_modify_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       const struct lyd_node *nbr_dnode;
+       const struct lyd_node *nbr_af_dnode;
+       const char *af_name;
+       uint16_t weight;
+       afi_t afi;
+       safi_t safi;
+       int ret;
+
+       nbr_af_dnode = yang_dnode_get_parent(args->dnode, "afi-safi");
+       af_name = yang_dnode_get_string(nbr_af_dnode, "./afi-safi-name");
+       yang_afi_safi_identity2value(af_name, &afi, &safi);
+
+       nbr_dnode = yang_dnode_get_parent(args->dnode, "peer-group");
+       bgp = nb_running_get_entry(nbr_dnode, NULL, true);
+       peer_str = yang_dnode_get_string(nbr_dnode, "./peer-group-name");
+       peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+       weight = yang_dnode_get_uint16(args->dnode, NULL);
+
+       ret = peer_weight_set(peer, afi, safi, weight);
+       if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret) < 0)
+               return NB_ERR_INCONSISTENCY;
+
+       return NB_OK;
+}
+
+static int
+bgp_peer_group_afi_safi_weight_destroy(struct nb_cb_destroy_args *args)
+{
+       struct bgp *bgp;
+       const char *peer_str;
+       struct peer *peer;
+       const struct lyd_node *nbr_dnode;
+       const struct lyd_node *nbr_af_dnode;
+       const char *af_name;
+       afi_t afi;
+       safi_t safi;
+       int ret;
+
+       nbr_af_dnode = yang_dnode_get_parent(args->dnode, "afi-safi");
+       af_name = yang_dnode_get_string(nbr_af_dnode, "./afi-safi-name");
+       yang_afi_safi_identity2value(af_name, &afi, &safi);
+       nbr_dnode = yang_dnode_get_parent(nbr_af_dnode, "peer-group");
+       bgp = nb_running_get_entry(nbr_dnode, NULL, true);
+       peer_str = yang_dnode_get_string(nbr_dnode, "./peer-group-name");
+       peer = bgp_peer_group_peer_lookup(bgp, peer_str);
+
+       ret = peer_weight_unset(peer, afi, safi);
+       if (bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret) < 0)
+               return NB_ERR_INCONSISTENCY;
+
+       return NB_OK;
+}
+
 /*
  * XPath:
  * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/weight/weight-attribute
@@ -25950,8 +30024,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_weight_weight_att
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -25965,8 +30041,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_weight_weight_att
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -25984,8 +30062,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_route_reflector_r
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26003,8 +30085,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_route_server_rout
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26022,8 +30108,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26041,8 +30131,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26060,8 +30154,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26079,8 +30177,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_soft_reconfigurat
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26098,8 +30200,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26117,8 +30223,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26136,8 +30246,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_me
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26703,8 +30817,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_r
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26722,8 +30840,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_as
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26741,8 +30863,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -26760,8 +30886,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_me
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27172,8 +31302,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_self_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27191,8 +31325,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_self_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27210,8 +31348,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27229,8 +31371,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27248,8 +31394,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27267,8 +31417,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27286,8 +31440,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_route_reflector_r
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27305,8 +31463,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_route_server_rout
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27324,8 +31486,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27343,8 +31509,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27362,8 +31532,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_se
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27381,8 +31555,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_soft_reconfigurat
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27400,8 +31578,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_weight_weight_att
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -27415,8 +31595,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_weight_weight_att
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -27521,8 +31703,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27540,8 +31726,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27559,8 +31749,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27578,8 +31772,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -27990,8 +32188,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_nexthop_self_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28009,8 +32211,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_nexthop_self_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28028,8 +32234,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28047,8 +32257,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28066,8 +32280,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28085,8 +32303,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28104,8 +32326,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_route_reflector
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28123,8 +32349,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_route_server_ro
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28142,8 +32372,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28161,8 +32395,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28180,8 +32418,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28199,8 +32441,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_soft_reconfigur
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28218,8 +32464,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -28233,8 +32481,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -28339,8 +32589,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28358,8 +32612,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28377,8 +32635,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28396,8 +32658,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28808,8 +33074,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_nexthop_self_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28827,8 +33097,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_nexthop_self_ne
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28846,8 +33120,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28865,8 +33143,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28884,8 +33166,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28903,8 +33189,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remo
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28922,8 +33212,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_route_reflector
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28941,8 +33235,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_route_server_ro
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28960,8 +33258,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28979,8 +33281,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -28998,8 +33304,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29017,8 +33327,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_soft_reconfigur
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29036,8 +33350,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_weight_weight_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -29051,8 +33367,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_weight_weight_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -29157,8 +33475,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_o
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29176,8 +33498,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unch
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29195,8 +33521,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unch
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29214,8 +33544,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unch
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29626,8 +33960,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_nexthop_s
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29645,8 +33983,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_nexthop_s
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29664,8 +34006,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29683,8 +34029,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29702,8 +34052,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29721,8 +34075,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29740,8 +34098,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_route_ref
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29759,8 +34121,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_route_ser
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29778,8 +34144,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_comm
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29797,8 +34167,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_comm
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29816,8 +34190,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_comm
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29835,8 +34213,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_soft_reco
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29854,8 +34236,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_weight_we
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -29869,8 +34253,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_weight_we
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -29975,8 +34361,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_o
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -29994,8 +34384,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unch
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30013,8 +34407,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unch
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30032,8 +34430,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unch
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30444,8 +34846,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_nexthop_s
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30463,8 +34869,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_nexthop_s
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30482,8 +34892,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30501,8 +34915,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30520,8 +34938,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30539,8 +34961,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_a
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30558,8 +34984,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_route_ref
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30577,8 +35007,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_route_ser
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30596,8 +35030,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_comm
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30615,8 +35053,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_comm
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30634,8 +35076,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_comm
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30653,8 +35099,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_soft_reco
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30672,8 +35122,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_weight_we
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -30687,8 +35139,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_weight_we
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -30793,8 +35247,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_opt
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30812,8 +35270,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchan
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30831,8 +35293,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchan
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -30850,8 +35316,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchan
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31160,8 +35630,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_nexthop_sel
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31179,8 +35653,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_nexthop_sel
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31198,8 +35676,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31217,8 +35699,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31236,8 +35722,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31255,8 +35745,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31274,8 +35768,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_route_refle
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31293,8 +35791,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_route_serve
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31312,8 +35814,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_commun
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31331,8 +35837,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_commun
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31350,8 +35860,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_commun
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31369,8 +35883,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_soft_reconf
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31388,8 +35906,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_weight_weig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -31403,8 +35923,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_weight_weig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -31509,8 +36031,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_opt
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31528,8 +36054,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchan
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31547,8 +36077,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchan
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31566,8 +36100,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchan
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31876,8 +36414,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_nexthop_sel
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31895,8 +36437,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_nexthop_sel
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31914,8 +36460,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31933,8 +36483,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31952,8 +36506,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31971,8 +36529,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -31990,8 +36552,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_route_refle
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32009,8 +36575,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_route_serve
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32028,8 +36598,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_commun
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32047,8 +36621,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_commun
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32066,8 +36644,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_commun
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32085,8 +36667,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_soft_reconf
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32104,8 +36690,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_weight_weig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
@@ -32119,8 +36707,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_weight_weig
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -32206,8 +36796,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_rep
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32225,8 +36819,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_as_p
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32244,8 +36842,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_next
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32263,8 +36865,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_med_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32282,8 +36888,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_nexthop_self_next_h
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32301,8 +36911,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_nexthop_self_next_h
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32320,8 +36934,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_route_reflector_rou
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32339,8 +36957,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_route_server_route_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32358,8 +36980,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_soft_reconfiguratio
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32377,8 +37003,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_flowspec_route_reflector_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32396,8 +37026,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_flowspec_route_server_rou
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32415,8 +37049,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_flowspec_soft_reconfigura
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32434,8 +37072,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_flowspec_route_reflector_
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32453,8 +37095,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_flowspec_route_server_rou
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -32472,8 +37118,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_flowspec_soft_reconfigura
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
+               return NB_OK;
        case NB_EV_APPLY:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
index 00e781d804cb2304c4a68ca7ee63d1abe33b8683..c97d241f276cb98183581c44bc782dd180bd43c7 100644 (file)
@@ -154,6 +154,10 @@ static int bgp_show_neighbor_graceful_restart_afi_all(struct vty *vty,
                                                      const char *ip_str,
                                                      afi_t afi, bool use_json);
 
+static int peer_and_group_lookup_nb(struct vty *vty, const char *peer_str,
+                                   char *base_xpath, int xpath_len,
+                                   char *abs_xpath);
+
 static enum node_type bgp_node_type(afi_t afi, safi_t safi)
 {
        switch (afi) {
@@ -587,7 +591,7 @@ int bgp_vty_find_and_parse_afi_safi_bgp(struct vty *vty,
        return *idx;
 }
 
-static bool peer_address_self_check(struct bgp *bgp, union sockunion *su)
+bool peer_address_self_check(struct bgp *bgp, union sockunion *su)
 {
        struct interface *ifp = NULL;
 
@@ -604,49 +608,6 @@ static bool peer_address_self_check(struct bgp *bgp, union sockunion *su)
        return false;
 }
 
-/* Utility function for looking up peer from VTY.  */
-/* This is used only for configuration, so disallow if attempted on
- * a dynamic neighbor.
- */
-static struct peer *peer_lookup_vty(struct vty *vty, const char *ip_str)
-{
-       struct bgp *bgp = VTY_GET_CONTEXT(bgp);
-       int ret;
-       union sockunion su;
-       struct peer *peer;
-
-       if (!bgp) {
-               return NULL;
-       }
-
-       ret = str2sockunion(ip_str, &su);
-       if (ret < 0) {
-               peer = peer_lookup_by_conf_if(bgp, ip_str);
-               if (!peer) {
-                       if ((peer = peer_lookup_by_hostname(bgp, ip_str))
-                           == NULL) {
-                               vty_out(vty,
-                                       "%% Malformed address or name: %s\n",
-                                       ip_str);
-                               return NULL;
-                       }
-               }
-       } else {
-               peer = peer_lookup(bgp, &su);
-               if (!peer) {
-                       vty_out(vty,
-                               "%% Specify remote-as or peer-group commands first\n");
-                       return NULL;
-               }
-               if (peer_dynamic_neighbor(peer)) {
-                       vty_out(vty,
-                               "%% Operation not allowed on a dynamic neighbor\n");
-                       return NULL;
-               }
-       }
-       return peer;
-}
-
 /* Utility function for looking up peer or peer group.  */
 /* This is used only for configuration, so disallow if attempted on
  * a dynamic neighbor.
@@ -693,6 +654,98 @@ struct peer *peer_and_group_lookup_vty(struct vty *vty, const char *peer_str)
        return NULL;
 }
 
+int bgp_nb_errmsg_return(char *errmsg, size_t errmsg_len, int ret)
+{
+       const char *str = NULL;
+
+       switch (ret) {
+       case BGP_ERR_INVALID_VALUE:
+               str = "Invalid value";
+               break;
+       case BGP_ERR_INVALID_FLAG:
+               str = "Invalid flag";
+               break;
+       case BGP_ERR_PEER_GROUP_SHUTDOWN:
+               str = "Peer-group has been shutdown. Activate the peer-group first";
+               break;
+       case BGP_ERR_PEER_FLAG_CONFLICT:
+               str = "Can't set override-capability and strict-capability-match at the same time";
+               break;
+       case BGP_ERR_PEER_GROUP_NO_REMOTE_AS:
+               str = "Specify remote-as or peer-group remote AS first";
+               break;
+       case BGP_ERR_PEER_GROUP_CANT_CHANGE:
+               str = "Cannot change the peer-group. Deconfigure first";
+               break;
+       case BGP_ERR_PEER_GROUP_MISMATCH:
+               str = "Peer is not a member of this peer-group";
+               break;
+       case BGP_ERR_PEER_FILTER_CONFLICT:
+               str = "Prefix/distribute list can not co-exist";
+               break;
+       case BGP_ERR_NOT_INTERNAL_PEER:
+               str = "Invalid command. Not an internal neighbor";
+               break;
+       case BGP_ERR_REMOVE_PRIVATE_AS:
+               str = "remove-private-AS cannot be configured for IBGP peers";
+               break;
+       case BGP_ERR_LOCAL_AS_ALLOWED_ONLY_FOR_EBGP:
+               str = "Local-AS allowed only for EBGP peers";
+               break;
+       case BGP_ERR_CANNOT_HAVE_LOCAL_AS_SAME_AS:
+               str = "Cannot have local-as same as BGP AS number";
+               break;
+       case BGP_ERR_TCPSIG_FAILED:
+               str = "Error while applying TCP-Sig to session(s)";
+               break;
+       case BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK:
+               str = "ebgp-multihop and ttl-security cannot be configured together";
+               break;
+       case BGP_ERR_NO_IBGP_WITH_TTLHACK:
+               str = "ttl-security only allowed for EBGP peers";
+               break;
+       case BGP_ERR_AS_OVERRIDE:
+               str = "as-override cannot be configured for IBGP peers";
+               break;
+       case BGP_ERR_INVALID_DYNAMIC_NEIGHBORS_LIMIT:
+               str = "Invalid limit for number of dynamic neighbors";
+               break;
+       case BGP_ERR_DYNAMIC_NEIGHBORS_RANGE_EXISTS:
+               str = "Dynamic neighbor listen range already exists";
+               break;
+       case BGP_ERR_INVALID_FOR_DYNAMIC_PEER:
+               str = "Operation not allowed on a dynamic neighbor";
+               break;
+       case BGP_ERR_INVALID_FOR_DIRECT_PEER:
+               str = "Operation not allowed on a directly connected neighbor";
+               break;
+       case BGP_ERR_PEER_SAFI_CONFLICT:
+               str = GR_INVALID;
+               break;
+       case BGP_ERR_GR_INVALID_CMD:
+               str = "The Graceful Restart command used is not valid at this moment.";
+               break;
+       case BGP_ERR_GR_OPERATION_FAILED:
+               str = "The Graceful Restart Operation failed due to an err.";
+               break;
+       case BGP_GR_NO_OPERATION:
+               str = GR_NO_OPER;
+               break;
+       case BGP_ERR_PEER_GROUP_MEMBER:
+               str = "Peer-group member cannot override remote-as of peer-group";
+               break;
+       case BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT:
+               str = "Peer-group members must be all internal or all external";
+               break;
+       }
+       if (str) {
+               snprintf(errmsg, errmsg_len, "%s", str);
+               return -1;
+       }
+
+       return 0;
+}
+
 int bgp_vty_return(struct vty *vty, int ret)
 {
        const char *str = NULL;
@@ -4067,70 +4120,6 @@ void cli_show_router_global_ebgp_multihop_connected_route_check(
                vty_out(vty, " bgp disable-ebgp-connected-route-check\n");
 }
 
-static int peer_remote_as_vty(struct vty *vty, const char *peer_str,
-                             const char *as_str, afi_t afi, safi_t safi)
-{
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
-       int ret;
-       as_t as;
-       int as_type = AS_SPECIFIED;
-       union sockunion su;
-
-       if (as_str[0] == 'i') {
-               as = 0;
-               as_type = AS_INTERNAL;
-       } else if (as_str[0] == 'e') {
-               as = 0;
-               as_type = AS_EXTERNAL;
-       } else {
-               /* Get AS number.  */
-               as = strtoul(as_str, NULL, 10);
-       }
-
-       /* If peer is peer group or interface peer, call proper function. */
-       ret = str2sockunion(peer_str, &su);
-       if (ret < 0) {
-               struct peer *peer;
-
-               /* Check if existing interface peer */
-               peer = peer_lookup_by_conf_if(bgp, peer_str);
-
-               ret = peer_remote_as(bgp, NULL, peer_str, &as, as_type, afi,
-                                    safi);
-
-               /* if not interface peer, check peer-group settings */
-               if (ret < 0 && !peer) {
-                       ret = peer_group_remote_as(bgp, peer_str, &as, as_type);
-                       if (ret < 0) {
-                               vty_out(vty,
-                                       "%% Create the peer-group or interface first\n");
-                               return CMD_WARNING_CONFIG_FAILED;
-                       }
-                       return CMD_SUCCESS;
-               }
-       } 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;
-               }
-               ret = peer_remote_as(bgp, &su, NULL, &as, as_type, afi, safi);
-       }
-
-       /* This peer belongs to peer group.  */
-       switch (ret) {
-       case BGP_ERR_PEER_GROUP_MEMBER:
-               vty_out(vty,
-                       "%% Peer-group member cannot override remote-as of peer-group\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       case BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT:
-               vty_out(vty,
-                       "%% Peer-group members must be all internal or all external\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-       return bgp_vty_return(vty, ret);
-}
-
 DEFUN_YANG(bgp_default_shutdown,
           bgp_default_shutdown_cmd,
           "[no] bgp default shutdown",
@@ -4196,31 +4185,67 @@ ALIAS(no_bgp_shutdown, no_bgp_shutdown_msg_cmd,
       "Administrative shutdown of the BGP instance\n"
       "Add a shutdown message (RFC 8203)\n" "Shutdown message\n")
 
-DEFUN (neighbor_remote_as,
-       neighbor_remote_as_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> remote-as <(1-4294967295)|internal|external>",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Specify a BGP neighbor\n"
-       AS_STR
-       "Internal BGP peer\n"
-       "External BGP peer\n")
+DEFUN_YANG(neighbor_remote_as,
+          neighbor_remote_as_cmd,
+          "neighbor <A.B.C.D|X:X::X:X|WORD> remote-as <(1-4294967295)|internal|external>",
+          NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+          "Specify a BGP neighbor\n" AS_STR
+          "Internal BGP peer\n"
+          "External BGP peer\n")
 {
        int idx_peer = 1;
        int idx_remote_as = 3;
-       return peer_remote_as_vty(vty, argv[idx_peer]->arg,
-                                 argv[idx_remote_as]->arg, AFI_IP,
-                                 SAFI_UNICAST);
+       char base_xpath[XPATH_MAXLEN];
+       char unnbr_xpath[XPATH_MAXLEN];
+       char prgrp_xpath[XPATH_MAXLEN];
+       union sockunion su;
+       const char *as_type_str = "as-specified";
+
+       if (str2sockunion(argv[idx_peer]->arg, &su) < 0) {
+               snprintf(unnbr_xpath, sizeof(unnbr_xpath),
+                        FRR_BGP_NEIGHBOR_UNNUM_XPATH, argv[idx_peer]->arg, "");
+
+               snprintf(prgrp_xpath, sizeof(prgrp_xpath),
+                        FRR_BGP_PEER_GROUP_XPATH, argv[idx_peer]->arg, "");
+
+               if (yang_dnode_exists(vty->candidate_config->dnode, "%s%s",
+                                     VTY_CURR_XPATH, unnbr_xpath + 1)) {
+                       strlcpy(base_xpath, unnbr_xpath, sizeof(base_xpath));
+               } else if (yang_dnode_exists(vty->candidate_config->dnode,
+                                            "%s%s", VTY_CURR_XPATH,
+                                            prgrp_xpath + 1)) {
+                       snprintf(base_xpath, sizeof(base_xpath),
+                                FRR_BGP_PEER_GROUP_XPATH, argv[idx_peer]->arg,
+                                "");
+               } else {
+                       vty_out(vty,
+                               "%% Create the peer-group or interface first\n");
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+       } else {
+               snprintf(base_xpath, sizeof(base_xpath),
+                        FRR_BGP_NEIGHBOR_NUM_XPATH, argv[idx_peer]->arg, "");
+       }
+
+       if (argv[idx_remote_as]->arg[0] == 'i') {
+               as_type_str = "internal";
+       } else if (argv[idx_remote_as]->arg[0] == 'e') {
+               as_type_str = "external";
+       } else {
+               nb_cli_enqueue_change(vty, "./neighbor-remote-as/remote-as",
+                                     NB_OP_MODIFY, argv[idx_remote_as]->arg);
+       }
+       nb_cli_enqueue_change(vty, "./neighbor-remote-as/remote-as-type",
+                             NB_OP_MODIFY, as_type_str);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-static int peer_conf_interface_get(struct vty *vty, const char *conf_if,
-                                  afi_t afi, safi_t safi, int v6only,
-                                  const char *peer_group_name,
-                                  const char *as_str)
+int peer_conf_interface_create(struct bgp *bgp, const char *conf_if, afi_t afi,
+                              safi_t safi, bool v6only,
+                              const char *peer_group_name, int as_type,
+                              as_t as, char *errmsg, size_t errmsg_len)
 {
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
-       as_t as = 0;
-       int as_type = AS_UNSPECIFIED;
        struct peer *peer;
        struct peer_group *group;
        int ret = 0;
@@ -4229,25 +4254,14 @@ static int peer_conf_interface_get(struct vty *vty, const char *conf_if,
        group = peer_group_lookup(bgp, conf_if);
 
        if (group) {
-               vty_out(vty, "%% Name conflict with peer-group \n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-
-       if (as_str) {
-               if (as_str[0] == 'i') {
-                       as_type = AS_INTERNAL;
-               } else if (as_str[0] == 'e') {
-                       as_type = AS_EXTERNAL;
-               } else {
-                       /* Get AS number.  */
-                       as = strtoul(as_str, NULL, 10);
-                       as_type = AS_SPECIFIED;
-               }
+               snprintf(errmsg, errmsg_len,
+                        "Name conflict with peer-group \n");
+               return -1;
        }
 
        peer = peer_lookup_by_conf_if(bgp, conf_if);
        if (peer) {
-               if (as_str)
+               if (as_type != AS_UNSPECIFIED)
                        ret = peer_remote_as(bgp, NULL, conf_if, &as, as_type,
                                             afi, safi);
        } else {
@@ -4260,8 +4274,9 @@ static int peer_conf_interface_get(struct vty *vty, const char *conf_if,
                                           as_type, afi, safi, NULL);
 
                if (!peer) {
-                       vty_out(vty, "%% BGP failed to create peer\n");
-                       return CMD_WARNING_CONFIG_FAILED;
+                       snprintf(errmsg, errmsg_len,
+                                "BGP failed to create peer\n");
+                       return -1;
                }
 
                if (v6only)
@@ -4304,128 +4319,162 @@ static int peer_conf_interface_get(struct vty *vty, const char *conf_if,
        if (peer_group_name) {
                group = peer_group_lookup(bgp, peer_group_name);
                if (!group) {
-                       vty_out(vty, "%% Configure the peer-group first\n");
-                       return CMD_WARNING_CONFIG_FAILED;
+                       snprintf(errmsg, errmsg_len,
+                                "Configure the peer-group first\n");
+                       return -1;
                }
 
                ret = peer_group_bind(bgp, &su, peer, group, &as);
        }
 
-       return bgp_vty_return(vty, ret);
+       return bgp_nb_errmsg_return(errmsg, errmsg_len, ret);
 }
 
-DEFUN (neighbor_interface_config,
-       neighbor_interface_config_cmd,
-       "neighbor WORD interface [peer-group PGNAME]",
-       NEIGHBOR_STR
-       "Interface name or neighbor tag\n"
-       "Enable BGP on interface\n"
-       "Member of the peer-group\n"
-       "Peer-group name\n")
+DEFUN_YANG(neighbor_interface_config, neighbor_interface_config_cmd,
+          "neighbor WORD interface [peer-group PGNAME]",
+          NEIGHBOR_STR
+          "Interface name or neighbor tag\n"
+          "Enable BGP on interface\n"
+          "Member of the peer-group\n"
+          "Peer-group name\n")
 {
        int idx_word = 1;
        int idx_peer_group_word = 4;
+       char base_xpath[XPATH_MAXLEN];
 
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_NEIGHBOR_UNNUM_XPATH,
+                argv[idx_word]->arg, "");
+
+       nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
        if (argc > idx_peer_group_word)
-               return peer_conf_interface_get(
-                       vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 0,
-                       argv[idx_peer_group_word]->arg, NULL);
-       else
-               return peer_conf_interface_get(vty, argv[idx_word]->arg, AFI_IP,
-                                              SAFI_UNICAST, 0, NULL, NULL);
+               nb_cli_enqueue_change(vty, "./peer-group", NB_OP_MODIFY,
+                                     argv[idx_peer_group_word]->arg);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (neighbor_interface_config_v6only,
-       neighbor_interface_config_v6only_cmd,
-       "neighbor WORD interface v6only [peer-group PGNAME]",
-       NEIGHBOR_STR
-       "Interface name or neighbor tag\n"
-       "Enable BGP on interface\n"
-       "Enable BGP with v6 link-local only\n"
-       "Member of the peer-group\n"
-       "Peer-group name\n")
+DEFUN_YANG(neighbor_interface_config_v6only,
+          neighbor_interface_config_v6only_cmd,
+          "neighbor WORD interface v6only [peer-group PGNAME]",
+          NEIGHBOR_STR
+          "Interface name or neighbor tag\n"
+          "Enable BGP on interface\n"
+          "Enable BGP with v6 link-local only\n"
+          "Member of the peer-group\n"
+          "Peer-group name\n")
 {
        int idx_word = 1;
        int idx_peer_group_word = 5;
+       char base_xpath[XPATH_MAXLEN];
+
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_NEIGHBOR_UNNUM_XPATH,
+                argv[idx_word]->arg, "");
 
+       nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
        if (argc > idx_peer_group_word)
-               return peer_conf_interface_get(
-                       vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 1,
-                       argv[idx_peer_group_word]->arg, NULL);
+               nb_cli_enqueue_change(vty, "./peer-group", NB_OP_MODIFY,
+                                     argv[idx_peer_group_word]->arg);
+
+       nb_cli_enqueue_change(vty, "./v6only", NB_OP_MODIFY, "true");
 
-       return peer_conf_interface_get(vty, argv[idx_word]->arg, AFI_IP,
-                                      SAFI_UNICAST, 1, NULL, NULL);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 
-DEFUN (neighbor_interface_config_remote_as,
-       neighbor_interface_config_remote_as_cmd,
-       "neighbor WORD interface remote-as <(1-4294967295)|internal|external>",
-       NEIGHBOR_STR
-       "Interface name or neighbor tag\n"
-       "Enable BGP on interface\n"
-       "Specify a BGP neighbor\n"
-       AS_STR
-       "Internal BGP peer\n"
-       "External BGP peer\n")
+DEFUN_YANG(
+       neighbor_interface_config_remote_as,
+       neighbor_interface_config_remote_as_cmd,
+       "neighbor WORD interface remote-as <(1-4294967295)|internal|external>",
+       NEIGHBOR_STR
+       "Interface name or neighbor tag\n"
+       "Enable BGP on interface\n"
+       "Specify a BGP neighbor\n" AS_STR
+       "Internal BGP peer\n"
+       "External BGP peer\n")
 {
        int idx_word = 1;
        int idx_remote_as = 4;
-       return peer_conf_interface_get(vty, argv[idx_word]->arg, AFI_IP,
-                                      SAFI_UNICAST, 0, NULL,
-                                      argv[idx_remote_as]->arg);
+       char base_xpath[XPATH_MAXLEN];
+       const char *as_type_str = "as-specified";
+
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_NEIGHBOR_UNNUM_XPATH,
+                argv[idx_word]->arg, "");
+
+       nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
+
+       if (argv[idx_remote_as]->arg[0] == 'i') {
+               as_type_str = "internal";
+       } else if (argv[idx_remote_as]->arg[0] == 'e') {
+               as_type_str = "external";
+       } else {
+               nb_cli_enqueue_change(vty, "./neighbor-remote-as/remote-as",
+                                     NB_OP_MODIFY, argv[idx_remote_as]->arg);
+       }
+       nb_cli_enqueue_change(vty, "./neighbor-remote-as/remote-as-type",
+                             NB_OP_MODIFY, as_type_str);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (neighbor_interface_v6only_config_remote_as,
-       neighbor_interface_v6only_config_remote_as_cmd,
-       "neighbor WORD interface v6only remote-as <(1-4294967295)|internal|external>",
-       NEIGHBOR_STR
-       "Interface name or neighbor tag\n"
-       "Enable BGP with v6 link-local only\n"
-       "Enable BGP on interface\n"
-       "Specify a BGP neighbor\n"
-       AS_STR
-       "Internal BGP peer\n"
-       "External BGP peer\n")
+DEFUN_YANG(
+       neighbor_interface_v6only_config_remote_as,
+       neighbor_interface_v6only_config_remote_as_cmd,
+       "neighbor WORD interface v6only remote-as <(1-4294967295)|internal|external>",
+       NEIGHBOR_STR
+       "Interface name or neighbor tag\n"
+       "Enable BGP with v6 link-local only\n"
+       "Enable BGP on interface\n"
+       "Specify a BGP neighbor\n" AS_STR
+       "Internal BGP peer\n"
+       "External BGP peer\n")
 {
        int idx_word = 1;
        int idx_remote_as = 5;
-       return peer_conf_interface_get(vty, argv[idx_word]->arg, AFI_IP,
-                                      SAFI_UNICAST, 1, NULL,
-                                      argv[idx_remote_as]->arg);
-}
+       char base_xpath[XPATH_MAXLEN];
+       const char *as_type_str = "as-specified";
 
-DEFUN (neighbor_peer_group,
-       neighbor_peer_group_cmd,
-       "neighbor WORD peer-group",
-       NEIGHBOR_STR
-       "Interface name or neighbor tag\n"
-       "Configure peer-group\n")
-{
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
-       int idx_word = 1;
-       struct peer *peer;
-       struct peer_group *group;
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_NEIGHBOR_UNNUM_XPATH,
+                argv[idx_word]->arg, "");
 
-       peer = peer_lookup_by_conf_if(bgp, argv[idx_word]->arg);
-       if (peer) {
-               vty_out(vty, "%% Name conflict with interface: \n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
+       nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
 
-       group = peer_group_get(bgp, argv[idx_word]->arg);
-       if (!group) {
-               vty_out(vty, "%% BGP failed to find or create peer-group\n");
-               return CMD_WARNING_CONFIG_FAILED;
+       nb_cli_enqueue_change(vty, "./v6only", NB_OP_MODIFY, "true");
+
+       if (argv[idx_remote_as]->arg[0] == 'i') {
+               as_type_str = "internal";
+       } else if (argv[idx_remote_as]->arg[0] == 'e') {
+               as_type_str = "external";
+       } else {
+               nb_cli_enqueue_change(vty, "./neighbor-remote-as/remote-as",
+                                     NB_OP_MODIFY, argv[idx_remote_as]->arg);
        }
+       nb_cli_enqueue_change(vty, "./neighbor-remote-as/remote-as-type",
+                             NB_OP_MODIFY, as_type_str);
 
-       return CMD_SUCCESS;
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor,
-       no_neighbor_cmd,
-       "no neighbor <WORD|<A.B.C.D|X:X::X:X> [remote-as <(1-4294967295)|internal|external>]>",
-       NO_STR
+DEFUN_YANG(neighbor_peer_group, neighbor_peer_group_cmd,
+          "neighbor WORD peer-group",
+          NEIGHBOR_STR
+          "Interface name or neighbor tag\n"
+          "Configure peer-group\n")
+{
+       char base_xpath[XPATH_MAXLEN];
+       int idx_word = 1;
+
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_PEER_GROUP_XPATH,
+                argv[idx_word]->arg, "");
+
+       nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
+
+       return nb_cli_apply_changes(vty, base_xpath);
+}
+
+DEFUN (no_neighbor,
+       no_neighbor_cmd,
+       "no neighbor <WORD|<A.B.C.D|X:X::X:X> [remote-as <(1-4294967295)|internal|external>]>",
+       NO_STR
        NEIGHBOR_STR
        NEIGHBOR_ADDR_STR2
        "Specify a BGP neighbor\n"
@@ -4433,245 +4482,227 @@ DEFUN (no_neighbor,
        "Internal BGP peer\n"
        "External BGP peer\n")
 {
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
        int idx_peer = 2;
-       int ret;
+       char base_xpath[XPATH_MAXLEN];
+       char num_xpath[XPATH_MAXLEN];
+       char unnbr_xpath[XPATH_MAXLEN];
+       char prgrp_xpath[XPATH_MAXLEN];
        union sockunion su;
-       struct peer_group *group;
-       struct peer *peer;
-       struct peer *other;
 
-       ret = str2sockunion(argv[idx_peer]->arg, &su);
-       if (ret < 0) {
-               /* look up for neighbor by interface name config. */
-               peer = peer_lookup_by_conf_if(bgp, argv[idx_peer]->arg);
-               if (peer) {
-                       /* Request zebra to terminate IPv6 RAs on this
-                        * interface. */
-                       if (peer->ifp)
-                               bgp_zebra_terminate_radv(peer->bgp, peer);
-                       peer_notify_unconfig(peer);
-                       peer_delete(peer);
-                       return CMD_SUCCESS;
+       if (str2sockunion(argv[idx_peer]->arg, &su) == 0) {
+               snprintf(num_xpath, sizeof(num_xpath),
+                        FRR_BGP_NEIGHBOR_NUM_XPATH, argv[idx_peer]->arg, "");
+               if (yang_dnode_exists(vty->candidate_config->dnode, "%s%s",
+                                     VTY_CURR_XPATH, num_xpath + 1)) {
+                       strlcpy(base_xpath, num_xpath, sizeof(base_xpath));
                }
-
-               group = peer_group_lookup(bgp, argv[idx_peer]->arg);
-               if (group) {
-                       peer_group_notify_unconfig(group);
-                       peer_group_delete(group);
+       } else {
+               snprintf(unnbr_xpath, sizeof(unnbr_xpath),
+                        FRR_BGP_NEIGHBOR_UNNUM_XPATH, argv[idx_peer]->arg, "");
+
+               snprintf(prgrp_xpath, sizeof(prgrp_xpath),
+                        FRR_BGP_PEER_GROUP_XPATH, argv[idx_peer]->arg, "");
+
+               if (yang_dnode_exists(vty->candidate_config->dnode, "%s%s",
+                                     VTY_CURR_XPATH, unnbr_xpath + 1)) {
+                       strlcpy(base_xpath, unnbr_xpath, sizeof(base_xpath));
+               } else if (yang_dnode_exists(vty->candidate_config->dnode,
+                                            "%s%s", VTY_CURR_XPATH,
+                                            prgrp_xpath + 1)) {
+                       strlcpy(base_xpath, prgrp_xpath, sizeof(base_xpath));
                } else {
-                       vty_out(vty, "%% Create the peer-group first\n");
+                       vty_out(vty,
+                               "%% Create the peer-group or interface first\n");
                        return CMD_WARNING_CONFIG_FAILED;
                }
-       } else {
-               peer = peer_lookup(bgp, &su);
-               if (peer) {
-                       if (peer_dynamic_neighbor(peer)) {
-                               vty_out(vty,
-                                       "%% Operation not allowed on a dynamic neighbor\n");
-                               return CMD_WARNING_CONFIG_FAILED;
-                       }
-
-                       other = peer->doppelganger;
-
-                       if (CHECK_FLAG(peer->flags, PEER_FLAG_CAPABILITY_ENHE))
-                               bgp_zebra_terminate_radv(peer->bgp, peer);
-
-                       peer_notify_unconfig(peer);
-                       peer_delete(peer);
-                       if (other && other->status != Deleted) {
-                               peer_notify_unconfig(other);
-                               peer_delete(other);
-                       }
-               }
        }
 
-       return CMD_SUCCESS;
+       nb_cli_enqueue_change(vty, base_xpath, NB_OP_DESTROY, NULL);
+
+       return nb_cli_apply_changes(vty, NULL);
 }
 
-DEFUN (no_neighbor_interface_config,
-       no_neighbor_interface_config_cmd,
-       "no neighbor WORD interface [v6only] [peer-group PGNAME] [remote-as <(1-4294967295)|internal|external>]",
-       NO_STR
-       NEIGHBOR_STR
-       "Interface name\n"
-       "Configure BGP on interface\n"
-       "Enable BGP with v6 link-local only\n"
-       "Member of the peer-group\n"
-       "Peer-group name\n"
-       "Specify a BGP neighbor\n"
-       AS_STR
-       "Internal BGP peer\n"
-       "External BGP peer\n")
+DEFUN_YANG(no_neighbor_interface_config,
+          no_neighbor_interface_config_cmd,
+          "no neighbor WORD interface [v6only] [peer-group PGNAME] [remote-as <(1-4294967295)|internal|external>]",
+          NO_STR NEIGHBOR_STR
+          "Interface name\n"
+          "Configure BGP on interface\n"
+          "Enable BGP with v6 link-local only\n"
+          "Member of the peer-group\n"
+          "Peer-group name\n"
+          "Specify a BGP neighbor\n" AS_STR
+          "Internal BGP peer\n"
+          "External BGP peer\n")
 {
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
        int idx_word = 2;
-       struct peer *peer;
+       char base_xpath[XPATH_MAXLEN];
 
-       /* look up for neighbor by interface name config. */
-       peer = peer_lookup_by_conf_if(bgp, argv[idx_word]->arg);
-       if (peer) {
-               /* Request zebra to terminate IPv6 RAs on this interface. */
-               if (peer->ifp)
-                       bgp_zebra_terminate_radv(peer->bgp, peer);
-               peer_notify_unconfig(peer);
-               peer_delete(peer);
-       } else {
-               vty_out(vty, "%% Create the bgp interface first\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-       return CMD_SUCCESS;
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_NEIGHBOR_UNNUM_XPATH,
+                argv[idx_word]->arg, "");
+
+       nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_peer_group,
-       no_neighbor_peer_group_cmd,
-       "no neighbor WORD peer-group",
-       NO_STR
-       NEIGHBOR_STR
-       "Neighbor tag\n"
-       "Configure peer-group\n")
+DEFUN_YANG(no_neighbor_peer_group,
+          no_neighbor_peer_group_cmd,
+          "no neighbor WORD peer-group",
+          NO_STR NEIGHBOR_STR
+          "Neighbor tag\n"
+          "Configure peer-group\n")
 {
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
+       char base_xpath[XPATH_MAXLEN];
        int idx_word = 2;
-       struct peer_group *group;
 
-       group = peer_group_lookup(bgp, argv[idx_word]->arg);
-       if (group) {
-               peer_group_notify_unconfig(group);
-               peer_group_delete(group);
-       } else {
-               vty_out(vty, "%% Create the peer-group first\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-       return CMD_SUCCESS;
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_PEER_GROUP_XPATH,
+                argv[idx_word]->arg, "");
+
+       nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_interface_peer_group_remote_as,
-       no_neighbor_interface_peer_group_remote_as_cmd,
-       "no neighbor WORD remote-as <(1-4294967295)|internal|external>",
-       NO_STR
-       NEIGHBOR_STR
-       "Interface name or neighbor tag\n"
-       "Specify a BGP neighbor\n"
-       AS_STR
-       "Internal BGP peer\n"
-       "External BGP peer\n")
+DEFUN_YANG(no_neighbor_interface_peer_group_remote_as,
+          no_neighbor_interface_peer_group_remote_as_cmd,
+          "no neighbor WORD remote-as <(1-4294967295)|internal|external>",
+          NO_STR NEIGHBOR_STR
+          "Interface name or neighbor tag\n"
+          "Specify a BGP neighbor\n" AS_STR
+          "Internal BGP peer\n"
+          "External BGP peer\n")
 {
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
-       int idx_word = 2;
-       struct peer_group *group;
-       struct peer *peer;
+       int idx_peer = 2;
+       char base_xpath[XPATH_MAXLEN];
+       char unnbr_xpath[XPATH_MAXLEN];
+       char prgrp_xpath[XPATH_MAXLEN];
 
-       /* look up for neighbor by interface name config. */
-       peer = peer_lookup_by_conf_if(bgp, argv[idx_word]->arg);
-       if (peer) {
-               peer_as_change(peer, 0, AS_UNSPECIFIED);
-               return CMD_SUCCESS;
-       }
+       snprintf(unnbr_xpath, sizeof(unnbr_xpath), FRR_BGP_NEIGHBOR_UNNUM_XPATH,
+                argv[idx_peer]->arg, "");
 
-       group = peer_group_lookup(bgp, argv[idx_word]->arg);
-       if (group)
-               peer_group_remote_as_delete(group);
-       else {
+       snprintf(prgrp_xpath, sizeof(prgrp_xpath), FRR_BGP_PEER_GROUP_XPATH,
+                argv[idx_peer]->arg, "");
+
+       if (yang_dnode_exists(vty->candidate_config->dnode, "%s%s",
+                             VTY_CURR_XPATH, unnbr_xpath + 1)) {
+               strlcpy(base_xpath, unnbr_xpath, sizeof(base_xpath));
+       } else if (yang_dnode_exists(vty->candidate_config->dnode, "%s%s",
+                                    VTY_CURR_XPATH, prgrp_xpath + 1)) {
+               strlcpy(base_xpath, prgrp_xpath, sizeof(base_xpath));
+       } else {
                vty_out(vty, "%% Create the peer-group or interface first\n");
                return CMD_WARNING_CONFIG_FAILED;
        }
-       return CMD_SUCCESS;
+
+       strlcat(base_xpath, "/neighbor-remote-as/remote-as-type",
+               sizeof(base_xpath));
+
+       nb_cli_enqueue_change(vty, base_xpath, NB_OP_DESTROY, NULL);
+
+       return nb_cli_apply_changes(vty, NULL);
 }
 
-DEFUN (neighbor_local_as,
-       neighbor_local_as_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> local-as (1-4294967295)",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Specify a local-as number\n"
-       "AS number used as local AS\n")
+DEFUN_YANG(neighbor_local_as,
+          neighbor_local_as_cmd,
+          "neighbor <A.B.C.D|X:X::X:X|WORD> local-as (1-4294967295)",
+          NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+          "Specify a local-as number\n"
+          "AS number used as local AS\n")
 {
        int idx_peer = 1;
        int idx_number = 3;
-       struct peer *peer;
-       int ret;
-       as_t as;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       as = strtoul(argv[idx_number]->arg, NULL, 10);
-       ret = peer_local_as_set(peer, as, 0, 0);
-       return bgp_vty_return(vty, ret);
+       nb_cli_enqueue_change(vty, "./local-as/local-as", NB_OP_MODIFY,
+                             argv[idx_number]->arg);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (neighbor_local_as_no_prepend,
-       neighbor_local_as_no_prepend_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> local-as (1-4294967295) no-prepend",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Specify a local-as number\n"
-       "AS number used as local AS\n"
-       "Do not prepend local-as to updates from ebgp peers\n")
+DEFUN_YANG(
+       neighbor_local_as_no_prepend, neighbor_local_as_no_prepend_cmd,
+       "neighbor <A.B.C.D|X:X::X:X|WORD> local-as (1-4294967295) no-prepend",
+       NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+       "Specify a local-as number\n"
+       "AS number used as local AS\n"
+       "Do not prepend local-as to updates from ebgp peers\n")
 {
        int idx_peer = 1;
        int idx_number = 3;
-       struct peer *peer;
-       int ret;
-       as_t as;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       as = strtoul(argv[idx_number]->arg, NULL, 10);
-       ret = peer_local_as_set(peer, as, 1, 0);
-       return bgp_vty_return(vty, ret);
+       nb_cli_enqueue_change(vty, "./local-as/local-as", NB_OP_MODIFY,
+                             argv[idx_number]->arg);
+       nb_cli_enqueue_change(vty, "./local-as/no-prepend", NB_OP_MODIFY,
+                             "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (neighbor_local_as_no_prepend_replace_as,
-       neighbor_local_as_no_prepend_replace_as_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> local-as (1-4294967295) no-prepend replace-as",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Specify a local-as number\n"
-       "AS number used as local AS\n"
-       "Do not prepend local-as to updates from ebgp peers\n"
-       "Do not prepend local-as to updates from ibgp peers\n")
+DEFUN_YANG(
+       neighbor_local_as_no_prepend_replace_as,
+       neighbor_local_as_no_prepend_replace_as_cmd,
+       "neighbor <A.B.C.D|X:X::X:X|WORD> local-as (1-4294967295) no-prepend replace-as",
+       NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+       "Specify a local-as number\n"
+       "AS number used as local AS\n"
+       "Do not prepend local-as to updates from ebgp peers\n"
+       "Do not prepend local-as to updates from ibgp peers\n")
 {
        int idx_peer = 1;
        int idx_number = 3;
-       struct peer *peer;
-       int ret;
-       as_t as;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       as = strtoul(argv[idx_number]->arg, NULL, 10);
-       ret = peer_local_as_set(peer, as, 1, 1);
-       return bgp_vty_return(vty, ret);
+       nb_cli_enqueue_change(vty, "./local-as/local-as", NB_OP_MODIFY,
+                             argv[idx_number]->arg);
+       nb_cli_enqueue_change(vty, "./local-as/no-prepend", NB_OP_MODIFY,
+                             "true");
+       nb_cli_enqueue_change(vty, "./local-as/no-replace-as", NB_OP_MODIFY,
+                             "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_local_as,
-       no_neighbor_local_as_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> local-as [(1-4294967295) [no-prepend [replace-as]]]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Specify a local-as number\n"
-       "AS number used as local AS\n"
-       "Do not prepend local-as to updates from ebgp peers\n"
-       "Do not prepend local-as to updates from ibgp peers\n")
+DEFUN_YANG(no_neighbor_local_as,
+          no_neighbor_local_as_cmd,
+          "no neighbor <A.B.C.D|X:X::X:X|WORD> local-as [(1-4294967295) [no-prepend [replace-as]]]",
+          NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+          "Specify a local-as number\n"
+          "AS number used as local AS\n"
+          "Do not prepend local-as to updates from ebgp peers\n"
+          "Do not prepend local-as to updates from ibgp peers\n")
 {
        int idx_peer = 2;
-       struct peer *peer;
-       int ret;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       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_local_as_unset(peer);
-       return bgp_vty_return(vty, ret);
+       nb_cli_enqueue_change(vty, "./local-as/local-as", NB_OP_DESTROY, NULL);
+       nb_cli_enqueue_change(vty, "./local-as/no-prepend", NB_OP_MODIFY,
+                             "false");
+       nb_cli_enqueue_change(vty, "./local-as/no-replace-as", NB_OP_MODIFY,
+                             "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 
@@ -4714,65 +4745,79 @@ DEFUN (no_neighbor_solo,
        return bgp_vty_return(vty, ret);
 }
 
-DEFUN (neighbor_password,
-       neighbor_password_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> password LINE",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Set a password\n"
-       "The password\n")
+DEFUN_YANG(neighbor_password,
+          neighbor_password_cmd,
+          "neighbor <A.B.C.D|X:X::X:X|WORD> password LINE",
+          NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+          "Set a password\n"
+          "The password\n")
 {
        int idx_peer = 1;
        int idx_line = 3;
-       struct peer *peer;
-       int ret;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       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_password_set(peer, argv[idx_line]->arg);
-       return bgp_vty_return(vty, ret);
+       nb_cli_enqueue_change(vty, "./password", NB_OP_MODIFY,
+                             argv[idx_line]->arg);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_password,
-       no_neighbor_password_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> password [LINE]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Set a password\n"
-       "The password\n")
+DEFUN_YANG(no_neighbor_password,
+          no_neighbor_password_cmd,
+          "no neighbor <A.B.C.D|X:X::X:X|WORD> password [LINE]",
+          NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+          "Set a password\n"
+          "The password\n")
 {
        int idx_peer = 2;
-       struct peer *peer;
-       int ret;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       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_password_unset(peer);
-       return bgp_vty_return(vty, ret);
+       nb_cli_enqueue_change(vty, "./password", NB_OP_DESTROY, NULL);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (neighbor_activate,
-       neighbor_activate_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> activate",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Enable the Address Family for this Neighbor\n")
+DEFUN_YANG(neighbor_activate,
+          neighbor_activate_cmd,
+          "neighbor <A.B.C.D|X:X::X:X|WORD> activate",
+          NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+          "Enable the Address Family for this Neighbor\n")
 {
        int idx_peer = 1;
-       int ret;
-       struct peer *peer;
+       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);
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       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, nbr_xpath,
+                                    sizeof(nbr_xpath), af_xpath)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       ret = peer_activate(peer, bgp_node_afi(vty), bgp_node_safi(vty));
-       return bgp_vty_return(vty, ret);
+       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);
 }
 
 ALIAS_HIDDEN(neighbor_activate, neighbor_activate_hidden_cmd,
@@ -4780,25 +4825,30 @@ ALIAS_HIDDEN(neighbor_activate, neighbor_activate_hidden_cmd,
             NEIGHBOR_STR NEIGHBOR_ADDR_STR2
             "Enable the Address Family for this Neighbor\n")
 
-DEFUN (no_neighbor_activate,
-       no_neighbor_activate_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> activate",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Enable the Address Family for this Neighbor\n")
+DEFUN_YANG(no_neighbor_activate,
+          no_neighbor_activate_cmd,
+          "no neighbor <A.B.C.D|X:X::X:X|WORD> activate",
+          NO_STR NEIGHBOR_STR
+          NEIGHBOR_ADDR_STR2
+          "Enable the Address Family for this Neighbor\n")
 {
        int idx_peer = 2;
-       int ret;
-       struct peer *peer;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       afi_t afi = bgp_node_afi(vty);
+       safi_t safi = bgp_node_safi(vty);
 
-       /* Lookup peer. */
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       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)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       ret = peer_deactivate(peer, bgp_node_afi(vty), bgp_node_safi(vty));
-       return bgp_vty_return(vty, ret);
+       nb_cli_enqueue_change(vty, "./enabled", NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_activate, no_neighbor_activate_hidden_cmd,
@@ -4806,63 +4856,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 <A.B.C.D|X:X::X:X|WORD> 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 <A.B.C.D|X:X::X:X|WORD> 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;
-
-       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;
-               }
-       }
+       char base_xpath[XPATH_MAXLEN];
 
-       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);
 
-       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;
-       }
+       nb_cli_enqueue_change(vty, "./peer-group", NB_OP_MODIFY,
+                             argv[idx_word]->arg);
 
-       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,
@@ -4871,39 +4885,26 @@ ALIAS_HIDDEN(neighbor_set_peer_group, neighbor_set_peer_group_hidden_cmd,
             "Member of the peer-group\n"
             "Peer-group name\n")
 
-DEFUN (no_neighbor_set_peer_group,
-       no_neighbor_set_peer_group_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> peer-group PGNAME",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Member of the peer-group\n"
-       "Peer-group name\n")
+DEFUN_YANG (no_neighbor_set_peer_group,
+           no_neighbor_set_peer_group_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> peer-group PGNAME",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Member of the peer-group\n"
+           "Peer-group name\n")
 {
-       VTY_DECLVAR_CONTEXT(bgp, bgp);
        int idx_peer = 2;
-       int idx_word = 4;
-       int ret;
-       struct peer *peer;
-       struct peer_group *group;
-
-       peer = peer_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
-               return CMD_WARNING_CONFIG_FAILED;
+       char base_xpath[XPATH_MAXLEN];
 
-       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;
-       }
 
-       if (CHECK_FLAG(peer->flags, PEER_FLAG_CAPABILITY_ENHE))
-               bgp_zebra_terminate_radv(peer->bgp, peer);
+       nb_cli_enqueue_change(vty, "./peer-group", NB_OP_DESTROY, NULL);
 
-       peer_notify_unconfig(peer);
-       ret = peer_delete(peer);
-
-       return bgp_vty_return(vty, ret);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_set_peer_group, no_neighbor_set_peer_group_hidden_cmd,
@@ -4955,55 +4956,105 @@ static int peer_flag_unset_vty(struct vty *vty, const char *ip_str,
        return peer_flag_modify_vty(vty, ip_str, flag, 0);
 }
 
+int peer_flag_modify_nb(struct bgp *bgp, const char *ip_str, struct peer *peer,
+                       uint32_t flag, bool set, char *errmsg,
+                       size_t errmsg_len)
+{
+       int ret;
+
+       /*
+        * If 'neighbor <interface>', then this is for directly connected peers,
+        * we should not accept disable-connected-check.
+        */
+       if (peer->conf_if && (flag == PEER_FLAG_DISABLE_CONNECTED_CHECK)) {
+               snprintf(
+                       errmsg, errmsg_len,
+                       "%s is directly connected peer, cannot accept disable-connected-check\n",
+                       ip_str);
+               return -1;
+       }
+
+       if (!set && flag == PEER_FLAG_SHUTDOWN)
+               peer_tx_shutdown_message_unset(peer);
+
+       if (set)
+               ret = peer_flag_set(peer, flag);
+       else
+               ret = peer_flag_unset(peer, flag);
+
+       return bgp_nb_errmsg_return(errmsg, errmsg_len, ret);
+}
+
 /* neighbor passive. */
-DEFUN (neighbor_passive,
-       neighbor_passive_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> passive",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Don't send open messages to this neighbor\n")
+DEFUN_YANG(neighbor_passive,
+          neighbor_passive_cmd,
+          "neighbor <A.B.C.D|X:X::X:X|WORD> passive",
+          NEIGHBOR_STR
+          NEIGHBOR_ADDR_STR2
+          "Don't send open messages to this neighbor\n")
 {
        int idx_peer = 1;
-       return peer_flag_set_vty(vty, argv[idx_peer]->arg, PEER_FLAG_PASSIVE);
+       char base_xpath[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, "./passive-mode", NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_passive,
-       no_neighbor_passive_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> passive",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Don't send open messages to this neighbor\n")
+DEFUN_YANG(no_neighbor_passive,
+          no_neighbor_passive_cmd,
+          "no neighbor <A.B.C.D|X:X::X:X|WORD> passive",
+          NO_STR NEIGHBOR_STR
+          NEIGHBOR_ADDR_STR2
+          "Don't send open messages to this neighbor\n")
 {
        int idx_peer = 2;
-       return peer_flag_unset_vty(vty, argv[idx_peer]->arg, PEER_FLAG_PASSIVE);
+       char base_xpath[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, "./passive-mode", NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 /* neighbor shutdown. */
-DEFUN (neighbor_shutdown_msg,
-       neighbor_shutdown_msg_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> shutdown message MSG...",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Administratively shut down this neighbor\n"
-       "Add a shutdown message (RFC 8203)\n"
-       "Shutdown message\n")
+DEFUN_YANG(neighbor_shutdown_msg,
+          neighbor_shutdown_msg_cmd,
+          "neighbor <A.B.C.D|X:X::X:X|WORD> shutdown message MSG...",
+          NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+          "Administratively shut down this neighbor\n"
+          "Add a shutdown message (RFC 8203)\n"
+          "Shutdown message\n")
 {
        int idx_peer = 1;
+       char base_xpath[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;
 
        if (argc >= 5) {
-               struct peer *peer =
-                       peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
                char *message;
 
-               if (!peer)
-                       return CMD_WARNING_CONFIG_FAILED;
                message = argv_concat(argv, argc, 4);
-               peer_tx_shutdown_message_set(peer, message);
-               XFREE(MTYPE_TMP, message);
+               nb_cli_enqueue_change(vty, "./admin-shutdown/message",
+                                     NB_OP_MODIFY, message);
        }
 
-       return peer_flag_set_vty(vty, argv[idx_peer]->arg, PEER_FLAG_SHUTDOWN);
+       nb_cli_enqueue_change(vty, "./admin-shutdown/enable", NB_OP_MODIFY,
+                             "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS(neighbor_shutdown_msg, neighbor_shutdown_cmd,
@@ -5011,20 +5062,27 @@ ALIAS(neighbor_shutdown_msg, neighbor_shutdown_cmd,
       NEIGHBOR_STR NEIGHBOR_ADDR_STR2
       "Administratively shut down this neighbor\n")
 
-DEFUN (no_neighbor_shutdown_msg,
-       no_neighbor_shutdown_msg_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> shutdown message MSG...",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Administratively shut down this neighbor\n"
-       "Remove a shutdown message (RFC 8203)\n"
-       "Shutdown message\n")
+DEFUN_YANG(no_neighbor_shutdown_msg,
+          no_neighbor_shutdown_msg_cmd,
+          "no neighbor <A.B.C.D|X:X::X:X|WORD> shutdown message MSG...",
+          NO_STR NEIGHBOR_STR
+          NEIGHBOR_ADDR_STR2
+          "Administratively shut down this neighbor\n"
+          "Remove a shutdown message (RFC 8203)\n"
+          "Shutdown message\n")
 {
        int idx_peer = 2;
+       char base_xpath[XPATH_MAXLEN];
 
-       return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                  PEER_FLAG_SHUTDOWN);
+       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, "./admin-shutdown/enable", NB_OP_MODIFY,
+                             "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS(no_neighbor_shutdown_msg, no_neighbor_shutdown_cmd,
@@ -5091,31 +5149,49 @@ DEFUN(no_neighbor_shutdown_rtt,
 }
 
 /* neighbor capability dynamic. */
-DEFUN (neighbor_capability_dynamic,
-       neighbor_capability_dynamic_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> capability dynamic",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Advertise capability to the peer\n"
-       "Advertise dynamic capability to this neighbor\n")
+DEFUN_YANG (neighbor_capability_dynamic,
+           neighbor_capability_dynamic_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> capability dynamic",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Advertise capability to the peer\n"
+           "Advertise dynamic capability to this neighbor\n")
 {
        int idx_peer = 1;
-       return peer_flag_set_vty(vty, argv[idx_peer]->arg,
-                                PEER_FLAG_DYNAMIC_CAPABILITY);
+       char base_xpath[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, "./capability-options/dynamic-capability",
+                             NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_capability_dynamic,
-       no_neighbor_capability_dynamic_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> capability dynamic",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Advertise capability to the peer\n"
-       "Advertise dynamic capability to this neighbor\n")
+DEFUN_YANG (no_neighbor_capability_dynamic,
+           no_neighbor_capability_dynamic_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> capability dynamic",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Advertise capability to the peer\n"
+           "Advertise dynamic capability to this neighbor\n")
 {
        int idx_peer = 2;
-       return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                  PEER_FLAG_DYNAMIC_CAPABILITY);
+       char base_xpath[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, "./capability-options/dynamic-capability",
+                             NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 /* neighbor dont-capability-negotiate */
@@ -5145,31 +5221,65 @@ DEFUN (no_neighbor_dont_capability_negotiate,
 }
 
 /* neighbor capability extended next hop encoding */
-DEFUN (neighbor_capability_enhe,
-       neighbor_capability_enhe_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> capability extended-nexthop",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Advertise capability to the peer\n"
-       "Advertise extended next-hop capability to the peer\n")
+DEFUN_YANG (neighbor_capability_enhe,
+           neighbor_capability_enhe_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> capability extended-nexthop",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Advertise capability to the peer\n"
+           "Advertise extended next-hop capability to the peer\n")
 {
        int idx_peer = 1;
-       return peer_flag_set_vty(vty, argv[idx_peer]->arg,
-                                PEER_FLAG_CAPABILITY_ENHE);
+       char base_xpath[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, "./capability-options/extended-nexthop-capability",
+               NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_capability_enhe,
-       no_neighbor_capability_enhe_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> capability extended-nexthop",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Advertise capability to the peer\n"
-       "Advertise extended next-hop capability to the peer\n")
+DEFUN_YANG (no_neighbor_capability_enhe,
+           no_neighbor_capability_enhe_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> capability extended-nexthop",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Advertise capability to the peer\n"
+           "Advertise extended next-hop capability to the peer\n")
 {
        int idx_peer = 2;
-       return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                  PEER_FLAG_CAPABILITY_ENHE);
+       char base_xpath[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, "./capability-options/extended-nexthop-capability",
+               NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
+}
+
+int peer_af_flag_modify_nb(struct peer *peer, afi_t afi, safi_t safi,
+                          uint32_t flag, int set, char *errmsg,
+                          size_t errmsg_len)
+{
+       int ret;
+
+       if (set)
+               ret = peer_af_flag_set(peer, afi, safi, flag);
+       else
+               ret = peer_af_flag_unset(peer, afi, safi, flag);
+
+       return bgp_nb_errmsg_return(errmsg, errmsg_len, ret);
 }
 
 static int peer_af_flag_modify_vty(struct vty *vty, const char *peer_str,
@@ -5308,16 +5418,36 @@ ALIAS_HIDDEN(
        "Capability to SEND the ORF to this neighbor\n")
 
 /* neighbor next-hop-self. */
-DEFUN (neighbor_nexthop_self,
-       neighbor_nexthop_self_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> next-hop-self",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Disable the next hop calculation for this neighbor\n")
+DEFUN_YANG (neighbor_nexthop_self,
+           neighbor_nexthop_self_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> next-hop-self",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Disable the next hop calculation for this neighbor\n")
 {
        int idx_peer = 1;
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty), PEER_FLAG_NEXTHOP_SELF);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/nexthop-self/next-hop-self",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_nexthop_self, neighbor_nexthop_self_hidden_cmd,
@@ -5326,18 +5456,37 @@ ALIAS_HIDDEN(neighbor_nexthop_self, neighbor_nexthop_self_hidden_cmd,
             "Disable the next hop calculation for this neighbor\n")
 
 /* neighbor next-hop-self. */
-DEFUN (neighbor_nexthop_self_force,
-       neighbor_nexthop_self_force_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> next-hop-self force",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Disable the next hop calculation for this neighbor\n"
-       "Set the next hop to self for reflected routes\n")
+DEFUN_YANG(neighbor_nexthop_self_force,
+          neighbor_nexthop_self_force_cmd,
+          "neighbor <A.B.C.D|X:X::X:X|WORD> next-hop-self force",
+          NEIGHBOR_STR
+          NEIGHBOR_ADDR_STR2
+          "Disable the next hop calculation for this neighbor\n"
+          "Set the next hop to self for reflected routes\n")
 {
        int idx_peer = 1;
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_FORCE_NEXTHOP_SELF);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/nexthop-self/next-hop-self-force",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_nexthop_self_force,
@@ -5354,18 +5503,36 @@ ALIAS_HIDDEN(neighbor_nexthop_self_force,
             "Disable the next hop calculation for this neighbor\n"
             "Set the next hop to self for reflected routes\n")
 
-DEFUN (no_neighbor_nexthop_self,
-       no_neighbor_nexthop_self_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> next-hop-self",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Disable the next hop calculation for this neighbor\n")
+DEFUN_YANG (no_neighbor_nexthop_self,
+           no_neighbor_nexthop_self_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> next-hop-self",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Disable the next hop calculation for this neighbor\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_NEXTHOP_SELF);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/nexthop-self/next-hop-self",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_nexthop_self, no_neighbor_nexthop_self_hidden_cmd,
@@ -5373,19 +5540,38 @@ ALIAS_HIDDEN(no_neighbor_nexthop_self, no_neighbor_nexthop_self_hidden_cmd,
             NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
             "Disable the next hop calculation for this neighbor\n")
 
-DEFUN (no_neighbor_nexthop_self_force,
-       no_neighbor_nexthop_self_force_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> next-hop-self force",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Disable the next hop calculation for this neighbor\n"
-       "Set the next hop to self for reflected routes\n")
+DEFUN_YANG (no_neighbor_nexthop_self_force,
+           no_neighbor_nexthop_self_force_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> next-hop-self force",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Disable the next hop calculation for this neighbor\n"
+           "Set the next hop to self for reflected routes\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_FORCE_NEXTHOP_SELF);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/nexthop-self/next-hop-self-force",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_nexthop_self_force,
@@ -5403,16 +5589,35 @@ ALIAS_HIDDEN(no_neighbor_nexthop_self_force,
             "Set the next hop to self for reflected routes\n")
 
 /* neighbor as-override */
-DEFUN (neighbor_as_override,
-       neighbor_as_override_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> as-override",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Override ASNs in outbound updates if aspath equals remote-as\n")
+DEFUN_YANG (neighbor_as_override,
+           neighbor_as_override_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> as-override",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Override ASNs in outbound updates if aspath equals remote-as\n")
 {
        int idx_peer = 1;
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty), PEER_FLAG_AS_OVERRIDE);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/as-path-options/replace-peer-as",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_as_override, neighbor_as_override_hidden_cmd,
@@ -5420,18 +5625,36 @@ ALIAS_HIDDEN(neighbor_as_override, neighbor_as_override_hidden_cmd,
             NEIGHBOR_STR NEIGHBOR_ADDR_STR2
             "Override ASNs in outbound updates if aspath equals remote-as\n")
 
-DEFUN (no_neighbor_as_override,
-       no_neighbor_as_override_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> as-override",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Override ASNs in outbound updates if aspath equals remote-as\n")
+DEFUN_YANG (no_neighbor_as_override,
+           no_neighbor_as_override_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> as-override",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Override ASNs in outbound updates if aspath equals remote-as\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_AS_OVERRIDE);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/as-path-options/replace-peer-as",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_as_override, no_neighbor_as_override_hidden_cmd,
@@ -5440,17 +5663,35 @@ ALIAS_HIDDEN(no_neighbor_as_override, no_neighbor_as_override_hidden_cmd,
             "Override ASNs in outbound updates if aspath equals remote-as\n")
 
 /* neighbor remove-private-AS. */
-DEFUN (neighbor_remove_private_as,
-       neighbor_remove_private_as_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Remove private ASNs in outbound updates\n")
+DEFUN_YANG (neighbor_remove_private_as,
+           neighbor_remove_private_as_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Remove private ASNs in outbound updates\n")
 {
        int idx_peer = 1;
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_REMOVE_PRIVATE_AS);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/private-as/remove-private-as",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_remove_private_as, neighbor_remove_private_as_hidden_cmd,
@@ -5458,18 +5699,37 @@ ALIAS_HIDDEN(neighbor_remove_private_as, neighbor_remove_private_as_hidden_cmd,
             NEIGHBOR_STR NEIGHBOR_ADDR_STR2
             "Remove private ASNs in outbound updates\n")
 
-DEFUN (neighbor_remove_private_as_all,
-       neighbor_remove_private_as_all_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS all",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Remove private ASNs in outbound updates\n"
-       "Apply to all AS numbers\n")
+DEFUN_YANG (neighbor_remove_private_as_all,
+           neighbor_remove_private_as_all_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS all",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Remove private ASNs in outbound updates\n"
+           "Apply to all AS numbers\n")
 {
        int idx_peer = 1;
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_REMOVE_PRIVATE_AS_ALL);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/private-as/remove-private-as-all",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_remove_private_as_all,
@@ -5479,18 +5739,37 @@ ALIAS_HIDDEN(neighbor_remove_private_as_all,
             "Remove private ASNs in outbound updates\n"
             "Apply to all AS numbers")
 
-DEFUN (neighbor_remove_private_as_replace_as,
-       neighbor_remove_private_as_replace_as_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS replace-AS",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Remove private ASNs in outbound updates\n"
-       "Replace private ASNs with our ASN in outbound updates\n")
+DEFUN_YANG (neighbor_remove_private_as_replace_as,
+           neighbor_remove_private_as_replace_as_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS replace-AS",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Remove private ASNs in outbound updates\n"
+           "Replace private ASNs with our ASN in outbound updates\n")
 {
        int idx_peer = 1;
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/private-as/remove-private-as-replace",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_remove_private_as_replace_as,
@@ -5500,19 +5779,38 @@ ALIAS_HIDDEN(neighbor_remove_private_as_replace_as,
             "Remove private ASNs in outbound updates\n"
             "Replace private ASNs with our ASN in outbound updates\n")
 
-DEFUN (neighbor_remove_private_as_all_replace_as,
-       neighbor_remove_private_as_all_replace_as_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS all replace-AS",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Remove private ASNs in outbound updates\n"
-       "Apply to all AS numbers\n"
-       "Replace private ASNs with our ASN in outbound updates\n")
+DEFUN_YANG (neighbor_remove_private_as_all_replace_as,
+           neighbor_remove_private_as_all_replace_as_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS all replace-AS",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Remove private ASNs in outbound updates\n"
+           "Apply to all AS numbers\n"
+           "Replace private ASNs with our ASN in outbound updates\n")
 {
        int idx_peer = 1;
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/private-as/remove-private-as-all-replace",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(
@@ -5524,18 +5822,36 @@ ALIAS_HIDDEN(
        "Apply to all AS numbers\n"
        "Replace private ASNs with our ASN in outbound updates\n")
 
-DEFUN (no_neighbor_remove_private_as,
-       no_neighbor_remove_private_as_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Remove private ASNs in outbound updates\n")
+DEFUN_YANG (no_neighbor_remove_private_as,
+           no_neighbor_remove_private_as_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Remove private ASNs in outbound updates\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_REMOVE_PRIVATE_AS);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/private-as/remove-private-as",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_remove_private_as,
@@ -5544,19 +5860,38 @@ ALIAS_HIDDEN(no_neighbor_remove_private_as,
             NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
             "Remove private ASNs in outbound updates\n")
 
-DEFUN (no_neighbor_remove_private_as_all,
-       no_neighbor_remove_private_as_all_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS all",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Remove private ASNs in outbound updates\n"
-       "Apply to all AS numbers\n")
+DEFUN_YANG (no_neighbor_remove_private_as_all,
+           no_neighbor_remove_private_as_all_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS all",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Remove private ASNs in outbound updates\n"
+           "Apply to all AS numbers\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_REMOVE_PRIVATE_AS_ALL);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/private-as/remove-private-as-all",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_remove_private_as_all,
@@ -5566,19 +5901,38 @@ ALIAS_HIDDEN(no_neighbor_remove_private_as_all,
             "Remove private ASNs in outbound updates\n"
             "Apply to all AS numbers\n")
 
-DEFUN (no_neighbor_remove_private_as_replace_as,
-       no_neighbor_remove_private_as_replace_as_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS replace-AS",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Remove private ASNs in outbound updates\n"
-       "Replace private ASNs with our ASN in outbound updates\n")
+DEFUN_YANG (no_neighbor_remove_private_as_replace_as,
+           no_neighbor_remove_private_as_replace_as_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS replace-AS",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Remove private ASNs in outbound updates\n"
+           "Replace private ASNs with our ASN in outbound updates\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/private-as/remove-private-as-replace",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_remove_private_as_replace_as,
@@ -5588,20 +5942,39 @@ ALIAS_HIDDEN(no_neighbor_remove_private_as_replace_as,
             "Remove private ASNs in outbound updates\n"
             "Replace private ASNs with our ASN in outbound updates\n")
 
-DEFUN (no_neighbor_remove_private_as_all_replace_as,
-       no_neighbor_remove_private_as_all_replace_as_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS all replace-AS",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Remove private ASNs in outbound updates\n"
-       "Apply to all AS numbers\n"
-       "Replace private ASNs with our ASN in outbound updates\n")
+DEFUN_YANG (no_neighbor_remove_private_as_all_replace_as,
+           no_neighbor_remove_private_as_all_replace_as_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> remove-private-AS all replace-AS",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Remove private ASNs in outbound updates\n"
+           "Apply to all AS numbers\n"
+           "Replace private ASNs with our ASN in outbound updates\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/private-as/remove-private-as-all-replace",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(
@@ -5615,12 +5988,12 @@ ALIAS_HIDDEN(
 
 
 /* neighbor send-community. */
-DEFUN (neighbor_send_community,
-       neighbor_send_community_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> send-community",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Send Community attribute to this neighbor\n")
+DEFUN_YANG (neighbor_send_community,
+           neighbor_send_community_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> send-community",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Send Community attribute to this neighbor\n")
 {
        int idx_peer = 1;
 
@@ -5634,13 +6007,13 @@ ALIAS_HIDDEN(neighbor_send_community, neighbor_send_community_hidden_cmd,
             NEIGHBOR_STR NEIGHBOR_ADDR_STR2
             "Send Community attribute to this neighbor\n")
 
-DEFUN (no_neighbor_send_community,
-       no_neighbor_send_community_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> send-community",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Send Community attribute to this neighbor\n")
+DEFUN_YANG (no_neighbor_send_community,
+           no_neighbor_send_community_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> send-community",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Send Community attribute to this neighbor\n")
 {
        int idx_peer = 2;
 
@@ -5655,52 +6028,95 @@ ALIAS_HIDDEN(no_neighbor_send_community, no_neighbor_send_community_hidden_cmd,
             "Send Community attribute to this neighbor\n")
 
 /* neighbor send-community extended. */
-DEFUN (neighbor_send_community_type,
-       neighbor_send_community_type_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> send-community <both|all|extended|standard|large>",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Send Community attribute to this neighbor\n"
-       "Send Standard and Extended Community attributes\n"
-       "Send Standard, Large and Extended Community attributes\n"
-       "Send Extended Community attributes\n"
-       "Send Standard Community attributes\n"
-       "Send Large Community attributes\n")
+DEFUN_YANG (neighbor_send_community_type,
+           neighbor_send_community_type_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> send-community <both|all|extended|standard|large>",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Send Community attribute to this neighbor\n"
+           "Send Standard and Extended Community attributes\n"
+           "Send Standard, Large and Extended Community attributes\n"
+           "Send Extended Community attributes\n"
+           "Send Standard Community attributes\n"
+           "Send Large Community attributes\n")
 {
        const char *type = argv[argc - 1]->text;
        char *peer_str = argv[1]->arg;
-       struct peer *peer;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char std_xpath[XPATH_MAXLEN];
+       char ext_xpath[XPATH_MAXLEN];
+       char lrg_xpath[XPATH_MAXLEN];
        afi_t afi = bgp_node_afi(vty);
        safi_t safi = bgp_node_safi(vty);
 
-       peer = peer_and_group_lookup_vty(vty, peer_str);
-       if (!peer)
+       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;
 
-       if (strmatch(type, "standard"))
-               return peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                           PEER_FLAG_SEND_COMMUNITY);
+       if (strmatch(type, "standard")) {
+               snprintf(std_xpath, sizeof(std_xpath),
+                        "./%s/send-community/send-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
 
-       if (strmatch(type, "extended"))
-               return peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                           PEER_FLAG_SEND_EXT_COMMUNITY);
+               nb_cli_enqueue_change(vty, std_xpath, NB_OP_MODIFY, "true");
+       }
 
-       if (strmatch(type, "large"))
-               return peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                           PEER_FLAG_SEND_LARGE_COMMUNITY);
+       if (strmatch(type, "extended")) {
+               snprintf(ext_xpath, sizeof(ext_xpath),
+                        "./%s/send-community/send-ext-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, ext_xpath, NB_OP_MODIFY, "true");
+       }
+
+       if (strmatch(type, "large")) {
+               snprintf(lrg_xpath, sizeof(lrg_xpath),
+                        "./%s/send-community/send-large-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, lrg_xpath, NB_OP_MODIFY, "true");
+       }
 
        if (strmatch(type, "both")) {
-               return peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                           PEER_FLAG_SEND_COMMUNITY)
-                      | peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                             PEER_FLAG_SEND_EXT_COMMUNITY);
+               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");
+
+               snprintf(ext_xpath, sizeof(ext_xpath),
+                        "./%s/send-community/send-ext-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, ext_xpath, NB_OP_MODIFY, "true");
+       }
+
+       if (strmatch(type, "all")) {
+               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");
+
+               snprintf(ext_xpath, sizeof(ext_xpath),
+                        "./%s/send-community/send-ext-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, ext_xpath, NB_OP_MODIFY, "true");
+
+               snprintf(lrg_xpath, sizeof(lrg_xpath),
+                        "./%s/send-community/send-large-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, lrg_xpath, NB_OP_MODIFY, "true");
        }
-       return peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                   PEER_FLAG_SEND_COMMUNITY)
-              | peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                     PEER_FLAG_SEND_EXT_COMMUNITY)
-              | peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                     PEER_FLAG_SEND_LARGE_COMMUNITY);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(
@@ -5714,55 +6130,96 @@ ALIAS_HIDDEN(
        "Send Standard Community attributes\n"
        "Send Large Community attributes\n")
 
-DEFUN (no_neighbor_send_community_type,
-       no_neighbor_send_community_type_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> send-community <both|all|extended|standard|large>",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Send Community attribute to this neighbor\n"
-       "Send Standard and Extended Community attributes\n"
-       "Send Standard, Large and Extended Community attributes\n"
-       "Send Extended Community attributes\n"
-       "Send Standard Community attributes\n"
-       "Send Large Community attributes\n")
+DEFUN_YANG (no_neighbor_send_community_type,
+           no_neighbor_send_community_type_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> send-community <both|all|extended|standard|large>",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Send Community attribute to this neighbor\n"
+           "Send Standard and Extended Community attributes\n"
+           "Send Standard, Large and Extended Community attributes\n"
+           "Send Extended Community attributes\n"
+           "Send Standard Community attributes\n"
+           "Send Large Community attributes\n")
 {
        const char *type = argv[argc - 1]->text;
        char *peer_str = argv[2]->arg;
-       struct peer *peer;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char std_xpath[XPATH_MAXLEN];
+       char ext_xpath[XPATH_MAXLEN];
+       char lrg_xpath[XPATH_MAXLEN];
        afi_t afi = bgp_node_afi(vty);
        safi_t safi = bgp_node_safi(vty);
 
-       peer = peer_and_group_lookup_vty(vty, peer_str);
-       if (!peer)
+       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;
 
-       if (strmatch(type, "standard"))
-               return peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                             PEER_FLAG_SEND_COMMUNITY);
+       if (strmatch(type, "standard")) {
+               snprintf(std_xpath, sizeof(std_xpath),
+                        "./%s/send-community/send-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
 
-       if (strmatch(type, "extended"))
-               return peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                             PEER_FLAG_SEND_EXT_COMMUNITY);
+               nb_cli_enqueue_change(vty, std_xpath, NB_OP_MODIFY, "false");
+       }
 
-       if (strmatch(type, "large"))
-               return peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                             PEER_FLAG_SEND_LARGE_COMMUNITY);
+       if (strmatch(type, "extended")) {
+               snprintf(ext_xpath, sizeof(ext_xpath),
+                        "./%s/send-community/send-ext-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, ext_xpath, NB_OP_MODIFY, "false");
+       }
+
+       if (strmatch(type, "large")) {
+               snprintf(lrg_xpath, sizeof(lrg_xpath),
+                        "./%s/send-community/send-large-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, lrg_xpath, NB_OP_MODIFY, "false");
+       }
 
        if (strmatch(type, "both")) {
+               snprintf(std_xpath, sizeof(std_xpath),
+                        "./%s/send-community/send-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
 
-               return peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                             PEER_FLAG_SEND_COMMUNITY)
-                      | peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                               PEER_FLAG_SEND_EXT_COMMUNITY);
+               nb_cli_enqueue_change(vty, std_xpath, NB_OP_MODIFY, "false");
+
+               snprintf(ext_xpath, sizeof(ext_xpath),
+                        "./%s/send-community/send-ext-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, ext_xpath, NB_OP_MODIFY, "false");
+       }
+
+       if (strmatch(type, "all")) {
+               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");
+
+               snprintf(ext_xpath, sizeof(ext_xpath),
+                        "./%s/send-community/send-ext-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, ext_xpath, NB_OP_MODIFY, "false");
+
+               snprintf(lrg_xpath, sizeof(lrg_xpath),
+                        "./%s/send-community/send-large-community",
+                        bgp_afi_safi_get_container_str(afi, safi));
+
+               nb_cli_enqueue_change(vty, lrg_xpath, NB_OP_MODIFY, "false");
        }
 
-       return peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                     PEER_FLAG_SEND_COMMUNITY)
-              | peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                       PEER_FLAG_SEND_EXT_COMMUNITY)
-              | peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                       PEER_FLAG_SEND_LARGE_COMMUNITY);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(
@@ -5777,19 +6234,36 @@ ALIAS_HIDDEN(
        "Send Standard Community attributes\n"
        "Send Large Community attributes\n")
 
-/* neighbor soft-reconfig. */
-DEFUN (neighbor_soft_reconfiguration,
-       neighbor_soft_reconfiguration_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> soft-reconfiguration inbound",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Per neighbor soft reconfiguration\n"
-       "Allow inbound soft reconfiguration for this neighbor\n")
-{
-       int idx_peer = 1;
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_SOFT_RECONFIG);
+/* neighbor soft-reconfig. */
+DEFUN_YANG (neighbor_soft_reconfiguration,
+           neighbor_soft_reconfiguration_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> soft-reconfiguration inbound",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Per neighbor soft reconfiguration\n"
+           "Allow inbound soft reconfiguration for this neighbor\n")
+{
+       int idx_peer = 1;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char soft_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(soft_xpath, sizeof(soft_xpath), "./%s/soft-reconfiguration",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, soft_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_soft_reconfiguration,
@@ -5799,19 +6273,34 @@ ALIAS_HIDDEN(neighbor_soft_reconfiguration,
             "Per neighbor soft reconfiguration\n"
             "Allow inbound soft reconfiguration for this neighbor\n")
 
-DEFUN (no_neighbor_soft_reconfiguration,
-       no_neighbor_soft_reconfiguration_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> soft-reconfiguration inbound",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Per neighbor soft reconfiguration\n"
-       "Allow inbound soft reconfiguration for this neighbor\n")
+DEFUN_YANG (no_neighbor_soft_reconfiguration,
+           no_neighbor_soft_reconfiguration_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> soft-reconfiguration inbound",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Per neighbor soft reconfiguration\n"
+           "Allow inbound soft reconfiguration for this neighbor\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_SOFT_RECONFIG);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char soft_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));
+
+       snprintf(soft_xpath, sizeof(soft_xpath), "./%s/soft-reconfiguration",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), af_xpath)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       nb_cli_enqueue_change(vty, soft_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_soft_reconfiguration,
@@ -5821,24 +6310,35 @@ ALIAS_HIDDEN(no_neighbor_soft_reconfiguration,
             "Per neighbor soft reconfiguration\n"
             "Allow inbound soft reconfiguration for this neighbor\n")
 
-DEFUN (neighbor_route_reflector_client,
-       neighbor_route_reflector_client_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> route-reflector-client",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Configure a neighbor as Route Reflector client\n")
+DEFUN_YANG (neighbor_route_reflector_client,
+           neighbor_route_reflector_client_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> route-reflector-client",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Configure a neighbor as Route Reflector client\n")
 {
        int idx_peer = 1;
-       struct peer *peer;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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));
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), af_xpath)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_REFLECTOR_CLIENT);
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/route-reflector/route-reflector-client",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_route_reflector_client,
@@ -5847,18 +6347,36 @@ ALIAS_HIDDEN(neighbor_route_reflector_client,
             NEIGHBOR_STR NEIGHBOR_ADDR_STR2
             "Configure a neighbor as Route Reflector client\n")
 
-DEFUN (no_neighbor_route_reflector_client,
-       no_neighbor_route_reflector_client_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> route-reflector-client",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Configure a neighbor as Route Reflector client\n")
+DEFUN_YANG (no_neighbor_route_reflector_client,
+           no_neighbor_route_reflector_client_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> route-reflector-client",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Configure a neighbor as Route Reflector client\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_REFLECTOR_CLIENT);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/route-reflector/route-reflector-client",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_route_reflector_client,
@@ -5868,22 +6386,35 @@ ALIAS_HIDDEN(no_neighbor_route_reflector_client,
             "Configure a neighbor as Route Reflector client\n")
 
 /* neighbor route-server-client. */
-DEFUN (neighbor_route_server_client,
-       neighbor_route_server_client_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> route-server-client",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Configure a neighbor as Route Server client\n")
+DEFUN_YANG (neighbor_route_server_client,
+           neighbor_route_server_client_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> route-server-client",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Configure a neighbor as Route Server client\n")
 {
        int idx_peer = 1;
-       struct peer *peer;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_xpath[XPATH_MAXLEN];
+       afi_t afi = bgp_node_afi(vty);
+       safi_t safi = bgp_node_safi(vty);
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       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)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_RSERVER_CLIENT);
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/route-server/route-server-client",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_route_server_client,
@@ -5892,18 +6423,36 @@ ALIAS_HIDDEN(neighbor_route_server_client,
             NEIGHBOR_STR NEIGHBOR_ADDR_STR2
             "Configure a neighbor as Route Server client\n")
 
-DEFUN (no_neighbor_route_server_client,
-       no_neighbor_route_server_client_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> route-server-client",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Configure a neighbor as Route Server client\n")
+DEFUN_YANG (no_neighbor_route_server_client,
+           no_neighbor_route_server_client_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> route-server-client",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Configure a neighbor as Route Server client\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_RSERVER_CLIENT);
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath),
+                "./%s/route-server/route-server-client",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_route_server_client,
@@ -5941,28 +6490,35 @@ DEFUN (no_neighbor_nexthop_local_unchanged,
                                      PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED);
 }
 
-DEFUN (neighbor_attr_unchanged,
-       neighbor_attr_unchanged_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged [{as-path|next-hop|med}]",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "BGP attribute is propagated unchanged to this neighbor\n"
-       "As-path attribute\n"
-       "Nexthop attribute\n"
-       "Med attribute\n")
+DEFUN_YANG (neighbor_attr_unchanged,
+           neighbor_attr_unchanged_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged [{as-path|next-hop|med}]",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "BGP attribute is propagated unchanged to this neighbor\n"
+           "As-path attribute\n"
+           "Nexthop attribute\n"
+           "Med attribute\n")
 {
        int idx = 0;
        char *peer_str = argv[1]->arg;
-       struct peer *peer;
        bool aspath = false;
        bool nexthop = false;
        bool med = false;
        afi_t afi = bgp_node_afi(vty);
        safi_t safi = bgp_node_safi(vty);
-       int ret = 0;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char as_xpath[XPATH_MAXLEN];
+       char nxthop_xpath[XPATH_MAXLEN];
+       char med_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, peer_str);
-       if (!peer)
+       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;
 
        if (argv_find(argv, argc, "as-path", &idx))
@@ -5976,52 +6532,45 @@ DEFUN (neighbor_attr_unchanged,
        if (argv_find(argv, argc, "med", &idx))
                med = true;
 
+       snprintf(as_xpath, sizeof(as_xpath),
+                "./%s/attr-unchanged/as-path-unchanged",
+                bgp_afi_safi_get_container_str(afi, safi));
+       snprintf(nxthop_xpath, sizeof(nxthop_xpath),
+                "./%s/attr-unchanged/next-hop-unchanged",
+                bgp_afi_safi_get_container_str(afi, safi));
+       snprintf(med_xpath, sizeof(med_xpath),
+                "./%s/attr-unchanged/med-unchanged",
+                bgp_afi_safi_get_container_str(afi, safi));
+
        /* no flags means all of them! */
        if (!aspath && !nexthop && !med) {
-               ret = peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                          PEER_FLAG_AS_PATH_UNCHANGED);
-               ret |= peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                           PEER_FLAG_NEXTHOP_UNCHANGED);
-               ret |= peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                           PEER_FLAG_MED_UNCHANGED);
+               nb_cli_enqueue_change(vty, as_xpath, NB_OP_MODIFY, "true");
+               nb_cli_enqueue_change(vty, nxthop_xpath, NB_OP_MODIFY, "true");
+               nb_cli_enqueue_change(vty, med_xpath, NB_OP_MODIFY, "true");
        } else {
-               if (!aspath) {
-                       if (peer_af_flag_check(peer, afi, safi,
-                                              PEER_FLAG_AS_PATH_UNCHANGED)) {
-                               ret |= peer_af_flag_unset_vty(
-                                       vty, peer_str, afi, safi,
-                                       PEER_FLAG_AS_PATH_UNCHANGED);
-                       }
-               } else
-                       ret |= peer_af_flag_set_vty(
-                               vty, peer_str, afi, safi,
-                               PEER_FLAG_AS_PATH_UNCHANGED);
-
-               if (!nexthop) {
-                       if (peer_af_flag_check(peer, afi, safi,
-                                              PEER_FLAG_NEXTHOP_UNCHANGED)) {
-                               ret |= peer_af_flag_unset_vty(
-                                       vty, peer_str, afi, safi,
-                                       PEER_FLAG_NEXTHOP_UNCHANGED);
-                       }
-               } else
-                       ret |= peer_af_flag_set_vty(
-                               vty, peer_str, afi, safi,
-                               PEER_FLAG_NEXTHOP_UNCHANGED);
+               if (!aspath)
+                       nb_cli_enqueue_change(vty, as_xpath, NB_OP_MODIFY,
+                                             "false");
+               else
+                       nb_cli_enqueue_change(vty, as_xpath, NB_OP_MODIFY,
+                                             "true");
 
-               if (!med) {
-                       if (peer_af_flag_check(peer, afi, safi,
-                                              PEER_FLAG_MED_UNCHANGED)) {
-                               ret |= peer_af_flag_unset_vty(
-                                       vty, peer_str, afi, safi,
-                                       PEER_FLAG_MED_UNCHANGED);
-                       }
-               } else
-                       ret |= peer_af_flag_set_vty(vty, peer_str, afi, safi,
-                                                   PEER_FLAG_MED_UNCHANGED);
+               if (!nexthop)
+                       nb_cli_enqueue_change(vty, nxthop_xpath, NB_OP_MODIFY,
+                                             "false");
+               else
+                       nb_cli_enqueue_change(vty, nxthop_xpath, NB_OP_MODIFY,
+                                             "true");
+
+               if (!med)
+                       nb_cli_enqueue_change(vty, med_xpath, NB_OP_MODIFY,
+                                             "false");
+               else
+                       nb_cli_enqueue_change(vty, med_xpath, NB_OP_MODIFY,
+                                             "true");
        }
 
-       return ret;
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(
@@ -6033,29 +6582,36 @@ ALIAS_HIDDEN(
        "Nexthop attribute\n"
        "Med attribute\n")
 
-DEFUN (no_neighbor_attr_unchanged,
-       no_neighbor_attr_unchanged_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged [{as-path|next-hop|med}]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "BGP attribute is propagated unchanged to this neighbor\n"
-       "As-path attribute\n"
-       "Nexthop attribute\n"
-       "Med attribute\n")
+DEFUN_YANG (no_neighbor_attr_unchanged,
+           no_neighbor_attr_unchanged_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> attribute-unchanged [{as-path|next-hop|med}]",
+           NO_STR
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "BGP attribute is propagated unchanged to this neighbor\n"
+           "As-path attribute\n"
+           "Nexthop attribute\n"
+           "Med attribute\n")
 {
        int idx = 0;
        char *peer_str = argv[2]->arg;
-       struct peer *peer;
        bool aspath = false;
        bool nexthop = false;
        bool med = false;
        afi_t afi = bgp_node_afi(vty);
        safi_t safi = bgp_node_safi(vty);
-       int ret = 0;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char as_xpath[XPATH_MAXLEN];
+       char nxthop_xpath[XPATH_MAXLEN];
+       char med_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, peer_str);
-       if (!peer)
+       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;
 
        if (argv_find(argv, argc, "as-path", &idx))
@@ -6069,27 +6625,33 @@ DEFUN (no_neighbor_attr_unchanged,
        if (argv_find(argv, argc, "med", &idx))
                med = true;
 
-       if (!aspath && !nexthop && !med) // no flags means all of them!
-               return peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                             PEER_FLAG_AS_PATH_UNCHANGED)
-                      | peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                               PEER_FLAG_NEXTHOP_UNCHANGED)
-                      | peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                               PEER_FLAG_MED_UNCHANGED);
+       snprintf(as_xpath, sizeof(as_xpath),
+                "./%s/attr-unchanged/as-path-unchanged",
+                bgp_afi_safi_get_container_str(afi, safi));
+       snprintf(nxthop_xpath, sizeof(nxthop_xpath),
+                "./%s/attr-unchanged/next-hop-unchanged",
+                bgp_afi_safi_get_container_str(afi, safi));
+       snprintf(med_xpath, sizeof(med_xpath),
+                "./%s/attr-unchanged/med-unchanged",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       /* no flags means all of them! */
+       if (!aspath && !nexthop && !med) {
+               nb_cli_enqueue_change(vty, as_xpath, NB_OP_MODIFY, "false");
+               nb_cli_enqueue_change(vty, nxthop_xpath, NB_OP_MODIFY, "false");
+               nb_cli_enqueue_change(vty, med_xpath, NB_OP_MODIFY, "false");
+       }
 
        if (aspath)
-               ret |= peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                             PEER_FLAG_AS_PATH_UNCHANGED);
+               nb_cli_enqueue_change(vty, as_xpath, NB_OP_MODIFY, "false");
 
        if (nexthop)
-               ret |= peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                             PEER_FLAG_NEXTHOP_UNCHANGED);
+               nb_cli_enqueue_change(vty, nxthop_xpath, NB_OP_MODIFY, "false");
 
        if (med)
-               ret |= peer_af_flag_unset_vty(vty, peer_str, afi, safi,
-                                             PEER_FLAG_MED_UNCHANGED);
+               nb_cli_enqueue_change(vty, med_xpath, NB_OP_MODIFY, "false");
 
-       return ret;
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(
@@ -6101,251 +6663,332 @@ ALIAS_HIDDEN(
        "Nexthop attribute\n"
        "Med attribute\n")
 
-/* EBGP multihop configuration. */
-static int peer_ebgp_multihop_set_vty(struct vty *vty, const char *ip_str,
-                                     const char *ttl_str)
+/* neighbor ebgp-multihop. */
+DEFUN_YANG (neighbor_ebgp_multihop,
+           neighbor_ebgp_multihop_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> ebgp-multihop",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Allow EBGP neighbors not on directly connected networks\n")
 {
-       struct peer *peer;
-       unsigned int ttl;
+       int idx_peer = 1;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, ip_str);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       if (peer->conf_if)
-               return bgp_vty_return(vty, BGP_ERR_INVALID_FOR_DIRECT_PEER);
-
-       if (!ttl_str)
-               ttl = MAXTTL;
-       else
-               ttl = strtoul(ttl_str, NULL, 10);
+       nb_cli_enqueue_change(vty, "./ebgp-multihop/enabled", NB_OP_MODIFY,
+                             "true");
 
-       return bgp_vty_return(vty, peer_ebgp_multihop_set(peer, ttl));
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-static int peer_ebgp_multihop_unset_vty(struct vty *vty, const char *ip_str)
+DEFUN_YANG (neighbor_ebgp_multihop_ttl,
+           neighbor_ebgp_multihop_ttl_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> ebgp-multihop (1-255)",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Allow EBGP neighbors not on directly connected networks\n"
+           "maximum hop count\n")
 {
-       struct peer *peer;
+       int idx_peer = 1;
+       int idx_number = 3;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, ip_str);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       return bgp_vty_return(vty, peer_ebgp_multihop_unset(peer));
-}
-
-/* neighbor ebgp-multihop. */
-DEFUN (neighbor_ebgp_multihop,
-       neighbor_ebgp_multihop_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> ebgp-multihop",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Allow EBGP neighbors not on directly connected networks\n")
-{
-       int idx_peer = 1;
-       return peer_ebgp_multihop_set_vty(vty, argv[idx_peer]->arg, NULL);
-}
+       nb_cli_enqueue_change(vty, "./ebgp-multihop/multihop-ttl", NB_OP_MODIFY,
+                             argv[idx_number]->arg);
 
-DEFUN (neighbor_ebgp_multihop_ttl,
-       neighbor_ebgp_multihop_ttl_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> ebgp-multihop (1-255)",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Allow EBGP neighbors not on directly connected networks\n"
-       "maximum hop count\n")
-{
-       int idx_peer = 1;
-       int idx_number = 3;
-       return peer_ebgp_multihop_set_vty(vty, argv[idx_peer]->arg,
-                                         argv[idx_number]->arg);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_ebgp_multihop,
-       no_neighbor_ebgp_multihop_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> ebgp-multihop [(1-255)]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Allow EBGP neighbors not on directly connected networks\n"
-       "maximum hop count\n")
+DEFUN_YANG (no_neighbor_ebgp_multihop,
+           no_neighbor_ebgp_multihop_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> ebgp-multihop [(1-255)]",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Allow EBGP neighbors not on directly connected networks\n"
+           "maximum hop count\n")
 {
        int idx_peer = 2;
-       return peer_ebgp_multihop_unset_vty(vty, argv[idx_peer]->arg);
+       char base_xpath[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;
+
+       if (argc > 4)
+               nb_cli_enqueue_change(vty, "./ebgp-multihop/multihop-ttl",
+                                     NB_OP_DESTROY, NULL);
+       else
+               nb_cli_enqueue_change(vty, "./ebgp-multihop/enabled",
+                                     NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 
 /* disable-connected-check */
-DEFUN (neighbor_disable_connected_check,
-       neighbor_disable_connected_check_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> <disable-connected-check|enforce-multihop>",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "one-hop away EBGP peer using loopback address\n"
-       "Enforce EBGP neighbors perform multihop\n")
+DEFUN_YANG (neighbor_disable_connected_check,
+           neighbor_disable_connected_check_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> <disable-connected-check|enforce-multihop>",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "one-hop away EBGP peer using loopback address\n"
+           "Enforce EBGP neighbors perform multihop\n")
 {
        int idx_peer = 1;
-       return peer_flag_set_vty(vty, argv[idx_peer]->arg,
-                                PEER_FLAG_DISABLE_CONNECTED_CHECK);
+       char base_xpath[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, "./ebgp-multihop/disable-connected-check",
+                             NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_disable_connected_check,
-       no_neighbor_disable_connected_check_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> <disable-connected-check|enforce-multihop>",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "one-hop away EBGP peer using loopback address\n"
-       "Enforce EBGP neighbors perform multihop\n")
+DEFUN_YANG (no_neighbor_disable_connected_check,
+           no_neighbor_disable_connected_check_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> <disable-connected-check|enforce-multihop>",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "one-hop away EBGP peer using loopback address\n"
+           "Enforce EBGP neighbors perform multihop\n")
 {
        int idx_peer = 2;
-       return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                  PEER_FLAG_DISABLE_CONNECTED_CHECK);
+       char base_xpath[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, "./ebgp-multihop/disable-connected-check",
+                             NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 
 /* enforce-first-as */
-DEFUN (neighbor_enforce_first_as,
-       neighbor_enforce_first_as_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> enforce-first-as",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Enforce the first AS for EBGP routes\n")
+DEFUN_YANG (neighbor_enforce_first_as,
+           neighbor_enforce_first_as_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> enforce-first-as",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Enforce the first AS for EBGP routes\n")
 {
        int idx_peer = 1;
+       char base_xpath[XPATH_MAXLEN];
 
-       return peer_flag_set_vty(vty, argv[idx_peer]->arg,
-                                PEER_FLAG_ENFORCE_FIRST_AS);
+       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, "./enforce-first-as", NB_OP_MODIFY, "true");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_enforce_first_as,
-       no_neighbor_enforce_first_as_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> enforce-first-as",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Enforce the first AS for EBGP routes\n")
+DEFUN_YANG (no_neighbor_enforce_first_as,
+           no_neighbor_enforce_first_as_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> enforce-first-as",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Enforce the first AS for EBGP routes\n")
 {
        int idx_peer = 2;
+       char base_xpath[XPATH_MAXLEN];
 
-       return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                  PEER_FLAG_ENFORCE_FIRST_AS);
+       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, "./enforce-first-as", NB_OP_MODIFY, "false");
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
+static int peer_and_group_lookup_nb(struct vty *vty, const char *peer_str,
+                                   char *base_xpath, int xpath_len,
+                                   char *xpath)
+{
+       union sockunion su;
+       char num_xpath[XPATH_MAXLEN];
+       char unnbr_xpath[XPATH_MAXLEN];
+       char prgrp_xpath[XPATH_MAXLEN];
+
+       if (str2sockunion(peer_str, &su) == 0) {
+               snprintf(num_xpath, sizeof(num_xpath),
+                        "/neighbors/neighbor[remote-address='%s']", peer_str);
+               if (yang_dnode_exists(vty->candidate_config->dnode, "%s%s",
+                                     VTY_CURR_XPATH, num_xpath)) {
+                       snprintf(base_xpath, xpath_len,
+                                FRR_BGP_NEIGHBOR_NUM_XPATH, peer_str,
+                                xpath ? xpath : "");
+               } else {
+                       vty_out(vty,
+                               "%% Specify remote-as or peer-group commands first\n");
+                       return -1;
+               }
+
+       } else {
+               snprintf(unnbr_xpath, sizeof(unnbr_xpath),
+                        "/neighbors/unnumbered-neighbor[interface='%s']",
+                        peer_str);
+
+               snprintf(prgrp_xpath, sizeof(prgrp_xpath),
+                        "/peer-groups/peer-group[peer-group-name='%s']",
+                        peer_str);
+
+               if (yang_dnode_exists(vty->candidate_config->dnode, "%s%s",
+                                     VTY_CURR_XPATH, unnbr_xpath)) {
+                       snprintf(base_xpath, xpath_len,
+                                FRR_BGP_NEIGHBOR_UNNUM_XPATH, peer_str,
+                                xpath ? xpath : "");
+               } else if (yang_dnode_exists(vty->candidate_config->dnode,
+                                            "%s%s", VTY_CURR_XPATH,
+                                            prgrp_xpath)) {
+                       snprintf(base_xpath, xpath_len,
+                                FRR_BGP_PEER_GROUP_XPATH, peer_str,
+                                xpath ? xpath : "");
+               } else {
+                       vty_out(vty,
+                               "%% Create the peer-group or interface first\n");
+                       return -1;
+               }
+       }
+
+       return 0;
+}
 
-DEFUN (neighbor_description,
-       neighbor_description_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> description LINE...",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Neighbor specific description\n"
-       "Up to 80 characters describing this neighbor\n")
+DEFUN_YANG (neighbor_description,
+           neighbor_description_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> description LINE...",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Neighbor specific description\n"
+           "Up to 80 characters describing this neighbor\n")
 {
        int idx_peer = 1;
        int idx_line = 3;
-       struct peer *peer;
+       int ret;
+       char base_xpath[XPATH_MAXLEN];
        char *str;
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
        str = argv_concat(argv, argc, idx_line);
 
-       peer_description_set(peer, str);
+       nb_cli_enqueue_change(vty, "./description", NB_OP_MODIFY, str);
+
+       ret = nb_cli_apply_changes(vty, base_xpath);
 
        XFREE(MTYPE_TMP, str);
 
-       return CMD_SUCCESS;
+       return ret;
 }
 
-DEFUN (no_neighbor_description,
-       no_neighbor_description_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> description",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Neighbor specific description\n")
+DEFUN_YANG (no_neighbor_description,
+           no_neighbor_description_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> description",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Neighbor specific description\n")
 {
        int idx_peer = 2;
-       struct peer *peer;
-
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
-               return CMD_WARNING_CONFIG_FAILED;
-
-       peer_description_unset(peer);
-
-       return CMD_SUCCESS;
-}
-
-ALIAS(no_neighbor_description, no_neighbor_description_comment_cmd,
-      "no neighbor <A.B.C.D|X:X::X:X|WORD> description LINE...",
-      NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
-      "Neighbor specific description\n"
-      "Up to 80 characters describing this neighbor\n")
-
-/* Neighbor update-source. */
-static int peer_update_source_vty(struct vty *vty, const char *peer_str,
-                                 const char *source_str)
-{
-       struct peer *peer;
-       struct prefix p;
-       union sockunion su;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, peer_str);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       if (peer->conf_if)
-               return CMD_WARNING;
-
-       if (source_str) {
-               if (str2sockunion(source_str, &su) == 0)
-                       peer_update_source_addr_set(peer, &su);
-               else {
-                       if (str2prefix(source_str, &p)) {
-                               vty_out(vty,
-                                       "%% Invalid update-source, remove prefix length \n");
-                               return CMD_WARNING_CONFIG_FAILED;
-                       } else
-                               peer_update_source_if_set(peer, source_str);
-               }
-       } else
-               peer_update_source_unset(peer);
+       nb_cli_enqueue_change(vty, "./description", NB_OP_DESTROY, NULL);
 
-       return CMD_SUCCESS;
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
+ALIAS(no_neighbor_description, no_neighbor_description_comment_cmd,
+      "no neighbor <A.B.C.D|X:X::X:X|WORD> description LINE...",
+      NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+      "Neighbor specific description\n"
+      "Up to 80 characters describing this neighbor\n")
+
 #define BGP_UPDATE_SOURCE_HELP_STR                                             \
        "IPv4 address\n"                                                       \
        "IPv6 address\n"                                                       \
        "Interface name (requires zebra to be running)\n"
 
-DEFUN (neighbor_update_source,
-       neighbor_update_source_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> update-source <A.B.C.D|X:X::X:X|WORD>",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Source of routing updates\n"
-       BGP_UPDATE_SOURCE_HELP_STR)
+DEFUN_YANG (neighbor_update_source,
+           neighbor_update_source_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> update-source <A.B.C.D|X:X::X:X|WORD>",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Source of routing updates\n"
+           BGP_UPDATE_SOURCE_HELP_STR)
 {
        int idx_peer = 1;
        int idx_peer_2 = 3;
-       return peer_update_source_vty(vty, argv[idx_peer]->arg,
+       union sockunion su;
+       char base_xpath[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;
+
+       // 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);
+       else
+               nb_cli_enqueue_change(vty, "./update-source/interface",
+                                     NB_OP_MODIFY, argv[idx_peer_2]->arg);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_update_source,
-       no_neighbor_update_source_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> update-source [<A.B.C.D|X:X::X:X|WORD>]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Source of routing updates\n"
-       BGP_UPDATE_SOURCE_HELP_STR)
+DEFUN_YANG (no_neighbor_update_source,
+           no_neighbor_update_source_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> update-source [<A.B.C.D|X:X::X:X|WORD>]",
+           NO_STR NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "Source of routing updates\n"
+           BGP_UPDATE_SOURCE_HELP_STR)
 {
        int idx_peer = 2;
-       return peer_update_source_vty(vty, argv[idx_peer]->arg, NULL);
+       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;
+
+       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);
 }
 
 static int peer_default_originate_set_vty(struct vty *vty, const char *peer_str,
@@ -6440,103 +7083,76 @@ ALIAS_HIDDEN(
        "route-map name\n")
 
 
-/* Set neighbor's BGP port.  */
-static int peer_port_vty(struct vty *vty, const char *ip_str, int afi,
-                        const char *port_str)
-{
-       struct peer *peer;
-       uint16_t port;
-       struct servent *sp;
-
-       peer = peer_lookup_vty(vty, ip_str);
-       if (!peer)
-               return CMD_WARNING_CONFIG_FAILED;
-
-       if (!port_str) {
-               sp = getservbyname("bgp", "tcp");
-               port = (sp == NULL) ? BGP_PORT_DEFAULT : ntohs(sp->s_port);
-       } else {
-               port = strtoul(port_str, NULL, 10);
-       }
-
-       peer_port_set(peer, port);
-
-       return CMD_SUCCESS;
-}
-
 /* Set specified peer's BGP port.  */
-DEFUN (neighbor_port,
-       neighbor_port_cmd,
-       "neighbor <A.B.C.D|X:X::X:X> port (0-65535)",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR
-       "Neighbor's BGP port\n"
-       "TCP port number\n")
+DEFUN_YANG (neighbor_port,
+           neighbor_port_cmd,
+           "neighbor <A.B.C.D|X:X::X:X> port (0-65535)",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR
+           "Neighbor's BGP port\n"
+           "TCP port number\n")
 {
        int idx_ip = 1;
        int idx_number = 3;
-       return peer_port_vty(vty, argv[idx_ip]->arg, AFI_IP,
-                            argv[idx_number]->arg);
-}
+       char base_xpath[XPATH_MAXLEN];
 
-DEFUN (no_neighbor_port,
-       no_neighbor_port_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X> port [(0-65535)]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR
-       "Neighbor's BGP port\n"
-       "TCP port number\n")
-{
-       int idx_ip = 2;
-       return peer_port_vty(vty, argv[idx_ip]->arg, AFI_IP, NULL);
-}
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_NEIGHBOR_NUM_XPATH,
+                argv[idx_ip]->arg, "");
+
+       nb_cli_enqueue_change(vty, "./local-port", NB_OP_MODIFY,
+                             argv[idx_number]->arg);
 
+       return nb_cli_apply_changes(vty, base_xpath);
+}
 
-/* neighbor weight. */
-static int peer_weight_set_vty(struct vty *vty, const char *ip_str, afi_t afi,
-                              safi_t safi, const char *weight_str)
+DEFUN_YANG (no_neighbor_port,
+           no_neighbor_port_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X> port [(0-65535)]",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR
+           "Neighbor's BGP port\n"
+           "TCP port number\n")
 {
-       int ret;
-       struct peer *peer;
-       unsigned long weight;
+       int idx_ip = 2;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, ip_str);
-       if (!peer)
-               return CMD_WARNING_CONFIG_FAILED;
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_NEIGHBOR_NUM_XPATH,
+                argv[idx_ip]->arg, "");
 
-       weight = strtoul(weight_str, NULL, 10);
+       nb_cli_enqueue_change(vty, "./local-port", NB_OP_DESTROY, NULL);
 
-       ret = peer_weight_set(peer, afi, safi, weight);
-       return bgp_vty_return(vty, ret);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-static int peer_weight_unset_vty(struct vty *vty, const char *ip_str, afi_t afi,
-                                safi_t safi)
+DEFUN_YANG (neighbor_weight,
+           neighbor_weight_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> weight (0-65535)",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Set default weight for routes from this neighbor\n"
+           "default weight\n")
 {
-       int ret;
-       struct peer *peer;
+       int idx_peer = 1;
+       int idx_number = 3;
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_xpath[XPATH_MAXLEN];
+       afi_t afi = bgp_node_afi(vty);
+       safi_t safi = bgp_node_safi(vty);
 
-       peer = peer_and_group_lookup_vty(vty, ip_str);
-       if (!peer)
+       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)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       ret = peer_weight_unset(peer, afi, safi);
-       return bgp_vty_return(vty, ret);
-}
+       snprintf(attr_xpath, sizeof(attr_xpath), "./%s/weight/weight-attribute",
+                bgp_afi_safi_get_container_str(afi, safi));
 
-DEFUN (neighbor_weight,
-       neighbor_weight_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> weight (0-65535)",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Set default weight for routes from this neighbor\n"
-       "default weight\n")
-{
-       int idx_peer = 1;
-       int idx_number = 3;
-       return peer_weight_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                  bgp_node_safi(vty), argv[idx_number]->arg);
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_MODIFY,
+                             argv[idx_number]->arg);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(neighbor_weight, neighbor_weight_hidden_cmd,
@@ -6545,18 +7161,34 @@ ALIAS_HIDDEN(neighbor_weight, neighbor_weight_hidden_cmd,
             "Set default weight for routes from this neighbor\n"
             "default weight\n")
 
-DEFUN (no_neighbor_weight,
-       no_neighbor_weight_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> weight [(0-65535)]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Set default weight for routes from this neighbor\n"
-       "default weight\n")
+DEFUN_YANG (no_neighbor_weight,
+           no_neighbor_weight_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> weight [(0-65535)]",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Set default weight for routes from this neighbor\n"
+           "default weight\n")
 {
        int idx_peer = 2;
-       return peer_weight_unset_vty(vty, argv[idx_peer]->arg,
-                                    bgp_node_afi(vty), bgp_node_safi(vty));
+       char base_xpath[XPATH_MAXLEN];
+       char af_xpath[XPATH_MAXLEN];
+       char attr_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)
+           < 0)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       snprintf(attr_xpath, sizeof(attr_xpath), "./%s/weight/weight-attribute",
+                bgp_afi_safi_get_container_str(afi, safi));
+
+       nb_cli_enqueue_change(vty, attr_xpath, NB_OP_DESTROY, NULL);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 ALIAS_HIDDEN(no_neighbor_weight, no_neighbor_weight_hidden_cmd,
@@ -6619,181 +7251,142 @@ DEFUN (no_neighbor_strict_capability,
                                   PEER_FLAG_STRICT_CAP_MATCH);
 }
 
-static int peer_timers_set_vty(struct vty *vty, const char *ip_str,
-                              const char *keep_str, const char *hold_str)
+DEFUN_YANG (neighbor_timers,
+           neighbor_timers_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> timers (0-65535) (0-65535)",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "BGP per neighbor timers\n"
+           "Keepalive interval\n"
+           "Holdtime\n")
 {
-       int ret;
-       struct peer *peer;
-       uint32_t keepalive;
-       uint32_t holdtime;
+       int idx_peer = 1;
+       int idx_number = 3;
+       int idx_number_2 = 4;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, ip_str);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       keepalive = strtoul(keep_str, NULL, 10);
-       holdtime = strtoul(hold_str, NULL, 10);
+       nb_cli_enqueue_change(vty, "./timers/keepalive", NB_OP_MODIFY,
+                             argv[idx_number]->arg);
 
-       ret = peer_timers_set(peer, keepalive, holdtime);
+       nb_cli_enqueue_change(vty, "./timers/hold-time", NB_OP_MODIFY,
+                             argv[idx_number_2]->arg);
 
-       return bgp_vty_return(vty, ret);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-static int peer_timers_unset_vty(struct vty *vty, const char *ip_str)
+DEFUN_YANG (no_neighbor_timers,
+           no_neighbor_timers_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> timers [(0-65535) (0-65535)]",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "BGP per neighbor timers\n"
+           "Keepalive interval\n"
+           "Holdtime\n")
 {
-       int ret;
-       struct peer *peer;
+       int idx_peer = 2;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, ip_str);
-       if (!peer)
+       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_timers_unset(peer);
-
-       return bgp_vty_return(vty, ret);
-}
+       nb_cli_enqueue_change(vty, "./timers/hold-time", NB_OP_DESTROY, NULL);
 
-DEFUN (neighbor_timers,
-       neighbor_timers_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> timers (0-65535) (0-65535)",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "BGP per neighbor timers\n"
-       "Keepalive interval\n"
-       "Holdtime\n")
-{
-       int idx_peer = 1;
-       int idx_number = 3;
-       int idx_number_2 = 4;
-       return peer_timers_set_vty(vty, argv[idx_peer]->arg,
-                                  argv[idx_number]->arg,
-                                  argv[idx_number_2]->arg);
-}
+       nb_cli_enqueue_change(vty, "./timers/keepalive", NB_OP_DESTROY, NULL);
 
-DEFUN (no_neighbor_timers,
-       no_neighbor_timers_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> timers [(0-65535) (0-65535)]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "BGP per neighbor timers\n"
-       "Keepalive interval\n"
-       "Holdtime\n")
-{
-       int idx_peer = 2;
-       return peer_timers_unset_vty(vty, argv[idx_peer]->arg);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-
-static int peer_timers_connect_set_vty(struct vty *vty, const char *ip_str,
-                                      const char *time_str)
+DEFUN_YANG (neighbor_timers_connect,
+           neighbor_timers_connect_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> timers connect (1-65535)",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "BGP per neighbor timers\n"
+           "BGP connect timer\n"
+           "Connect timer\n")
 {
-       int ret;
-       struct peer *peer;
-       uint32_t connect;
+       int idx_peer = 1;
+       int idx_number = 4;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, ip_str);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       connect = strtoul(time_str, NULL, 10);
-
-       ret = peer_timers_connect_set(peer, connect);
+       nb_cli_enqueue_change(vty, "./timers/connect-time", NB_OP_MODIFY,
+                             argv[idx_number]->arg);
 
-       return bgp_vty_return(vty, ret);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-static int peer_timers_connect_unset_vty(struct vty *vty, const char *ip_str)
+DEFUN_YANG (no_neighbor_timers_connect,
+           no_neighbor_timers_connect_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> timers connect [(1-65535)]",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "BGP per neighbor timers\n"
+           "BGP connect timer\n"
+           "Connect timer\n")
 {
-       int ret;
-       struct peer *peer;
+       int idx_peer = 2;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, ip_str);
-       if (!peer)
+       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_timers_connect_unset(peer);
+       nb_cli_enqueue_change(vty, "./timers/connect-time", NB_OP_DESTROY,
+                             NULL);
 
-       return bgp_vty_return(vty, ret);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (neighbor_timers_connect,
-       neighbor_timers_connect_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> timers connect (1-65535)",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "BGP per neighbor timers\n"
-       "BGP connect timer\n"
-       "Connect timer\n")
+DEFUN_YANG (neighbor_advertise_interval,
+           neighbor_advertise_interval_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> advertisement-interval (0-600)",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Minimum interval between sending BGP routing updates\n"
+           "time in seconds\n")
 {
        int idx_peer = 1;
-       int idx_number = 4;
-       return peer_timers_connect_set_vty(vty, argv[idx_peer]->arg,
-                                          argv[idx_number]->arg);
-}
-
-DEFUN (no_neighbor_timers_connect,
-       no_neighbor_timers_connect_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> timers connect [(1-65535)]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "BGP per neighbor timers\n"
-       "BGP connect timer\n"
-       "Connect timer\n")
-{
-       int idx_peer = 2;
-       return peer_timers_connect_unset_vty(vty, argv[idx_peer]->arg);
-}
-
-
-static int peer_advertise_interval_vty(struct vty *vty, const char *ip_str,
-                                      const char *time_str, int set)
-{
-       int ret;
-       struct peer *peer;
-       uint32_t routeadv = 0;
+       int idx_number = 3;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, ip_str);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       if (time_str)
-               routeadv = strtoul(time_str, NULL, 10);
-
-       if (set)
-               ret = peer_advertise_interval_set(peer, routeadv);
-       else
-               ret = peer_advertise_interval_unset(peer);
-
-       return bgp_vty_return(vty, ret);
-}
+       nb_cli_enqueue_change(vty, "./timers/advertise-interval", NB_OP_MODIFY,
+                             argv[idx_number]->arg);
 
-DEFUN (neighbor_advertise_interval,
-       neighbor_advertise_interval_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> advertisement-interval (0-600)",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Minimum interval between sending BGP routing updates\n"
-       "time in seconds\n")
-{
-       int idx_peer = 1;
-       int idx_number = 3;
-       return peer_advertise_interval_vty(vty, argv[idx_peer]->arg,
-                                          argv[idx_number]->arg, 1);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_advertise_interval,
-       no_neighbor_advertise_interval_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> advertisement-interval [(0-600)]",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Minimum interval between sending BGP routing updates\n"
-       "time in seconds\n")
+DEFUN_YANG (no_neighbor_advertise_interval,
+           no_neighbor_advertise_interval_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> advertisement-interval [(0-600)]",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Minimum interval between sending BGP routing updates\n"
+           "time in seconds\n")
 {
        int idx_peer = 2;
-       return peer_advertise_interval_vty(vty, argv[idx_peer]->arg, NULL, 0);
+       char base_xpath[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, "./timers/advertise-interval", NB_OP_DESTROY,
+                             NULL);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 
@@ -6845,50 +7438,42 @@ DEFUN (no_bgp_set_route_map_delay_timer,
        return CMD_SUCCESS;
 }
 
-/* neighbor interface */
-static int peer_interface_vty(struct vty *vty, const char *ip_str,
-                             const char *str)
+DEFUN_YANG (neighbor_interface,
+           neighbor_interface_cmd,
+           "neighbor <A.B.C.D|X:X::X:X> interface WORD",
+           NEIGHBOR_STR NEIGHBOR_ADDR_STR
+           "Interface\n"
+           "Interface name\n")
 {
-       struct peer *peer;
-
-       peer = peer_lookup_vty(vty, ip_str);
-       if (!peer || peer->conf_if) {
-               vty_out(vty, "%% BGP invalid peer %s\n", ip_str);
-               return CMD_WARNING_CONFIG_FAILED;
-       }
+       int idx_ip = 1;
+       int idx_word = 3;
+       char base_xpath[XPATH_MAXLEN];
 
-       if (str)
-               peer_interface_set(peer, str);
-       else
-               peer_interface_unset(peer);
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_NEIGHBOR_NUM_XPATH,
+                argv[idx_ip]->arg, "");
 
-       return CMD_SUCCESS;
-}
+       nb_cli_enqueue_change(vty, "./local-interface", NB_OP_MODIFY,
+                             argv[idx_word]->arg);
 
-DEFUN (neighbor_interface,
-       neighbor_interface_cmd,
-       "neighbor <A.B.C.D|X:X::X:X> interface WORD",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR
-       "Interface\n"
-       "Interface name\n")
-{
-       int idx_ip = 1;
-       int idx_word = 3;
-       return peer_interface_vty(vty, argv[idx_ip]->arg, argv[idx_word]->arg);
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
-DEFUN (no_neighbor_interface,
-       no_neighbor_interface_cmd,
-       "no neighbor <A.B.C.D|X:X::X:X|WORD> interface WORD",
-       NO_STR
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "Interface\n"
-       "Interface name\n")
+DEFUN_YANG (no_neighbor_interface,
+           no_neighbor_interface_cmd,
+           "no neighbor <A.B.C.D|X:X::X:X|WORD> interface WORD",
+           NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+           "Interface\n"
+           "Interface name\n")
 {
        int idx_peer = 2;
-       return peer_interface_vty(vty, argv[idx_peer]->arg, NULL);
+       char base_xpath[XPATH_MAXLEN];
+
+       snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_NEIGHBOR_NUM_XPATH,
+                argv[idx_peer]->arg, "");
+
+       nb_cli_enqueue_change(vty, "./local-interface", NB_OP_DESTROY, NULL);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 DEFUN (neighbor_distribute_list,
@@ -7835,38 +8420,28 @@ ALIAS_HIDDEN(
        "Number of occurrences of AS number\n"
        "Only accept my AS in the as-path if the route was originated in my AS\n")
 
-DEFUN (neighbor_ttl_security,
-       neighbor_ttl_security_cmd,
-       "neighbor <A.B.C.D|X:X::X:X|WORD> ttl-security hops (1-254)",
-       NEIGHBOR_STR
-       NEIGHBOR_ADDR_STR2
-       "BGP ttl-security parameters\n"
-       "Specify the maximum number of hops to the BGP peer\n"
-       "Number of hops to BGP peer\n")
+DEFUN_YANG (neighbor_ttl_security,
+           neighbor_ttl_security_cmd,
+           "neighbor <A.B.C.D|X:X::X:X|WORD> ttl-security hops (1-254)",
+           NEIGHBOR_STR
+           NEIGHBOR_ADDR_STR2
+           "BGP ttl-security parameters\n"
+           "Specify the maximum number of hops to the BGP peer\n"
+           "Number of hops to BGP peer\n")
 {
        int idx_peer = 1;
        int idx_number = 4;
-       struct peer *peer;
-       int gtsm_hops;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       gtsm_hops = strtoul(argv[idx_number]->arg, NULL, 10);
-
-       /*
-        * If 'neighbor swpX', then this is for directly connected peers,
-        * we should not accept a ttl-security hops value greater than 1.
-        */
-       if (peer->conf_if && (gtsm_hops > BGP_GTSM_HOPS_CONNECTED)) {
-               vty_out(vty,
-                       "%s is directly connected peer, hops cannot exceed 1\n",
-                       argv[idx_peer]->arg);
-               return CMD_WARNING_CONFIG_FAILED;
-       }
+       nb_cli_enqueue_change(vty, "./ttl-security", NB_OP_MODIFY,
+                             argv[idx_number]->arg);
 
-       return bgp_vty_return(vty, peer_ttl_security_hops_set(peer, gtsm_hops));
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 DEFUN (no_neighbor_ttl_security,
@@ -7880,13 +8455,16 @@ DEFUN (no_neighbor_ttl_security,
        "Number of hops to BGP peer\n")
 {
        int idx_peer = 2;
-       struct peer *peer;
+       char base_xpath[XPATH_MAXLEN];
 
-       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
-       if (!peer)
+       if (peer_and_group_lookup_nb(vty, argv[idx_peer]->arg, base_xpath,
+                                    sizeof(base_xpath), NULL)
+           < 0)
                return CMD_WARNING_CONFIG_FAILED;
 
-       return bgp_vty_return(vty, peer_ttl_security_hops_unset(peer));
+       nb_cli_enqueue_change(vty, "./ttl-security", NB_OP_DESTROY, NULL);
+
+       return nb_cli_apply_changes(vty, base_xpath);
 }
 
 DEFUN (neighbor_addpath_tx_all_paths,
index 349efbac454a3f738f90b629a4ad2505941bb003..07f61ab0ea2051ec8095a7536b5b1c2992b5bbae 100644 (file)
@@ -194,5 +194,20 @@ extern const char *bgp_afi_safi_get_container_str(afi_t afi, safi_t safi);
 extern bool vpn_policy_check_import(struct bgp *bgp, afi_t afi, safi_t safi,
                                    bool v2vimport, char *errmsg,
                                    size_t errmsg_len);
+extern int bgp_nb_errmsg_return(char *errmsg, size_t errmsg_len, int ret);
+extern bool peer_address_self_check(struct bgp *bgp, union sockunion *su);
+extern int peer_local_interface_cfg(struct bgp *bgp, const char *ip_str,
+                                   const char *str, char *errmsg,
+                                   size_t errmsg_len);
+extern int peer_conf_interface_create(struct bgp *bgp, const char *conf_if,
+                                     afi_t afi, safi_t safi, bool v6only,
+                                     const char *peer_group_name, int as_type,
+                                     as_t as, char *errmsg, size_t errmsg_len);
+extern int peer_flag_modify_nb(struct bgp *bgp, const char *ip_str,
+                              struct peer *peer, uint32_t flag, bool set,
+                              char *errmsg, size_t errmsg_len);
+extern int peer_af_flag_modify_nb(struct peer *peer, afi_t afi, safi_t safi,
+                                 uint32_t flag, int set, char *errmsg,
+                                 size_t errmsg_len);
 
 #endif /* _QUAGGA_BGP_VTY_H */
index cf16378de199f8ceaf1557a20e582a6fe8c4c7be..2346d6bb4fcd4629deeb4f2af1d56fa488d00e57 100644 (file)
@@ -5478,8 +5478,8 @@ int peer_allowas_in_unset(struct peer *peer, afi_t afi, safi_t safi)
        return 0;
 }
 
-int peer_local_as_set(struct peer *peer, as_t as, int no_prepend,
-                     int replace_as)
+int peer_local_as_set(struct peer *peer, as_t as, bool no_prepend,
+                     bool replace_as)
 {
        bool old_no_prepend, old_replace_as;
        struct bgp *bgp = peer->bgp;
index 74828e91df217411f128becc5625179f910e65e0..bd2b4541f9c20eeb2726a6886fab3368b0932985 100644 (file)
@@ -1949,7 +1949,8 @@ extern int peer_distribute_unset(struct peer *, afi_t, safi_t, int);
 extern int peer_allowas_in_set(struct peer *, afi_t, safi_t, int, int);
 extern int peer_allowas_in_unset(struct peer *, afi_t, safi_t);
 
-extern int peer_local_as_set(struct peer *, as_t, int, int);
+extern int peer_local_as_set(struct peer *, as_t, bool no_prepend,
+                            bool replace_as);
 extern int peer_local_as_unset(struct peer *);
 
 extern int peer_prefix_list_set(struct peer *, afi_t, safi_t, int,
index 6543b1d1c39058e7fc8d46d97714565e697f720b..e17aa2783f480def25a414577fa198276553abf1 100644 (file)
@@ -110,7 +110,6 @@ submodule frr-bgp-common-structure {
     container local-as {
       leaf local-as {
         type inet:as-number;
-        mandatory true;
         description
           "The local autonomous system number that is to be used when
            establishing sessions with the remote peer or peer group, if
@@ -200,7 +199,6 @@ submodule frr-bgp-common-structure {
     container neighbor-remote-as {
       leaf remote-as-type {
         type frr-bt:as-type;
-        mandatory true;
         description
           "Remote AS type.";
       }
@@ -598,7 +596,7 @@ submodule frr-bgp-common-structure {
 
       leaf send-large-community {
         type boolean;
-        default "false";
+        default "true";
         description
           "Send large community attribute to this neighbor.";
       }
@@ -614,7 +612,6 @@ submodule frr-bgp-common-structure {
         "BGP Administrative Shutdown Communication.";
       leaf enable {
         type boolean;
-        mandatory true;
         description
           "When set to 'true', BGP shutdown communication is enabled.";
       }
index 3b8d63c44714cc5c5e28f923bd2e065b6c01c4f0..a4b50b156b14913dd810c6b119957eafad0862ab 100644 (file)
@@ -97,8 +97,6 @@ submodule frr-bgp-neighbor {
 
     uses neighbor-update-source;
 
-    uses neighbor-remote-as;
-
     uses structure-neighbor-group-ebgp-multihop;
 
     uses neighbor-local-as-options;
@@ -124,7 +122,6 @@ submodule frr-bgp-neighbor {
 
         leaf enabled {
           type boolean;
-          default "false";
           description
             "This leaf indicates whether the IPv4 Unicast AFI, SAFI is
              enabled for the neighbour or group.";
index 3ce628d2b71fe3403ce530a542720210696ce50b..452ff1a12f02b470fe2d999191601dad1f8d96a3 100644 (file)
@@ -9,6 +9,10 @@ submodule frr-bgp-peer-group {
     prefix inet;
   }
 
+  import frr-bgp-types {
+    prefix frr-bt;
+  }
+
   include frr-bgp-common-structure;
   include frr-bgp-neighbor;
 
@@ -72,6 +76,8 @@ submodule frr-bgp-peer-group {
         "Configure BGP dynamic neighbors listen range.";
     }
 
+    uses neighbor-remote-as;
+
     uses neighbor-parameters;
   }
 
index 820c4b2861a89805e856daa79bd1b97559cd3f89..b55526756375854dc0423647b0cef3cd2f545734 100644 (file)
@@ -19,6 +19,10 @@ module frr-bgp {
     prefix frr-interface;
   }
 
+  import frr-bgp-types {
+    prefix frr-bt;
+  }
+
   include "frr-bgp-common-structure";
 
   include "frr-bgp-common";
@@ -206,6 +210,25 @@ module frr-bgp {
               "The peer-group with which this neighbor is associated.";
           }
 
+          container neighbor-remote-as {
+            leaf remote-as-type {
+              type frr-bt:as-type;
+              mandatory true;
+              description
+                "Remote AS type.";
+            }
+
+            leaf remote-as {
+              when "../remote-as-type = 'as-specified'";
+              type inet:as-number;
+              description
+                "The remote autonomous system number received in
+                 the BGP OPEN message.";
+              reference
+                "RFC 4271";
+            }
+          }
+
           uses neighbor-parameters;
         }
 
@@ -238,6 +261,8 @@ module frr-bgp {
               "The peer-group with which this neighbor is associated.";
           }
 
+          uses neighbor-remote-as;
+
           uses neighbor-parameters;
         }
       }