]> git.proxmox.com Git - mirror_frr.git/commitdiff
Merge pull request #7434 from sudhanshukumar22/bgp-link-local-address
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Thu, 8 Apr 2021 06:26:55 +0000 (09:26 +0300)
committerGitHub <noreply@github.com>
Thu, 8 Apr 2021 06:26:55 +0000 (09:26 +0300)
bgpd: BGP session not established for ipv6 link local address with vrf config

97 files changed:
.gitignore
bfdd/bfd.c
bfdd/bfd.h
bfdd/bfdd_cli.c
bfdd/bfdd_nb_config.c
bgpd/bgp_evpn_vty.c
bgpd/bgp_mplsvpn.c
bgpd/bgp_nb.c
bgpd/bgp_nb.h
bgpd/bgp_nb_config.c
bgpd/bgp_route.c
bgpd/bgp_routemap.c
bgpd/bgp_rpki.c
bgpd/bgp_table.c
bgpd/bgp_vty.c
bgpd/bgpd.h
doc/developer/_static/overrides.css
doc/developer/conf.py
doc/developer/logging.rst
doc/user/bgp.rst
doc/user/zebra.rst
lib/nexthop.c
lib/prefix.c
lib/prefix.h
lib/printf/glue.c
lib/printf/printflocal.h
lib/printf/vfprintf.c
lib/printfrr.h
lib/sockunion.c
lib/sockunion.h
lib/srcdest_table.c
lib/strformat.c [new file with mode: 0644]
lib/subdir.am
lib/vrf.c
lib/vrf.h
lib/vty.c
nhrpd/nhrp_cache.c
nhrpd/nhrp_interface.c
nhrpd/nhrp_nhs.c
nhrpd/nhrp_packet.c
nhrpd/nhrp_peer.c
nhrpd/nhrp_shortcut.c
nhrpd/nhrp_vty.c
nhrpd/nhrpd.h
nhrpd/zbuf.c
nhrpd/zbuf.h
ospfd/ospf_bfd.c
ospfd/ospf_vty.c
pceplib/.gitignore
ripngd/ripng_peer.c
ripngd/ripngd.c
staticd/static_routes.c
staticd/static_vrf.c
staticd/static_vrf.h
tests/lib/test_printfrr.c
tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/__init__.py [new file with mode: 0644]
tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/zebra.conf [new file with mode: 0644]
tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/zebra.conf [new file with mode: 0644]
tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/zebra.conf [new file with mode: 0644]
tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py [new file with mode: 0644]
tests/topotests/bgp_gr_functionality_topo1/test_bgp_gr_functionality_topo1.py
tests/topotests/bgp_gr_functionality_topo2/test_bgp_gr_functionality_topo2.py
tests/topotests/isis-topo1-vrf/r1/r1_topology.json
tests/topotests/isis-topo1-vrf/r2/r2_topology.json
tests/topotests/isis-topo1-vrf/r3/r3_topology.json
tests/topotests/isis-topo1-vrf/r4/r4_topology.json
tests/topotests/isis-topo1-vrf/r5/r5_topology.json
tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.py
tests/topotests/lib/bgp.py
tests/topotests/lib/common_config.py
tests/topotests/ospf-topo1/r1/ospf6d.conf-pre-v4 [deleted file]
tests/topotests/ospf-topo1/r2/ospf6d.conf-pre-v4 [deleted file]
tests/topotests/ospf-topo1/r3/ospf6d.conf-pre-v4 [deleted file]
tests/topotests/ospf-topo1/r4/ospf6d.conf-pre-v4 [deleted file]
tests/topotests/ospf-topo1/test_ospf_topo1.py
tests/topotests/ospf6-topo1/r1/ospf6d.conf
tests/topotests/ospf6-topo1/r2/ospf6d.conf
tests/topotests/ospf6-topo1/r3/ospf6d.conf
tests/topotests/ospf6-topo1/r4/ospf6d.conf
tests/topotests/ospf6-topo1/test_ospf6_topo1.py
tools/etc/frr/daemons
tools/frr-reload.py
tools/frrcommon.sh.in
tools/gcc-plugins/frr-format.c
tools/gcc-plugins/frr-format.h
vtysh/vtysh.c
yang/frr-bgp-common.yang
yang/frr-bgp.yang
zebra/debug.c
zebra/debug.h
zebra/zebra_mpls.c
zebra/zebra_nb_config.c
zebra/zebra_vrf.c
zebra/zebra_vrf.h

index 05ca0b114006324dfc7347b6feef96a43dba8e56..4e120dae854366fe5224d32e4875172697c5db87 100644 (file)
@@ -110,3 +110,5 @@ refix
 .vscode
 .kitchen
 .emacs.desktop*
+
+/test-suite.log
index 234fc6d397c1509333718e67d535c50d33c55898..18f331e201083d1b3b2650aa17798a3d5c67f0b8 100644 (file)
@@ -1941,6 +1941,14 @@ void bfd_sessions_remove_manual(void)
        hash_iterate(bfd_key_hash, _bfd_session_remove_manual, NULL);
 }
 
+void bfd_profiles_remove(void)
+{
+       struct bfd_profile *bp;
+
+       while ((bp = TAILQ_FIRST(&bplist)) != NULL)
+               bfd_profile_free(bp);
+}
+
 /*
  * Profile related hash functions.
  */
index a86c1bb9f316ecc28f24e696e6477eb94c1fa1e1..d9d5d8cb5ea74b9c477d5034048d52bace7ab857 100644 (file)
@@ -619,6 +619,7 @@ void bfd_session_free(struct bfd_session *bs);
 const struct bfd_session *bfd_session_next(const struct bfd_session *bs,
                                           bool mhop);
 void bfd_sessions_remove_manual(void);
+void bfd_profiles_remove(void);
 
 /**
  * Set the BFD session echo state.
index ba80b2363f1bcd1a39a57b581737c1198081904b..42ed587f20efc5a14ee9746e372f43bfd2ef0e62 100644 (file)
@@ -557,7 +557,7 @@ void bfd_cli_show_required_echo_receive_interval(struct vty *vty,
  * Profile commands.
  */
 DEFPY_YANG_NOSH(bfd_profile, bfd_profile_cmd,
-          "profile WORD$name",
+          "profile BFDPROF$name",
           BFD_PROFILE_STR
           BFD_PROFILE_NAME_STR)
 {
index 26bce4f357f4748d21dfbeb2d5b43214d99cc110..b221b6d539fc130f49c5d9c51938487c81b9272d 100644 (file)
@@ -229,7 +229,15 @@ static int bfd_session_destroy(enum nb_event event,
  */
 int bfdd_bfd_create(struct nb_cb_create_args *args)
 {
-       /* NOTHING */
+       if (args->event != NB_EV_APPLY)
+               return NB_OK;
+
+       /*
+        * Set any non-NULL value to be able to call
+        * nb_running_unset_entry in bfdd_bfd_destroy.
+        */
+       nb_running_set_entry(args->dnode, (void *)0x1);
+
        return NB_OK;
 }
 
@@ -245,7 +253,14 @@ int bfdd_bfd_destroy(struct nb_cb_destroy_args *args)
                return NB_OK;
 
        case NB_EV_APPLY:
+               /*
+                * We need to call this to unset pointers from
+                * the child nodes - sessions and profiles.
+                */
+               nb_running_unset_entry(args->dnode);
+
                bfd_sessions_remove_manual();
+               bfd_profiles_remove();
                break;
 
        case NB_EV_ABORT:
index 5a0258f3bf4e20f2cc47c40b76a3448b56e246ea..381e6f082bab0916e88d809116f8a6591637ff0a 100644 (file)
@@ -1397,33 +1397,43 @@ DEFUN(show_ip_bgp_l2vpn_evpn,
       "show [ip] bgp l2vpn evpn [json]",
       SHOW_STR IP_STR BGP_STR L2VPN_HELP_STR EVPN_HELP_STR JSON_STR)
 {
-       return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_normal, NULL, 0,
+       return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_normal, NULL,
+                                    SHOW_DISPLAY_STANDARD,
                                     use_json(argc, argv));
 }
 
 DEFUN(show_ip_bgp_l2vpn_evpn_rd,
       show_ip_bgp_l2vpn_evpn_rd_cmd,
-      "show [ip] bgp l2vpn evpn rd ASN:NN_OR_IP-ADDRESS:NN [json]",
+      "show [ip] bgp l2vpn evpn rd <ASN:NN_OR_IP-ADDRESS:NN|all> [json]",
       SHOW_STR
       IP_STR
       BGP_STR
       L2VPN_HELP_STR
       EVPN_HELP_STR
       "Display information for a route distinguisher\n"
-      "VPN Route Distinguisher\n" JSON_STR)
+      "VPN Route Distinguisher\n"
+      "All VPN Route Distinguishers\n"
+      JSON_STR)
 {
        int idx_ext_community = 0;
        int ret;
        struct prefix_rd prd;
+       int rd_all = 0;
 
-       argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN", &idx_ext_community);
+       argv_find(argv, argc, "all", &rd_all);
+       if (rd_all)
+               return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_normal,
+                                            NULL, SHOW_DISPLAY_STANDARD,
+                                            use_json(argc, argv));
 
+       argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN", &idx_ext_community);
        ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
        if (!ret) {
                vty_out(vty, "%% Malformed Route Distinguisher\n");
                return CMD_WARNING;
        }
-       return bgp_show_ethernet_vpn(vty, &prd, bgp_show_type_normal, NULL, 0,
+       return bgp_show_ethernet_vpn(vty, &prd, bgp_show_type_normal, NULL,
+                                    SHOW_DISPLAY_STANDARD,
                                     use_json(argc, argv));
 }
 
@@ -1438,34 +1448,41 @@ DEFUN(show_ip_bgp_l2vpn_evpn_all_tags,
       "Display information about all EVPN NLRIs\n"
       "Display BGP tags for prefixes\n")
 {
-       return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_normal, NULL, 1,
-                                    0);
+       return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_normal, NULL,
+                                    SHOW_DISPLAY_TAGS, 0);
 }
 
 DEFUN(show_ip_bgp_l2vpn_evpn_rd_tags,
       show_ip_bgp_l2vpn_evpn_rd_tags_cmd,
-      "show [ip] bgp l2vpn evpn rd ASN:NN_OR_IP-ADDRESS:NN tags",
+      "show [ip] bgp l2vpn evpn rd <ASN:NN_OR_IP-ADDRESS:NN|all> tags",
       SHOW_STR
       IP_STR
       BGP_STR
       L2VPN_HELP_STR
       EVPN_HELP_STR
       "Display information for a route distinguisher\n"
-      "VPN Route Distinguisher\n" "Display BGP tags for prefixes\n")
+      "VPN Route Distinguisher\n"
+      "All VPN Route Distinguishers\n"
+      "Display BGP tags for prefixes\n")
 {
        int idx_ext_community = 0;
        int ret;
        struct prefix_rd prd;
+       int rd_all = 0;
 
-       argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN", &idx_ext_community);
+       argv_find(argv, argc, "all", &rd_all);
+       if (rd_all)
+               return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_normal,
+                                            NULL, SHOW_DISPLAY_TAGS, 0);
 
+       argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN", &idx_ext_community);
        ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
        if (!ret) {
                vty_out(vty, "%% Malformed Route Distinguisher\n");
                return CMD_WARNING;
        }
-       return bgp_show_ethernet_vpn(vty, &prd, bgp_show_type_normal, NULL, 1,
-                                    0);
+       return bgp_show_ethernet_vpn(vty, &prd, bgp_show_type_normal, NULL,
+                                    SHOW_DISPLAY_TAGS, 0);
 }
 
 DEFUN(show_ip_bgp_l2vpn_evpn_neighbor_routes,
@@ -1531,13 +1548,13 @@ DEFUN(show_ip_bgp_l2vpn_evpn_neighbor_routes,
                return CMD_WARNING;
        }
 
-       return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_neighbor, peer, 0,
-                                    uj);
+       return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_neighbor, peer,
+                                    SHOW_DISPLAY_STANDARD, uj);
 }
 
 DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_routes,
       show_ip_bgp_l2vpn_evpn_rd_neighbor_routes_cmd,
-      "show [ip] bgp l2vpn evpn rd ASN:NN_OR_IP-ADDRESS:NN neighbors <A.B.C.D|X:X::X:X|WORD> routes [json]",
+      "show [ip] bgp l2vpn evpn rd <ASN:NN_OR_IP-ADDRESS:NN|all> neighbors <A.B.C.D|X:X::X:X|WORD> routes [json]",
       SHOW_STR
       IP_STR
       BGP_STR
@@ -1545,6 +1562,7 @@ DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_routes,
       EVPN_HELP_STR
       "Display information for a route distinguisher\n"
       "VPN Route Distinguisher\n"
+      "All VPN Route Distinguishers\n"
       "Detailed information on TCP and BGP neighbor connections\n"
       "IPv4 Neighbor to display information about\n"
       "IPv6 Neighbor to display information about\n"
@@ -1561,6 +1579,7 @@ DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_routes,
        afi_t afi = AFI_L2VPN;
        safi_t safi = SAFI_EVPN;
        struct bgp *bgp = NULL;
+       int rd_all = 0;
 
        bgp_vty_find_and_parse_afi_safi_bgp(vty, argv, argc, &idx, &afi, &safi,
                                            &bgp, uj);
@@ -1569,20 +1588,26 @@ DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_routes,
                return CMD_WARNING;
        }
 
-       argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN", &idx_ext_community);
-       ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
-       if (!ret) {
-               if (uj) {
-                       json_object *json_no = NULL;
-                       json_no = json_object_new_object();
-                       json_object_string_add(json_no, "warning",
-                                              "Malformed Route Distinguisher");
-                       vty_out(vty, "%s\n",
-                               json_object_to_json_string(json_no));
-                       json_object_free(json_no);
-               } else
-                       vty_out(vty, "%% Malformed Route Distinguisher\n");
-               return CMD_WARNING;
+       argv_find(argv, argc, "all", &rd_all);
+       if (!rd_all) {
+               argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN",
+                         &idx_ext_community);
+               ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
+               if (!ret) {
+                       if (uj) {
+                               json_object *json_no = NULL;
+                               json_no = json_object_new_object();
+                               json_object_string_add(
+                                       json_no, "warning",
+                                       "Malformed Route Distinguisher");
+                               vty_out(vty, "%s\n",
+                                       json_object_to_json_string(json_no));
+                               json_object_free(json_no);
+                       } else
+                               vty_out(vty,
+                                       "%% Malformed Route Distinguisher\n");
+                       return CMD_WARNING;
+               }
        }
 
        /* neighbors <A.B.C.D|X:X::X:X|WORD> */
@@ -1619,8 +1644,13 @@ DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_routes,
                return CMD_WARNING;
        }
 
-       return bgp_show_ethernet_vpn(vty, &prd, bgp_show_type_neighbor, peer, 0,
-                                    uj);
+
+       if (rd_all)
+               return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_neighbor,
+                                            peer, SHOW_DISPLAY_STANDARD, uj);
+       else
+               return bgp_show_ethernet_vpn(vty, &prd, bgp_show_type_neighbor,
+                                            peer, SHOW_DISPLAY_STANDARD, uj);
 }
 
 DEFUN(show_ip_bgp_l2vpn_evpn_neighbor_advertised_routes,
@@ -1694,7 +1724,7 @@ DEFUN(show_ip_bgp_l2vpn_evpn_neighbor_advertised_routes,
 
 DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_advertised_routes,
       show_ip_bgp_l2vpn_evpn_rd_neighbor_advertised_routes_cmd,
-      "show [ip] bgp l2vpn evpn rd ASN:NN_OR_IP-ADDRESS:NN neighbors <A.B.C.D|X:X::X:X|WORD> advertised-routes [json]",
+      "show [ip] bgp l2vpn evpn rd <ASN:NN_OR_IP-ADDRESS:NN|all> neighbors <A.B.C.D|X:X::X:X|WORD> advertised-routes [json]",
       SHOW_STR
       IP_STR
       BGP_STR
@@ -1702,6 +1732,7 @@ DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_advertised_routes,
       EVPN_HELP_STR
       "Display information for a route distinguisher\n"
       "VPN Route Distinguisher\n"
+      "All VPN Route Distinguishers\n"
       "Detailed information on TCP and BGP neighbor connections\n"
       "IPv4 Neighbor to display information about\n"
       "IPv6 Neighbor to display information about\n"
@@ -1718,6 +1749,7 @@ DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_advertised_routes,
        char *peerstr = NULL;
        afi_t afi = AFI_L2VPN;
        safi_t safi = SAFI_EVPN;
+       int rd_all = 0;
 
        if (uj)
                argc--;
@@ -1732,8 +1764,6 @@ DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_advertised_routes,
                return CMD_WARNING;
        }
 
-       argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN", &idx_ext_community);
-
        /* neighbors <A.B.C.D|X:X::X:X|WORD> */
        argv_find(argv, argc, "neighbors", &idx);
        peerstr = argv[++idx]->arg;
@@ -1768,19 +1798,29 @@ DEFUN(show_ip_bgp_l2vpn_evpn_rd_neighbor_advertised_routes,
                return CMD_WARNING;
        }
 
-       ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
-       if (!ret) {
-               if (uj) {
-                       json_object *json_no = NULL;
-                       json_no = json_object_new_object();
-                       json_object_string_add(json_no, "warning",
-                                              "Malformed Route Distinguisher");
-                       vty_out(vty, "%s\n",
-                               json_object_to_json_string(json_no));
-                       json_object_free(json_no);
-               } else
-                       vty_out(vty, "%% Malformed Route Distinguisher\n");
-               return CMD_WARNING;
+       argv_find(argv, argc, "all", &rd_all);
+       if (rd_all)
+               return show_adj_route_vpn(vty, peer, NULL, AFI_L2VPN, SAFI_EVPN,
+                                         uj);
+       else {
+               argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN",
+                         &idx_ext_community);
+               ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
+               if (!ret) {
+                       if (uj) {
+                               json_object *json_no = NULL;
+                               json_no = json_object_new_object();
+                               json_object_string_add(
+                                       json_no, "warning",
+                                       "Malformed Route Distinguisher");
+                               vty_out(vty, "%s\n",
+                                       json_object_to_json_string(json_no));
+                               json_object_free(json_no);
+                       } else
+                               vty_out(vty,
+                                       "%% Malformed Route Distinguisher\n");
+                       return CMD_WARNING;
+               }
        }
 
        return show_adj_route_vpn(vty, peer, &prd, AFI_L2VPN, SAFI_EVPN, uj);
@@ -1805,7 +1845,7 @@ DEFUN(show_ip_bgp_l2vpn_evpn_all_overlay,
 
 DEFUN(show_ip_bgp_evpn_rd_overlay,
       show_ip_bgp_evpn_rd_overlay_cmd,
-      "show [ip] bgp l2vpn evpn rd ASN:NN_OR_IP-ADDRESS:NN overlay",
+      "show [ip] bgp l2vpn evpn rd <ASN:NN_OR_IP-ADDRESS:NN|all> overlay",
       SHOW_STR
       IP_STR
       BGP_STR
@@ -1813,14 +1853,21 @@ DEFUN(show_ip_bgp_evpn_rd_overlay,
       EVPN_HELP_STR
       "Display information for a route distinguisher\n"
       "VPN Route Distinguisher\n"
+      "All VPN Route Distinguishers\n"
       "Display BGP Overlay Information for prefixes\n")
 {
        int idx_ext_community = 0;
        int ret;
        struct prefix_rd prd;
+       int rd_all = 0;
 
-       argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN", &idx_ext_community);
+       argv_find(argv, argc, "all", &rd_all);
+       if (rd_all)
+               return bgp_show_ethernet_vpn(vty, NULL, bgp_show_type_normal,
+                                            NULL, SHOW_DISPLAY_OVERLAY,
+                                            use_json(argc, argv));
 
+       argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN", &idx_ext_community);
        ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
        if (!ret) {
                vty_out(vty, "%% Malformed Route Distinguisher\n");
@@ -2721,6 +2768,131 @@ static void evpn_show_route_rd(struct vty *vty, struct bgp *bgp,
        }
 }
 
+/*
+ * Display BGP EVPN routing table -- all RDs and MAC and/or IP
+ * (vty handler).  Only matching type-2 routes will be displayed.
+ */
+static void evpn_show_route_rd_all_macip(struct vty *vty, struct bgp *bgp,
+                                        struct ethaddr *mac, struct ipaddr *ip,
+                                        json_object *json)
+{
+       struct bgp_dest *rd_dest;
+       struct bgp_table *table;
+       struct bgp_dest *dest;
+       struct bgp_path_info *pi;
+       afi_t afi = AFI_L2VPN;
+       safi_t safi = SAFI_EVPN;
+       uint32_t prefix_cnt, path_cnt;
+       prefix_cnt = path_cnt = 0;
+
+       /* EVPN routing table is a 2-level table with the first level being
+        * the RD. We need to look in every RD we know about.
+        */
+       for (rd_dest = bgp_table_top(bgp->rib[afi][safi]); rd_dest;
+            rd_dest = bgp_route_next(rd_dest)) {
+               json_object *json_paths = NULL;  /* paths array for prefix */
+               json_object *json_prefix = NULL; /* prefix within an RD */
+               json_object *json_rd = NULL;     /* holds all prefixes for RD */
+               char rd_str[RD_ADDRSTRLEN];
+               char prefix_str[BUFSIZ];
+               int add_rd_to_json = 0;
+               struct prefix_evpn ep;
+               const struct prefix *rd_destp = bgp_dest_get_prefix(rd_dest);
+
+               table = bgp_dest_get_bgp_table_info(rd_dest);
+               if (table == NULL)
+                       continue;
+
+               prefix_rd2str((struct prefix_rd *)rd_destp, rd_str,
+                             sizeof(rd_str));
+
+               /* Construct an RT-2 from the user-supplied mac(ip),
+                * then search the l2vpn evpn table for it.
+                */
+               build_evpn_type2_prefix(&ep, mac, ip);
+               dest = bgp_afi_node_lookup(bgp->rib[afi][safi], afi, safi,
+                                          (struct prefix *)&ep,
+                                          (struct prefix_rd *)rd_destp);
+               if (!dest)
+                       continue;
+
+               if (json)
+                       json_rd = json_object_new_object();
+
+               const struct prefix *p = bgp_dest_get_prefix(dest);
+
+               prefix2str(p, prefix_str, sizeof(prefix_str));
+
+               pi = bgp_dest_get_bgp_path_info(dest);
+               if (pi) {
+                       /* RD header - per RD. */
+                       bgp_evpn_show_route_rd_header(vty, rd_dest, json_rd,
+                                                     rd_str, RD_ADDRSTRLEN);
+                       prefix_cnt++;
+               }
+
+               if (json) {
+                       json_prefix = json_object_new_object();
+                       json_paths = json_object_new_array();
+                       json_object_string_add(json_prefix, "prefix",
+                                              prefix_str);
+                       json_object_int_add(json_prefix, "prefixLen",
+                                           p->prefixlen);
+               } else
+                       /* Prefix and num paths displayed once per prefix. */
+                       route_vty_out_detail_header(
+                               vty, bgp, dest, (struct prefix_rd *)rd_destp,
+                               AFI_L2VPN, SAFI_EVPN, json_prefix);
+
+               /* For EVPN, the prefix is displayed for each path (to
+                * fit in with code that already exists).
+                */
+               for (; pi; pi = pi->next) {
+                       json_object *json_path = NULL;
+
+                       add_rd_to_json = 1;
+                       path_cnt++;
+
+                       if (json)
+                               json_path = json_object_new_array();
+
+                       route_vty_out_detail(vty, bgp, dest, pi, AFI_L2VPN,
+                                            SAFI_EVPN, RPKI_NOT_BEING_USED,
+                                            json_path);
+
+                       if (json)
+                               json_object_array_add(json_paths, json_path);
+                       else
+                               vty_out(vty, "\n");
+               }
+
+               if (json) {
+                       json_object_object_add(json_prefix, "paths",
+                                              json_paths);
+                       json_object_object_add(json_rd, prefix_str,
+                                              json_prefix);
+                       if (add_rd_to_json)
+                               json_object_object_add(json, rd_str, json_rd);
+                       else {
+                               json_object_free(json_rd);
+                               json_rd = NULL;
+                       }
+               }
+       }
+
+       if (json) {
+               json_object_int_add(json, "numPrefix", prefix_cnt);
+               json_object_int_add(json, "numPaths", path_cnt);
+       } else {
+               if (prefix_cnt == 0) {
+                       vty_out(vty, "No Matching EVPN prefixes exist\n");
+               } else {
+                       vty_out(vty, "Displayed %u prefixes (%u paths)\n",
+                               prefix_cnt, path_cnt);
+               }
+       }
+}
+
 /*
  * Display BGP EVPN routing table - all routes (vty handler).
  * If 'type' is non-zero, only routes matching that type are shown.
@@ -2833,6 +3005,7 @@ static void evpn_show_all_routes(struct vty *vty, struct bgp *bgp, int type,
                         */
                        for (; pi; pi = pi->next) {
                                json_object *json_path = NULL;
+
                                path_cnt++;
                                add_prefix_to_json = 1;
                                add_rd_to_json = 1;
@@ -4260,7 +4433,7 @@ DEFUN(show_bgp_l2vpn_evpn_route,
  */
 DEFUN(show_bgp_l2vpn_evpn_route_rd,
       show_bgp_l2vpn_evpn_route_rd_cmd,
-      "show bgp l2vpn evpn route rd ASN:NN_OR_IP-ADDRESS:NN [type "EVPN_TYPE_ALL_LIST"] [json]",
+      "show bgp l2vpn evpn route rd <ASN:NN_OR_IP-ADDRESS:NN|all> [type "EVPN_TYPE_ALL_LIST"] [json]",
       SHOW_STR
       BGP_STR
       L2VPN_HELP_STR
@@ -4268,6 +4441,7 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd,
       EVPN_RT_HELP_STR
       EVPN_RT_DIST_HELP_STR
       EVPN_ASN_IP_HELP_STR
+      "All VPN Route Distinguishers\n"
       EVPN_TYPE_HELP_STR
       EVPN_TYPE_ALL_LIST_HELP_STR
       JSON_STR)
@@ -4276,9 +4450,10 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd,
        int ret;
        struct prefix_rd prd;
        int type = 0;
-       int rd_idx = 0;
        bool uj = false;
        json_object *json = NULL;
+       int idx_ext_community = 0;
+       int rd_all = 0;
 
        bgp = bgp_get_evpn();
        if (!bgp)
@@ -4289,10 +4464,12 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd,
        if (uj)
                json = json_object_new_object();
 
-       /* get the RD */
-       if (argv_find(argv, argc, "rd", &rd_idx)) {
-               ret = str2prefix_rd(argv[rd_idx + 1]->arg, &prd);
-
+       argv_find(argv, argc, "all", &rd_all);
+       if (!rd_all) {
+               /* get the RD */
+               argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN",
+                         &idx_ext_community);
+               ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
                if (!ret) {
                        vty_out(vty, "%% Malformed Route Distinguisher\n");
                        return CMD_WARNING;
@@ -4302,7 +4479,10 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd,
        if (bgp_evpn_cli_parse_type(&type, argv, argc) < 0)
                return CMD_WARNING;
 
-       evpn_show_route_rd(vty, bgp, &prd, type, json);
+       if (rd_all)
+               evpn_show_all_routes(vty, bgp, type, json, 1);
+       else
+               evpn_show_route_rd(vty, bgp, &prd, type, json);
 
        if (uj) {
                vty_out(vty, "%s\n", json_object_to_json_string_ext(
@@ -4318,7 +4498,7 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd,
  */
 DEFUN(show_bgp_l2vpn_evpn_route_rd_macip,
       show_bgp_l2vpn_evpn_route_rd_macip_cmd,
-      "show bgp l2vpn evpn route rd ASN:NN_OR_IP-ADDRESS:NN mac WORD [ip WORD] [json]",
+      "show bgp l2vpn evpn route rd <ASN:NN_OR_IP-ADDRESS:NN|all> mac WORD [ip WORD] [json]",
       SHOW_STR
       BGP_STR
       L2VPN_HELP_STR
@@ -4326,6 +4506,7 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd_macip,
       EVPN_RT_HELP_STR
       EVPN_RT_DIST_HELP_STR
       EVPN_ASN_IP_HELP_STR
+      "All VPN Route Distinguishers\n"
       "MAC\n"
       "MAC address (e.g., 00:e0:ec:20:12:62)\n"
       "IP\n"
@@ -4337,11 +4518,12 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd_macip,
        struct prefix_rd prd;
        struct ethaddr mac;
        struct ipaddr ip;
-       int rd_idx = 0;
+       int idx_ext_community = 0;
        int mac_idx = 0;
        int ip_idx = 0;
        bool uj = false;
        json_object *json = NULL;
+       int rd_all = 0;
 
        memset(&mac, 0, sizeof(struct ethaddr));
        memset(&ip, 0, sizeof(struct ipaddr));
@@ -4356,8 +4538,11 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd_macip,
                json = json_object_new_object();
 
        /* get the prd */
-       if (argv_find(argv, argc, "rd", &rd_idx)) {
-               ret = str2prefix_rd(argv[rd_idx + 1]->arg, &prd);
+       argv_find(argv, argc, "all", &rd_all);
+       if (!rd_all) {
+               argv_find(argv, argc, "ASN:NN_OR_IP-ADDRESS:NN",
+                         &idx_ext_community);
+               ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
                if (!ret) {
                        vty_out(vty, "%% Malformed Route Distinguisher\n");
                        return CMD_WARNING;
@@ -4380,7 +4565,10 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd_macip,
                }
        }
 
-       evpn_show_route_rd_macip(vty, bgp, &prd, &mac, &ip, json);
+       if (rd_all)
+               evpn_show_route_rd_all_macip(vty, bgp, &mac, &ip, json);
+       else
+               evpn_show_route_rd_macip(vty, bgp, &prd, &mac, &ip, json);
 
        if (uj) {
                vty_out(vty, "%s\n", json_object_to_json_string_ext(
index d9acda8bd013861d849496ac42480461ef0a6c97..a902c63dea3d294e7b32a3d8bdd853686bfe9631 100644 (file)
@@ -2043,7 +2043,7 @@ int bgp_show_mpls_vpn(struct vty *vty, afi_t afi, struct prefix_rd *prd,
 
 DEFUN (show_bgp_ip_vpn_all_rd,
        show_bgp_ip_vpn_all_rd_cmd,
-       "show bgp "BGP_AFI_CMD_STR" vpn all [rd ASN:NN_OR_IP-ADDRESS:NN] [json]",
+       "show bgp "BGP_AFI_CMD_STR" vpn all [rd <ASN:NN_OR_IP-ADDRESS:NN|all>] [json]",
        SHOW_STR
        BGP_STR
        BGP_VPNVX_HELP_STR
@@ -2051,6 +2051,7 @@ DEFUN (show_bgp_ip_vpn_all_rd,
        "Display VPN NLRI specific information\n"
        "Display information for a route distinguisher\n"
        "VPN Route Distinguisher\n"
+       "All VPN Route Distinguishers\n"
        JSON_STR)
 {
        int ret;
@@ -2059,7 +2060,9 @@ DEFUN (show_bgp_ip_vpn_all_rd,
        int idx = 0;
 
        if (argv_find_and_parse_afi(argv, argc, &idx, &afi)) {
-               if (argv_find(argv, argc, "rd", &idx)) {
+               /* Constrain search if user supplies RD && RD != "all" */
+               if (argv_find(argv, argc, "rd", &idx)
+                   && strcmp(argv[idx + 1]->arg, "all")) {
                        ret = str2prefix_rd(argv[idx + 1]->arg, &prd);
                        if (!ret) {
                                vty_out(vty,
@@ -2080,26 +2083,28 @@ DEFUN (show_bgp_ip_vpn_all_rd,
 
 ALIAS(show_bgp_ip_vpn_all_rd,
       show_bgp_ip_vpn_rd_cmd,
-       "show bgp "BGP_AFI_CMD_STR" vpn rd ASN:NN_OR_IP-ADDRESS:NN [json]",
+       "show bgp "BGP_AFI_CMD_STR" vpn rd <ASN:NN_OR_IP-ADDRESS:NN|all> [json]",
        SHOW_STR
        BGP_STR
        BGP_VPNVX_HELP_STR
        "Display VPN NLRI specific information\n"
        "Display information for a route distinguisher\n"
        "VPN Route Distinguisher\n"
+       "All VPN Route Distinguishers\n"
        JSON_STR)
 
 #ifdef KEEP_OLD_VPN_COMMANDS
 DEFUN (show_ip_bgp_vpn_rd,
        show_ip_bgp_vpn_rd_cmd,
-       "show ip bgp "BGP_AFI_CMD_STR" vpn rd ASN:NN_OR_IP-ADDRESS:NN",
+       "show ip bgp "BGP_AFI_CMD_STR" vpn rd <ASN:NN_OR_IP-ADDRESS:NN|all>",
        SHOW_STR
        IP_STR
        BGP_STR
        BGP_AFI_HELP_STR
        "Address Family modifier\n"
        "Display information for a route distinguisher\n"
-       "VPN Route Distinguisher\n")
+       "VPN Route Distinguisher\n"
+       "All VPN Route Distinguishers\n")
 {
        int idx_ext_community = argc - 1;
        int ret;
@@ -2108,6 +2113,10 @@ DEFUN (show_ip_bgp_vpn_rd,
        int idx = 0;
 
        if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
+               if (!strcmp(argv[idx_ext_community]->arg, "all"))
+                       return bgp_show_mpls_vpn(vty, afi, NULL,
+                                                bgp_show_type_normal, NULL, 0,
+                                                0);
                ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
                if (!ret) {
                        vty_out(vty, "%% Malformed Route Distinguisher\n");
@@ -2157,13 +2166,14 @@ DEFUN (show_ip_bgp_vpn_all_tags,
 
 DEFUN (show_ip_bgp_vpn_rd_tags,
        show_ip_bgp_vpn_rd_tags_cmd,
-       "show [ip] bgp <vpnv4|vpnv6> rd ASN:NN_OR_IP-ADDRESS:NN tags",
+       "show [ip] bgp <vpnv4|vpnv6> rd <ASN:NN_OR_IP-ADDRESS:NN|all> tags",
        SHOW_STR
        IP_STR
        BGP_STR
        BGP_VPNVX_HELP_STR
        "Display information for a route distinguisher\n"
        "VPN Route Distinguisher\n"
+       "All VPN Route Distinguishers\n"
        "Display BGP tags for prefixes\n")
 {
        int idx_ext_community = 5;
@@ -2173,6 +2183,10 @@ DEFUN (show_ip_bgp_vpn_rd_tags,
        int idx = 0;
 
        if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
+               if (!strcmp(argv[idx_ext_community]->arg, "all"))
+                       return bgp_show_mpls_vpn(vty, afi, NULL,
+                                                bgp_show_type_normal, NULL, 1,
+                                                0);
                ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
                if (!ret) {
                        vty_out(vty, "%% Malformed Route Distinguisher\n");
@@ -2247,13 +2261,14 @@ DEFUN (show_ip_bgp_vpn_all_neighbor_routes,
 
 DEFUN (show_ip_bgp_vpn_rd_neighbor_routes,
        show_ip_bgp_vpn_rd_neighbor_routes_cmd,
-       "show [ip] bgp <vpnv4|vpnv6> rd ASN:NN_OR_IP-ADDRESS:NN neighbors A.B.C.D routes [json]",
+       "show [ip] bgp <vpnv4|vpnv6> rd <ASN:NN_OR_IP-ADDRESS:NN|all> neighbors A.B.C.D routes [json]",
        SHOW_STR
        IP_STR
        BGP_STR
        BGP_VPNVX_HELP_STR
        "Display information for a route distinguisher\n"
        "VPN Route Distinguisher\n"
+       "All VPN Route Distinguishers\n"
        "Detailed information on TCP and BGP neighbor connections\n"
        "Neighbor to display information about\n"
        "Display routes learned from neighbor\n"
@@ -2265,26 +2280,32 @@ DEFUN (show_ip_bgp_vpn_rd_neighbor_routes,
        union sockunion su;
        struct peer *peer;
        struct prefix_rd prd;
+       bool prefix_rd_all = false;
        bool uj = use_json(argc, argv);
        afi_t afi;
        int idx = 0;
 
        if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
-               ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
-               if (!ret) {
-                       if (uj) {
-                               json_object *json_no = NULL;
-                               json_no = json_object_new_object();
-                               json_object_string_add(
-                                       json_no, "warning",
-                                       "Malformed Route Distinguisher");
-                               vty_out(vty, "%s\n",
-                                       json_object_to_json_string(json_no));
-                               json_object_free(json_no);
-                       } else
-                               vty_out(vty,
-                                       "%% Malformed Route Distinguisher\n");
-                       return CMD_WARNING;
+               if (!strcmp(argv[idx_ext_community]->arg, "all"))
+                       prefix_rd_all = true;
+               else {
+                       ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
+                       if (!ret) {
+                               if (uj) {
+                                       json_object *json_no = NULL;
+                                       json_no = json_object_new_object();
+                                       json_object_string_add(
+                                               json_no, "warning",
+                                               "Malformed Route Distinguisher");
+                                       vty_out(vty, "%s\n",
+                                               json_object_to_json_string(
+                                                       json_no));
+                                       json_object_free(json_no);
+                               } else
+                                       vty_out(vty,
+                                               "%% Malformed Route Distinguisher\n");
+                               return CMD_WARNING;
+                       }
                }
 
                ret = str2sockunion(argv[idx_ipv4]->arg, &su);
@@ -2320,8 +2341,14 @@ DEFUN (show_ip_bgp_vpn_rd_neighbor_routes,
                        return CMD_WARNING;
                }
 
-               return bgp_show_mpls_vpn(vty, afi, &prd, bgp_show_type_neighbor,
-                                        &su, 0, uj);
+               if (prefix_rd_all)
+                       return bgp_show_mpls_vpn(vty, afi, NULL,
+                                                bgp_show_type_neighbor, &su, 0,
+                                                uj);
+               else
+                       return bgp_show_mpls_vpn(vty, afi, &prd,
+                                                bgp_show_type_neighbor, &su, 0,
+                                                uj);
        }
        return CMD_SUCCESS;
 }
@@ -2387,13 +2414,14 @@ DEFUN (show_ip_bgp_vpn_all_neighbor_advertised_routes,
 
 DEFUN (show_ip_bgp_vpn_rd_neighbor_advertised_routes,
        show_ip_bgp_vpn_rd_neighbor_advertised_routes_cmd,
-       "show [ip] bgp <vpnv4|vpnv6> rd ASN:NN_OR_IP-ADDRESS:NN neighbors A.B.C.D advertised-routes [json]",
+       "show [ip] bgp <vpnv4|vpnv6> rd <ASN:NN_OR_IP-ADDRESS:NN|all> neighbors A.B.C.D advertised-routes [json]",
        SHOW_STR
        IP_STR
        BGP_STR
        BGP_VPNVX_HELP_STR
        "Display information for a route distinguisher\n"
        "VPN Route Distinguisher\n"
+       "All VPN Route Distinguishers\n"
        "Detailed information on TCP and BGP neighbor connections\n"
        "Neighbor to display information about\n"
        "Display the routes advertised to a BGP neighbor\n"
@@ -2442,6 +2470,9 @@ DEFUN (show_ip_bgp_vpn_rd_neighbor_advertised_routes,
                        return CMD_WARNING;
                }
 
+               if (!strcmp(argv[idx_ext_community]->arg, "all"))
+                       return show_adj_route_vpn(vty, peer, NULL, AFI_IP,
+                                                 SAFI_MPLS_VPN, uj);
                ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
                if (!ret) {
                        if (uj) {
index f65a4be677d8979733775383b5f0bef0575917bf..2547439499a2127c148f15e778ad3235187ab143 100644 (file)
@@ -7405,6 +7405,76 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_soft_reconfiguration_modify,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/rmap-import",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/rmap-export",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/plist-import",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/plist-export",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/access-list-import",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/access-list-export",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/as-path-filter-list-import",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/as-path-filter-list-export",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/unsuppress-map-import",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/unsuppress-map-export",
+                       .cbs = {
+                               .modify = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_modify,
+                               .destroy = bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_destroy,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/route-reflector/route-reflector-client",
                        .cbs = {
@@ -10003,6 +10073,76 @@ const struct frr_yang_module_info frr_bgp_info = {
                                .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_soft_reconfiguration_modify,
                        }
                },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/rmap-import",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/rmap-export",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/plist-import",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/plist-export",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/access-list-import",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/access-list-export",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/as-path-filter-list-import",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/as-path-filter-list-export",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/unsuppress-map-import",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_destroy,
+                       }
+               },
+               {
+                       .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/unsuppress-map-export",
+                       .cbs = {
+                               .modify = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_modify,
+                               .destroy = bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_destroy,
+                       }
+               },
                {
                        .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-flowspec/route-reflector/route-reflector-client",
                        .cbs = {
index eb7725d3ddf7b9c2008b6f1fd118016224ba5075..57f379b6ccd51de31288f3dcd3176c1417d1d805 100644 (file)
@@ -3325,6 +3325,48 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_route_server
        struct nb_cb_modify_args *args);
 int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_soft_reconfiguration_modify(
        struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_reflector_route_reflector_client_modify(
        struct nb_cb_modify_args *args);
 int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_server_route_server_client_modify(
@@ -4529,6 +4571,46 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_route_server_route_
        struct nb_cb_modify_args *args);
 int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_soft_reconfiguration_modify(
        struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_destroy(
+       struct nb_cb_destroy_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_modify(
+       struct nb_cb_modify_args *args);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_destroy(
+       struct nb_cb_destroy_args *args);
 int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_flowspec_route_reflector_route_reflector_client_modify(
        struct nb_cb_modify_args *args);
 int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_flowspec_route_server_route_server_client_modify(
index 2351e7f1a379ab63f3c17df6260e4c53c89027ab..5a88bd08d969a724ef7eed628214c602f9a29653 100644 (file)
@@ -21848,8 +21848,7 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
        case NB_EV_APPLY:
-               /* TODO: implement me. */
-               break;
+               return bgp_neighbor_afi_safi_plist_modify(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -21863,8 +21862,7 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
        case NB_EV_APPLY:
-               /* TODO: implement me. */
-               break;
+               return bgp_neighbor_afi_safi_plist_destroy(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -22992,8 +22990,7 @@ int bgp_neighbors_neighbor_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_p
        case NB_EV_ABORT:
                return NB_OK;
        case NB_EV_APPLY:
-               bgp_neighbor_afi_safi_plist_modify(args, FILTER_IN);
-               break;
+               return bgp_neighbor_afi_safi_plist_modify(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -35539,78 +35536,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_soft_reconfi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/route-reflector/route-reflector-client
- */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_reflector_route_reflector_client_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_unnumbered_neighbor_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       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/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/route-server/route-server-client
- */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_server_route_server_client_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_unnumbered_neighbor_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
-                       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/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/soft-reconfiguration
- */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_soft_reconfiguration_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_unnumbered_neighbor_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
-                       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/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/rmap-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_rmap_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -35626,7 +35554,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_rmap_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -35644,9 +35572,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/rmap-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_rmap_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -35662,7 +35590,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_rmap_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -35680,35 +35608,33 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/plist-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_plist_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_unnumbered_neighbor_afi_safi_plist_modify(args,
-                                                                    FILTER_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_plist_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_unnumbered_neighbor_afi_safi_plist_destroy(
-                       args, FILTER_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -35716,35 +35642,33 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/plist-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_plist_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_unnumbered_neighbor_afi_safi_plist_modify(
-                       args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_plist_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_unnumbered_neighbor_afi_safi_plist_destroy(
-                       args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -35752,9 +35676,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/access-list-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_access_list_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -35769,7 +35693,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_access_list_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -35786,9 +35710,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/access-list-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_access_list_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -35803,7 +35727,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_access_list_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -35820,9 +35744,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/as-path-filter-list-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_as_path_filter_list_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -35837,7 +35761,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_as_path_filter_list_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -35854,9 +35778,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/as-path-filter-list-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_as_path_filter_list_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -35871,7 +35795,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_as_path_filter_list_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -35888,9 +35812,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/unsuppress-map-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_unsuppress_map_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -35905,7 +35829,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_unsuppress_map_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -35922,9 +35846,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/l2vpn-evpn/filter-config/unsuppress-map-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_unsuppress_map_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -35939,7 +35863,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_unsuppress_map_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -35956,9 +35880,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/route-reflector/route-reflector-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/route-reflector/route-reflector-client
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_reflector_route_reflector_client_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_reflector_route_reflector_client_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -35979,9 +35903,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_ref
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/route-server/route-server-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/route-server/route-server-client
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_server_route_server_client_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_route_server_route_server_client_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36002,9 +35926,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_ser
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/soft-reconfiguration
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/soft-reconfiguration
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_soft_reconfiguration_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_soft_reconfiguration_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36025,9 +35949,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_soft_reco
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/rmap-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_rmap_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_rmap_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36043,7 +35967,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_rmap_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_rmap_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36061,9 +35985,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/rmap-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_rmap_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_rmap_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36079,7 +36003,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_rmap_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_rmap_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36097,9 +36021,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/plist-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_plist_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_plist_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36115,7 +36039,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_plist_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_plist_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36133,9 +36057,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/plist-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_plist_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_plist_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36151,7 +36075,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_plist_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_plist_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36169,9 +36093,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/access-list-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_access_list_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_access_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36186,7 +36110,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_access_list_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_access_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36203,9 +36127,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/access-list-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_access_list_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_access_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36220,7 +36144,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_access_list_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_access_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36237,9 +36161,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/as-path-filter-list-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_as_path_filter_list_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_as_path_filter_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36254,7 +36178,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_as_path_filter_list_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_as_path_filter_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36271,9 +36195,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/as-path-filter-list-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_as_path_filter_list_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_as_path_filter_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36288,7 +36212,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_as_path_filter_list_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_as_path_filter_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36305,9 +36229,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/unsuppress-map-import
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_unsuppress_map_import_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_unsuppress_map_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36322,7 +36246,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_unsuppress_map_import_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_unsuppress_map_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36339,9 +36263,9 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec/filter-config/unsuppress-map-export
  */
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_unsuppress_map_export_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_unsuppress_map_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36356,7 +36280,7 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        return NB_OK;
 }
 
-int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_unsuppress_map_export_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv4_flowspec_filter_config_unsuppress_map_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36371,47 +36295,23 @@ int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_co
        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
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/route-reflector/route-reflector-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_add_paths_path_type_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_reflector_route_reflector_client_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:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -36420,32 +36320,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_add_paths_path_ty
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/as-path-options/allow-own-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/route-server/route-server-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_allow_own_as_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_route_server_route_server_client_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:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_allow_own_as_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/soft-reconfiguration
+ */
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_soft_reconfiguration_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:
-               /* TODO: implement me. */
+               return bgp_unnumbered_neighbor_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -36454,33 +36366,35 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/as-path-options/allow-own-origin-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_allow_own_origin_as_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_rmap_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_unnumbered_neighbor_afi_safi_rmap_modify(args,
+                                                                   RMAP_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_allow_own_origin_as_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_rmap_import_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;
+       case NB_EV_APPLY:
+               return bgp_unnumbered_neighbor_afi_safi_rmap_destroy(args,
+                                                                    RMAP_IN);
        }
 
        return NB_OK;
@@ -36488,71 +36402,35 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/as-path-options/replace-peer-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_replace_peer_as_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_rmap_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_OVERRIDE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
                break;
+       case NB_EV_APPLY:
+               return bgp_unnumbered_neighbor_afi_safi_rmap_modify(args,
+                                                                   RMAP_OUT);
        }
 
        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/default-originate
- */
-void bgp_peer_group_afi_safi_default_originate_apply_finish(
-       struct nb_cb_apply_finish_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;
-
-       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)
-               return;
-
-       bgp_peer_afi_safi_default_originate_apply(args, peer, afi, safi);
-}
-
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/default-originate/originate
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_default_originate_originate_modify(
-       struct nb_cb_modify_args *args)
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_rmap_export_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;
+       case NB_EV_APPLY:
+               return bgp_unnumbered_neighbor_afi_safi_rmap_destroy(args,
+                                                                    RMAP_OUT);
        }
 
        return NB_OK;
@@ -36560,140 +36438,81 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_default_originate
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/default-originate/route-map
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/plist-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_default_originate_route_map_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_plist_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_unnumbered_neighbor_afi_safi_plist_modify(args,
+                                                                    FILTER_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_default_originate_route_map_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_plist_import_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;
+       case NB_EV_APPLY:
+               return bgp_unnumbered_neighbor_afi_safi_plist_destroy(
+                       args, FILTER_IN);
        }
 
        return NB_OK;
 }
 
-static int bgp_peer_group_afi_safi_prefix_limit_list_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 direction;
-
-       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)
-               return NB_ERR_INCONSISTENCY;
-
-       direction = yang_dnode_get_enum(args->dnode, "./direction");
-
-       switch (direction) {
-       case 1:
-               peer_maximum_prefix_unset(peer, afi, safi);
-               break;
-       case 2:
-               UNSET_FLAG(peer->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX_OUT);
-               peer->pmax_out[afi][safi] = 0;
-               break;
-       }
-
-       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/prefix-limit/direction-list
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/plist-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_create(
-       struct nb_cb_create_args *args)
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_plist_export_modify(
+       struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_unnumbered_neighbor_afi_safi_plist_modify(
+                       args, FILTER_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_plist_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               return NB_OK;
+               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
+               return bgp_unnumbered_neighbor_afi_safi_plist_destroy(
+                       args, FILTER_OUT);
        }
 
        return NB_OK;
 }
 
-void bgp_peer_group_afi_safi_prefix_limit_apply_finish(
-       struct nb_cb_apply_finish_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;
-
-       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)
-               return;
-
-       bgp_peer_afi_safi_maximum_prefix_set(args, peer, afi, safi);
-}
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/max-prefixes
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/access-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_max_prefixes_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_access_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36708,12 +36527,8 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
        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/prefix-limit/direction-list/force-check
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_force_check_modify(
-       struct nb_cb_modify_args *args)
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_access_list_import_destroy(
+       struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -36729,9 +36544,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_warning_only_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_access_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36746,7 +36561,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_warning_only_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_access_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36763,9 +36578,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_restart_timer_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_as_path_filter_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36780,7 +36595,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_as_path_filter_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36797,9 +36612,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_as_path_filter_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36814,7 +36629,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_as_path_filter_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36831,9 +36646,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_unsuppress_map_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36848,7 +36663,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_unsuppress_map_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36865,9 +36680,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/tr-restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv6-flowspec/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_unsuppress_map_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36882,7 +36697,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
+int bgp_neighbors_unnumbered_neighbor_afi_safis_afi_safi_ipv6_flowspec_filter_config_unsuppress_map_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36897,11 +36712,39 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
        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/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
+ * /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
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_add_paths_path_type_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36916,8 +36759,1016 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/as-path-options/allow-own-as
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_allow_own_as_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_allow_own_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/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/as-path-options/allow-own-origin-as
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_allow_own_origin_as_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_allow_own_origin_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/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/as-path-options/replace-peer-as
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_as_path_options_replace_peer_as_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       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/unnumbered-neighbor/afi-safis/afi-safi/ipv4-unicast/default-originate
+ */
+void bgp_peer_group_afi_safi_default_originate_apply_finish(
+       struct nb_cb_apply_finish_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;
+
+       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)
+               return;
+
+       bgp_peer_afi_safi_default_originate_apply(args, peer, afi, safi);
+}
+
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/default-originate/originate
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_default_originate_originate_modify(
+       struct nb_cb_modify_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/afi-safis/afi-safi/ipv4-unicast/default-originate/route-map
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_default_originate_route_map_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_default_originate_route_map_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;
+}
+
+static int bgp_peer_group_afi_safi_prefix_limit_list_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 direction;
+
+       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)
+               return NB_ERR_INCONSISTENCY;
+
+       direction = yang_dnode_get_enum(args->dnode, "./direction");
+
+       switch (direction) {
+       case 1:
+               peer_maximum_prefix_unset(peer, afi, safi);
+               break;
+       case 2:
+               UNSET_FLAG(peer->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX_OUT);
+               peer->pmax_out[afi][safi] = 0;
+               break;
+       }
+
+       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/prefix-limit/direction-list
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_create(
+       struct nb_cb_create_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_prefix_limit_list_destroy(args);
+       }
+
+       return NB_OK;
+}
+
+void bgp_peer_group_afi_safi_prefix_limit_apply_finish(
+       struct nb_cb_apply_finish_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;
+
+       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)
+               return;
+
+       bgp_peer_afi_safi_maximum_prefix_set(args, peer, afi, safi);
+}
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/max-prefixes
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_max_prefixes_modify(
+       struct nb_cb_modify_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/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/force-check
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_force_check_modify(
+       struct nb_cb_modify_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/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/warning-only
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_warning_only_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_warning_only_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/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/restart-timer
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_restart_timer_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_restart_timer_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/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_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/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_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/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/tr-restart-timer
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tr_restart_timer_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/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_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/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/tw-warning-only
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tw_warning_only_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/afi-safis/afi-safi/ipv4-unicast/nexthop-self/next-hop-self
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_nexthop_self_next_hop_self_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/nexthop-self/next-hop-self-force
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_nexthop_self_next_hop_self_force_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/private-as/remove-private-as-all
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove_private_as_all_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/private-as/remove-private-as-all-replace
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove_private_as_all_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_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/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/private-as/remove-private-as
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove_private_as_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_peer_group_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/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/private-as/remove-private-as-replace
+ */
+int bgp_peer_groups_peer_group_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_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
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_weight_weight_attribute_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_peer_group_afi_safi_weight_modify(args);
+
+               break;
+       }
+
+       return NB_OK;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_weight_weight_attribute_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_weight_destroy(args);
+
+               break;
+       }
+
+       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/route-reflector/route-reflector-client
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_route_reflector_route_reflector_client_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/route-server/route-server-client
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_route_server_route_server_client_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/send-community/send-community
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_send_community_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/send-community/send-ext-community
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_send_ext_community_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/send-community/send-large-community
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_send_large_community_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/soft-reconfiguration
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_soft_reconfiguration_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/attr-unchanged/as-path-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_as_path_unchanged_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/attr-unchanged/next-hop-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_next_hop_unchanged_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/attr-unchanged/med-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_med_unchanged_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
+       }
+
+       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/orf-capability/orf-send
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_send_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_send_destroy(
+       struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -36933,9 +37784,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/prefix-limit/direction-list/options/tw-warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/orf-capability/orf-receive
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_receive_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -36950,7 +37801,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_receive_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -36967,91 +37818,123 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/nexthop-self/next-hop-self
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/orf-capability/orf-both
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_nexthop_self_next_hop_self_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_both_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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/nexthop-self/next-hop-self-force
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_nexthop_self_next_hop_self_force_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_both_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
+static int bgp_peer_group_afi_safi_rmap_modify(struct nb_cb_modify_args *args,
+                                              int direct)
+{
+       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;
+       const char *name_str;
+       struct route_map *route_map;
+       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);
+
+       name_str = yang_dnode_get_string(args->dnode, NULL);
+       route_map = route_map_lookup_by_name(name_str);
+       ret = peer_route_map_set(peer, afi, safi, direct, name_str, route_map);
+
+       return bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+}
+
+static int bgp_peer_group_afi_safi_rmap_destroy(struct nb_cb_destroy_args *args,
+                                               int direct)
+{
+       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_route_map_unset(peer, afi, safi, direct);
+
+       return 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/afi-safis/afi-safi/ipv4-unicast/private-as/remove-private-as-all
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove_private_as_all_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_rmap_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
                break;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
        }
 
        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/private-as/remove-private-as-all-replace
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove_private_as_all_replace_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_rmap_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
                break;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -37059,51 +37942,40 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/private-as/remove-private-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove_private_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_rmap_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
                break;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
        }
 
        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/private-as/remove-private-as-replace
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_private_as_remove_private_as_replace_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_rmap_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
                break;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
 }
 
-static int bgp_peer_group_afi_safi_weight_modify(struct nb_cb_modify_args *args)
+static int bgp_peer_group_afi_safi_plist_modify(struct nb_cb_modify_args *args,
+                                               int direct)
 {
        struct bgp *bgp;
        const char *peer_str;
@@ -37111,31 +37983,28 @@ static int bgp_peer_group_afi_safi_weight_modify(struct nb_cb_modify_args *args)
        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;
+       const char *name_str;
 
        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");
+       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);
 
-       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)
+       name_str = yang_dnode_get_string(args->dnode, NULL);
+       if (peer_prefix_list_set(peer, afi, safi, direct, name_str) < 0)
                return NB_ERR_INCONSISTENCY;
 
        return NB_OK;
 }
 
 static int
-bgp_peer_group_afi_safi_weight_destroy(struct nb_cb_destroy_args *args)
+bgp_peer_group_afi_safi_plist_destroy(struct nb_cb_destroy_args *args,
+                                     int direct)
 {
        struct bgp *bgp;
        const char *peer_str;
@@ -37145,7 +38014,6 @@ bgp_peer_group_afi_safi_weight_destroy(struct nb_cb_destroy_args *args)
        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");
@@ -37155,45 +38023,142 @@ bgp_peer_group_afi_safi_weight_destroy(struct nb_cb_destroy_args *args)
        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;
+       if (peer_prefix_list_unset(peer, afi, safi, direct) < 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/filter-config/plist-import
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_plist_import_modify(
+       struct nb_cb_modify_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               break;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
+       }
+
+       return NB_OK;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_plist_import_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               break;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+       }
+
+       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/filter-config/plist-export
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_plist_export_modify(
+       struct nb_cb_modify_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               break;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
+       }
+
+       return NB_OK;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_plist_export_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               break;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
+       }
+
+       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/filter-config/access-list-import
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_access_list_import_modify(
+       struct nb_cb_modify_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;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_access_list_import_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/afi-safis/afi-safi/ipv4-unicast/weight/weight-attribute
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_weight_weight_attribute_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_access_list_export_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_peer_group_afi_safi_weight_modify(args);
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_weight_weight_attribute_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_access_list_export_destroy(
        struct nb_cb_destroy_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_peer_group_afi_safi_weight_destroy(args);
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -37202,44 +38167,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_weight_weight_att
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/route-reflector/route-reflector-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_route_reflector_route_reflector_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_path_filter_list_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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/route-server/route-server-client
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_route_server_route_server_client_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_path_filter_list_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -37248,44 +38201,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_route_server_rout
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/send-community/send-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_send_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_path_filter_list_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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/send-community/send-ext-community
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_send_ext_community_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_path_filter_list_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -37294,44 +38235,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_se
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/send-community/send-large-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_send_community_send_large_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_unsuppress_map_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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/soft-reconfiguration
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_soft_reconfiguration_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_unsuppress_map_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -37340,21 +38269,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_soft_reconfigurat
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/attr-unchanged/as-path-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_as_path_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_unsuppress_map_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_PATH_UNCHANGED,
-                       yang_dnode_get_bool(args->dnode, NULL));
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
 
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_unsuppress_map_export_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;
        }
 
@@ -37363,21 +38303,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_as
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/attr-unchanged/next-hop-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/nexthop-local-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_next_hop_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_local_unchanged_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -37386,21 +38322,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_ne
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/attr-unchanged/med-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/add-paths/path-type
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_med_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_add_paths_path_type_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_MED_UNCHANGED,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -37409,9 +38341,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_attr_unchanged_me
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/orf-capability/orf-send
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/as-path-options/allow-own-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_send_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_allow_own_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -37426,7 +38358,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_or
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_send_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_allow_own_as_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -37443,9 +38375,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_or
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/orf-capability/orf-receive
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/as-path-options/allow-own-origin-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_receive_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_allow_own_origin_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -37460,7 +38392,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_or
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_receive_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_allow_own_origin_as_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -37477,25 +38409,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_or
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/orf-capability/orf-both
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/as-path-options/replace-peer-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_both_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_replace_peer_as_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_orf_both_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/default-originate/originate
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_default_originate_originate_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -37509,91 +38449,104 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_orf_capability_or
        return NB_OK;
 }
 
-static int bgp_peer_group_afi_safi_rmap_modify(struct nb_cb_modify_args *args,
-                                              int direct)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/default-originate/route-map
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_default_originate_route_map_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;
-       afi_t afi;
-       safi_t safi;
-       const char *name_str;
-       struct route_map *route_map;
-       int ret;
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               /* TODO: implement me. */
+               break;
+       }
 
-       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);
+       return NB_OK;
+}
 
-       name_str = yang_dnode_get_string(args->dnode, NULL);
-       route_map = route_map_lookup_by_name(name_str);
-       ret = peer_route_map_set(peer, afi, safi, direct, name_str, route_map);
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_default_originate_route_map_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 bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+       return NB_OK;
 }
 
-static int bgp_peer_group_afi_safi_rmap_destroy(struct nb_cb_destroy_args *args,
-                                               int direct)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/attr-unchanged/as-path-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_as_path_unchanged_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;
-       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);
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+               return NB_OK;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
-       ret = peer_route_map_unset(peer, afi, safi, direct);
+               break;
+       }
 
-       return bgp_nb_errmsg_return(args->errmsg, args->errmsg_len, ret);
+       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/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/attr-unchanged/next-hop-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_rmap_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_next_hop_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_rmap_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/attr-unchanged/med-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_med_unchanged_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -37601,122 +38554,101 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_rma
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/orf-capability/orf-send
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_rmap_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_send_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_rmap_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_send_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-static int bgp_peer_group_afi_safi_plist_modify(struct nb_cb_modify_args *args,
-                                               int direct)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/orf-capability/orf-receive
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_receive_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;
-       afi_t afi;
-       safi_t safi;
-       const char *name_str;
-
-       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);
-
-       name_str = yang_dnode_get_string(args->dnode, NULL);
-       if (peer_prefix_list_set(peer, afi, safi, direct, name_str) < 0)
-               return NB_ERR_INCONSISTENCY;
+       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;
 }
 
-static int
-bgp_peer_group_afi_safi_plist_destroy(struct nb_cb_destroy_args *args,
-                                     int direct)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_receive_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;
-
-       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_prefix_list_unset(peer, afi, safi, direct) < 0)
-               return NB_ERR_INCONSISTENCY;
+       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/afi-safis/afi-safi/ipv4-unicast/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/orf-capability/orf-both
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_plist_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_both_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_plist_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_both_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -37724,33 +38656,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_pli
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_plist_export_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_create(
+       struct nb_cb_create_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_plist_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
+               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
        }
 
        return NB_OK;
@@ -37758,9 +38690,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_pli
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/max-prefixes
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_access_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_max_prefixes_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -37775,8 +38707,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_acc
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_access_list_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/force-check
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_force_check_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -37792,9 +38728,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_acc
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_access_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -37809,7 +38745,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_acc
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_access_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -37826,9 +38762,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_acc
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_path_filter_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -37843,7 +38779,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_path_filter_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -37860,9 +38796,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_path_filter_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -37877,7 +38813,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_path_filter_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -37894,9 +38830,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_as_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_unsuppress_map_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -37911,7 +38847,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_uns
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_unsuppress_map_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -37928,9 +38864,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_uns
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-unicast/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/tr-restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_unsuppress_map_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -37945,7 +38881,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_uns
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_unsuppress_map_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -37962,9 +38898,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_unicast_filter_config_uns
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/nexthop-local-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_local_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -37979,12 +38915,8 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_local_unc
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/add-paths/path-type
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_add_paths_path_type_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+       struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -38000,9 +38932,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_add_paths_path_ty
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/as-path-options/allow-own-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/tw-warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_allow_own_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38017,7 +38949,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_allow_own_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -38034,32 +38966,67 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/as-path-options/allow-own-origin-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/nexthop-self/next-hop-self
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_allow_own_origin_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_self_next_hop_self_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_allow_own_origin_as_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/nexthop-self/next-hop-self-force
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_self_next_hop_self_force_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:
-               /* 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;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/private-as/remove-private-as-all
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove_private_as_all_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_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -38068,9 +39035,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/as-path-options/replace-peer-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/private-as/remove-private-as-all-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_replace_peer_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove_private_as_all_replace_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38080,7 +39047,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_r
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_OVERRIDE,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -38091,17 +39058,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_as_path_options_r
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/default-originate/originate
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/private-as/remove-private-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_default_originate_originate_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove_private_as_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:
-               /* 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;
        }
 
@@ -38110,32 +39081,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_default_originate
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/default-originate/route-map
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/private-as/remove-private-as-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_default_originate_route_map_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_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:
-               /* 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;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_default_originate_route_map_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/route-reflector/route-reflector-client
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_route_reflector_route_reflector_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -38144,9 +39127,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_default_originate
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/attr-unchanged/as-path-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/route-server/route-server-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_as_path_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_route_server_route_server_client_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38156,7 +39139,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_as
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       args, PEER_FLAG_RSERVER_CLIENT,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -38167,9 +39150,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_as
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/attr-unchanged/next-hop-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/send-community/send-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_next_hop_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_send_community_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38179,7 +39162,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_ne
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       args, PEER_FLAG_SEND_COMMUNITY,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -38190,9 +39173,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_ne
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/attr-unchanged/med-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/send-community/send-ext-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_med_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_send_ext_community_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38202,7 +39185,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_me
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_MED_UNCHANGED,
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -38213,32 +39196,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_attr_unchanged_me
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/orf-capability/orf-send
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/send-community/send-large-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_send_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_send_large_community_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_send_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/soft-reconfiguration
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_soft_reconfiguration_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -38247,32 +39242,36 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_or
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/orf-capability/orf-receive
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/weight/weight-attribute
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_receive_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_weight_weight_attribute_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_receive_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_weight_weight_attribute_destroy(
        struct nb_cb_destroy_args *args)
 {
        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. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -38281,33 +39280,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_or
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/orf-capability/orf-both
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_both_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rmap_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_orf_both_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rmap_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -38315,33 +39314,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_orf_capability_or
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_create(
-       struct nb_cb_create_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rmap_export_modify(
+       struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rmap_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               return NB_OK;
+               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -38349,37 +39348,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/max-prefixes
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/plist-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_max_prefixes_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_plist_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/force-check
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_force_check_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_plist_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -38387,33 +39382,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/plist-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_plist_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_plist_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
        }
 
        return NB_OK;
@@ -38421,9 +39416,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/access-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_access_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38438,7 +39433,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_access_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -38455,9 +39450,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_access_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38472,7 +39467,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_access_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -38489,9 +39484,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_path_filter_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38506,7 +39501,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_path_filter_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -38523,9 +39518,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/tr-restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_path_filter_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38540,7 +39535,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_path_filter_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -38557,9 +39552,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_unsuppress_map_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38574,7 +39569,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_unsuppress_map_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -38591,9 +39586,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/prefix-limit/direction-list/options/tw-warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_unsuppress_map_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38608,7 +39603,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_unsuppress_map_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -38625,21 +39620,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_prefix_limit_dire
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/nexthop-self/next-hop-self
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/add-paths/path-type
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_self_next_hop_self_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_add_paths_path_type_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -38648,44 +39639,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_self_next
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/nexthop-self/next-hop-self-force
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/as-path-options/allow-own-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_nexthop_self_next_hop_self_force_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_allow_own_as_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/private-as/remove-private-as-all
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove_private_as_all_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_allow_own_as_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -38694,44 +39673,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/private-as/remove-private-as-all-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/as-path-options/allow-own-origin-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove_private_as_all_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_allow_own_origin_as_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/private-as/remove-private-as
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove_private_as_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_allow_own_origin_as_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -38740,9 +39707,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/private-as/remove-private-as-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/as-path-options/replace-peer-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove_private_as_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_replace_peer_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38752,7 +39719,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       args, PEER_FLAG_AS_OVERRIDE,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -38763,21 +39730,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_private_as_remove
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/route-reflector/route-reflector-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/default-originate/originate
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_route_reflector_route_reflector_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_default_originate_originate_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -38786,44 +39749,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_route_reflector_r
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/route-server/route-server-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/default-originate/route-map
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_route_server_route_server_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_default_originate_route_map_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/send-community/send-community
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_send_community_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_default_originate_route_map_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -38832,9 +39783,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_se
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/send-community/send-ext-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/attr-unchanged/as-path-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_send_ext_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_as_path_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38844,7 +39795,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_se
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -38855,9 +39806,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_se
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/send-community/send-large-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/attr-unchanged/next-hop-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_send_large_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_next_hop_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38867,7 +39818,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_se
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -38878,9 +39829,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_send_community_se
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/soft-reconfiguration
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/attr-unchanged/med-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_soft_reconfiguration_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_med_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -38890,7 +39841,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_soft_reconfigurat
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
+                       args, PEER_FLAG_MED_UNCHANGED,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -38901,36 +39852,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_soft_reconfigurat
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/weight/weight-attribute
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/orf-capability/orf-send
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_weight_weight_attribute_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_send_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_peer_group_afi_safi_weight_modify(args);
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_weight_weight_attribute_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_send_destroy(
        struct nb_cb_destroy_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_peer_group_afi_safi_weight_destroy(args);
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -38939,33 +39886,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_weight_weight_att
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/orf-capability/orf-receive
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rmap_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_receive_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rmap_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_receive_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -38973,33 +39920,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rma
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/orf-capability/orf-both
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rmap_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_both_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rmap_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_both_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -39007,33 +39954,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_rma
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_plist_import_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_create(
+       struct nb_cb_create_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_plist_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
        }
 
        return NB_OK;
@@ -39041,33 +39988,37 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_pli
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/max-prefixes
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_plist_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_max_prefixes_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_plist_export_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/force-check
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_force_check_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -39075,9 +40026,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_pli
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_access_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39092,7 +40043,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_acc
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_access_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39109,9 +40060,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_acc
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_access_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39126,7 +40077,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_acc
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_access_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39143,9 +40094,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_acc
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_path_filter_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39160,7 +40111,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_path_filter_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39177,9 +40128,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_path_filter_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39194,7 +40145,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_path_filter_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39211,9 +40162,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_as_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/tr-restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_unsuppress_map_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39228,7 +40179,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_uns
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_unsuppress_map_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39245,9 +40196,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_uns
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-unicast/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_unsuppress_map_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39262,7 +40213,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_uns
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_unsuppress_map_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39279,28 +40230,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_unicast_filter_config_uns
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/add-paths/path-type
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_add_paths_path_type_modify(
-       struct nb_cb_modify_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/afi-safis/afi-safi/ipv4-multicast/as-path-options/allow-own-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/tw-warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_allow_own_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tw_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39315,7 +40247,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_allow_own_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39332,32 +40264,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/as-path-options/allow-own-origin-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/nexthop-self/next-hop-self
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_allow_own_origin_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_nexthop_self_next_hop_self_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:
-               /* TODO: implement me. */
-               break;
-       }
-
-       return NB_OK;
-}
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_allow_own_origin_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;
        }
 
@@ -39366,9 +40287,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/as-path-options/replace-peer-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/nexthop-self/next-hop-self-force
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options_replace_peer_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_nexthop_self_next_hop_self_force_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39378,7 +40299,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_OVERRIDE,
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -39389,17 +40310,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_as_path_options
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/default-originate/originate
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/private-as/remove-private-as-all
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_default_originate_originate_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remove_private_as_all_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:
-               /* 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;
        }
 
@@ -39408,32 +40333,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_default_origina
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/default-originate/route-map
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/private-as/remove-private-as-all-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_default_originate_route_map_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remove_private_as_all_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_default_originate_route_map_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/private-as/remove-private-as
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remove_private_as_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:
-               /* 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;
        }
 
@@ -39442,9 +40379,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_default_origina
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/attr-unchanged/as-path-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/private-as/remove-private-as-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_as_path_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remove_private_as_replace_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39454,7 +40391,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -39465,9 +40402,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/attr-unchanged/next-hop-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/route-reflector/route-reflector-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_next_hop_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_route_reflector_route_reflector_client_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39477,7 +40414,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -39488,9 +40425,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/attr-unchanged/med-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/route-server/route-server-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_med_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_route_server_route_server_client_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39500,7 +40437,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_MED_UNCHANGED,
+                       args, PEER_FLAG_RSERVER_CLIENT,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -39511,32 +40448,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_attr_unchanged_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/orf-capability/orf-send
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/send-community/send-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_send_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_send_community_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_send_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/send-community/send-ext-community
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_send_ext_community_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:
-               /* 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;
        }
 
@@ -39545,32 +40494,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/orf-capability/orf-receive
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/send-community/send-large-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_receive_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_send_large_community_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_receive_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/soft-reconfiguration
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_soft_reconfiguration_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -39579,32 +40540,36 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/orf-capability/orf-both
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/weight/weight-attribute
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_both_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_attribute_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_orf_both_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_attribute_destroy(
        struct nb_cb_destroy_args *args)
 {
        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. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -39613,33 +40578,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_orf_capability_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_create(
-       struct nb_cb_create_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_rmap_import_modify(
+       struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_rmap_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               return NB_OK;
+               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -39647,37 +40612,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/max-prefixes
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_max_prefixes_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_rmap_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
        }
 
        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-multicast/prefix-limit/direction-list/force-check
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_force_check_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_rmap_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -39685,33 +40646,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/plist-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_plist_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_plist_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -39719,33 +40680,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/plist-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_plist_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_plist_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
        }
 
        return NB_OK;
@@ -39753,9 +40714,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/access-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_access_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39770,7 +40731,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_access_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39787,9 +40748,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_access_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39804,7 +40765,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_access_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39821,9 +40782,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/tr-restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_as_path_filter_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39838,7 +40799,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_as_path_filter_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39855,9 +40816,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_as_path_filter_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39872,7 +40833,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_as_path_filter_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39889,9 +40850,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/prefix-limit/direction-list/options/tw-warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tw_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_unsuppress_map_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -39906,7 +40867,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_unsuppress_map_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -39923,44 +40884,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/nexthop-self/next-hop-self
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_nexthop_self_next_hop_self_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_unsuppress_map_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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-multicast/nexthop-self/next-hop-self-force
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_nexthop_self_next_hop_self_force_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_unsuppress_map_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -39969,21 +40918,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_nexthop_self_ne
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/private-as/remove-private-as-all
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/add-paths/path-type
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remove_private_as_all_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_add_paths_path_type_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -39992,44 +40937,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remo
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/private-as/remove-private-as-all-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/as-path-options/allow-own-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remove_private_as_all_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_allow_own_as_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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-multicast/private-as/remove-private-as
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remove_private_as_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_allow_own_as_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -40038,44 +40971,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remo
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/private-as/remove-private-as-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/as-path-options/allow-own-origin-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_private_as_remove_private_as_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_allow_own_origin_as_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
-
-       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-multicast/route-reflector/route-reflector-client
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_route_reflector_route_reflector_client_modify(
-       struct nb_cb_modify_args *args)
+
+       return NB_OK;
+}
+
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_allow_own_origin_as_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -40084,9 +41005,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_route_reflector
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/route-server/route-server-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/as-path-options/replace-peer-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_route_server_route_server_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_replace_peer_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40096,7 +41017,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_route_server_ro
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
+                       args, PEER_FLAG_AS_OVERRIDE,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -40107,21 +41028,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_route_server_ro
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/send-community/send-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/default-originate/originate
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_send_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_default_originate_originate_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -40130,44 +41047,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/send-community/send-ext-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/default-originate/route-map
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_send_ext_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_default_originate_route_map_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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-multicast/send-community/send-large-community
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_send_large_community_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_default_originate_route_map_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -40176,9 +41081,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_send_community_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/soft-reconfiguration
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/attr-unchanged/as-path-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_soft_reconfiguration_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_as_path_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40188,7 +41093,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_soft_reconfigur
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -40199,9 +41104,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_soft_reconfigur
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/weight/weight-attribute
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/attr-unchanged/next-hop-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_attribute_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_next_hop_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40210,7 +41115,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_a
        case NB_EV_ABORT:
                return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_weight_modify(args);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
                break;
        }
@@ -40218,8 +41125,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_attribute_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/attr-unchanged/med-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_med_unchanged_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -40227,7 +41138,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_a
        case NB_EV_ABORT:
                return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_weight_destroy(args);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
                break;
        }
@@ -40237,33 +41150,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_weight_weight_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/orf-capability/orf-send
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_rmap_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_send_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_rmap_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_send_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -40271,33 +41184,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_r
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/orf-capability/orf-receive
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_rmap_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_receive_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_rmap_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_receive_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -40305,33 +41218,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_r
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/orf-capability/orf-both
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_plist_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_both_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_plist_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_both_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -40339,33 +41252,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_p
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_plist_export_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_create(
+       struct nb_cb_create_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_plist_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
+               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
        }
 
        return NB_OK;
@@ -40373,9 +41286,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_p
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/max-prefixes
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_access_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_max_prefixes_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40390,8 +41303,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_access_list_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/force-check
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_force_check_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -40407,9 +41324,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_access_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40424,7 +41341,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_access_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -40441,9 +41358,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_as_path_filter_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40458,7 +41375,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_as_path_filter_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -40475,9 +41392,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_as_path_filter_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40492,7 +41409,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_as_path_filter_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -40509,9 +41426,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_unsuppress_map_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40526,7 +41443,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_u
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_unsuppress_map_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -40543,9 +41460,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_u
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-multicast/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/tr-restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_unsuppress_map_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40560,7 +41477,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_u
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_unsuppress_map_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -40577,28 +41494,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_multicast_filter_config_u
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/add-paths/path-type
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_add_paths_path_type_modify(
-       struct nb_cb_modify_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/afi-safis/afi-safi/ipv6-multicast/as-path-options/allow-own-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_allow_own_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40613,7 +41511,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_allow_own_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -40630,9 +41528,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/as-path-options/allow-own-origin-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/tw-warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_allow_own_origin_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tw_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40647,7 +41545,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_allow_own_origin_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -40664,9 +41562,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/as-path-options/replace-peer-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/nexthop-self/next-hop-self
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options_replace_peer_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_nexthop_self_next_hop_self_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40676,7 +41574,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_OVERRIDE,
+                       args, PEER_FLAG_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -40687,17 +41585,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_as_path_options
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/default-originate/originate
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/nexthop-self/next-hop-self-force
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_default_originate_originate_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_nexthop_self_next_hop_self_force_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:
-               /* 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;
        }
 
@@ -40706,32 +41608,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_default_origina
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/default-originate/route-map
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/private-as/remove-private-as-all
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_default_originate_route_map_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remove_private_as_all_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:
-               /* TODO: implement me. */
-               break;
-       }
-
-       return NB_OK;
-}
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_default_originate_route_map_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;
        }
 
@@ -40740,9 +41631,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_default_origina
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/attr-unchanged/as-path-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/private-as/remove-private-as-all-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_as_path_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remove_private_as_all_replace_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40752,7 +41643,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -40763,9 +41654,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/attr-unchanged/next-hop-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/private-as/remove-private-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_next_hop_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remove_private_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40775,7 +41666,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -40786,9 +41677,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/attr-unchanged/med-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/private-as/remove-private-as-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_med_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remove_private_as_replace_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -40798,7 +41689,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_MED_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -40809,32 +41700,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_attr_unchanged_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/orf-capability/orf-send
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/route-reflector/route-reflector-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_send_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_route_reflector_route_reflector_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_send_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/route-server/route-server-client
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_route_server_route_server_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -40843,32 +41746,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/orf-capability/orf-receive
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/send-community/send-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_receive_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_send_community_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_receive_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/send-community/send-ext-community
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_send_ext_community_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:
-               /* 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;
        }
 
@@ -40877,32 +41792,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/orf-capability/orf-both
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/send-community/send-large-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_both_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_send_large_community_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_orf_both_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/soft-reconfiguration
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_soft_reconfiguration_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -40911,24 +41838,26 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_orf_capability_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/weight/weight-attribute
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_create(
-       struct nb_cb_create_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_weight_weight_attribute_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_weight_weight_attribute_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -40937,7 +41866,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
        case NB_EV_ABORT:
                return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
+               break;
        }
 
        return NB_OK;
@@ -40945,37 +41876,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/max-prefixes
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_max_prefixes_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_rmap_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/force-check
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_force_check_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_rmap_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -40983,33 +41910,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_rmap_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_rmap_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -41017,33 +41944,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/plist-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_plist_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_plist_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -41051,33 +41978,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/plist-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_plist_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_plist_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
        }
 
        return NB_OK;
@@ -41085,9 +42012,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/access-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_access_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41102,7 +42029,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_access_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41119,9 +42046,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/tr-restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_access_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41136,7 +42063,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_access_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41153,9 +42080,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_as_path_filter_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41170,7 +42097,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_as_path_filter_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41187,9 +42114,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/prefix-limit/direction-list/options/tw-warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tw_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_as_path_filter_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41204,7 +42131,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_as_path_filter_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41221,67 +42148,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_prefix_limit_di
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/nexthop-self/next-hop-self
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_nexthop_self_next_hop_self_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
-               break;
-       }
-
-       return NB_OK;
-}
-
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/nexthop-self/next-hop-self-force
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_nexthop_self_next_hop_self_force_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_unsuppress_map_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/private-as/remove-private-as-all
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remove_private_as_all_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_unsuppress_map_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -41290,44 +42182,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remo
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/private-as/remove-private-as-all-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remove_private_as_all_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_unsuppress_map_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/private-as/remove-private-as
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remove_private_as_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_unsuppress_map_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -41336,21 +42216,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remo
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/private-as/remove-private-as-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/add-paths/path-type
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remove_private_as_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_add_paths_path_type_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -41359,44 +42235,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_private_as_remo
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/route-reflector/route-reflector-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/as-path-options/allow-own-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_route_reflector_route_reflector_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_allow_own_as_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/route-server/route-server-client
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_route_server_route_server_client_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_allow_own_as_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -41405,44 +42269,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_route_server_ro
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/send-community/send-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/as-path-options/allow-own-origin-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_send_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_allow_own_origin_as_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/send-community/send-ext-community
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_send_ext_community_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_allow_own_origin_as_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -41451,9 +42303,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/send-community/send-large-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/as-path-options/replace-peer-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_send_large_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_replace_peer_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41463,7 +42315,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
+                       args, PEER_FLAG_AS_OVERRIDE,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -41474,21 +42326,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_send_community_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/soft-reconfiguration
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/default-originate/originate
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_soft_reconfiguration_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_default_originate_originate_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -41497,36 +42345,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_soft_reconfigur
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/weight/weight-attribute
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/default-originate/route-map
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_weight_weight_attribute_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_default_originate_route_map_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_peer_group_afi_safi_weight_modify(args);
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_weight_weight_attribute_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_default_originate_route_map_destroy(
        struct nb_cb_destroy_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_peer_group_afi_safi_weight_destroy(args);
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -41535,33 +42379,22 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_weight_weight_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/attr-unchanged/as-path-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_rmap_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unchanged_as_path_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
-       }
-
-       return NB_OK;
-}
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_rmap_import_destroy(
-       struct nb_cb_destroy_args *args)
-{
-       switch (args->event) {
-       case NB_EV_VALIDATE:
-       case NB_EV_PREPARE:
-       case NB_EV_ABORT:
                break;
-       case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -41569,33 +42402,45 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_r
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/attr-unchanged/next-hop-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_rmap_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unchanged_next_hop_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_rmap_export_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/attr-unchanged/med-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unchanged_med_unchanged_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -41603,33 +42448,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_r
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/orf-capability/orf-send
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_plist_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_send_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_plist_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_send_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -41637,33 +42482,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_p
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/orf-capability/orf-receive
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_plist_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_receive_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_plist_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_receive_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -41671,9 +42516,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_p
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/orf-capability/orf-both
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_access_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_both_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41688,7 +42533,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_access_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_both_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41705,10 +42550,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_access_list_export_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_create(
+       struct nb_cb_create_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -41722,16 +42567,16 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_access_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_destroy(
        struct nb_cb_destroy_args *args)
 {
        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. */
-               break;
+               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
        }
 
        return NB_OK;
@@ -41739,9 +42584,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/max-prefixes
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_as_path_filter_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_max_prefixes_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41756,8 +42601,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_as_path_filter_list_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/force-check
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_force_check_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -41773,9 +42622,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_as_path_filter_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41790,7 +42639,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_a
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_as_path_filter_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41807,9 +42656,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_unsuppress_map_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41824,7 +42673,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_u
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_unsuppress_map_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41841,9 +42690,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_u
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-multicast/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_unsuppress_map_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41858,7 +42707,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_u
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_unsuppress_map_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41875,28 +42724,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_multicast_filter_config_u
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/add-paths/path-type
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_add_paths_path_type_modify(
-       struct nb_cb_modify_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/afi-safis/afi-safi/ipv4-labeled-unicast/as-path-options/allow-own-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_allow_own_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41911,7 +42741,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_o
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_allow_own_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41928,9 +42758,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_o
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/as-path-options/allow-own-origin-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/tr-restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_allow_own_origin_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -41945,7 +42775,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_o
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_allow_own_origin_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -41962,33 +42792,25 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_o
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/as-path-options/replace-peer-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_as_path_options_replace_peer_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_OVERRIDE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+       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/afi-safis/afi-safi/ipv4-labeled-unicast/default-originate/originate
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_default_originate_originate_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+       struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -42004,9 +42826,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_default_o
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/default-originate/route-map
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/tw-warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_default_originate_route_map_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -42021,7 +42843,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_default_o
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_default_originate_route_map_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -42038,9 +42860,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_default_o
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/attr-unchanged/as-path-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/nexthop-self/next-hop-self
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unchanged_as_path_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_nexthop_self_next_hop_self_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -42050,7 +42872,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unch
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       args, PEER_FLAG_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -42061,9 +42883,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unch
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/attr-unchanged/next-hop-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/nexthop-self/next-hop-self-force
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unchanged_next_hop_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_nexthop_self_next_hop_self_force_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -42073,7 +42895,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unch
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -42084,9 +42906,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unch
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/attr-unchanged/med-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/private-as/remove-private-as-all
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unchanged_med_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_remove_private_as_all_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -42096,7 +42918,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unch
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_MED_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -42107,32 +42929,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_attr_unch
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/orf-capability/orf-send
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/private-as/remove-private-as-all-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_send_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_remove_private_as_all_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:
-               /* TODO: implement me. */
-               break;
-       }
-
-       return NB_OK;
-}
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_send_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;
        }
 
@@ -42141,32 +42952,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capab
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/orf-capability/orf-receive
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/private-as/remove-private-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_receive_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_remove_private_as_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_receive_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/private-as/remove-private-as-replace
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_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:
-               /* 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;
        }
 
@@ -42175,32 +42998,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capab
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/orf-capability/orf-both
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/route-reflector/route-reflector-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_both_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_route_reflector_route_reflector_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capability_orf_both_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/route-server/route-server-client
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_route_server_route_server_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -42209,25 +43044,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_orf_capab
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/send-community/send-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_create(
-       struct nb_cb_create_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_community_send_community_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/send-community/send-ext-community
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_community_send_ext_community_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -42235,7 +43078,11 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
        case NB_EV_ABORT:
                return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -42243,17 +43090,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/max-prefixes
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/send-community/send-large-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_max_prefixes_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_community_send_large_community_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:
-               /* 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;
        }
 
@@ -42262,17 +43113,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/force-check
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/soft-reconfiguration
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_force_check_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_soft_reconfiguration_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -42281,32 +43136,36 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/weight/weight-attribute
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_weight_weight_attribute_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_weight_weight_attribute_destroy(
        struct nb_cb_destroy_args *args)
 {
        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. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -42315,33 +43174,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_rmap_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_rmap_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -42349,33 +43208,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_rmap_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_rmap_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -42383,33 +43242,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/plist-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_plist_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_plist_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -42417,33 +43276,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/tr-restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/plist-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_plist_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_plist_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
        }
 
        return NB_OK;
@@ -42451,9 +43310,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/access-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_access_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -42468,7 +43327,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_access_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -42485,9 +43344,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/prefix-limit/direction-list/options/tw-warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_access_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -42502,7 +43361,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_access_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -42519,21 +43378,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/nexthop-self/next-hop-self
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_nexthop_self_next_hop_self_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_as_path_filter_list_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
+               /* TODO: implement me. */
+               break;
+       }
+
+       return NB_OK;
+}
 
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_as_path_filter_list_import_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;
        }
 
@@ -42542,44 +43412,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_nexthop_s
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/nexthop-self/next-hop-self-force
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_nexthop_self_next_hop_self_force_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_as_path_filter_list_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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-labeled-unicast/private-as/remove-private-as-all
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_remove_private_as_all_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_as_path_filter_list_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -42588,44 +43446,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/private-as/remove-private-as-all-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_remove_private_as_all_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_unsuppress_map_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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-labeled-unicast/private-as/remove-private-as
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_remove_private_as_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_unsuppress_map_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -42634,44 +43480,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/private-as/remove-private-as-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_private_as_remove_private_as_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_unsuppress_map_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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-labeled-unicast/route-reflector/route-reflector-client
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_route_reflector_route_reflector_client_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_unsuppress_map_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -42680,21 +43514,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_route_ref
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/route-server/route-server-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/add-paths/path-type
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_route_server_route_server_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_add_paths_path_type_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -42703,44 +43533,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_route_ser
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/send-community/send-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/as-path-options/allow-own-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_community_send_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_allow_own_as_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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-labeled-unicast/send-community/send-ext-community
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_community_send_ext_community_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_allow_own_as_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -42749,44 +43567,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_comm
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/send-community/send-large-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/as-path-options/allow-own-origin-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_send_community_send_large_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_allow_own_origin_as_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        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-labeled-unicast/soft-reconfiguration
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_soft_reconfiguration_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_allow_own_origin_as_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -42795,9 +43601,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_soft_reco
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/weight/weight-attribute
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/as-path-options/replace-peer-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_weight_weight_attribute_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_replace_peer_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -42806,7 +43612,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_weight_we
        case NB_EV_ABORT:
                return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_weight_modify(args);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
                break;
        }
@@ -42814,17 +43622,19 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_weight_we
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_weight_weight_attribute_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/default-originate/originate
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_default_originate_originate_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_peer_group_afi_safi_weight_destroy(args);
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -42833,33 +43643,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_weight_we
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/default-originate/route-map
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_rmap_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_default_originate_route_map_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_rmap_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_default_originate_route_map_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -42867,33 +43677,22 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/attr-unchanged/as-path-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_rmap_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unchanged_as_path_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
-       }
-
-       return NB_OK;
-}
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_rmap_export_destroy(
-       struct nb_cb_destroy_args *args)
-{
-       switch (args->event) {
-       case NB_EV_VALIDATE:
-       case NB_EV_PREPARE:
-       case NB_EV_ABORT:
                break;
-       case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -42901,33 +43700,45 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/attr-unchanged/next-hop-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_plist_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unchanged_next_hop_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_plist_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/attr-unchanged/med-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unchanged_med_unchanged_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -42935,33 +43746,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/orf-capability/orf-send
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_plist_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_send_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_plist_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_send_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -42969,9 +43780,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/orf-capability/orf-receive
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_access_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_receive_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -42986,7 +43797,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_access_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_receive_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -43003,9 +43814,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/orf-capability/orf-both
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_access_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_both_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43020,7 +43831,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_access_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_both_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -43037,10 +43848,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_as_path_filter_list_import_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_create(
+       struct nb_cb_create_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -43054,16 +43865,16 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_as_path_filter_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_destroy(
        struct nb_cb_destroy_args *args)
 {
        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. */
-               break;
+               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
        }
 
        return NB_OK;
@@ -43071,9 +43882,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/max-prefixes
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_as_path_filter_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_max_prefixes_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43088,8 +43899,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_as_path_filter_list_export_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/force-check
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_force_check_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -43105,9 +43920,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_unsuppress_map_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43122,7 +43937,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_unsuppress_map_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -43139,9 +43954,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-labeled-unicast/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_unsuppress_map_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43156,7 +43971,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_config_unsuppress_map_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -43173,9 +43988,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv4_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/add-paths/path-type
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_add_paths_path_type_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43190,11 +44005,26 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_add_paths
        return NB_OK;
 }
 
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_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/afi-safis/afi-safi/ipv6-labeled-unicast/as-path-options/allow-own-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_allow_own_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43209,7 +44039,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_o
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_allow_own_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -43226,9 +44056,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_o
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/as-path-options/allow-own-origin-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/tr-restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_allow_own_origin_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43243,7 +44073,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_o
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_allow_own_origin_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -43260,33 +44090,25 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_o
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/as-path-options/replace-peer-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_as_path_options_replace_peer_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_OVERRIDE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/default-originate/originate
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_default_originate_originate_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+       struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -43302,9 +44124,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_default_o
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/default-originate/route-map
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/tw-warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_default_originate_route_map_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43319,7 +44141,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_default_o
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_default_originate_route_map_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -43336,9 +44158,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_default_o
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/attr-unchanged/as-path-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/nexthop-self/next-hop-self
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unchanged_as_path_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_nexthop_self_next_hop_self_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43348,7 +44170,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unch
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       args, PEER_FLAG_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -43359,9 +44181,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unch
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/attr-unchanged/next-hop-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/nexthop-self/next-hop-self-force
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unchanged_next_hop_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_nexthop_self_next_hop_self_force_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43371,7 +44193,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unch
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -43382,9 +44204,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unch
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/attr-unchanged/med-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/private-as/remove-private-as-all
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unchanged_med_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_remove_private_as_all_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43394,7 +44216,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unch
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_MED_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -43405,32 +44227,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_attr_unch
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/orf-capability/orf-send
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/private-as/remove-private-as-all-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_send_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_remove_private_as_all_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:
-               /* TODO: implement me. */
-               break;
-       }
-
-       return NB_OK;
-}
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_send_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;
        }
 
@@ -43439,32 +44250,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capab
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/orf-capability/orf-receive
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/private-as/remove-private-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_receive_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_remove_private_as_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:
-               /* TODO: implement me. */
-               break;
-       }
-
-       return NB_OK;
-}
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_receive_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;
        }
 
@@ -43473,32 +44273,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capab
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/orf-capability/orf-both
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/private-as/remove-private-as-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_both_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_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:
-               /* TODO: implement me. */
-               break;
-       }
-
-       return NB_OK;
-}
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
+                       yang_dnode_get_bool(args->dnode, NULL));
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capability_orf_both_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;
        }
 
@@ -43507,25 +44296,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_orf_capab
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/route-reflector/route-reflector-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_create(
-       struct nb_cb_create_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_route_reflector_route_reflector_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/route-server/route-server-client
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_route_server_route_server_client_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -43533,7 +44330,11 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
        case NB_EV_ABORT:
                return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -43541,17 +44342,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/max-prefixes
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/send-community/send-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_max_prefixes_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_community_send_community_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -43560,17 +44365,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/force-check
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/send-community/send-ext-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_force_check_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_community_send_ext_community_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:
-               /* 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;
        }
 
@@ -43579,32 +44388,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/send-community/send-large-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_community_send_large_community_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_warning_only_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/soft-reconfiguration
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_soft_reconfiguration_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -43613,32 +44434,36 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/weight/weight-attribute
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_weight_weight_attribute_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_weight_weight_attribute_destroy(
        struct nb_cb_destroy_args *args)
 {
        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. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -43647,33 +44472,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_rmap_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_rmap_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -43681,33 +44506,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_rmap_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_rmap_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -43715,33 +44540,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/tr-restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/plist-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_plist_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_plist_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -43749,33 +44574,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/plist-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_plist_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_plist_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
        }
 
        return NB_OK;
@@ -43783,9 +44608,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/prefix-limit/direction-list/options/tw-warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/access-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_access_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -43800,7 +44625,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_access_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -43817,67 +44642,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_prefix_li
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/nexthop-self/next-hop-self
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_nexthop_self_next_hop_self_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
-               break;
-       }
-
-       return NB_OK;
-}
-
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/nexthop-self/next-hop-self-force
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_nexthop_self_next_hop_self_force_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_access_list_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/private-as/remove-private-as-all
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_remove_private_as_all_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_access_list_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -43886,44 +44676,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/private-as/remove-private-as-all-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_remove_private_as_all_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_as_path_filter_list_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/private-as/remove-private-as
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_remove_private_as_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_as_path_filter_list_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -43932,44 +44710,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_a
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/private-as/remove-private-as-replace
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_private_as_remove_private_as_replace_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_as_path_filter_list_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/route-reflector/route-reflector-client
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_route_reflector_route_reflector_client_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_as_path_filter_list_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -43978,44 +44744,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_route_ref
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/route-server/route-server-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_route_server_route_server_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_unsuppress_map_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/send-community/send-community
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_community_send_community_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_unsuppress_map_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -44024,44 +44778,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_comm
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/send-community/send-ext-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_community_send_ext_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_unsuppress_map_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/send-community/send-large-community
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_community_send_large_community_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_unsuppress_map_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -44070,21 +44812,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_send_comm
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/soft-reconfiguration
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/add-paths/path-type
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_soft_reconfiguration_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_add_paths_path_type_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -44093,36 +44831,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_soft_reco
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/weight/weight-attribute
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/as-path-options/allow-own-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_weight_weight_attribute_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_allow_own_as_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_peer_group_afi_safi_weight_modify(args);
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_weight_weight_attribute_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_allow_own_as_destroy(
        struct nb_cb_destroy_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_peer_group_afi_safi_weight_destroy(args);
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -44131,33 +44865,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_weight_we
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/as-path-options/allow-own-origin-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_rmap_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_allow_own_origin_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_rmap_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_allow_own_origin_as_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -44165,33 +44899,45 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/as-path-options/replace-peer-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_rmap_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_replace_peer_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_rmap_export_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/attr-unchanged/as-path-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchanged_as_path_unchanged_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -44199,33 +44945,45 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/attr-unchanged/next-hop-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_plist_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchanged_next_hop_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_plist_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/attr-unchanged/med-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchanged_med_unchanged_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -44233,33 +44991,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_plist_export_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_create(
+       struct nb_cb_create_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_plist_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
+               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
        }
 
        return NB_OK;
@@ -44267,9 +45025,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/max-prefixes
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_access_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_max_prefixes_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44284,8 +45042,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_access_list_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/force-check
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_force_check_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -44301,9 +45063,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_access_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44318,7 +45080,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_access_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -44335,9 +45097,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_as_path_filter_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44352,7 +45114,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_as_path_filter_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -44369,9 +45131,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_as_path_filter_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44386,7 +45148,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_as_path_filter_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -44403,9 +45165,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_unsuppress_map_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44420,7 +45182,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_unsuppress_map_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -44437,9 +45199,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv6-labeled-unicast/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/tr-restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_unsuppress_map_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44454,7 +45216,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_config_unsuppress_map_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -44471,28 +45233,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_labeled_unicast_filter_co
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/add-paths/path-type
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_add_paths_path_type_modify(
-       struct nb_cb_modify_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/afi-safis/afi-safi/l3vpn-ipv4-unicast/as-path-options/allow-own-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_allow_own_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44507,7 +45250,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_opt
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_allow_own_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -44524,9 +45267,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_opt
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/as-path-options/allow-own-origin-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/tw-warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_allow_own_origin_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44541,7 +45284,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_opt
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_allow_own_origin_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -44558,9 +45301,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_opt
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/as-path-options/replace-peer-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/nexthop-self/next-hop-self
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_options_replace_peer_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_nexthop_self_next_hop_self_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44570,7 +45313,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_opt
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_OVERRIDE,
+                       args, PEER_FLAG_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -44581,9 +45324,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_as_path_opt
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/attr-unchanged/as-path-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/nexthop-self/next-hop-self-force
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchanged_as_path_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_nexthop_self_next_hop_self_force_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44593,7 +45336,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchan
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -44604,9 +45347,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchan
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/attr-unchanged/next-hop-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/private-as/remove-private-as-all
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchanged_next_hop_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remove_private_as_all_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44616,7 +45359,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchan
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -44627,9 +45370,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchan
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/attr-unchanged/med-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/private-as/remove-private-as-all-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchanged_med_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remove_private_as_all_replace_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -44639,7 +45382,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchan
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_MED_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -44650,25 +45393,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_attr_unchan
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/private-as/remove-private-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_create(
-       struct nb_cb_create_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remove_private_as_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/private-as/remove-private-as-replace
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remove_private_as_replace_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -44676,7 +45427,11 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
        case NB_EV_ABORT:
                return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
+               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;
@@ -44684,17 +45439,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/max-prefixes
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/route-reflector/route-reflector-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_max_prefixes_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_route_reflector_route_reflector_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -44703,17 +45462,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/force-check
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/route-server/route-server-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_force_check_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_route_server_route_server_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -44722,32 +45485,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/send-community/send-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_community_send_community_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_warning_only_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/send-community/send-ext-community
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_community_send_ext_community_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:
-               /* 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;
        }
 
@@ -44756,32 +45531,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/send-community/send-large-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_community_send_large_community_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/soft-reconfiguration
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_soft_reconfiguration_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -44790,32 +45577,36 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/weight/weight-attribute
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_weight_weight_attribute_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_weight_weight_attribute_destroy(
        struct nb_cb_destroy_args *args)
 {
        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. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -44824,33 +45615,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_rmap_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_rmap_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -44858,33 +45649,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/tr-restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_rmap_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_rmap_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -44892,33 +45683,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/plist-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_plist_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_plist_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -44926,33 +45717,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/prefix-limit/direction-list/options/tw-warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/plist-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_plist_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_plist_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
        }
 
        return NB_OK;
@@ -44960,44 +45751,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/nexthop-self/next-hop-self
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/access-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_nexthop_self_next_hop_self_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_access_list_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/nexthop-self/next-hop-self-force
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_nexthop_self_next_hop_self_force_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_access_list_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -45006,44 +45785,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_nexthop_sel
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/private-as/remove-private-as-all
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remove_private_as_all_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_access_list_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/private-as/remove-private-as-all-replace
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remove_private_as_all_replace_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_access_list_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -45052,44 +45819,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/private-as/remove-private-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remove_private_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_as_path_filter_list_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/private-as/remove-private-as-replace
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_remove_private_as_replace_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_as_path_filter_list_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -45098,44 +45853,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_private_as_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/route-reflector/route-reflector-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_route_reflector_route_reflector_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_as_path_filter_list_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/route-server/route-server-client
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_route_server_route_server_client_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_as_path_filter_list_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -45144,44 +45887,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_route_serve
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/send-community/send-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_community_send_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_unsuppress_map_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/send-community/send-ext-community
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_community_send_ext_community_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_unsuppress_map_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -45190,44 +45921,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_commun
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/send-community/send-large-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_send_community_send_large_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_unsuppress_map_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/soft-reconfiguration
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_soft_reconfiguration_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_unsuppress_map_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -45236,36 +45955,17 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_soft_reconf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/weight/weight-attribute
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/add-paths/path-type
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_weight_weight_attribute_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_add_paths_path_type_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_peer_group_afi_safi_weight_modify(args);
-
-               break;
-       }
-
-       return NB_OK;
-}
-
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_weight_weight_attribute_destroy(
-       struct nb_cb_destroy_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_peer_group_afi_safi_weight_destroy(args);
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -45274,33 +45974,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_weight_weig
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/as-path-options/allow-own-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_rmap_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_allow_own_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_rmap_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_allow_own_as_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -45308,33 +46008,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/as-path-options/allow-own-origin-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_rmap_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_allow_own_origin_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_rmap_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_allow_own_origin_as_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -45342,33 +46042,45 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/as-path-options/replace-peer-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_plist_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_replace_peer_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_plist_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/attr-unchanged/as-path-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchanged_as_path_unchanged_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -45376,33 +46088,45 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/attr-unchanged/next-hop-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_plist_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchanged_next_hop_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_plist_export_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/attr-unchanged/med-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchanged_med_unchanged_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -45410,10 +46134,10 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_access_list_import_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_create(
+       struct nb_cb_create_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -45427,16 +46151,16 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_access_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_destroy(
        struct nb_cb_destroy_args *args)
 {
        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. */
-               break;
+               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
        }
 
        return NB_OK;
@@ -45444,9 +46168,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/max-prefixes
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_access_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_max_prefixes_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45461,8 +46185,12 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_access_list_export_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/force-check
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_force_check_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -45478,9 +46206,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_as_path_filter_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45495,7 +46223,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_as_path_filter_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -45512,9 +46240,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_as_path_filter_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45529,7 +46257,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_as_path_filter_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -45546,9 +46274,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_unsuppress_map_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45563,7 +46291,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_unsuppress_map_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -45580,9 +46308,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv4-unicast/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_unsuppress_map_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45597,7 +46325,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_config_unsuppress_map_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -45614,9 +46342,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv4_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/add-paths/path-type
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/tr-restart-timer
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_add_paths_path_type_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45631,11 +46359,26 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_add_paths_p
        return NB_OK;
 }
 
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tr_restart_timer_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/afi-safis/afi-safi/l3vpn-ipv6-unicast/as-path-options/allow-own-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_allow_own_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45650,7 +46393,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_opt
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_allow_own_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -45667,9 +46410,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_opt
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/as-path-options/allow-own-origin-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/tw-warning-only
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_allow_own_origin_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45684,7 +46427,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_opt
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_allow_own_origin_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -45701,9 +46444,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_opt
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/as-path-options/replace-peer-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/nexthop-self/next-hop-self
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_options_replace_peer_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_nexthop_self_next_hop_self_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45713,7 +46456,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_opt
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_OVERRIDE,
+                       args, PEER_FLAG_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -45724,9 +46467,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_as_path_opt
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/attr-unchanged/as-path-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/nexthop-self/next-hop-self-force
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchanged_as_path_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_nexthop_self_next_hop_self_force_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45736,7 +46479,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchan
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -45747,9 +46490,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchan
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/attr-unchanged/next-hop-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/private-as/remove-private-as-all
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchanged_next_hop_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remove_private_as_all_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45759,7 +46502,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchan
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -45770,9 +46513,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchan
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/attr-unchanged/med-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/private-as/remove-private-as-all-replace
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchanged_med_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remove_private_as_all_replace_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -45782,7 +46525,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchan
                return NB_OK;
        case NB_EV_APPLY:
                return bgp_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_MED_UNCHANGED,
+                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
                        yang_dnode_get_bool(args->dnode, NULL));
 
                break;
@@ -45793,25 +46536,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_attr_unchan
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/private-as/remove-private-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_create(
-       struct nb_cb_create_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remove_private_as_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/private-as/remove-private-as-replace
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remove_private_as_replace_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -45819,7 +46570,11 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
        case NB_EV_ABORT:
                return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_prefix_limit_list_destroy(args);
+               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;
@@ -45827,17 +46582,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/max-prefixes
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/route-reflector/route-reflector-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_max_prefixes_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_route_reflector_route_reflector_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -45846,17 +46605,21 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/force-check
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/route-server/route-server-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_force_check_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_route_server_route_server_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -45865,32 +46628,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/send-community/send-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_community_send_community_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SEND_COMMUNITY,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_warning_only_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/send-community/send-ext-community
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_community_send_ext_community_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:
-               /* 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;
        }
 
@@ -45899,32 +46674,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/send-community/send-large-community
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_community_send_large_community_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_restart_timer_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/soft-reconfiguration
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_soft_reconfiguration_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -45933,32 +46720,36 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/weight/weight-attribute
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_weight_weight_attribute_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_weight_modify(args);
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_weight_weight_attribute_destroy(
        struct nb_cb_destroy_args *args)
 {
        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. */
+               return bgp_peer_group_afi_safi_weight_destroy(args);
+
                break;
        }
 
@@ -45967,33 +46758,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/tr-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_rmap_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tr_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_rmap_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -46001,33 +46792,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/tr-restart-timer
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tr_restart_timer_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_rmap_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tr_restart_timer_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_rmap_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -46035,33 +46826,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/tw-shutdown-threshold-pct
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/plist-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_plist_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tw_shutdown_threshold_pct_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_plist_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
        }
 
        return NB_OK;
@@ -46069,33 +46860,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/prefix-limit/direction-list/options/tw-warning-only
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/plist-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tw_warning_only_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_plist_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limit_direction_list_options_tw_warning_only_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_plist_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
        }
 
        return NB_OK;
@@ -46103,44 +46894,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_prefix_limi
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/nexthop-self/next-hop-self
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/access-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_nexthop_self_next_hop_self_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_access_list_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/nexthop-self/next-hop-self-force
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_nexthop_self_next_hop_self_force_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_access_list_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46149,44 +46928,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_nexthop_sel
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/private-as/remove-private-as-all
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remove_private_as_all_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_access_list_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/private-as/remove-private-as-all-replace
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remove_private_as_all_replace_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_access_list_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46195,44 +46962,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/private-as/remove-private-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remove_private_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_as_path_filter_list_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/private-as/remove-private-as-replace
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_remove_private_as_replace_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_as_path_filter_list_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46241,44 +46996,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_private_as_
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/route-reflector/route-reflector-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_route_reflector_route_reflector_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_as_path_filter_list_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/route-server/route-server-client
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_route_server_route_server_client_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_as_path_filter_list_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46287,44 +47030,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_route_serve
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/send-community/send-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_community_send_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_unsuppress_map_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/send-community/send-ext-community
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_community_send_ext_community_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_unsuppress_map_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_EXT_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46333,44 +47064,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_commun
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/send-community/send-large-community
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_send_community_send_large_community_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_unsuppress_map_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SEND_LARGE_COMMUNITY,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/soft-reconfiguration
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_soft_reconfiguration_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_unsuppress_map_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46379,36 +47098,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_soft_reconf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/weight/weight-attribute
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/as-path-options/allow-own-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_weight_weight_attribute_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_allow_own_as_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_peer_group_afi_safi_weight_modify(args);
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_weight_weight_attribute_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_allow_own_as_destroy(
        struct nb_cb_destroy_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_peer_group_afi_safi_weight_destroy(args);
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46417,33 +47132,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_weight_weig
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/rmap-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/as-path-options/allow-own-origin-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_rmap_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_allow_own_origin_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_rmap_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_allow_own_origin_as_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
+               /* TODO: implement me. */
+               break;
        }
 
        return NB_OK;
@@ -46451,33 +47166,22 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/rmap-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/as-path-options/replace-peer-as
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_rmap_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_replace_peer_as_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
-       case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
-       }
-
-       return NB_OK;
-}
-
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_rmap_export_destroy(
-       struct nb_cb_destroy_args *args)
-{
-       switch (args->event) {
-       case NB_EV_VALIDATE:
-       case NB_EV_PREPARE:
-       case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_OVERRIDE,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -46485,33 +47189,45 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/plist-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/attr-unchanged/as-path-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_plist_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_as_path_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_AS_PATH_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_plist_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/attr-unchanged/next-hop-unchanged
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_next_hop_unchanged_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -46519,33 +47235,45 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/plist-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/attr-unchanged/med-unchanged
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_plist_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_med_unchanged_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_modify(args, FILTER_OUT);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_MED_UNCHANGED,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_plist_export_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/nexthop-self/next-hop-self
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_nexthop_self_next_hop_self_modify(
+       struct nb_cb_modify_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
        case NB_EV_PREPARE:
        case NB_EV_ABORT:
-               break;
+               return NB_OK;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_OUT);
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_NEXTHOP_SELF,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
+               break;
        }
 
        return NB_OK;
@@ -46553,32 +47281,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/access-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/nexthop-self/next-hop-self-force
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_access_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_nexthop_self_next_hop_self_force_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:
-               /* 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;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_access_list_import_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/route-reflector/route-reflector-client
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_route_reflector_route_reflector_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_REFLECTOR_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -46587,32 +47327,44 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/access-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/route-server/route-server-client
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_access_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_route_server_route_server_client_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_RSERVER_CLIENT,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_access_list_export_destroy(
-       struct nb_cb_destroy_args *args)
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/soft-reconfiguration
+ */
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_soft_reconfiguration_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:
-               /* TODO: implement me. */
+               return bgp_peer_group_afi_safi_flag_modify(
+                       args, PEER_FLAG_SOFT_RECONFIG,
+                       yang_dnode_get_bool(args->dnode, NULL));
+
                break;
        }
 
@@ -46621,33 +47373,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/as-path-filter-list-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/rmap-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_as_path_filter_list_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_IN);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_as_path_filter_list_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_import_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_IN);
        }
 
        return NB_OK;
@@ -46655,33 +47407,33 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/as-path-filter-list-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/rmap-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_as_path_filter_list_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_modify(
        struct nb_cb_modify_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_modify(args, RMAP_OUT);
        }
 
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_as_path_filter_list_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_rmap_export_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;
+       case NB_EV_APPLY:
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -46689,9 +47441,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/unsuppress-map-import
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/plist-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_unsuppress_map_import_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -46706,7 +47458,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_unsuppress_map_import_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -46723,9 +47475,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l3vpn-ipv6-unicast/filter-config/unsuppress-map-export
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/plist-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_unsuppress_map_export_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -46740,7 +47492,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_config_unsuppress_map_export_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_plist_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -46757,9 +47509,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l3vpn_ipv6_unicast_filter_conf
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/as-path-options/allow-own-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/access-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_allow_own_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -46774,7 +47526,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_all
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_allow_own_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_import_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -46791,9 +47543,9 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_all
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/as-path-options/allow-own-origin-as
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/access-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_allow_own_origin_as_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_modify(
        struct nb_cb_modify_args *args)
 {
        switch (args->event) {
@@ -46808,7 +47560,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_all
        return NB_OK;
 }
 
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_allow_own_origin_as_destroy(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_access_list_export_destroy(
        struct nb_cb_destroy_args *args)
 {
        switch (args->event) {
@@ -46825,67 +47577,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_all
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/as-path-options/replace-peer-as
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_as_path_options_replace_peer_as_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_OVERRIDE,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
-               break;
-       }
-
-       return NB_OK;
-}
-
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/attr-unchanged/as-path-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/as-path-filter-list-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_as_path_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_AS_PATH_UNCHANGED,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/attr-unchanged/next-hop-unchanged
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_next_hop_unchanged_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_UNCHANGED,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46894,44 +47611,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_next
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/attr-unchanged/med-unchanged
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/as-path-filter-list-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_attr_unchanged_med_unchanged_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_MED_UNCHANGED,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/nexthop-self/next-hop-self
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_nexthop_self_next_hop_self_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_as_path_filter_list_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46940,44 +47645,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_nexthop_self_next_h
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/nexthop-self/next-hop-self-force
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/unsuppress-map-import
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_nexthop_self_next_hop_self_force_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_FORCE_NEXTHOP_SELF,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/route-reflector/route-reflector-client
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_route_reflector_route_reflector_client_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_import_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_REFLECTOR_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -46986,44 +47679,32 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_route_reflector_rou
 
 /*
  * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/route-server/route-server-client
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/filter-config/unsuppress-map-export
  */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_route_server_route_server_client_modify(
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_RSERVER_CLIENT,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
        return NB_OK;
 }
 
-/*
- * XPath:
- * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/peer-groups/peer-group/afi-safis/afi-safi/l2vpn-evpn/soft-reconfiguration
- */
-int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_soft_reconfiguration_modify(
-       struct nb_cb_modify_args *args)
+int bgp_peer_groups_peer_group_afi_safis_afi_safi_l2vpn_evpn_filter_config_unsuppress_map_export_destroy(
+       struct nb_cb_destroy_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_peer_group_afi_safi_flag_modify(
-                       args, PEER_FLAG_SOFT_RECONFIG,
-                       yang_dnode_get_bool(args->dnode, NULL));
-
+               /* TODO: implement me. */
                break;
        }
 
@@ -47570,7 +48251,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_flowspec_filter_config_rm
        case NB_EV_ABORT:
                break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
+               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
        }
 
        return NB_OK;
@@ -47604,7 +48285,7 @@ int bgp_peer_groups_peer_group_afi_safis_afi_safi_ipv6_flowspec_filter_config_pl
        case NB_EV_ABORT:
                break;
        case NB_EV_APPLY:
-               return bgp_peer_group_afi_safi_rmap_destroy(args, RMAP_OUT);
+               return bgp_peer_group_afi_safi_plist_destroy(args, FILTER_IN);
        }
 
        return NB_OK;
index 5e533e829bbd9e425d1d93b57402212bcbd86f92..35a93162216884a061bd58564892b4eb480d5cd2 100644 (file)
@@ -13060,7 +13060,8 @@ DEFUN (show_ip_bgp_vpn_all_route_prefix,
        }
 
        return bgp_show_route(vty, bgp, network, AFI_IP, SAFI_MPLS_VPN, NULL, 0,
-                             BGP_PATH_SHOW_ALL, use_json(argc, argv));
+                             BGP_PATH_SHOW_ALL, RPKI_NOT_BEING_USED,
+                             use_json(argc, argv));
 }
 #endif /* KEEP_OLD_VPN_COMMANDS */
 
@@ -13916,13 +13917,14 @@ struct bgp_distance {
 
 DEFUN (show_bgp_afi_vpn_rd_route,
        show_bgp_afi_vpn_rd_route_cmd,
-       "show bgp "BGP_AFI_CMD_STR" vpn rd ASN:NN_OR_IP-ADDRESS:NN <A.B.C.D/M|X:X::X:X/M> [json]",
+       "show bgp "BGP_AFI_CMD_STR" vpn rd <ASN:NN_OR_IP-ADDRESS:NN|all> <A.B.C.D/M|X:X::X:X/M> [json]",
        SHOW_STR
        BGP_STR
        BGP_AFI_HELP_STR
        "Address Family modifier\n"
        "Display information for a route distinguisher\n"
        "Route Distinguisher\n"
+       "All Route Distinguishers\n"
        "Network in the BGP routing table to display\n"
        "Network in the BGP routing table to display\n"
        JSON_STR)
@@ -13937,6 +13939,12 @@ DEFUN (show_bgp_afi_vpn_rd_route,
                return CMD_WARNING;
        }
 
+       if (!strcmp(argv[5]->arg, "all"))
+               return bgp_show_route(vty, NULL, argv[6]->arg, afi,
+                                     SAFI_MPLS_VPN, NULL, 0, BGP_PATH_SHOW_ALL,
+                                     RPKI_NOT_BEING_USED,
+                                     use_json(argc, argv));
+
        ret = str2prefix_rd(argv[5]->arg, &prd);
        if (!ret) {
                vty_out(vty, "%% Malformed Route Distinguisher\n");
index a43b76da72a41679185308b97eff149aabd76645..7692bb7ffefdd394567b309a2be473034811794e 100644 (file)
@@ -5865,6 +5865,7 @@ DEFUN_YANG (set_vpn_nexthop,
        int idx_ip = 3;
        afi_t afi;
        int idx = 0;
+       char xpath_value[XPATH_MAXLEN];
 
        if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
                if (afi == AFI_IP) {
@@ -5908,8 +5909,6 @@ DEFUN_YANG (no_set_vpn_nexthop,
           "VPN next-hop address\n"
           "IPv6 address of next hop\n")
 {
-       int idx_ip = 4;
-       char *arg;
        afi_t afi;
        int idx = 0;
 
index 3d4902aa47943a2d7174fabbee96b5ca7ad40452..bb85ad393dbeee94faaea7816ca91dfb89680386 100644 (file)
@@ -48,6 +48,7 @@
 #include "bgpd/bgp_aspath.h"
 #include "bgpd/bgp_route.h"
 #include "bgpd/bgp_rpki.h"
+#include "northbound_cli.h"
 
 #include "lib/network.h"
 #include "lib/thread.h"
@@ -1390,7 +1391,6 @@ DEFUN_YANG (no_match_rpki,
 {
        const char *xpath =
                "./match-condition[condition='frr-bgp-route-map:rpki']";
-       char xpath_value[XPATH_MAXLEN];
 
        nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
        return nb_cli_apply_changes(vty, NULL);
index 7e3aa2a48a50bc4c9fa3861f5e517a32868370e3..833bdec2ed998164da21dc444295bba1a10c8c1a 100644 (file)
@@ -201,18 +201,17 @@ struct bgp_node *bgp_table_subtree_lookup(const struct bgp_table *table,
 }
 
 printfrr_ext_autoreg_p("BD", printfrr_bd)
-static ssize_t printfrr_bd(char *buf, size_t bsz, const char *fmt,
-                          int prec, const void *ptr)
+static ssize_t printfrr_bd(struct fbuf *buf, struct printfrr_eargs *ea,
+                          const void *ptr)
 {
        const struct bgp_dest *dest = ptr;
-       const struct prefix *p;
+       const struct prefix *p = bgp_dest_get_prefix(dest);
+       char cbuf[PREFIX_STRLEN];
 
-       if (dest) {
-               p = bgp_dest_get_prefix(dest);
-               prefix2str(p, buf, bsz);
-       } else {
-               strlcpy(buf, "NULL", bsz);
-       }
+       if (!dest)
+               return bputs(buf, "(null)");
 
-       return 2;
+       /* need to get the real length even if buffer too small */
+       prefix2str(p, cbuf, sizeof(cbuf));
+       return bputs(buf, cbuf);
 }
index a1c85757d4978b191c39174ed0a3ce3e02f4980a..9ecf02aae035481f2e215f11e02739b747c38e82 100644 (file)
@@ -3990,7 +3990,7 @@ void cli_show_router_global_neighbor_config(struct vty *vty,
 
 DEFUN_YANG(bgp_listen_limit,
           bgp_listen_limit_cmd,
-          "bgp listen limit (1-5000)",
+          "bgp listen limit (1-65535)",
           "BGP specific commands\n"
           "BGP Dynamic Neighbors listen commands\n"
           "Maximum number of BGP Dynamic Neighbors that can be created\n"
@@ -4007,7 +4007,7 @@ DEFUN_YANG(bgp_listen_limit,
 
 DEFUN_YANG(no_bgp_listen_limit,
           no_bgp_listen_limit_cmd,
-          "no bgp listen limit [(1-5000)]",
+          "no bgp listen limit [(1-65535)]",
           NO_STR
           "BGP specific commands\n"
           "BGP Dynamic Neighbors listen commands\n"
index 3f5f4ce4a15a79c1f43ec42f02f80e21806d7ca0..51134dc8c57f4086d5a5417ec183be453cba2389 100644 (file)
@@ -1824,7 +1824,7 @@ struct bgp_nlri {
 /* BGP Dynamic Neighbors feature */
 #define BGP_DYNAMIC_NEIGHBORS_LIMIT_DEFAULT    100
 #define BGP_DYNAMIC_NEIGHBORS_LIMIT_MIN          1
-#define BGP_DYNAMIC_NEIGHBORS_LIMIT_MAX       5000
+#define BGP_DYNAMIC_NEIGHBORS_LIMIT_MAX      65535
 
 /* Flag for peer_clear_soft().  */
 enum bgp_clear_type {
index 1d702bb6e9af44edfdee4e9c7b3c92dac53e3c63..302b8d6bd7d60728aaebc4d2da4432df26358b11 100644 (file)
@@ -214,6 +214,22 @@ pre {
 .highlight .na { color: var(--primary-2); }
 .highlight .nv { color: var(--complement-0); }
 
+.rst-content code.frrfmtout {
+       background-color: var(--secondary-1-9);
+       border-color: var(--secondary-1-1);
+       font-size:100%;
+}
+.rst-content code.frrfmtout::before {
+       content: "⇒ \"";
+}
+.rst-content code.frrfmtout::after {
+       content: "\"";
+}
+.rst-content code.frrfmtout span {
+       color: var(--secondary-1-4);
+       font-size:100%;
+}
+
 strong {
        font-weight:500;
 }
index f4bb65ec79b493fc7f87ac2b59d5d436b5aaa89d..20265f4aadef96ff3dc37c789a82942d57ec653b 100644 (file)
@@ -17,6 +17,8 @@ import os
 import re
 import pygments
 from sphinx.highlighting import lexers
+from sphinx.util import logging
+logger = logging.getLogger(__name__)
 
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
@@ -362,11 +364,37 @@ texinfo_documents = [
 with open("../extra/frrlexer.py", "rb") as lex:
     frrlexerpy = lex.read()
 
+frrfmt_re = re.compile(r'^\s*%(?P<spec>[^\s]+)\s+\((?P<types>.*)\)\s*$')
+
+def parse_frrfmt(env, text, node):
+    from sphinx import addnodes
+
+    m = frrfmt_re.match(text)
+    if not m:
+        logger.warning('could not parse frrfmt:: %r' % (text), location=node)
+        node += addnodes.desc_name(text, text)
+        return text
+
+    spec, types = m.group('spec'), m.group('types')
+
+    node += addnodes.desc_sig_operator('%', '%')
+    node += addnodes.desc_name(spec + ' ', spec + ' ')
+    plist = addnodes.desc_parameterlist()
+    for typ in types.split(','):
+        typ = typ.strip()
+        plist += addnodes.desc_parameter(typ, typ)
+    node += plist
+    return '%' + spec
+
 # custom extensions here
 def setup(app):
     # object type for FRR CLI commands, can be extended to document parent CLI
     # node later on
     app.add_object_type("clicmd", "clicmd")
+
+    # printfrr extensions
+    app.add_object_type("frrfmt", "frrfmt", parse_node=parse_frrfmt)
+
     # css overrides for HTML theme
     app.add_stylesheet("overrides.css")
     # load Pygments lexer for FRR config syntax
index a35e60619c25002b7dd76527e0795a3eca0c1752..b827afd6cc5cc9eccae1341b7caa518d128f8e68 100644 (file)
@@ -1,5 +1,7 @@
 .. _logging:
 
+.. highlight:: c
+
 Logging
 =======
 
@@ -52,46 +54,50 @@ are available:
       if (ret != buf)
          XFREE(MTYPE_FOO, ret);
 
-Extensions
-^^^^^^^^^^
-
-``printfrr()`` format strings can be extended with suffixes after `%p` or
-`%d`.  The following extended format specifiers are available:
-
-+-----------+--------------------------+----------------------------------------------+
-| Specifier | Argument                 | Output                                       |
-+===========+==========================+==============================================+
-| ``%Lu``   | ``uint64_t``             | ``12345``                                    |
-+-----------+--------------------------+----------------------------------------------+
-| ``%Ld``   | ``int64_t``              | ``-12345``                                   |
-+-----------+--------------------------+----------------------------------------------+
-| ``%pI4``  | ``struct in_addr *``     | ``1.2.3.4``                                  |
-|           |                          |                                              |
-|           | ``in_addr_t *``          |                                              |
-+-----------+--------------------------+----------------------------------------------+
-| ``%pI6``  | ``struct in6_addr *``    | ``fe80::1234``                               |
-+-----------+--------------------------+----------------------------------------------+
-| ``%pIA``  | ``struct ipaddr *``      | ``1.2.3.4``                                  |
-|           |                          |                                              |
-|           |                          | ``fe80::1234``                               |
-+-----------+--------------------------+----------------------------------------------+
-| ``%pFX``  | ``struct prefix *``      | ``fe80::1234/64``                            |
-+-----------+--------------------------+----------------------------------------------+
-| ``%pSG4`` | ``struct prefix_sg *``   | ``(*,1.2.3.4)``                              |
-+-----------+--------------------------+----------------------------------------------+
-| ``%pRN``  | ``struct route_node *``  | ``192.168.1.0/24`` (dst-only node)           |
-|           |                          |                                              |
-|           |                          | ``2001:db8::/32 from fe80::/64`` (SADR node) |
-+-----------+--------------------------+----------------------------------------------+
-| ``%pNHv`` | ``struct nexthop *``     | ``1.2.3.4, via eth0``                        |
-+-----------+--------------------------+----------------------------------------------+
-| ``%pNHs`` | ``struct nexthop *``     | ``1.2.3.4 if 15``                            |
-+-----------+--------------------------+----------------------------------------------+
-| ``%pFX``  | ``struct bgp_dest *``    | ``fe80::1234/64`` (available in BGP only)    |
-+-----------+--------------------------+----------------------------------------------+
+.. c:function:: ssize_t bprintfrr(struct fbuf *fb, const char *fmt, ...)
+.. c:function:: ssize_t vbprintfrr(struct fbuf *fb, const char *fmt, va_list)
+
+   These are the "lowest level" functions, which the other variants listed
+   above use to implement their functionality on top.  Mainly useful for
+   implementing printfrr extensions since those get a ``struct fbuf *`` to
+   write their output to.
+
+.. c:macro:: FMT_NSTD(expr)
+
+   This macro turns off/on format warnings as needed when non-ISO-C
+   compatible printfrr extensions are used (e.g. ``%.*p`` or ``%Ld``.)::
+
+      vty_out(vty, "standard compatible %pI4\n", &addr);
+      FMT_NSTD(vty_out(vty, "non-standard %-47.*pHX\n", (int)len, buf));
+
+   When the frr-format plugin is in use, this macro is a no-op since the
+   frr-format plugin supports all printfrr extensions.  Since the FRR CI
+   includes a system with the plugin enabled, this means format errors will
+   not slip by undetected even with FMT_NSTD.
+
+.. note::
 
+   ``printfrr()`` does not support the ``%n`` format.
+
+AS-Safety
+^^^^^^^^^
+
+``printfrr()`` are AS-Safe under the following conditions:
+
+* the ``[v]as[n]printfrr`` variants are not AS-Safe (allocating memory)
+* floating point specifiers are not AS-Safe (system printf is used for these)
+* the positional ``%1$d`` syntax should not be used (8 arguments are supported
+  while AS-Safe)
+* extensions are only AS-Safe if their printer is AS-Safe
+
+printfrr Extensions
+-------------------
+
+``printfrr()`` format strings can be extended with suffixes after `%p` or `%d`.
 Printf features like field lengths can be used normally with these extensions,
-e.g. ``%-15pI4`` works correctly.
+e.g. ``%-15pI4`` works correctly, **except if the extension consumes the
+width or precision**.  Extensions that do so are listed below as ``%*pXX``
+rather than ``%pXX``.
 
 The extension specifier after ``%p`` or ``%d`` is always an uppercase letter;
 by means of established pattern uppercase letters and numbers form the type
@@ -99,10 +105,7 @@ identifier which may be followed by lowercase flags.
 
 You can grep the FRR source for ``printfrr_ext_autoreg`` to see all extended
 printers and what exactly they do.  More printers are likely to be added as
-needed/useful, so the list above may become outdated.
-
-``%Ld`` is not an "extension" for printfrr; it's wired directly into the main
-printf logic.
+needed/useful, so the list here may be outdated.
 
 .. note::
 
@@ -111,16 +114,218 @@ printf logic.
    **not** available when calling ``snprintf`` directly.  You need to call
    ``snprintfrr`` instead.
 
-AS-Safety
-^^^^^^^^^
+Networking data types
+^^^^^^^^^^^^^^^^^^^^^
 
-``printfrr()`` are AS-Safe under the following conditions:
+.. role:: frrfmtout(code)
 
-* the ``[v]as[n]printfrr`` variants are not AS-Safe (allocating memory)
-* floating point specifiers are not AS-Safe (system printf is used for these)
-* the positional ``%1$d`` syntax should not be used (8 arguments are supported
-  while AS-Safe)
-* extensions are only AS-Safe if their printer is AS-Safe
+.. frrfmt:: %pI4 (struct in_addr *, in_addr_t *)
+
+   :frrfmtout:`1.2.3.4`
+
+.. frrfmt:: %pI6 (struct in6_addr *)
+
+   :frrfmtout:`fe80::1234`
+
+.. frrfmt:: %pEA (struct ethaddr *)
+
+   :frrfmtout:`01:23:45:67:89:ab`
+
+.. frrfmt:: %pIA (struct ipaddr *)
+
+   :frrfmtout:`1.2.3.4` / :frrfmtout:`fe80::1234`
+
+.. frrfmt:: %pFX (struct prefix *)
+
+   :frrfmtout:`1.2.3.0/24` / :frrfmtout:`fe80::1234/64`
+
+   This accepts the following types:
+
+   - :c:struct:`prefix`
+   - :c:struct:`prefix_ipv4`
+   - :c:struct:`prefix_ipv6`
+   - :c:struct:`prefix_eth`
+   - :c:struct:`prefix_evpn`
+   - :c:struct:`prefix_fs`
+
+   It does **not** accept the following types:
+
+   - :c:struct:`prefix_ls`
+   - :c:struct:`prefix_rd`
+   - :c:struct:`prefix_ptr`
+   - :c:struct:`prefix_sg` (use :frrfmt:`%pSG4`)
+   - :c:union:`prefixptr` (dereference to get :c:struct:`prefix`)
+   - :c:union:`prefixconstptr` (dereference to get :c:struct:`prefix`)
+
+.. frrfmt:: %pSG4 (struct prefix_sg *)
+
+   :frrfmtout:`(*,1.2.3.4)`
+
+   This is *(S,G)* output for use in pimd.  (Note prefix_sg is not a prefix
+   "subclass" like the other prefix_* structs.)
+
+.. frrfmt:: %pSU (union sockunion *)
+
+   ``%pSU``: :frrfmtout:`1.2.3.4` / :frrfmtout:`fe80::1234`
+
+   ``%pSUs``: :frrfmtout:`1.2.3.4` / :frrfmtout:`fe80::1234%89`
+   (adds IPv6 scope ID as integer)
+
+   ``%pSUp``: :frrfmtout:`1.2.3.4:567` / :frrfmtout:`[fe80::1234]:567`
+   (adds port)
+
+   ``%pSUps``: :frrfmtout:`1.2.3.4:567` / :frrfmtout:`[fe80::1234%89]:567`
+   (adds port and scope ID)
+
+.. frrfmt:: %pRN (struct route_node *, struct bgp_node *, struct agg_node *)
+
+   :frrfmtout:`192.168.1.0/24` (dst-only node)
+
+   :frrfmtout:`2001:db8::/32 from fe80::/64` (SADR node)
+
+.. frrfmt:: %pNH (struct nexthop *)
+
+   ``%pNHvv``: :frrfmtout:`via 1.2.3.4, eth0` â€” verbose zebra format
+
+   ``%pNHv``: :frrfmtout:`1.2.3.4, via eth0` â€” slightly less verbose zebra format
+
+   ``%pNHs``: :frrfmtout:`1.2.3.4 if 15` â€” same as :c:func:`nexthop2str()`
+
+.. frrfmt:: %pBD (struct bgp_dest *)
+
+   :frrfmtout:`fe80::1234/64`
+
+   (only available in bgpd.)
+
+.. frrfmt:: %dPF (int)
+
+   :frrfmtout:`AF_INET`
+
+   Prints an `AF_*` / `PF_*` constant.  ``PF`` is used here to avoid confusion
+   with `AFI` constants, even though the FRR codebase prefers `AF_INET` over
+   `PF_INET` & co.
+
+.. frrfmt:: %dSO (int)
+
+   :frrfmtout:`SOCK_STREAM`
+
+General utility formats
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. frrfmt:: %m (no argument)
+
+   :frrfmtout:`Permission denied`
+
+   Prints ``strerror(errno)``.  Does **not** consume any input argument, don't
+   pass ``errno``!
+
+   (This is a GNU extension not specific to FRR.  FRR guarantees it is
+   available on all systems in printfrr, though BSDs support it in printf too.)
+
+.. frrfmt:: %pSQ (char *)
+
+   ([S]tring [Q]uote.)  Like ``%s``, but produce a quoted string.  Options:
+
+      ``n`` - treat ``NULL`` as empty string instead.
+
+      ``q`` - include ``""`` quotation marks.  Note: ``NULL`` is printed as
+      ``(null)``, not ``"(null)"`` unless ``n`` is used too.  This is
+      intentional.
+
+      ``s`` - use escaping suitable for RFC5424 syslog.  This means ``]`` is
+      escaped too.
+
+   If a length is specified (``%*pSQ`` or ``%.*pSQ``), null bytes in the input
+   string do not end the string and are just printed as ``\x00``.
+
+.. frrfmt:: %pSE (char *)
+
+   ([S]tring [E]scape.)  Like ``%s``, but escape special characters.
+   Options:
+
+      ``n`` - treat ``NULL`` as empty string instead.
+
+   Unlike :frrfmt:`%pSQ`, this escapes many more characters that are fine for
+   a quoted string but not on their own.
+
+   If a length is specified (``%*pSE`` or ``%.*pSE``), null bytes in the input
+   string do not end the string and are just printed as ``\x00``.
+
+.. frrfmt:: %pVA (struct va_format *)
+
+   Recursively invoke printfrr, with arguments passed in through:
+
+   .. c:struct:: va_format
+
+      .. c:member:: const char *fmt
+
+         Format string to use for the recursive printfrr call.
+
+      .. c:member:: va_list *va
+
+         Formatting arguments.  Note this is passed as a pointer, not - as in
+         most other places - a direct struct reference.  Internally uses
+         ``va_copy()`` so repeated calls can be made (e.g. for determining
+         output length.)
+
+.. frrfmt:: %pFB (struct fbuf *)
+
+   Insert text from a ``struct fbuf *``, i.e. the output of a call to
+   :c:func:`bprintfrr()`.
+
+.. frrfmt:: %*pHX (void *, char *, unsigned char *)
+
+   ``%pHX``: :frrfmtout:`12 34 56 78`
+
+   ``%pHXc``: :frrfmtout:`12:34:56:78` (separate with [c]olon)
+
+   ``%pHXn``: :frrfmtout:`12345678` (separate with [n]othing)
+
+   Insert hexdump.  This specifier requires a precision or width to be
+   specified.  A precision (``%.*pHX``) takes precedence, but generates a
+   compiler warning since precisions are undefined for ``%p`` in ISO C.  If
+   no precision is given, the width is used instead (and normal handling of
+   the width is suppressed).
+
+   Note that width and precision are ``int`` arguments, not ``size_t``.  Use
+   like::
+
+     char *buf;
+     size_t len;
+
+     snprintfrr(out, sizeof(out), "... %*pHX ...", (int)len, buf);
+
+     /* with padding to width - would generate a warning due to %.*p */
+     FMT_NSTD(snprintfrr(out, sizeof(out), "... %-47.*pHX ...", (int)len, buf));
+
+.. frrfmt:: %*pHS (void *, char *, unsigned char *)
+
+   ``%pHS``: :frrfmtout:`hex.dump`
+
+   This is a complementary format for :frrfmt:`%*pHX` to print the text
+   representation for a hexdump.  Non-printable characters are replaced with
+   a dot.
+
+Integer formats
+^^^^^^^^^^^^^^^
+
+.. note::
+
+   These formats currently only exist for advanced type checking with the
+   ``frr-format`` GCC plugin.  They should not be used directly since they will
+   cause compiler warnings when used without the plugin.  Use with
+   :c:macro:`FMT_NSTD` if necessary.
+
+   It is possible ISO C23 may introduce another format for these, possibly
+   ``%w64d`` discussed in `JTC 1/SC 22/WG 14/N2680 <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2680.pdf>`_.
+
+.. frrfmt:: %Lu (uint64_t)
+
+   :frrfmtout:`12345`
+
+.. frrfmt:: %Ld (int64_t)
+
+   :frrfmtout:`-12345`
 
 Log levels
 ----------
index 57c1ae65ffb3e65cbcd8d4c9e75f989dae4978d4..5118c128433dfadd790c555edcba19778d23a0e8 100644 (file)
@@ -1363,6 +1363,15 @@ Defining Peers
    ``net.core.optmem_max`` to allow the kernel to allocate the necessary option
    memory.
 
+.. clicmd:: bgp listen limit <1-65535>
+
+   Define the maximum number of peers accepted for one BGP instance. This
+   limit is set to 100 by default. Increasing this value will really be
+   possible if more file descriptors are available in the BGP process. This
+   value is defined by the underlying system (ulimit value), and can be
+   overriden by `--limit-fds`. More information is available in chapter
+   (:ref:`common-invocation-options`).
+
 .. clicmd:: coalesce-time (0-4294967295)
 
    The time in milliseconds that BGP will delay before deciding what peers
@@ -3166,17 +3175,15 @@ structure is extended with :clicmd:`show bgp [afi] [safi]`.
 
 .. clicmd:: show bgp [afi] [safi] [all] [wide|json]
 
-.. clicmd:: show bgp <ipv4|ipv6> <unicast|multicast|vpn|labeled-unicast>
+.. clicmd:: show bgp [<ipv4|ipv6> <unicast|multicast|vpn|labeled-unicast|flowspec> | l2vpn evpn]
 
    These commands display BGP routes for the specific routing table indicated by
    the selected afi and the selected safi. If no afi and no safi value is given,
    the command falls back to the default IPv6 routing table.
-   For EVPN prefixes, you can display the full BGP table for this AFI/SAFI
-   using the standard `show bgp [afi] [safi]` syntax.
 
 .. clicmd:: show bgp l2vpn evpn route [type <macip|2|multicast|3|es|4|prefix|5>]
 
-   Additionally, you can also filter this output by route type.
+   EVPN prefixes can also be filtered by EVPN route type.
 
 .. clicmd:: show bgp [afi] [safi] [all] summary [json]
 
@@ -3193,11 +3200,21 @@ structure is extended with :clicmd:`show bgp [afi] [safi]`.
    Show a bgp peer summary for peers that are succesfully exchanging routes
    for the specified address family, and subsequent address-family.
 
-.. clicmd:: show bgp [afi] [safi] neighbor [PEER]
+.. clicmd:: show bgp [afi] [safi] [neighbor [PEER] [routes|advertised-routes|received-routes] [json]
 
    This command shows information on a specific BGP peer of the relevant
    afi and safi selected.
 
+   The ``routes`` keyword displays only routes in this address-family's BGP
+   table that were received by this peer and accepted by inbound policy.
+
+   The ``advertised-routes`` keyword displays only the routes in this
+   address-family's BGP table that were permitted by outbound policy and
+   advertised to to this peer.
+
+   The ``received-routes`` keyword displays all routes belonging to this
+   address-family (prior to inbound policy) that were received by this peer.
+
 .. clicmd:: show bgp [afi] [safi] [all] dampening dampened-paths [wide|json]
 
    Display paths suppressed due to dampening of the selected afi and safi
@@ -3359,6 +3376,25 @@ Displaying Routes by AS Path
 
    Print a summary of neighbor connections for the specified AFI/SAFI combination.
 
+Displaying Routes by Route Distinguisher
+----------------------------------------
+
+.. clicmd:: show bgp [<ipv4|ipv6> vpn | l2vpn evpn [route]] rd <all|RD>
+
+   For L3VPN and EVPN address-families, routes can be displayed on a per-RD
+   (Route Distinguisher) basis or for all RD's.
+
+.. clicmd:: show bgp l2vpn evpn rd <all|RD> [overlay | tags]
+
+   Use the ``overlay`` or ``tags`` keywords to display the overlay/tag
+   information about the EVPN prefixes in the selected Route Distinguisher.
+
+.. clicmd:: show bgp l2vpn evpn route rd <all|RD> mac <MAC> [ip <MAC>] [json]
+
+   For EVPN Type 2 (macip) routes, a MAC address (and optionally an IP address)
+   can be supplied to the command to only display matching prefixes in the
+   specified RD.
+
 Displaying Update Group Information
 -----------------------------------
 
index e5cd1de2012cd35d07858581f630240df142627b..205b25e53e04461de82857bfbbbf3648187a5fea 100644 (file)
@@ -1020,3 +1020,68 @@ For protocols requiring an IPv6 router-id, the following commands are available:
 .. clicmd:: show ipv6 router-id [vrf NAME]
 
    Display the user configured IPv6 router-id.
+
+
+Debugging
+=========
+
+.. clicmd:: debug zebra mpls [detailed]
+
+   MPLS-related events and information.
+
+.. clicmd:: debug zebra events
+
+   Zebra events
+
+.. clicmd:: debug zebra nht [detailed]
+
+   Nexthop-tracking / reachability information
+
+.. clicmd:: debug zebra vxlan
+
+   VxLAN (EVPN) events
+
+.. clicmd:: debug zebra pseudowires
+
+   Pseudowire events.
+
+.. clicmd:: debug zebra packet [<recv|send>] [detail]
+
+   ZAPI message and packet details
+
+.. clicmd:: debug zebra kernel
+
+   Kernel / OS events.
+
+.. clicmd:: debug zebra kernel msgdump [<recv|send>]
+
+   Raw OS (netlink) message details.
+
+.. clicmd:: debug zebra rib [detailed]
+
+   RIB events.
+
+.. clicmd:: debug zebra fpm
+
+   FPM (forwarding-plane manager) events.
+
+.. clicmd:: debug zebra dplane [detailed]
+
+   Dataplane / FIB events.
+
+.. clicmd:: debug zebra pbr
+
+   PBR (policy-based routing) events.
+
+.. clicmd:: debug zebra mlag
+
+   MLAG events.
+
+.. clicmd:: debug zebra evpn mh <es|mac|neigh|nh>
+
+   EVPN multi-hop events.
+
+.. clicmd:: debug zebra nexthop [detail]
+
+   Nexthop and nexthop-group events.
+
index 17ef95c68727290ee9885855cd9814d08220b34d..84393981497894a27dd8647b50c2f7116f29937d 100644 (file)
@@ -730,80 +730,99 @@ int nexthop_str2backups(const char *str, int *num_backups,
  *             nexthop2str()
  */
 printfrr_ext_autoreg_p("NH", printfrr_nh)
-static ssize_t printfrr_nh(char *buf, size_t bsz, const char *fmt,
-                          int prec, const void *ptr)
+static ssize_t printfrr_nh(struct fbuf *buf, struct printfrr_eargs *ea,
+                          const void *ptr)
 {
        const struct nexthop *nexthop = ptr;
-       struct fbuf fb = { .buf = buf, .pos = buf, .len = bsz - 1 };
        bool do_ifi = false;
-       const char *s, *v_is = "", *v_via = "", *v_viaif = "via ";
-       ssize_t ret = 3;
+       const char *v_is = "", *v_via = "", *v_viaif = "via ";
+       ssize_t ret = 0;
 
-       /* NULL-check */
-       if (nexthop == NULL) {
-               if (fmt[2] == 'v' && fmt[3] == 'v')
-                       ret++;
-
-               strlcpy(buf, "NULL", bsz);
-
-               return ret;
-       }
-
-       switch (fmt[2]) {
+       switch (*ea->fmt) {
        case 'v':
-               if (fmt[3] == 'v') {
+               ea->fmt++;
+               if (*ea->fmt == 'v') {
                        v_is = "is ";
                        v_via = "via ";
                        v_viaif = "";
-                       ret++;
+                       ea->fmt++;
                }
 
+               if (!nexthop)
+                       return bputs(buf, "(null)");
+
                switch (nexthop->type) {
                case NEXTHOP_TYPE_IPV4:
                case NEXTHOP_TYPE_IPV4_IFINDEX:
-                       bprintfrr(&fb, "%s%pI4", v_via, &nexthop->gate.ipv4);
+                       ret += bprintfrr(buf, "%s%pI4", v_via,
+                                        &nexthop->gate.ipv4);
                        do_ifi = true;
                        break;
                case NEXTHOP_TYPE_IPV6:
                case NEXTHOP_TYPE_IPV6_IFINDEX:
-                       bprintfrr(&fb, "%s%pI6", v_via, &nexthop->gate.ipv6);
+                       ret += bprintfrr(buf, "%s%pI6", v_via,
+                                        &nexthop->gate.ipv6);
                        do_ifi = true;
                        break;
                case NEXTHOP_TYPE_IFINDEX:
-                       bprintfrr(&fb, "%sdirectly connected, %s", v_is,
-                               ifindex2ifname(nexthop->ifindex,
-                                              nexthop->vrf_id));
+                       ret += bprintfrr(buf, "%sdirectly connected, %s", v_is,
+                                        ifindex2ifname(nexthop->ifindex,
+                                                       nexthop->vrf_id));
                        break;
                case NEXTHOP_TYPE_BLACKHOLE:
+                       ret += bputs(buf, "unreachable");
+
                        switch (nexthop->bh_type) {
                        case BLACKHOLE_REJECT:
-                               s = " (ICMP unreachable)";
+                               ret += bputs(buf, " (ICMP unreachable)");
                                break;
                        case BLACKHOLE_ADMINPROHIB:
-                               s = " (ICMP admin-prohibited)";
+                               ret += bputs(buf, " (ICMP admin-prohibited)");
                                break;
                        case BLACKHOLE_NULL:
-                               s = " (blackhole)";
+                               ret += bputs(buf, " (blackhole)");
                                break;
                        default:
-                               s = "";
                                break;
                        }
-                       bprintfrr(&fb, "unreachable%s", s);
                        break;
                default:
                        break;
                }
                if (do_ifi && nexthop->ifindex)
-                       bprintfrr(&fb, ", %s%s", v_viaif, ifindex2ifname(
-                                       nexthop->ifindex,
-                                       nexthop->vrf_id));
+                       ret += bprintfrr(buf, ", %s%s", v_viaif,
+                                        ifindex2ifname(nexthop->ifindex,
+                                                       nexthop->vrf_id));
 
-               *fb.pos = '\0';
                return ret;
        case 's':
-               nexthop2str(nexthop, buf, bsz);
-               return 3;
+               ea->fmt++;
+
+               if (!nexthop)
+                       return bputs(buf, "(null)");
+
+               switch (nexthop->type) {
+               case NEXTHOP_TYPE_IFINDEX:
+                       ret += bprintfrr(buf, "if %u", nexthop->ifindex);
+                       break;
+               case NEXTHOP_TYPE_IPV4:
+               case NEXTHOP_TYPE_IPV4_IFINDEX:
+                       ret += bprintfrr(buf, "%pI4 if %u", &nexthop->gate.ipv4,
+                                        nexthop->ifindex);
+                       break;
+               case NEXTHOP_TYPE_IPV6:
+               case NEXTHOP_TYPE_IPV6_IFINDEX:
+                       ret += bprintfrr(buf, "%pI6 if %u", &nexthop->gate.ipv6,
+                                        nexthop->ifindex);
+                       break;
+               case NEXTHOP_TYPE_BLACKHOLE:
+                       ret += bputs(buf, "blackhole");
+                       break;
+               default:
+                       ret += bputs(buf, "unknown");
+                       break;
+               }
+               return ret;
        }
-       return 0;
+       return -1;
 }
index afc4d3d5c22f5bfaa05b446e0eb952a79b61d19d..7dbb5f07f0fd53af930d3fb0eb3bbc3a33c6adee 100644 (file)
@@ -1198,15 +1198,6 @@ int netmask_str2prefix_str(const char *net_str, const char *mask_str,
        return 1;
 }
 
-/* Utility function for making IPv6 address string. */
-const char *inet6_ntoa(struct in6_addr addr)
-{
-       static char buf[INET6_ADDRSTRLEN];
-
-       inet_ntop(AF_INET6, &addr, buf, INET6_ADDRSTRLEN);
-       return buf;
-}
-
 /* converts to internal representation of mac address
  * returns 1 on success, 0 otherwise
  * format accepted: AA:BB:CC:DD:EE:FF
@@ -1361,92 +1352,92 @@ char *evpn_es_df_alg2str(uint8_t df_alg, char *buf, int buf_len)
 }
 
 printfrr_ext_autoreg_p("EA", printfrr_ea)
-static ssize_t printfrr_ea(char *buf, size_t bsz, const char *fmt,
-                          int prec, const void *ptr)
+static ssize_t printfrr_ea(struct fbuf *buf, struct printfrr_eargs *ea,
+                          const void *ptr)
 {
        const struct ethaddr *mac = ptr;
+       char cbuf[ETHER_ADDR_STRLEN];
 
-       if (mac)
-               prefix_mac2str(mac, buf, bsz);
-       else
-               strlcpy(buf, "NULL", bsz);
+       if (!mac)
+               return bputs(buf, "(null)");
 
-       return 2;
+       /* need real length even if buffer is too short */
+       prefix_mac2str(mac, cbuf, sizeof(cbuf));
+       return bputs(buf, cbuf);
 }
 
 printfrr_ext_autoreg_p("IA", printfrr_ia)
-static ssize_t printfrr_ia(char *buf, size_t bsz, const char *fmt,
-                          int prec, const void *ptr)
+static ssize_t printfrr_ia(struct fbuf *buf, struct printfrr_eargs *ea,
+                          const void *ptr)
 {
        const struct ipaddr *ipa = ptr;
+       char cbuf[INET6_ADDRSTRLEN];
 
-       if (ipa)
-               ipaddr2str(ipa, buf, bsz);
-       else
-               strlcpy(buf, "NULL", bsz);
+       if (!ipa)
+               return bputs(buf, "(null)");
 
-       return 2;
+       ipaddr2str(ipa, cbuf, sizeof(cbuf));
+       return bputs(buf, cbuf);
 }
 
 printfrr_ext_autoreg_p("I4", printfrr_i4)
-static ssize_t printfrr_i4(char *buf, size_t bsz, const char *fmt,
-                          int prec, const void *ptr)
+static ssize_t printfrr_i4(struct fbuf *buf, struct printfrr_eargs *ea,
+                          const void *ptr)
 {
-       if (ptr)
-               inet_ntop(AF_INET, ptr, buf, bsz);
-       else
-               strlcpy(buf, "NULL", bsz);
+       char cbuf[INET_ADDRSTRLEN];
 
-       return 2;
+       if (!ptr)
+               return bputs(buf, "(null)");
+
+       inet_ntop(AF_INET, ptr, cbuf, sizeof(cbuf));
+       return bputs(buf, cbuf);
 }
 
 printfrr_ext_autoreg_p("I6", printfrr_i6)
-static ssize_t printfrr_i6(char *buf, size_t bsz, const char *fmt,
-                          int prec, const void *ptr)
+static ssize_t printfrr_i6(struct fbuf *buf, struct printfrr_eargs *ea,
+                          const void *ptr)
 {
-       if (ptr)
-               inet_ntop(AF_INET6, ptr, buf, bsz);
-       else
-               strlcpy(buf, "NULL", bsz);
+       char cbuf[INET6_ADDRSTRLEN];
 
-       return 2;
+       if (!ptr)
+               return bputs(buf, "(null)");
+
+       inet_ntop(AF_INET6, ptr, cbuf, sizeof(cbuf));
+       return bputs(buf, cbuf);
 }
 
 printfrr_ext_autoreg_p("FX", printfrr_pfx)
-static ssize_t printfrr_pfx(char *buf, size_t bsz, const char *fmt,
-                           int prec, const void *ptr)
+static ssize_t printfrr_pfx(struct fbuf *buf, struct printfrr_eargs *ea,
+                           const void *ptr)
 {
-       if (ptr)
-               prefix2str(ptr, buf, bsz);
-       else
-               strlcpy(buf, "NULL", bsz);
+       char cbuf[PREFIX_STRLEN];
+
+       if (!ptr)
+               return bputs(buf, "(null)");
 
-       return 2;
+       prefix2str(ptr, cbuf, sizeof(cbuf));
+       return bputs(buf, cbuf);
 }
 
 printfrr_ext_autoreg_p("SG4", printfrr_psg)
-static ssize_t printfrr_psg(char *buf, size_t bsz, const char *fmt,
-                           int prec, const void *ptr)
+static ssize_t printfrr_psg(struct fbuf *buf, struct printfrr_eargs *ea,
+                           const void *ptr)
 {
        const struct prefix_sg *sg = ptr;
-       struct fbuf fb = { .buf = buf, .pos = buf, .len = bsz - 1 };
+       ssize_t ret = 0;
 
-       if (sg) {
-               if (sg->src.s_addr == INADDR_ANY)
-                       bprintfrr(&fb, "(*,");
-               else
-                       bprintfrr(&fb, "(%pI4,", &sg->src);
-
-               if (sg->grp.s_addr == INADDR_ANY)
-                       bprintfrr(&fb, "*)");
-               else
-                       bprintfrr(&fb, "%pI4)", &sg->grp);
+       if (!sg)
+               return bputs(buf, "(null)");
 
-               fb.pos[0] = '\0';
+       if (sg->src.s_addr == INADDR_ANY)
+               ret += bputs(buf, "(*,");
+       else
+               ret += bprintfrr(buf, "(%pI4,", &sg->src);
 
-       } else {
-               strlcpy(buf, "NULL", bsz);
-       }
+       if (sg->grp.s_addr == INADDR_ANY)
+               ret += bputs(buf, "*)");
+       else
+               ret += bprintfrr(buf, "%pI4)", &sg->grp);
 
-       return 3;
+       return ret;
 }
index b2f3b0592f98982857c08145dab0453b9deaca50..d7ee1b8e4c336abb77e143d7bac6faa408436426 100644 (file)
@@ -504,8 +504,6 @@ extern void apply_mask_ipv6(struct prefix_ipv6 *);
 extern int ip6_masklen(struct in6_addr);
 extern void masklen2ip6(const int, struct in6_addr *);
 
-extern const char *inet6_ntoa(struct in6_addr);
-
 extern int is_zero_mac(const struct ethaddr *mac);
 extern bool is_mcast_mac(const struct ethaddr *mac);
 extern bool is_bcast_mac(const struct ethaddr *mac);
index 29ca26ad5da184d7e9653e4c7704c7ecca82e109..114790123688d0f4e1b2420d8f341090b188c3e7 100644 (file)
@@ -210,15 +210,16 @@ void printfrr_ext_reg(const struct printfrr_ext *ext)
        exts[i] = ext;
 }
 
-ssize_t printfrr_extp(char *buf, size_t sz, const char *fmt, int prec,
+ssize_t printfrr_extp(struct fbuf *buf, struct printfrr_eargs *ea,
                      const void *ptr)
 {
+       const char *fmt = ea->fmt;
        const struct printfrr_ext *ext;
        size_t i;
 
        for (i = ext_offsets[fmt[0] - 'A']; i < MAXEXT; i++) {
                if (!entries[i].fmt[0] || entries[i].fmt[0] > fmt[0])
-                       return 0;
+                       return -1;
                if (entries[i].fmt[1] && entries[i].fmt[1] != fmt[1])
                        continue;
                ext = exts[i];
@@ -226,20 +227,22 @@ ssize_t printfrr_extp(char *buf, size_t sz, const char *fmt, int prec,
                        continue;
                if (strncmp(ext->match, fmt, strlen(ext->match)))
                        continue;
-               return ext->print_ptr(buf, sz, fmt, prec, ptr);
+               ea->fmt += strlen(ext->match);
+               return ext->print_ptr(buf, ea, ptr);
        }
-       return 0;
+       return -1;
 }
 
-ssize_t printfrr_exti(char *buf, size_t sz, const char *fmt, int prec,
+ssize_t printfrr_exti(struct fbuf *buf, struct printfrr_eargs *ea,
                      uintmax_t num)
 {
+       const char *fmt = ea->fmt;
        const struct printfrr_ext *ext;
        size_t i;
 
        for (i = ext_offsets[fmt[0] - 'A']; i < MAXEXT; i++) {
                if (!entries[i].fmt[0] || entries[i].fmt[0] > fmt[0])
-                       return 0;
+                       return -1;
                if (entries[i].fmt[1] && entries[i].fmt[1] != fmt[1])
                        continue;
                ext = exts[i];
@@ -247,7 +250,48 @@ ssize_t printfrr_exti(char *buf, size_t sz, const char *fmt, int prec,
                        continue;
                if (strncmp(ext->match, fmt, strlen(ext->match)))
                        continue;
-               return ext->print_int(buf, sz, fmt, prec, num);
+               ea->fmt += strlen(ext->match);
+               return ext->print_int(buf, ea, num);
        }
-       return 0;
+       return -1;
+}
+
+printfrr_ext_autoreg_p("FB", printfrr_fb)
+static ssize_t printfrr_fb(struct fbuf *out, struct printfrr_eargs *ea,
+                          const void *ptr)
+{
+       const struct fbuf *in = ptr;
+       ptrdiff_t copy_len;
+
+       if (!in)
+               return bputs(out, "NULL");
+
+       if (out) {
+               copy_len = MIN(in->pos - in->buf,
+                              out->buf + out->len - out->pos);
+               if (copy_len > 0) {
+                       memcpy(out->pos, in->buf, copy_len);
+                       out->pos += copy_len;
+               }
+       }
+
+       return in->pos - in->buf;
+}
+
+printfrr_ext_autoreg_p("VA", printfrr_va)
+static ssize_t printfrr_va(struct fbuf *buf, struct printfrr_eargs *ea,
+                          const void *ptr)
+{
+       const struct va_format *vaf = ptr;
+       va_list ap;
+
+       if (!vaf || !vaf->fmt || !vaf->va)
+               return bputs(buf, "NULL");
+
+       /* make sure we don't alter the data passed in - especially since
+        * bprintfrr (and thus this) might be called on the same format twice,
+        * when allocating a larger buffer in asnprintfrr()
+        */
+       va_copy(ap, *vaf->va);
+       return vbprintfrr(buf, vaf->fmt, ap);
 }
index 335e09872e29470fedb21c82d85aac9324a54986..bac80e801c7cf8865869cc261e6f8e100f1eef99 100644 (file)
@@ -100,6 +100,8 @@ int _frr_find_arguments(const char *, va_list, union arg **) DSO_LOCAL;
 int    _frr_find_warguments(const wchar_t *, va_list, union arg **) DSO_LOCAL;
 #endif
 
-/* returns number of bytes consumed for extended specifier */
-ssize_t printfrr_extp(char *, size_t, const char *, int, const void *) DSO_LOCAL;
-ssize_t printfrr_exti(char *, size_t, const char *, int, uintmax_t) DSO_LOCAL;
+/* returns number of bytes needed for full output, or -1 */
+ssize_t printfrr_extp(struct fbuf *, struct printfrr_eargs *ea, const void *)
+       DSO_LOCAL;
+ssize_t printfrr_exti(struct fbuf *, struct printfrr_eargs *ea, uintmax_t)
+       DSO_LOCAL;
index 8c7a8a58c4f0c94aa4479637fcbaeefec0e766aa..49fa2b718f0455e5297632c7ae7a200b32921fdf 100644 (file)
@@ -147,7 +147,7 @@ __wcsconv(wchar_t *wcsarg, int prec)
  * Non-MT-safe version
  */
 ssize_t
-vbprintfrr(struct fbuf *cb, const char *fmt0, va_list ap)
+vbprintfrr(struct fbuf *cb_in, const char *fmt0, va_list ap)
 {
        const char *fmt;        /* format string */
        int ch;                 /* character from fmt */
@@ -177,6 +177,9 @@ vbprintfrr(struct fbuf *cb, const char *fmt0, va_list ap)
        int nextarg;            /* 1-based argument index */
        va_list orgap;          /* original argument pointer */
        char *convbuf;          /* wide to multibyte conversion result */
+       char *extstart = NULL;  /* where printfrr_ext* started printing */
+       struct fbuf cb_copy, *cb;
+       struct fmt_outpos *opos;
 
        static const char xdigs_lower[16] = "0123456789abcdef";
        static const char xdigs_upper[16] = "0123456789ABCDEF";
@@ -268,6 +271,16 @@ vbprintfrr(struct fbuf *cb, const char *fmt0, va_list ap)
        argtable = NULL;
        nextarg = 1;
        va_copy(orgap, ap);
+
+       if (cb_in) {
+               /* prevent printfrr exts from polluting cb->outpos */
+               cb_copy = *cb_in;
+               cb_copy.outpos = NULL;
+               cb_copy.outpos_n = cb_copy.outpos_i = 0;
+               cb = &cb_copy;
+       } else
+               cb = NULL;
+
        io_init(&io, cb);
        ret = 0;
 
@@ -292,11 +305,16 @@ vbprintfrr(struct fbuf *cb, const char *fmt0, va_list ap)
 
                flags = 0;
                dprec = 0;
-               width = 0;
+               width = -1;
                prec = -1;
                sign = '\0';
                ox[1] = '\0';
 
+               if (cb_in && cb_in->outpos_i < cb_in->outpos_n)
+                       opos = &cb_in->outpos[cb_in->outpos_i];
+               else
+                       opos = NULL;
+
 rflag:         ch = *fmt++;
 reswitch:      switch (ch) {
                case ' ':
@@ -438,15 +456,24 @@ reswitch: switch (ch) {
                                ulval = SARG();
 
                        if (printfrr_ext_char(fmt[0])) {
-                               n2 = printfrr_exti(buf, sizeof(buf), fmt, prec,
+                               struct printfrr_eargs ea = {
+                                       .fmt = fmt,
+                                       .precision = prec,
+                                       .width = width,
+                                       .alt_repr = !!(flags & ALT),
+                                       .leftadj = !!(flags & LADJUST),
+                               };
+
+                               if (cb)
+                                       extstart = cb->pos;
+
+                               size = printfrr_exti(cb, &ea,
                                                (flags & INTMAX_SIZE) ? ujval
                                                : (uintmax_t)ulval);
-                               if (n2 > 0) {
-                                       fmt += n2;
-                                       cp = buf;
-                                       size = strlen(cp);
-                                       sign = '\0';
-                                       break;
+                               if (size >= 0) {
+                                       fmt = ea.fmt;
+                                       width = ea.width;
+                                       goto ext_printed;
                                }
                        }
                        if (flags & INTMAX_SIZE) {
@@ -503,35 +530,6 @@ reswitch:  switch (ch) {
                        size = (prec >= 0) ? strnlen(cp, prec) : strlen(cp);
                        sign = '\0';
                        break;
-#ifdef DANGEROUS_PERCENT_N
-               /* FRR does not use %n in printf formats.  This is just left
-                * here in case someone tries to use %n and starts debugging
-                * why the f* it doesn't work
-                */
-               case 'n':
-                       /*
-                        * Assignment-like behavior is specified if the
-                        * value overflows or is otherwise unrepresentable.
-                        * C99 says to use `signed char' for %hhn conversions.
-                        */
-                       if (flags & LLONGINT)
-                               *GETARG(long long *) = ret;
-                       else if (flags & SIZET)
-                               *GETARG(ssize_t *) = (ssize_t)ret;
-                       else if (flags & PTRDIFFT)
-                               *GETARG(ptrdiff_t *) = ret;
-                       else if (flags & INTMAXT)
-                               *GETARG(intmax_t *) = ret;
-                       else if (flags & LONGINT)
-                               *GETARG(long *) = ret;
-                       else if (flags & SHORTINT)
-                               *GETARG(short *) = ret;
-                       else if (flags & CHARINT)
-                               *GETARG(signed char *) = ret;
-                       else
-                               *GETARG(int *) = ret;
-                       continue;       /* no output */
-#endif
                case 'O':
                        flags |= LONGINT;
                        /*FALLTHROUGH*/
@@ -551,14 +549,24 @@ reswitch: switch (ch) {
                         *      -- ANSI X3J11
                         */
                        ptrval = GETARG(void *);
-                       if (printfrr_ext_char(fmt[0]) &&
-                                       (n2 = printfrr_extp(buf, sizeof(buf),
-                                               fmt, prec, ptrval)) > 0) {
-                               fmt += n2;
-                               cp = buf;
-                               size = strlen(cp);
-                               sign = '\0';
-                               break;
+                       if (printfrr_ext_char(fmt[0])) {
+                               struct printfrr_eargs ea = {
+                                       .fmt = fmt,
+                                       .precision = prec,
+                                       .width = width,
+                                       .alt_repr = !!(flags & ALT),
+                                       .leftadj = !!(flags & LADJUST),
+                               };
+
+                               if (cb)
+                                       extstart = cb->pos;
+
+                               size = printfrr_extp(cb, &ea, ptrval);
+                               if (size >= 0) {
+                                       fmt = ea.fmt;
+                                       width = ea.width;
+                                       goto ext_printed;
+                               }
                        }
                        ujval = (uintmax_t)(uintptr_t)ptrval;
                        base = 16;
@@ -662,6 +670,7 @@ number:                     if ((dprec = prec) >= 0)
                        cp = buf;
                        size = 1;
                        sign = '\0';
+                       opos = NULL;
                        break;
                }
 
@@ -679,6 +688,9 @@ number:                     if ((dprec = prec) >= 0)
                 * Compute actual size, so we know how much to pad.
                 * size excludes decimal prec; realsz includes it.
                 */
+               if (width < 0)
+                       width = 0;
+
                realsz = dprec > size ? dprec : size;
                if (sign)
                        realsz++;
@@ -686,7 +698,7 @@ number:                     if ((dprec = prec) >= 0)
                        realsz += 2;
 
                prsize = width > realsz ? width : realsz;
-               if ((unsigned)ret + prsize > INT_MAX) {
+               if ((unsigned int)ret + prsize > INT_MAX) {
                        ret = EOF;
                        errno = EOVERFLOW;
                        goto error;
@@ -696,6 +708,9 @@ number:                     if ((dprec = prec) >= 0)
                if ((flags & (LADJUST|ZEROPAD)) == 0)
                        PAD(width - realsz, blanks);
 
+               if (opos)
+                       opos->off_start = cb->pos - cb->buf;
+
                /* prefix */
                if (sign)
                        PRINT(&sign, 1);
@@ -713,6 +728,74 @@ number:                    if ((dprec = prec) >= 0)
                /* leading zeroes from decimal precision */
                PAD(dprec - size, zeroes);
                PRINT(cp, size);
+
+               if (opos) {
+                       opos->off_end = cb->pos - cb->buf;
+                       cb_in->outpos_i++;
+               }
+
+               /* left-adjusting padding (always blank) */
+               if (flags & LADJUST)
+                       PAD(width - realsz, blanks);
+
+               /* finally, adjust ret */
+               ret += prsize;
+
+               FLUSH();        /* copy out the I/O vectors */
+               continue;
+
+ext_printed:
+               /* when we arrive here, a printfrr extension has written to cb
+                * (if non-NULL), but we still need to handle padding.  The
+                * original cb->pos is in extstart;  the return value from the
+                * ext is in size.
+                *
+                * Keep analogous to code above please.
+                */
+
+               if (width < 0)
+                       width = 0;
+
+               realsz = size;
+               prsize = width > realsz ? width : realsz;
+               if ((unsigned int)ret + prsize > INT_MAX) {
+                       ret = EOF;
+                       errno = EOVERFLOW;
+                       goto error;
+               }
+
+               /* right-adjusting blank padding - need to move the chars
+                * that the extension has already written.  Should be very
+                * rare.
+                */
+               if (cb && width > size && (flags & (LADJUST|ZEROPAD)) == 0) {
+                       size_t nwritten = cb->pos - extstart;
+                       size_t navail = cb->buf + cb->len - extstart;
+                       size_t npad = width - realsz;
+                       size_t nmove;
+
+                       if (navail < npad)
+                               navail = 0;
+                       else
+                               navail -= npad;
+                       nmove = MIN(nwritten, navail);
+
+                       memmove(extstart + npad, extstart, nmove);
+
+                       cb->pos = extstart;
+                       PAD(npad, blanks);
+                       cb->pos += nmove;
+                       extstart += npad;
+               }
+
+               io.avail = cb ? cb->len - (cb->pos - cb->buf) : 0;
+
+               if (opos && extstart <= cb->pos) {
+                       opos->off_start = extstart - cb->buf;
+                       opos->off_end = cb->pos - cb->buf;
+                       cb_in->outpos_i++;
+               }
+
                /* left-adjusting padding (always blank) */
                if (flags & LADJUST)
                        PAD(width - realsz, blanks);
@@ -730,6 +813,8 @@ error:
                free(convbuf);
        if ((argtable != NULL) && (argtable != statargtable))
                free (argtable);
+       if (cb_in)
+               cb_in->pos = cb->pos;
        return (ret);
        /* NOTREACHED */
 }
index 418e839d97ce5bbe9c6119d5abc13f32c722c02a..4338ac3a2fa365e741a5b338f79df25a307f3eb6 100644 (file)
 extern "C" {
 #endif
 
+struct fmt_outpos {
+       unsigned int off_start, off_end;
+};
+
 struct fbuf {
        char *buf;
        char *pos;
        size_t len;
+
+       struct fmt_outpos *outpos;
+       size_t outpos_n, outpos_i;
 };
 
 #define at(a, b) PRINTFRR(a, b)
@@ -105,6 +112,8 @@ char  *asnprintfrr(struct memtype *mt, char *out, size_t sz,
  */
 #define printfrr_ext_char(ch) ((ch) >= 'A' && (ch) <= 'Z')
 
+struct printfrr_eargs;
+
 struct printfrr_ext {
        /* embedded string to minimize cache line pollution */
        char match[8];
@@ -112,23 +121,80 @@ struct printfrr_ext {
        /* both can be given, if not the code continues searching
         * (you can do %pX and %dX in 2 different entries)
         *
-        * return value: number of bytes consumed from the format string, so
-        * you can consume extra flags (e.g. register for "%pX", consume
-        * "%pXfoo" or "%pXbar" for flags.)  Convention is to make those flags
-        * lowercase letters or numbers.
+        * return value: number of bytes that would be printed if the buffer
+        * was large enough.  be careful about not under-reporting this;
+        * otherwise asnprintf() & co. will get broken.  Returning -1 means
+        * something went wrong & default %p/%d handling should be executed.
         *
-        * bsz is a compile-time constant in printf;  it's gonna be relatively
-        * small.  This isn't designed to print Shakespeare from a pointer.
+        * to consume extra input flags after %pXY, increment *fmt.  It points
+        * at the first character after %pXY at entry.  Convention is to make
+        * those flags lowercase letters or numbers.
+        */
+       ssize_t (*print_ptr)(struct fbuf *buf, struct printfrr_eargs *info,
+                            const void *);
+       ssize_t (*print_int)(struct fbuf *buf, struct printfrr_eargs *info,
+                            uintmax_t);
+};
+
+/* additional information passed to extended formatters */
+
+struct printfrr_eargs {
+       /* position in the format string.  Points to directly after the
+        * extension specifier.  Increment when consuming extra "flag
+        * characters".
+        */
+       const char *fmt;
+
+       /* %.1234x / %.*x
+        * not POSIX compatible when used with %p, will cause warnings from
+        * GCC & clang.  Usable with %d.  Not used by the printfrr() itself
+        * for extension specifiers, so essentially available as a "free"
+        * parameter.  -1 if not specified.  Value in the format string
+        * cannot be negative, but negative values can be passed with %.*x
+        */
+       int precision;
+
+       /* %1234x / %*x
+        * regular width specification.  Internally handled by printfrr(), set
+        * to 0 if consumed by the extension in order to suppress standard
+        * width/padding behavior.  0 if not specified.
         *
-        * prec is the precision specifier (the 999 in "%.999p")  -1 means
-        * none given (value in the format string cannot be negative)
+        * NB: always positive, even if a negative value is passed in with
+        * %*x.  (The sign is used for the - flag.)
+        */
+       int width;
+
+       /* %#x
+        * "alternate representation" flag, not POSIX compatible when used
+        * with %p or %d, will cause warnings from GCC & clang.  Not used by
+        * printfrr() itself for extension specifiers.
         */
-       ssize_t (*print_ptr)(char *buf, size_t bsz, const char *fmt, int prec,
-                       const void *);
-       ssize_t (*print_int)(char *buf, size_t bsz, const char *fmt, int prec,
-                       uintmax_t);
+       bool alt_repr;
+
+       /* %-x
+        * left-pad flag.  Internally handled by printfrr() if width is
+        * nonzero.  Only use if the extension sets width to 0.
+        */
+       bool leftadj;
 };
 
+/* for any extension that needs a buffer length */
+
+static inline ssize_t printfrr_ext_len(struct printfrr_eargs *ea)
+{
+       ssize_t rv;
+
+       if (ea->precision >= 0)
+               rv = ea->precision;
+       else if (ea->width >= 0) {
+               rv = ea->width;
+               ea->width = -1;
+       } else
+               rv = -1;
+
+       return rv;
+}
+
 /* no locking - must be called when single threaded (e.g. at startup.)
  * this restriction hopefully won't be a huge bother considering normal usage
  * scenarios...
@@ -136,7 +202,7 @@ struct printfrr_ext {
 void printfrr_ext_reg(const struct printfrr_ext *);
 
 #define printfrr_ext_autoreg_p(matchs, print_fn)                               \
-       static ssize_t print_fn(char *, size_t, const char *, int,             \
+       static ssize_t print_fn(struct fbuf *, struct printfrr_eargs *,        \
                                const void *);                                 \
        static const struct printfrr_ext _printext_##print_fn = {              \
                .match = matchs,                                               \
@@ -149,7 +215,8 @@ void printfrr_ext_reg(const struct printfrr_ext *);
        /* end */
 
 #define printfrr_ext_autoreg_i(matchs, print_fn)                               \
-       static ssize_t print_fn(char *, size_t, const char *, int, uintmax_t); \
+       static ssize_t print_fn(struct fbuf *, struct printfrr_eargs *,        \
+                               uintmax_t);                                    \
        static const struct printfrr_ext _printext_##print_fn = {              \
                .match = matchs,                                               \
                .print_int = print_fn,                                         \
@@ -160,7 +227,11 @@ void printfrr_ext_reg(const struct printfrr_ext *);
        }                                                                      \
        /* end */
 
-/* fbuf helper functions */
+/* fbuf helper functions - note all 3 of these return the length that would
+ * be written regardless of how much space was available in the buffer, as
+ * needed for implementing printfrr extensions.  (They also accept NULL buf
+ * for that.)
+ */
 
 static inline ssize_t bputs(struct fbuf *buf, const char *str)
 {
@@ -184,6 +255,64 @@ static inline ssize_t bputch(struct fbuf *buf, char ch)
        return 1;
 }
 
+static inline ssize_t bputhex(struct fbuf *buf, uint8_t val)
+{
+       static const char hexch[] = "0123456789abcdef";
+
+       if (buf && buf->pos < buf->buf + buf->len)
+               *buf->pos++ = hexch[(val >> 4) & 0xf];
+       if (buf && buf->pos < buf->buf + buf->len)
+               *buf->pos++ = hexch[val & 0xf];
+       return 2;
+}
+
+/* %pVA extension, equivalent to Linux kernel %pV */
+
+struct va_format {
+       const char *fmt;
+       va_list *va;
+};
+
+#ifdef _FRR_ATTRIBUTE_PRINTFRR
+#pragma FRR printfrr_ext "%pFB" (struct fbuf *)
+#pragma FRR printfrr_ext "%pVA" (struct va_format *)
+
+#pragma FRR printfrr_ext "%pHX" (signed char *)
+#pragma FRR printfrr_ext "%pHX" (unsigned char *)
+#pragma FRR printfrr_ext "%pHX" (void *)
+#pragma FRR printfrr_ext "%pHS" (signed char *)
+#pragma FRR printfrr_ext "%pHS" (unsigned char *)
+#pragma FRR printfrr_ext "%pHS" (void *)
+
+#pragma FRR printfrr_ext "%pSE" (char *)
+#pragma FRR printfrr_ext "%pSQ" (char *)
+#endif
+
+/* when using non-ISO-C compatible extension specifiers... */
+
+#ifdef _FRR_ATTRIBUTE_PRINTFRR
+#define FMT_NSTD_BEGIN
+#define FMT_NSTD_END
+#else /* !_FRR_ATTRIBUTE_PRINTFRR */
+#define FMT_NSTD_BEGIN \
+       _Pragma("GCC diagnostic push")                                         \
+       _Pragma("GCC diagnostic ignored \"-Wformat\"")                         \
+       /* end */
+#define FMT_NSTD_END \
+       _Pragma("GCC diagnostic pop")                                          \
+       /* end */
+#endif
+
+#define FMT_NSTD(expr)                                                         \
+       ({                                                                     \
+               typeof(expr) _v;                                               \
+               FMT_NSTD_BEGIN                                                 \
+               _v = expr;                                                     \
+               FMT_NSTD_END                                                   \
+               _v;                                                            \
+       })                                                                     \
+       /* end */
+
 #ifdef __cplusplus
 }
 #endif
index d65235b41cb3435fdd6abf526be05b5ed93cc3f8..e6340a1743dc00d0ed232aa6f1ba91f3433cc71f 100644 (file)
@@ -664,54 +664,76 @@ void sockunion_init(union sockunion *su)
 }
 
 printfrr_ext_autoreg_p("SU", printfrr_psu)
-static ssize_t printfrr_psu(char *buf, size_t bsz, const char *fmt,
-                           int prec, const void *ptr)
+static ssize_t printfrr_psu(struct fbuf *buf, struct printfrr_eargs *ea,
+                           const void *ptr)
 {
        const union sockunion *su = ptr;
-       struct fbuf fb = { .buf = buf, .pos = buf, .len = bsz - 1 };
-       bool include_port = false;
+       bool include_port = false, include_scope = false;
        bool endflags = false;
-       ssize_t consumed = 2;
-
-       if (su) {
-               while (!endflags) {
-                       switch (fmt[consumed++]) {
-                       case 'p':
-                               include_port = true;
-                               break;
-                       default:
-                               consumed--;
-                               endflags = true;
-                               break;
-                       }
-               };
-
-               switch (sockunion_family(su)) {
-               case AF_UNSPEC:
-                       bprintfrr(&fb, "(unspec)");
-                       break;
-               case AF_INET:
-                       inet_ntop(AF_INET, &su->sin.sin_addr, buf, bsz);
-                       fb.pos += strlen(fb.buf);
-                       if (include_port)
-                               bprintfrr(&fb, ":%d", su->sin.sin_port);
+       ssize_t ret = 0;
+       char cbuf[INET6_ADDRSTRLEN];
+
+       if (!su)
+               return bputs(buf, "(null)");
+
+       while (!endflags) {
+               switch (*ea->fmt) {
+               case 'p':
+                       ea->fmt++;
+                       include_port = true;
                        break;
-               case AF_INET6:
-                       inet_ntop(AF_INET6, &su->sin6.sin6_addr, buf, bsz);
-                       fb.pos += strlen(fb.buf);
-                       if (include_port)
-                               bprintfrr(&fb, ":%d", su->sin6.sin6_port);
+               case 's':
+                       ea->fmt++;
+                       include_scope = true;
                        break;
                default:
-                       bprintfrr(&fb, "(af %d)", sockunion_family(su));
+                       endflags = true;
+                       break;
                }
+       }
 
-               fb.pos[0] = '\0';
-       } else {
-               strlcpy(buf, "NULL", bsz);
+       switch (sockunion_family(su)) {
+       case AF_UNSPEC:
+               ret += bputs(buf, "(unspec)");
+               break;
+       case AF_INET:
+               inet_ntop(AF_INET, &su->sin.sin_addr, cbuf, sizeof(cbuf));
+               ret += bputs(buf, cbuf);
+               if (include_port)
+                       ret += bprintfrr(buf, ":%d", ntohs(su->sin.sin_port));
+               break;
+       case AF_INET6:
+               if (include_port)
+                       ret += bputch(buf, '[');
+               inet_ntop(AF_INET6, &su->sin6.sin6_addr, cbuf, sizeof(cbuf));
+               ret += bputs(buf, cbuf);
+               if (include_scope && su->sin6.sin6_scope_id)
+                       ret += bprintfrr(buf, "%%%u",
+                                        (unsigned int)su->sin6.sin6_scope_id);
+               if (include_port)
+                       ret += bprintfrr(buf, "]:%d",
+                                        ntohs(su->sin6.sin6_port));
+               break;
+       case AF_UNIX: {
+               int len;
+#ifdef __linux__
+               if (su->sun.sun_path[0] == '\0' && su->sun.sun_path[1]) {
+                       len = strnlen(su->sun.sun_path + 1,
+                                     sizeof(su->sun.sun_path) - 1);
+                       ret += bprintfrr(buf, "@%*pSE", len,
+                                        su->sun.sun_path + 1);
+                       break;
+               }
+#endif
+               len = strnlen(su->sun.sun_path, sizeof(su->sun.sun_path));
+               ret += bprintfrr(buf, "%*pSE", len, su->sun.sun_path);
+               break;
+       }
+       default:
+               ret += bprintfrr(buf, "(af %d)", sockunion_family(su));
        }
 
-       return consumed;
+       return ret;
 }
 
 int sockunion_is_null(const union sockunion *su)
@@ -730,3 +752,49 @@ int sockunion_is_null(const union sockunion *su)
                return 0;
        }
 }
+
+printfrr_ext_autoreg_i("PF", printfrr_pf)
+static ssize_t printfrr_pf(struct fbuf *buf, struct printfrr_eargs *ea,
+                          uintmax_t val)
+{
+       switch (val) {
+       case AF_INET:
+               return bputs(buf, "AF_INET");
+       case AF_INET6:
+               return bputs(buf, "AF_INET6");
+       case AF_UNIX:
+               return bputs(buf, "AF_UNIX");
+#ifdef AF_PACKET
+       case AF_PACKET:
+               return bputs(buf, "AF_PACKET");
+#endif
+#ifdef AF_NETLINK
+       case AF_NETLINK:
+               return bputs(buf, "AF_NETLINK");
+#endif
+       }
+       return bprintfrr(buf, "AF_(%ju)", val);
+}
+
+printfrr_ext_autoreg_i("SO", printfrr_so)
+static ssize_t printfrr_so(struct fbuf *buf, struct printfrr_eargs *ea,
+                          uintmax_t val)
+{
+       switch (val) {
+       case SOCK_STREAM:
+               return bputs(buf, "SOCK_STREAM");
+       case SOCK_DGRAM:
+               return bputs(buf, "SOCK_DGRAM");
+       case SOCK_SEQPACKET:
+               return bputs(buf, "SOCK_SEQPACKET");
+#ifdef SOCK_RAW
+       case SOCK_RAW:
+               return bputs(buf, "SOCK_RAW");
+#endif
+#ifdef SOCK_PACKET
+       case SOCK_PACKET:
+               return bputs(buf, "SOCK_PACKET");
+#endif
+       }
+       return bprintfrr(buf, "SOCK_(%ju)", val);
+}
index 5e80ba1090b2a71b1244a564be32e257fe8d90f4..2cc80bb70f48f8999908cb70800908f541b71667 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "privs.h"
 #include "if.h"
+#include <sys/un.h>
 #ifdef __OpenBSD__
 #include <netmpls/mpls.h>
 #endif
@@ -36,6 +37,7 @@ union sockunion {
        struct sockaddr sa;
        struct sockaddr_in sin;
        struct sockaddr_in6 sin6;
+       struct sockaddr_un sun;
 #ifdef __OpenBSD__
        struct sockaddr_mpls smpls;
        struct sockaddr_rtlabel rtlabel;
@@ -106,6 +108,16 @@ extern int sockunion_is_null(const union sockunion *su);
 
 #ifdef _FRR_ATTRIBUTE_PRINTFRR
 #pragma FRR printfrr_ext "%pSU"  (union sockunion *)
+#pragma FRR printfrr_ext "%pSU"  (struct sockaddr *)
+#pragma FRR printfrr_ext "%pSU"  (struct sockaddr_storage *)
+#pragma FRR printfrr_ext "%pSU"  (struct sockaddr_in *)
+#pragma FRR printfrr_ext "%pSU"  (struct sockaddr_in6 *)
+#pragma FRR printfrr_ext "%pSU"  (struct sockaddr_un *)
+
+/* AF_INET/PF_INET & co., using "PF" to avoid confusion with AFI/SAFI */
+#pragma FRR printfrr_ext "%dPF"  (int)
+/* SOCK_STREAM & co. */
+#pragma FRR printfrr_ext "%dSO"  (int)
 #endif
 
 #ifdef __cplusplus
index a115507192ccfac9b1f7287c961652f1be4bf2c3..d2e0682e95c8cc2ca06cc4ad769d4c4b3a91455f 100644 (file)
@@ -307,20 +307,20 @@ const char *srcdest_rnode2str(const struct route_node *rn, char *str, int size)
 }
 
 printfrr_ext_autoreg_p("RN", printfrr_rn)
-static ssize_t printfrr_rn(char *buf, size_t bsz, const char *fmt,
-                          int prec, const void *ptr)
+static ssize_t printfrr_rn(struct fbuf *buf, struct printfrr_eargs *ea,
+                          const void *ptr)
 {
        const struct route_node *rn = ptr;
        const struct prefix *dst_p, *src_p;
+       char cbuf[PREFIX_STRLEN * 2 + 6];
 
-       if (rn) {
-               srcdest_rnode_prefixes(rn, &dst_p, &src_p);
-               srcdest2str(dst_p, (const struct prefix_ipv6 *)src_p, buf, bsz);
-       } else {
-               strlcpy(buf, "NULL", bsz);
-       }
+       if (!rn)
+               return bputs(buf, "(null)");
 
-       return 2;
+       srcdest_rnode_prefixes(rn, &dst_p, &src_p);
+       srcdest2str(dst_p, (const struct prefix_ipv6 *)src_p,
+                   cbuf, sizeof(cbuf));
+       return bputs(buf, cbuf);
 }
 
 struct route_table *srcdest_srcnode_table(struct route_node *rn)
diff --git a/lib/strformat.c b/lib/strformat.c
new file mode 100644 (file)
index 0000000..431e573
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+ * Copyright (c) 2019  David Lamparter, for NetDEF, Inc.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "compiler.h"
+
+#include <string.h>
+#include <ctype.h>
+
+#include "printfrr.h"
+
+printfrr_ext_autoreg_p("HX", printfrr_hexdump)
+static ssize_t printfrr_hexdump(struct fbuf *buf, struct printfrr_eargs *ea,
+                               const void *ptr)
+{
+       ssize_t ret = 0;
+       ssize_t input_len = printfrr_ext_len(ea);
+       char sep = ' ';
+       const uint8_t *pos, *end;
+
+       if (ea->fmt[0] == 'c') {
+               ea->fmt++;
+               sep = ':';
+       } else if (ea->fmt[0] == 'n') {
+               ea->fmt++;
+               sep = '\0';
+       }
+
+       if (input_len < 0)
+               return 0;
+
+       for (pos = ptr, end = pos + input_len; pos < end; pos++) {
+               if (sep && pos != ptr)
+                       ret += bputch(buf, sep);
+               ret += bputhex(buf, *pos);
+       }
+
+       return ret;
+}
+
+/* string analog for hexdumps / the "this." in ("74 68 69 73 0a  |this.|") */
+
+printfrr_ext_autoreg_p("HS", printfrr_hexdstr)
+static ssize_t printfrr_hexdstr(struct fbuf *buf, struct printfrr_eargs *ea,
+                               const void *ptr)
+{
+       ssize_t ret = 0;
+       ssize_t input_len = printfrr_ext_len(ea);
+       const uint8_t *pos, *end;
+
+       if (input_len < 0)
+               return 0;
+
+       for (pos = ptr, end = pos + input_len; pos < end; pos++) {
+               if (*pos >= 0x20 && *pos < 0x7f)
+                       ret += bputch(buf, *pos);
+               else
+                       ret += bputch(buf, '.');
+       }
+
+       return ret;
+}
+
+enum escape_flags {
+       ESC_N_R_T       = (1 << 0),     /* use \n \r \t instead of \x0a ...*/
+       ESC_SPACE       = (1 << 1),     /* \  */
+       ESC_BACKSLASH   = (1 << 2),     /* \\ */
+       ESC_DBLQUOTE    = (1 << 3),     /* \" */
+       ESC_SGLQUOTE    = (1 << 4),     /* \' */
+       ESC_BACKTICK    = (1 << 5),     /* \` */
+       ESC_DOLLAR      = (1 << 6),     /* \$ */
+       ESC_CLBRACKET   = (1 << 7),     /* \] for RFC5424 syslog */
+       ESC_OTHER       = (1 << 8),     /* remaining non-alpha */
+
+       ESC_ALL = ESC_N_R_T | ESC_SPACE | ESC_BACKSLASH | ESC_DBLQUOTE
+               | ESC_SGLQUOTE | ESC_DOLLAR | ESC_OTHER,
+       ESC_QUOTSTRING = ESC_N_R_T | ESC_BACKSLASH | ESC_DBLQUOTE,
+       /* if needed: ESC_SHELL = ... */
+};
+
+static ssize_t bquote(struct fbuf *buf, const uint8_t *pos, size_t len,
+                     unsigned int flags)
+{
+       ssize_t ret = 0;
+       const uint8_t *end = pos + len;
+
+       for (; pos < end; pos++) {
+               /* here's to hoping this might be a bit faster... */
+               if (__builtin_expect(!!isalnum(*pos), 1)) {
+                       ret += bputch(buf, *pos);
+                       continue;
+               }
+
+               switch (*pos) {
+               case '%':
+               case '+':
+               case ',':
+               case '-':
+               case '.':
+               case '/':
+               case ':':
+               case '@':
+               case '_':
+                       ret += bputch(buf, *pos);
+                       continue;
+
+               case '\r':
+                       if (!(flags & ESC_N_R_T))
+                               break;
+                       ret += bputch(buf, '\\');
+                       ret += bputch(buf, 'r');
+                       continue;
+               case '\n':
+                       if (!(flags & ESC_N_R_T))
+                               break;
+                       ret += bputch(buf, '\\');
+                       ret += bputch(buf, 'n');
+                       continue;
+               case '\t':
+                       if (!(flags & ESC_N_R_T))
+                               break;
+                       ret += bputch(buf, '\\');
+                       ret += bputch(buf, 't');
+                       continue;
+
+               case ' ':
+                       if (flags & ESC_SPACE)
+                               ret += bputch(buf, '\\');
+                       ret += bputch(buf, *pos);
+                       continue;
+
+               case '\\':
+                       if (flags & ESC_BACKSLASH)
+                               ret += bputch(buf, '\\');
+                       ret += bputch(buf, *pos);
+                       continue;
+
+               case '"':
+                       if (flags & ESC_DBLQUOTE)
+                               ret += bputch(buf, '\\');
+                       ret += bputch(buf, *pos);
+                       continue;
+
+               case '\'':
+                       if (flags & ESC_SGLQUOTE)
+                               ret += bputch(buf, '\\');
+                       ret += bputch(buf, *pos);
+                       continue;
+
+               case '`':
+                       if (flags & ESC_BACKTICK)
+                               ret += bputch(buf, '\\');
+                       ret += bputch(buf, *pos);
+                       continue;
+
+               case '$':
+                       if (flags & ESC_DOLLAR)
+                               ret += bputch(buf, '\\');
+                       ret += bputch(buf, *pos);
+                       continue;
+
+               case ']':
+                       if (flags & ESC_CLBRACKET)
+                               ret += bputch(buf, '\\');
+                       ret += bputch(buf, *pos);
+                       continue;
+
+               /* remaining: !#&'()*;<=>?[^{|}~ */
+
+               default:
+                       if (*pos >= 0x20 && *pos < 0x7f) {
+                               if (flags & ESC_OTHER)
+                                       ret += bputch(buf, '\\');
+                               ret += bputch(buf, *pos);
+                               continue;
+                       }
+               }
+               ret += bputch(buf, '\\');
+               ret += bputch(buf, 'x');
+               ret += bputhex(buf, *pos);
+       }
+
+       return ret;
+}
+
+printfrr_ext_autoreg_p("SE", printfrr_escape)
+static ssize_t printfrr_escape(struct fbuf *buf, struct printfrr_eargs *ea,
+                              const void *vptr)
+{
+       ssize_t len = printfrr_ext_len(ea);
+       const uint8_t *ptr = vptr;
+       bool null_is_empty = false;
+
+       if (ea->fmt[0] == 'n') {
+               null_is_empty = true;
+               ea->fmt++;
+       }
+
+       if (!ptr) {
+               if (null_is_empty)
+                       return 0;
+               return bputs(buf, "(null)");
+       }
+
+       if (len < 0)
+               len = strlen((const char *)ptr);
+
+       return bquote(buf, ptr, len, ESC_ALL);
+}
+
+printfrr_ext_autoreg_p("SQ", printfrr_quote)
+static ssize_t printfrr_quote(struct fbuf *buf, struct printfrr_eargs *ea,
+                             const void *vptr)
+{
+       ssize_t len = printfrr_ext_len(ea);
+       const uint8_t *ptr = vptr;
+       ssize_t ret = 0;
+       bool null_is_empty = false;
+       bool do_quotes = false;
+       unsigned int flags = ESC_QUOTSTRING;
+
+       while (ea->fmt[0]) {
+               switch (ea->fmt[0]) {
+               case 'n':
+                       null_is_empty = true;
+                       ea->fmt++;
+                       continue;
+               case 'q':
+                       do_quotes = true;
+                       ea->fmt++;
+                       continue;
+               case 's':
+                       flags |= ESC_CLBRACKET;
+                       flags &= ~ESC_N_R_T;
+                       ea->fmt++;
+                       continue;
+               }
+               break;
+       }
+
+       if (!ptr) {
+               if (null_is_empty)
+                       return bputs(buf, do_quotes ? "\"\"" : "");
+               return bputs(buf, "(null)");
+       }
+
+       if (len < 0)
+               len = strlen((const char *)ptr);
+
+       if (do_quotes)
+               ret += bputch(buf, '"');
+       ret += bquote(buf, ptr, len, flags);
+       if (do_quotes)
+               ret += bputch(buf, '"');
+       return ret;
+}
index bfd367b1342660ebdae98c701f68b6cedae42d0d..0853d4bb2bb01705a24c3108376d281bf9333a32 100644 (file)
@@ -90,6 +90,7 @@ lib_libfrr_la_SOURCES = \
        lib/spf_backoff.c \
        lib/srcdest_table.c \
        lib/stream.c \
+       lib/strformat.c \
        lib/strlcat.c \
        lib/strlcpy.c \
        lib/systemd.c \
index dff041cbc77a3e5c95e78f8dfd18e204a0ee824d..7888d435f5b058c8fd4060d86f6889ba74cf08fa 100644 (file)
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -1110,7 +1110,7 @@ static int lib_vrf_create(struct nb_cb_create_args *args)
 
        vrfp = vrf_get(VRF_UNKNOWN, vrfname);
 
-       vrf_set_user_cfged(vrfp);
+       SET_FLAG(vrfp->status, VRF_CONFIGURED);
        nb_running_set_entry(args->dnode, vrfp);
 
        return NB_OK;
@@ -1136,7 +1136,7 @@ static int lib_vrf_destroy(struct nb_cb_destroy_args *args)
                vrfp = nb_running_unset_entry(args->dnode);
 
                /* Clear configured flag and invoke delete. */
-               vrf_reset_user_cfged(vrfp);
+               UNSET_FLAG(vrfp->status, VRF_CONFIGURED);
                vrf_delete(vrfp);
                break;
        }
index 6cdb52244dcd9a0992b5847809950b9bcf052f60..c79dd99b9a282da30db515337846a02ee8db0304 100644 (file)
--- a/lib/vrf.h
+++ b/lib/vrf.h
@@ -159,18 +159,6 @@ static inline int vrf_is_user_cfged(struct vrf *vrf)
        return vrf && CHECK_FLAG(vrf->status, VRF_CONFIGURED);
 }
 
-/* Mark that VRF has user configuration */
-static inline void vrf_set_user_cfged(struct vrf *vrf)
-{
-       SET_FLAG(vrf->status, VRF_CONFIGURED);
-}
-
-/* Mark that VRF no longer has any user configuration */
-static inline void vrf_reset_user_cfged(struct vrf *vrf)
-{
-       UNSET_FLAG(vrf->status, VRF_CONFIGURED);
-}
-
 static inline uint32_t vrf_interface_count(struct vrf *vrf)
 {
        uint32_t count = 0;
index d44cc904c5765114cddd94d89008c7c936b620ac..96cfef1c0af46bb583e135ca206c8e346ad7672b 100644 (file)
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -159,6 +159,8 @@ int vty_out(struct vty *vty, const char *format, ...)
        char buf[1024];
        char *p = NULL;
        char *filtered;
+       /* format string may contain %m, keep errno intact for printfrr */
+       int saved_errno = errno;
 
        if (vty->frame_pos) {
                vty->frame_pos = 0;
@@ -166,6 +168,7 @@ int vty_out(struct vty *vty, const char *format, ...)
        }
 
        va_start(args, format);
+       errno = saved_errno;
        p = vasnprintfrr(MTYPE_VTY_OUT_BUF, buf, sizeof(buf), format, args);
        va_end(args);
 
index 4de8e220ced03467f957a8efb9d732eedc6a64be..bcf0e2168c9275683ac14a4e3f3bc9fe11283213 100644 (file)
@@ -212,7 +212,8 @@ static int nhrp_cache_do_timeout(struct thread *t)
 
        c->t_timeout = NULL;
        if (c->cur.type != NHRP_CACHE_INVALID)
-               nhrp_cache_update_binding(c, c->cur.type, -1, NULL, 0, NULL);
+               nhrp_cache_update_binding(c, c->cur.type, -1, NULL, 0, NULL,
+                                         NULL);
        return 0;
 }
 
@@ -301,7 +302,8 @@ static void nhrp_cache_peer_notifier(struct notifier_block *n,
        case NOTIFY_PEER_DOWN:
        case NOTIFY_PEER_IFCONFIG_CHANGED:
                notifier_call(&c->notifier_list, NOTIFY_CACHE_DOWN);
-               nhrp_cache_update_binding(c, c->cur.type, -1, NULL, 0, NULL);
+               nhrp_cache_update_binding(c, c->cur.type, -1, NULL, 0, NULL,
+                                         NULL);
                break;
        case NOTIFY_PEER_NBMA_CHANGING:
                if (c->cur.type == NHRP_CACHE_DYNAMIC)
@@ -422,7 +424,8 @@ static void nhrp_cache_newpeer_notifier(struct notifier_block *n,
 
 int nhrp_cache_update_binding(struct nhrp_cache *c, enum nhrp_cache_type type,
                              int holding_time, struct nhrp_peer *p,
-                             uint32_t mtu, union sockunion *nbma_oa)
+                             uint32_t mtu, union sockunion *nbma_oa,
+                             union sockunion *nbma_claimed)
 {
        char buf[2][SU_ADDRSTRLEN];
 
@@ -464,6 +467,12 @@ int nhrp_cache_update_binding(struct nhrp_cache *c, enum nhrp_cache_type type,
                        memset(&c->cur.remote_nbma_natoa, 0,
                               sizeof(c->cur.remote_nbma_natoa));
 
+               if (nbma_claimed)
+                       c->cur.remote_nbma_claimed = *nbma_claimed;
+               else
+                       memset(&c->cur.remote_nbma_claimed, 0,
+                              sizeof(c->cur.remote_nbma_claimed));
+
                nhrp_peer_unref(p);
        } else {
                debugf(NHRP_DEBUG_COMMON,
@@ -474,9 +483,13 @@ int nhrp_cache_update_binding(struct nhrp_cache *c, enum nhrp_cache_type type,
                c->new.type = type;
                c->new.peer = p;
                c->new.mtu = mtu;
+               c->new.holding_time = holding_time;
                if (nbma_oa)
                        c->new.remote_nbma_natoa = *nbma_oa;
 
+               if (nbma_claimed)
+                       c->new.remote_nbma_claimed = *nbma_claimed;
+
                if (holding_time > 0)
                        c->new.expires = monotime(NULL) + holding_time;
                else if (holding_time < 0)
index a64708d88ee89197c69c6a97126b414d74851be7..a6880054fdf141f3aae6e7aceac758d0ad026aaf 100644 (file)
@@ -255,7 +255,7 @@ static void nhrp_interface_update_address(struct interface *ifp, afi_t afi,
                nc = nhrp_cache_get(ifp, &if_ad->addr, 0);
                if (nc)
                        nhrp_cache_update_binding(nc, NHRP_CACHE_LOCAL, -1,
-                                                 NULL, 0, NULL);
+                                                 NULL, 0, NULL, NULL);
        }
 
        debugf(NHRP_DEBUG_KERNEL, "%s: IPv%d address changed to %s", ifp->name,
@@ -267,7 +267,7 @@ static void nhrp_interface_update_address(struct interface *ifp, afi_t afi,
                nc = nhrp_cache_get(ifp, &addr, 1);
                if (nc)
                        nhrp_cache_update_binding(nc, NHRP_CACHE_LOCAL, 0, NULL,
-                                                 0, NULL);
+                                                 0, NULL, NULL);
        }
 
        notifier_call(&nifp->notifier_list, NOTIFY_INTERFACE_ADDRESS_CHANGED);
@@ -364,7 +364,7 @@ static void interface_config_update_nhrp_map(struct nhrp_cache_config *cc,
                if (c && c->map) {
                        nhrp_cache_update_binding(
                                c, c->cur.type, -1,
-                               nhrp_peer_get(ifp, &nbma_addr), 0, NULL);
+                               nhrp_peer_get(ifp, &nbma_addr), 0, NULL, NULL);
                }
                return;
        }
@@ -375,11 +375,11 @@ static void interface_config_update_nhrp_map(struct nhrp_cache_config *cc,
        c->map = 1;
        if (cc->type == NHRP_CACHE_LOCAL)
                nhrp_cache_update_binding(c, NHRP_CACHE_LOCAL, 0, NULL, 0,
-                                         NULL);
+                                         NULL, NULL);
        else {
                nhrp_cache_update_binding(c, NHRP_CACHE_STATIC, 0,
                                          nhrp_peer_get(ifp, &cc->nbma), 0,
-                                         NULL);
+                                         NULL, NULL);
        }
 }
 
index 1689facbcfcaf3ed3be9a8721d7518d6cf18a2f4..9dfaf073d85cf2c30a183d9732a834948f4201e1 100644 (file)
@@ -32,7 +32,8 @@ static void nhrp_reg_reply(struct nhrp_reqid *reqid, void *arg)
        struct nhrp_cie_header *cie;
        struct nhrp_cache *c;
        struct zbuf extpl;
-       union sockunion cie_nbma, cie_proto, *proto;
+       union sockunion cie_nbma, cie_nbma_nhs, cie_proto, cie_proto_nhs,
+               *proto;
        int ok = 0, holdtime;
        unsigned short mtu = 0;
 
@@ -66,6 +67,7 @@ static void nhrp_reg_reply(struct nhrp_reqid *reqid, void *arg)
 
        /* Parse extensions */
        sockunion_family(&nifp->nat_nbma) = AF_UNSPEC;
+       sockunion_family(&cie_nbma_nhs) = AF_UNSPEC;
        while ((ext = nhrp_ext_pull(&p->extensions, &extpl)) != NULL) {
                switch (htons(ext->type) & ~NHRP_EXTENSION_FLAG_COMPULSORY) {
                case NHRP_EXTENSION_NAT_ADDRESS:
@@ -79,6 +81,11 @@ static void nhrp_reg_reply(struct nhrp_reqid *reqid, void *arg)
                                       ifp->name, &nifp->nbma);
                        }
                        break;
+               case NHRP_EXTENSION_RESPONDER_ADDRESS:
+                       /* NHS adds its own record as responder address */
+                       nhrp_cie_pull(&extpl, p->hdr, &cie_nbma_nhs,
+                                     &cie_proto_nhs);
+                       break;
                }
        }
 
@@ -96,7 +103,8 @@ static void nhrp_reg_reply(struct nhrp_reqid *reqid, void *arg)
        c = nhrp_cache_get(ifp, &p->dst_proto, 1);
        if (c)
                nhrp_cache_update_binding(c, NHRP_CACHE_NHS, holdtime,
-                                         nhrp_peer_ref(r->peer), mtu, NULL);
+                                         nhrp_peer_ref(r->peer), mtu, NULL,
+                                         &cie_nbma_nhs);
 }
 
 static int nhrp_reg_timeout(struct thread *t)
@@ -111,7 +119,7 @@ static int nhrp_reg_timeout(struct thread *t)
                c = nhrp_cache_get(r->nhs->ifp, &r->proto_addr, 0);
                if (c)
                        nhrp_cache_update_binding(c, NHRP_CACHE_NHS, -1, NULL,
-                                                 0, NULL);
+                                                 0, NULL, NULL);
                sockunion_family(&r->proto_addr) = AF_UNSPEC;
        }
 
@@ -162,7 +170,7 @@ static int nhrp_reg_send_req(struct thread *t)
        struct interface *ifp = nhs->ifp;
        struct nhrp_interface *nifp = ifp->info;
        struct nhrp_afi_data *if_ad = &nifp->afi[nhs->afi];
-       union sockunion *dst_proto;
+       union sockunion *dst_proto, nhs_proto;
        struct zbuf *zb;
        struct nhrp_packet_header *hdr;
        struct nhrp_extension_header *ext;
@@ -207,17 +215,34 @@ static int nhrp_reg_send_req(struct thread *t)
        /* FIXME: push CIE for each local protocol address */
        cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS, NULL, NULL);
        /* RFC2332 5.2.1 if unique is set then prefix length must be 0xff */
-       cie->prefix_length = (if_ad->flags & NHRP_IFF_REG_NO_UNIQUE) ? 8 * sockunion_get_addrlen(dst_proto) : 0xff;
+       cie->prefix_length = (if_ad->flags & NHRP_IFF_REG_NO_UNIQUE)
+                                    ? 8 * sockunion_get_addrlen(dst_proto)
+                                    : 0xff;
        cie->holding_time = htons(if_ad->holdtime);
        cie->mtu = htons(if_ad->mtu);
 
        nhrp_ext_request(zb, hdr, ifp);
 
        /* Cisco NAT detection extension */
+       if (sockunion_family(&r->proto_addr) != AF_UNSPEC) {
+               nhs_proto = r->proto_addr;
+       } else if (sockunion_family(&nhs->proto_addr) != AF_UNSPEC) {
+               nhs_proto = nhs->proto_addr;
+       } else {
+               /* cisco magic: If NHS is not known then use all 0s as
+                * client protocol address in NAT Extension header
+                */
+               memset(&nhs_proto, 0, sizeof(nhs_proto));
+               sockunion_family(&nhs_proto) = afi2family(nhs->afi);
+       }
+
        hdr->flags |= htons(NHRP_FLAG_REGISTRATION_NAT);
        ext = nhrp_ext_push(zb, hdr, NHRP_EXTENSION_NAT_ADDRESS);
-       cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS, &nifp->nbma, &if_ad->addr);
+       /* push NHS details */
+       cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS, &r->peer->vc->remote.nbma,
+                           &nhs_proto);
        cie->prefix_length = 8 * sockunion_get_addrlen(&if_ad->addr);
+       cie->mtu = htons(if_ad->mtu);
        nhrp_ext_complete(zb, ext);
 
        nhrp_packet_complete(zb, hdr);
@@ -442,3 +467,29 @@ void nhrp_nhs_foreach(struct interface *ifp, afi_t afi,
                        cb(nhs, 0, ctx);
        }
 }
+
+int nhrp_nhs_match_ip(union sockunion *in_ip, struct nhrp_interface *nifp)
+{
+       int i;
+       struct nhrp_nhs *nhs;
+       struct nhrp_registration *reg;
+
+       for (i = 0; i < AFI_MAX; i++) {
+               list_for_each_entry(nhs, &nifp->afi[i].nhslist_head,
+                                   nhslist_entry)
+               {
+                       if (!list_empty(&nhs->reglist_head)) {
+                               list_for_each_entry(reg, &nhs->reglist_head,
+                                                   reglist_entry)
+                               {
+                                       if (!sockunion_cmp(
+                                                   in_ip,
+                                                   &reg->peer->vc->remote
+                                                            .nbma))
+                                               return 1;
+                               }
+                       }
+               }
+       }
+       return 0;
+}
index a983aa71bca91997184b3fe268e0768fee8b8868..fd77533c8957309e4a72d54755457e451d0fffc9 100644 (file)
@@ -268,6 +268,7 @@ int nhrp_ext_reply(struct zbuf *zb, struct nhrp_packet_header *hdr,
                                    &ad->addr);
                if (!cie)
                        goto err;
+               cie->mtu = htons(ad->mtu);
                cie->holding_time = htons(ad->holdtime);
                break;
        default:
index af352c68ee0cc6409f9da6d65950cc025a36d44e..c1f615d0a9b5709278111dbfb4e99c2c85673e68 100644 (file)
@@ -47,6 +47,7 @@ static void nhrp_peer_check_delete(struct nhrp_peer *p)
               p->ref, &p->vc->remote.nbma, &p->vc->local.nbma);
 
        THREAD_OFF(p->t_fallback);
+       THREAD_OFF(p->t_timer);
        hash_release(nifp->peer_hash, p);
        nhrp_interface_notify_del(p->ifp, &p->ifp_notifier);
        nhrp_vc_notify_del(p->vc, &p->vc_notifier);
@@ -182,8 +183,7 @@ static void *nhrp_peer_create(void *data)
                .ref = 0,
                .ifp = key->ifp,
                .vc = key->vc,
-               .notifier_list =
-               NOTIFIER_LIST_INITIALIZER(&p->notifier_list),
+               .notifier_list = NOTIFIER_LIST_INITIALIZER(&p->notifier_list),
        };
        nhrp_vc_notify_add(p->vc, &p->vc_notifier, nhrp_peer_vc_notify);
        nhrp_interface_notify_add(p->ifp, &p->ifp_notifier,
@@ -283,6 +283,30 @@ static int nhrp_peer_request_timeout(struct thread *t)
        return 0;
 }
 
+static int nhrp_peer_defer_vici_request(struct thread *t)
+{
+       struct nhrp_peer *p = THREAD_ARG(t);
+       struct nhrp_vc *vc = p->vc;
+       struct interface *ifp = p->ifp;
+       struct nhrp_interface *nifp = ifp->info;
+
+       THREAD_OFF(p->t_timer);
+
+       if (p->online) {
+               debugf(NHRP_DEBUG_COMMON,
+                      "IPsec connection to %pSU already established",
+                      &vc->remote.nbma);
+       } else {
+               vici_request_vc(nifp->ipsec_profile, &vc->local.nbma,
+                               &vc->remote.nbma, p->prio);
+               thread_add_timer(
+                       master, nhrp_peer_request_timeout, p,
+                       (nifp->ipsec_fallback_profile && !p->prio) ? 15 : 30,
+                       &p->t_fallback);
+       }
+       return 0;
+}
+
 int nhrp_peer_check(struct nhrp_peer *p, int establish)
 {
        struct nhrp_vc *vc = p->vc;
@@ -304,11 +328,25 @@ int nhrp_peer_check(struct nhrp_peer *p, int establish)
 
        p->prio = establish > 1;
        p->requested = 1;
-       vici_request_vc(nifp->ipsec_profile, &vc->local.nbma, &vc->remote.nbma,
-                       p->prio);
-       thread_add_timer(master, nhrp_peer_request_timeout, p,
-                        (nifp->ipsec_fallback_profile && !p->prio) ? 15 : 30,
-                        &p->t_fallback);
+
+       /* All NHRP registration requests are prioritized */
+       if (p->prio) {
+               vici_request_vc(nifp->ipsec_profile, &vc->local.nbma,
+                               &vc->remote.nbma, p->prio);
+               thread_add_timer(
+                       master, nhrp_peer_request_timeout, p,
+                       (nifp->ipsec_fallback_profile && !p->prio) ? 15 : 30,
+                       &p->t_fallback);
+       } else {
+               /* Maximum timeout is 1 second */
+               int r_time_ms = rand() % 1000;
+
+               debugf(NHRP_DEBUG_COMMON,
+                      "Initiating IPsec connection request to %pSU after %d ms:",
+                      &vc->remote.nbma, r_time_ms);
+               thread_add_timer_msec(master, nhrp_peer_defer_vici_request,
+                                     p, r_time_ms, &p->t_timer);
+       }
 
        return 0;
 }
@@ -341,6 +379,60 @@ void nhrp_peer_send(struct nhrp_peer *p, struct zbuf *zb)
        zbuf_reset(zb);
 }
 
+static void nhrp_process_nat_extension(struct nhrp_packet_parser *pp,
+                                      union sockunion *proto,
+                                      union sockunion *cie_nbma)
+{
+       union sockunion cie_proto;
+       struct zbuf payload;
+       struct nhrp_extension_header *ext;
+       struct zbuf *extensions;
+
+       if (!cie_nbma)
+               return;
+
+       sockunion_family(cie_nbma) = AF_UNSPEC;
+
+       if (!proto || sockunion_family(proto) == AF_UNSPEC)
+               return;
+
+       /* Handle extensions */
+       extensions = zbuf_alloc(zbuf_used(&pp->extensions));
+       if (extensions) {
+               zbuf_copy_peek(extensions, &pp->extensions,
+                                zbuf_used(&pp->extensions));
+               while ((ext = nhrp_ext_pull(extensions, &payload)) != NULL) {
+                       switch (htons(ext->type)
+                               & ~NHRP_EXTENSION_FLAG_COMPULSORY) {
+                       case NHRP_EXTENSION_NAT_ADDRESS:
+                               /* Process the NBMA and proto address in NAT
+                                * extension and update the cache without which
+                                * the neighbor table in the kernel contains the
+                                * source NBMA address which is not reachable
+                                * since it is behind a NAT device
+                                */
+                               debugf(NHRP_DEBUG_COMMON,
+                                      "shortcut res_resp: Processing NAT Extension for %pSU",
+                                      proto);
+                               while (nhrp_cie_pull(&payload, pp->hdr,
+                                                    cie_nbma, &cie_proto)) {
+                                       if (sockunion_family(&cie_proto)
+                                           == AF_UNSPEC)
+                                               continue;
+
+                                       if (!sockunion_cmp(proto, &cie_proto)) {
+                                               debugf(NHRP_DEBUG_COMMON,
+                                                      "cie_nbma for proto %pSU is %pSU",
+                                                      proto, cie_nbma);
+                                               break;
+                                       }
+                               }
+                       }
+               }
+               zbuf_free(extensions);
+       }
+}
+
 static void nhrp_handle_resolution_req(struct nhrp_packet_parser *pp)
 {
        struct interface *ifp = pp->ifp;
@@ -349,12 +441,12 @@ static void nhrp_handle_resolution_req(struct nhrp_packet_parser *pp)
        struct nhrp_cie_header *cie;
        struct nhrp_extension_header *ext;
        struct nhrp_cache *c;
-       union sockunion cie_nbma, cie_proto, *proto_addr, *nbma_addr;
+       union sockunion cie_nbma, cie_nbma_nat, cie_proto, *proto_addr,
+               *nbma_addr, *claimed_nbma_addr;
        int holdtime, prefix_len, hostprefix_len;
        struct nhrp_interface *nifp = ifp->info;
        struct nhrp_peer *peer;
        size_t paylen;
-       char buf[SU_ADDRSTRLEN];
 
        if (!(pp->if_ad->flags & NHRP_IFF_SHORTCUT)) {
                debugf(NHRP_DEBUG_COMMON, "Shortcuts disabled");
@@ -406,9 +498,41 @@ static void nhrp_handle_resolution_req(struct nhrp_packet_parser *pp)
                proto_addr = (sockunion_family(&cie_proto) == AF_UNSPEC)
                                     ? &pp->src_proto
                                     : &cie_proto;
-               nbma_addr = (sockunion_family(&cie_nbma) == AF_UNSPEC)
-                                   ? &pp->src_nbma
-                                   : &cie_nbma;
+
+               /* Check for this proto_addr in NHRP_NAT_EXTENSION */
+               nhrp_process_nat_extension(pp, proto_addr, &cie_nbma_nat);
+
+               if (sockunion_family(&cie_nbma_nat) == AF_UNSPEC) {
+                       /* It may be possible that this resolution reply is
+                        * coming directly from NATTED Spoke and there is not
+                        * NAT Extension present
+                        */
+                       debugf(NHRP_DEBUG_COMMON,
+                              "shortcut res_rep: No NAT Extension for %pSU",
+                              proto_addr);
+
+                       if (!sockunion_same(&pp->src_nbma,
+                                           &pp->peer->vc->remote.nbma)
+                           && !nhrp_nhs_match_ip(&pp->peer->vc->remote.nbma,
+                                                 nifp)) {
+                               cie_nbma_nat = pp->peer->vc->remote.nbma;
+                               debugf(NHRP_DEBUG_COMMON,
+                                      "shortcut res_rep: NAT detected using %pSU as cie_nbma",
+                                      &cie_nbma_nat);
+                       }
+               }
+
+               if (sockunion_family(&cie_nbma_nat) != AF_UNSPEC)
+                       nbma_addr = &cie_nbma_nat;
+               else if (sockunion_family(&cie_nbma) != AF_UNSPEC)
+                       nbma_addr = &cie_nbma;
+               else
+                       nbma_addr = &pp->src_nbma;
+
+               if (sockunion_family(&cie_nbma) != AF_UNSPEC)
+                       claimed_nbma_addr = &cie_nbma;
+               else
+                       claimed_nbma_addr = &pp->src_nbma;
 
                holdtime = htons(cie->holding_time);
                debugf(NHRP_DEBUG_COMMON,
@@ -424,15 +548,14 @@ static void nhrp_handle_resolution_req(struct nhrp_packet_parser *pp)
                        cie->code = NHRP_CODE_INSUFFICIENT_RESOURCES;
                        continue;
                }
-               if (nbma_addr)
-                       sockunion2str(nbma_addr, buf, sizeof(buf));
 
                debugf(NHRP_DEBUG_COMMON,
-                      "shortcut res_rep: updating binding for nmba addr %s",
-                      nbma_addr ? buf : "(NULL)");
-               if (!nhrp_cache_update_binding(c, NHRP_CACHE_DYNAMIC, holdtime,
-                                              nhrp_peer_ref(pp->peer),
-                                              htons(cie->mtu), nbma_addr)) {
+                      "shortcut res_rep: updating binding for nmba addr %pSU",
+                      nbma_addr);
+               if (!nhrp_cache_update_binding(
+                           c, NHRP_CACHE_DYNAMIC, holdtime,
+                           nhrp_peer_get(pp->ifp, nbma_addr), htons(cie->mtu),
+                           nbma_addr, claimed_nbma_addr)) {
                        cie->code = NHRP_CODE_ADMINISTRATIVELY_PROHIBITED;
                        continue;
                }
@@ -468,17 +591,23 @@ static void nhrp_handle_resolution_req(struct nhrp_packet_parser *pp)
        while ((ext = nhrp_ext_pull(&pp->extensions, &payload)) != NULL) {
                switch (htons(ext->type) & ~NHRP_EXTENSION_FLAG_COMPULSORY) {
                case NHRP_EXTENSION_NAT_ADDRESS:
-                       if (sockunion_family(&nifp->nat_nbma) == AF_UNSPEC)
-                               break;
                        ext = nhrp_ext_push(zb, hdr,
                                            NHRP_EXTENSION_NAT_ADDRESS);
                        if (!ext)
                                goto err;
-                       cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS,
-                                           &nifp->nat_nbma, &pp->if_ad->addr);
-                       if (!cie)
-                               goto err;
-                       nhrp_ext_complete(zb, ext);
+                       if (sockunion_family(&nifp->nat_nbma) != AF_UNSPEC) {
+                               cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS,
+                                                   &nifp->nat_nbma,
+                                                   &pp->if_ad->addr);
+                               if (!cie)
+                                       goto err;
+                               cie->prefix_length =
+                                       8 * sockunion_get_addrlen(
+                                                       &pp->if_ad->addr);
+
+                               cie->mtu = htons(pp->if_ad->mtu);
+                               nhrp_ext_complete(zb, ext);
+                       }
                        break;
                default:
                        if (nhrp_ext_reply(zb, hdr, ifp, ext, &payload) < 0)
@@ -486,7 +615,6 @@ static void nhrp_handle_resolution_req(struct nhrp_packet_parser *pp)
                        break;
                }
        }
-
        nhrp_packet_complete(zb, hdr);
        nhrp_peer_send(peer, zb);
 err:
@@ -559,7 +687,11 @@ static void nhrp_handle_registration_request(struct nhrp_packet_parser *p)
                                    : &cie_nbma;
                nbma_natoa = NULL;
                if (natted) {
-                       nbma_natoa = nbma_addr;
+                       nbma_natoa =
+                               (sockunion_family(&p->peer->vc->remote.nbma)
+                                == AF_UNSPEC)
+                                       ? nbma_addr
+                                       : &p->peer->vc->remote.nbma;
                }
 
                holdtime = htons(cie->holding_time);
@@ -574,7 +706,8 @@ static void nhrp_handle_registration_request(struct nhrp_packet_parser *p)
 
                if (!nhrp_cache_update_binding(c, NHRP_CACHE_DYNAMIC, holdtime,
                                               nhrp_peer_ref(p->peer),
-                                              htons(cie->mtu), nbma_natoa)) {
+                                              htons(cie->mtu), nbma_natoa,
+                                              nbma_addr)) {
                        cie->code = NHRP_CODE_ADMINISTRATIVELY_PROHIBITED;
                        continue;
                }
@@ -592,9 +725,13 @@ static void nhrp_handle_registration_request(struct nhrp_packet_parser *p)
                                goto err;
                        zbuf_copy(zb, &payload, zbuf_used(&payload));
                        if (natted) {
-                               nhrp_cie_push(zb, NHRP_CODE_SUCCESS,
-                                             &p->peer->vc->remote.nbma,
-                                             &p->src_proto);
+                               cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS,
+                                                   &p->peer->vc->remote.nbma,
+                                                   &p->src_proto);
+                               cie->prefix_length =
+                                       8 * sockunion_get_addrlen(
+                                                   &p->if_ad->addr);
+                               cie->mtu = htons(p->if_ad->mtu);
                        }
                        nhrp_ext_complete(zb, ext);
                        break;
@@ -794,20 +931,23 @@ static struct {
 static void nhrp_peer_forward(struct nhrp_peer *p,
                              struct nhrp_packet_parser *pp)
 {
-       struct zbuf *zb, extpl;
+       struct zbuf *zb, *zb_copy, extpl;
        struct nhrp_packet_header *hdr;
        struct nhrp_extension_header *ext, *dst;
        struct nhrp_cie_header *cie;
        struct nhrp_interface *nifp = pp->ifp->info;
        struct nhrp_afi_data *if_ad = pp->if_ad;
-       union sockunion cie_nbma, cie_protocol;
+       union sockunion cie_nbma, cie_protocol, cie_protocol_mandatory, *proto;
        uint16_t type, len;
+       struct nhrp_cache *c;
 
        if (pp->hdr->hop_count == 0)
                return;
 
        /* Create forward packet - copy header */
        zb = zbuf_alloc(1500);
+       zb_copy = zbuf_alloc(1500);
+
        hdr = nhrp_packet_push(zb, pp->hdr->type, &pp->src_nbma, &pp->src_proto,
                               &pp->dst_proto);
        hdr->flags = pp->hdr->flags;
@@ -815,8 +955,13 @@ static void nhrp_peer_forward(struct nhrp_peer *p,
        hdr->u.request_id = pp->hdr->u.request_id;
 
        /* Copy payload */
+       zbuf_copy_peek(zb_copy, &pp->payload, zbuf_used(&pp->payload));
        zbuf_copy(zb, &pp->payload, zbuf_used(&pp->payload));
 
+       /* Get CIE Extension from Mandatory part */
+       sockunion_family(&cie_protocol_mandatory) = AF_UNSPEC;
+       nhrp_cie_pull(zb_copy, pp->hdr, &cie_nbma, &cie_protocol_mandatory);
+
        /* Copy extensions */
        while ((ext = nhrp_ext_pull(&pp->extensions, &extpl)) != NULL) {
                type = htons(ext->type) & ~NHRP_EXTENSION_FLAG_COMPULSORY;
@@ -848,19 +993,82 @@ static void nhrp_peer_forward(struct nhrp_peer *p,
                                                    &nifp->nbma, &if_ad->addr);
                                if (!cie)
                                        goto err;
+                               cie->mtu = htons(if_ad->mtu);
                                cie->holding_time = htons(if_ad->holdtime);
                        }
                        break;
+               case NHRP_EXTENSION_NAT_ADDRESS:
+                       c = NULL;
+                       proto = NULL;
+
+                       /* If NAT extension is empty then attempt to populate
+                        * it with cached NBMA information
+                        */
+                       if (len == 0) {
+                               if (packet_types[hdr->type].type
+                                   == PACKET_REQUEST) {
+                                       debugf(NHRP_DEBUG_COMMON,
+                                              "Processing NHRP_EXTENSION_NAT_ADDRESS while forwarding the request packet");
+                                       proto = &pp->src_proto;
+                               } else if (packet_types[hdr->type].type
+                                          == PACKET_REPLY) {
+                                       debugf(NHRP_DEBUG_COMMON,
+                                              "Processing NHRP_EXTENSION_NAT_ADDRESS while forwarding the reply packet");
+                                       /* For reply packet use protocol
+                                        * specified in CIE of mandatory part
+                                        * for cache lookup
+                                        */
+                                       if (sockunion_family(
+                                                   &cie_protocol_mandatory)
+                                           != AF_UNSPEC)
+                                               proto = &cie_protocol_mandatory;
+                               }
+                       }
+
+                       if (proto) {
+                               debugf(NHRP_DEBUG_COMMON, "Proto is %pSU",
+                                      proto);
+                               c = nhrp_cache_get(nifp->ifp, proto, 0);
+                       }
+
+                       if (c) {
+                               debugf(NHRP_DEBUG_COMMON,
+                                      "c->cur.remote_nbma_natoa is %pSU",
+                                      &c->cur.remote_nbma_natoa);
+                               if (sockunion_family(&c->cur.remote_nbma_natoa)
+                                   != AF_UNSPEC) {
+                                       cie = nhrp_cie_push(
+                                               zb,
+                                               NHRP_CODE_SUCCESS,
+                                               &c->cur.remote_nbma_natoa,
+                                               proto);
+                                       if (!cie)
+                                               goto err;
+                               }
+                       } else {
+                               if (proto)
+                                       debugf(NHRP_DEBUG_COMMON,
+                                              "No cache entry for proto %pSU",
+                                              proto);
+                               /* Copy existing NAT extension to new packet if
+                                * either it was already not-empty, or we do not
+                                * have valid cache information
+                                */
+                               zbuf_put(zb, extpl.head, len);
+                       }
+                       break;
                default:
                        if (htons(ext->type) & NHRP_EXTENSION_FLAG_COMPULSORY)
                                /* FIXME: RFC says to just copy, but not
-                                * append our selves to the transit NHS list */
+                                * append our selves to the transit NHS list
+                                */
                                goto err;
                /* fallthru */
                case NHRP_EXTENSION_RESPONDER_ADDRESS:
                        /* Supported compulsory extensions, and any
                         * non-compulsory that is not explicitly handled,
-                        * should be just copied. */
+                        * should be just copied.
+                        */
                        zbuf_copy(zb, &extpl, len);
                        break;
                }
@@ -870,10 +1078,12 @@ static void nhrp_peer_forward(struct nhrp_peer *p,
        nhrp_packet_complete(zb, hdr);
        nhrp_peer_send(p, zb);
        zbuf_free(zb);
+       zbuf_free(zb_copy);
        return;
 err:
        nhrp_packet_debug(pp->pkt, "FWD-FAIL");
        zbuf_free(zb);
+       zbuf_free(zb_copy);
 }
 
 static void nhrp_packet_debug(struct zbuf *zb, const char *dir)
index 8ce19cd4a3a27cf2c5636060f17fda34a8b8163b..56861551eae54eac0b267cdf1cb9542f6ee2e82c 100644 (file)
@@ -203,17 +203,18 @@ static void nhrp_shortcut_recv_resolution_rep(struct nhrp_reqid *reqid,
                                              void *arg)
 {
        struct nhrp_packet_parser *pp = arg;
+       struct interface *ifp = pp->ifp;
+       struct nhrp_interface *nifp = ifp->info;
        struct nhrp_shortcut *s =
                container_of(reqid, struct nhrp_shortcut, reqid);
        struct nhrp_shortcut *ps;
        struct nhrp_extension_header *ext;
        struct nhrp_cie_header *cie;
        struct nhrp_cache *c = NULL;
-       struct nhrp_cache *c_dst_proto = NULL;
+       struct nhrp_cache *c_dst = NULL;
        union sockunion *proto, cie_proto, *nbma, cie_nbma, nat_nbma;
        struct prefix prefix, route_prefix;
        struct zbuf extpl;
-       char buf[4][SU_ADDRSTRLEN];
        int holding_time = pp->if_ad->holdtime;
 
        nhrp_reqid_free(&nhrp_packet_reqid, &s->reqid);
@@ -235,16 +236,6 @@ static void nhrp_shortcut_recv_resolution_rep(struct nhrp_reqid *reqid,
                return;
        }
 
-       /* Parse extensions */
-       memset(&nat_nbma, 0, sizeof(nat_nbma));
-       while ((ext = nhrp_ext_pull(&pp->extensions, &extpl)) != NULL) {
-               switch (htons(ext->type) & ~NHRP_EXTENSION_FLAG_COMPULSORY) {
-               case NHRP_EXTENSION_NAT_ADDRESS:
-                       nhrp_cie_pull(&extpl, pp->hdr, &nat_nbma, &cie_proto);
-                       break;
-               }
-       }
-
        /* Minor sanity check */
        prefix2sockunion(s->p, &cie_proto);
        if (!sockunion_same(&cie_proto, &pp->dst_proto)) {
@@ -280,16 +271,58 @@ static void nhrp_shortcut_recv_resolution_rep(struct nhrp_reqid *reqid,
                        prefix.prefixlen = route_prefix.prefixlen;
        }
 
-       debugf(NHRP_DEBUG_COMMON,
-              "Shortcut: %pFX is at proto %pSU dst_proto %pSU cie-nbma %pSU nat-nbma %pSU cie-holdtime %d",
-              &prefix, proto, &pp->dst_proto, &cie_nbma, &nat_nbma,
-              htons(cie->holding_time));
+       /* Parse extensions */
+       memset(&nat_nbma, 0, sizeof(nat_nbma));
+       while ((ext = nhrp_ext_pull(&pp->extensions, &extpl)) != NULL) {
+               switch (htons(ext->type) & ~NHRP_EXTENSION_FLAG_COMPULSORY) {
+               case NHRP_EXTENSION_NAT_ADDRESS: {
+                       struct nhrp_cie_header *cie_nat;
+
+                       do {
+                               union sockunion cie_nat_proto, cie_nat_nbma;
+
+                               sockunion_family(&cie_nat_proto) = AF_UNSPEC;
+                               sockunion_family(&cie_nat_nbma) = AF_UNSPEC;
+                               cie_nat = nhrp_cie_pull(&extpl, pp->hdr,
+                                                       &cie_nat_nbma,
+                                                       &cie_nat_proto);
+                               /* We are interested only in peer CIE */
+                               if (cie_nat
+                                   && sockunion_same(&cie_nat_proto, proto)) {
+                                       nat_nbma = cie_nat_nbma;
+                               }
+                       } while (cie_nat);
+               } break;
+               default:
+                       break;
+               }
+       }
 
        /* Update cache entry for the protocol to nbma binding */
-       if (sockunion_family(&nat_nbma) != AF_UNSPEC)
+       if (sockunion_family(&nat_nbma) != AF_UNSPEC) {
+               debugf(NHRP_DEBUG_COMMON,
+                      "Shortcut: NAT detected (NAT extension) proto %pSU NBMA %pSU claimed-NBMA %pSU",
+                      proto, &nat_nbma, &cie_nbma);
                nbma = &nat_nbma;
-       else
+       }
+       /* For NHRP resolution reply the cie_nbma in mandatory part is the
+        * address of the actual address of the sender
+        */
+       else if (!sockunion_same(&cie_nbma, &pp->peer->vc->remote.nbma)
+                && !nhrp_nhs_match_ip(&pp->peer->vc->remote.nbma, nifp)) {
+               debugf(NHRP_DEBUG_COMMON,
+                      "Shortcut: NAT detected (no NAT Extension) proto %pSU NBMA %pSU claimed-NBMA %pSU",
+                      proto, &pp->peer->vc->remote.nbma, &cie_nbma);
+               nbma = &pp->peer->vc->remote.nbma;
+               nat_nbma = *nbma;
+       } else {
                nbma = &cie_nbma;
+       }
+
+       debugf(NHRP_DEBUG_COMMON,
+              "Shortcut: %pFX is at proto %pSU dst_proto %pSU NBMA %pSU cie-holdtime %d",
+              &prefix, proto, &pp->dst_proto, nbma,
+              htons(cie->holding_time));
 
        if (sockunion_family(nbma)) {
                c = nhrp_cache_get(pp->ifp, proto, 1);
@@ -299,25 +332,31 @@ static void nhrp_shortcut_recv_resolution_rep(struct nhrp_reqid *reqid,
                        nhrp_cache_update_binding(c, NHRP_CACHE_DYNAMIC,
                                                  holding_time,
                                                  nhrp_peer_get(pp->ifp, nbma),
-                                                 htons(cie->mtu), nbma);
+                                                 htons(cie->mtu),
+                                                 nbma,
+                                                 &cie_nbma);
                } else {
                        debugf(NHRP_DEBUG_COMMON,
-                              "Shortcut: no cache for nbma %s", buf[2]);
+                              "Shortcut: no cache for proto %pSU", proto);
                }
 
                /* Update cache binding for dst_proto as well */
-               if (proto != &pp->dst_proto) {
-                       c_dst_proto = nhrp_cache_get(pp->ifp, &pp->dst_proto, 1);
-                       if (c_dst_proto) {
+               if (sockunion_cmp(proto, &pp->dst_proto)) {
+                       c_dst = nhrp_cache_get(pp->ifp, &pp->dst_proto, 1);
+                       if (c_dst) {
                                debugf(NHRP_DEBUG_COMMON,
-                              "Shortcut: cache found, update binding");
-                               nhrp_cache_update_binding(c_dst_proto, NHRP_CACHE_DYNAMIC,
+                                      "Shortcut: cache found, update binding");
+                               nhrp_cache_update_binding(c_dst,
+                                                 NHRP_CACHE_DYNAMIC,
                                                  holding_time,
                                                  nhrp_peer_get(pp->ifp, nbma),
-                                                 htons(cie->mtu), nbma);
+                                                 htons(cie->mtu),
+                                                 nbma,
+                                                 &cie_nbma);
                        } else {
                                debugf(NHRP_DEBUG_COMMON,
-                              "Shortcut: no cache for nbma %s", buf[2]);
+                                      "Shortcut: no cache for proto %pSU",
+                                      &pp->dst_proto);
                        }
                }
        }
@@ -356,6 +395,7 @@ static void nhrp_shortcut_send_resolution_req(struct nhrp_shortcut *s)
        struct nhrp_afi_data *if_ad;
        struct nhrp_peer *peer;
        struct nhrp_cie_header *cie;
+       struct nhrp_extension_header *ext;
 
        if (nhrp_route_address(NULL, &s->addr, NULL, &peer)
            != NHRP_ROUTE_NBMA_NEXTHOP)
@@ -399,7 +439,14 @@ static void nhrp_shortcut_send_resolution_req(struct nhrp_shortcut *s)
 
        /* Cisco NAT detection extension */
        hdr->flags |= htons(NHRP_FLAG_RESOLUTION_NAT);
-       nhrp_ext_push(zb, hdr, NHRP_EXTENSION_NAT_ADDRESS);
+       ext = nhrp_ext_push(zb, hdr, NHRP_EXTENSION_NAT_ADDRESS);
+       if (sockunion_family(&nifp->nat_nbma) != AF_UNSPEC) {
+               cie = nhrp_cie_push(zb, NHRP_CODE_SUCCESS, &nifp->nat_nbma,
+                                   &if_ad->addr);
+               cie->prefix_length = 8 * sockunion_get_addrlen(&if_ad->addr);
+               cie->mtu = htons(if_ad->mtu);
+               nhrp_ext_complete(zb, ext);
+       }
 
        nhrp_packet_complete(zb, hdr);
 
index 1ea4c5e64f126924b1f44edbb09a5c323c7f1a70..4358605e2b03b14511ec00a34d140ec109e84a90 100644 (file)
@@ -525,11 +525,11 @@ DEFUN(if_nhrp_map, if_nhrp_map_cmd,
        c->map = 1;
        if (type == NHRP_CACHE_LOCAL)
                nhrp_cache_update_binding(c, NHRP_CACHE_LOCAL, 0, NULL, 0,
-                                         NULL);
+                                         NULL, NULL);
        else
                nhrp_cache_update_binding(c, NHRP_CACHE_STATIC, 0,
                                          nhrp_peer_get(ifp, &nbma_addr), 0,
-                                         NULL);
+                                         NULL, NULL);
        return CMD_SUCCESS;
 }
 
@@ -565,7 +565,8 @@ DEFUN(if_no_nhrp_map, if_no_nhrp_map_cmd,
                return CMD_SUCCESS;
 
        nhrp_cache_update_binding(c, c->cur.type, -1,
-                                 nhrp_peer_get(ifp, &nbma_addr), 0, NULL);
+                                 nhrp_peer_get(ifp, &nbma_addr), 0, NULL,
+                                 NULL);
        return CMD_SUCCESS;
 }
 
@@ -629,7 +630,7 @@ static void show_ip_nhrp_cache(struct nhrp_cache *c, void *pctx)
 {
        struct info_ctx *ctx = pctx;
        struct vty *vty = ctx->vty;
-       char buf[2][SU_ADDRSTRLEN];
+       char buf[3][SU_ADDRSTRLEN];
        struct json_object *json = NULL;
 
        if (ctx->afi != family2afi(sockunion_family(&c->remote_addr)))
@@ -637,17 +638,42 @@ static void show_ip_nhrp_cache(struct nhrp_cache *c, void *pctx)
 
 
        if (!ctx->count && !ctx->json) {
-               vty_out(vty, "%-8s %-8s %-24s %-24s %-6s %s\n", "Iface", "Type",
-                       "Protocol", "NBMA", "Flags", "Identity");
+               vty_out(vty, "%-8s %-8s %-24s %-24s %-24s %-6s %s\n", "Iface",
+                       "Type", "Protocol", "NBMA", "Claimed NBMA", "Flags",
+                       "Identity");
        }
        ctx->count++;
 
        sockunion2str(&c->remote_addr, buf[0], sizeof(buf[0]));
-       if (c->cur.peer)
-               sockunion2str(&c->cur.peer->vc->remote.nbma,
-                             buf[1], sizeof(buf[1]));
-       else
-               snprintf(buf[1], sizeof(buf[1]), "-");
+       if (c->cur.type == NHRP_CACHE_LOCAL) {
+               struct nhrp_interface *nifp = c->ifp->info;
+
+               if (sockunion_family(&nifp->nbma) != AF_UNSPEC) {
+                       sockunion2str(&nifp->nbma, buf[1], sizeof(buf[1]));
+                       sockunion2str(&nifp->nbma, buf[2], sizeof(buf[2]));
+               } else {
+                       snprintf(buf[1], sizeof(buf[1]), "-");
+                       snprintf(buf[2], sizeof(buf[2]), "-");
+               }
+
+               /* if we are behind NAT then update NBMA field */
+               if (sockunion_family(&nifp->nat_nbma) != AF_UNSPEC)
+                       sockunion2str(&nifp->nat_nbma, buf[1], sizeof(buf[1]));
+       } else {
+               if (c->cur.peer)
+                       sockunion2str(&c->cur.peer->vc->remote.nbma,
+                                     buf[1], sizeof(buf[1]));
+               else
+                       snprintf(buf[1], sizeof(buf[1]), "-");
+
+               if (c->cur.peer
+                   && sockunion_family(&c->cur.remote_nbma_claimed)
+                   != AF_UNSPEC)
+                       sockunion2str(&c->cur.remote_nbma_claimed,
+                                     buf[2], sizeof(buf[2]));
+               else
+                       snprintf(buf[2], sizeof(buf[2]), "-");
+       }
 
        if (ctx->json) {
                json = json_object_new_object();
@@ -656,6 +682,7 @@ static void show_ip_nhrp_cache(struct nhrp_cache *c, void *pctx)
                                       nhrp_cache_type_str[c->cur.type]);
                json_object_string_add(json, "protocol", buf[0]);
                json_object_string_add(json, "nbma", buf[1]);
+               json_object_string_add(json, "claimed_nbma", buf[2]);
 
                if (c->used)
                        json_object_boolean_true_add(json, "used");
@@ -681,9 +708,10 @@ static void show_ip_nhrp_cache(struct nhrp_cache *c, void *pctx)
                json_object_array_add(ctx->json, json);
                return;
        }
-       vty_out(ctx->vty, "%-8s %-8s %-24s %-24s %c%c%c    %s\n", c->ifp->name,
+       vty_out(ctx->vty, "%-8s %-8s %-24s %-24s %-24s %c%c%c    %s\n",
+               c->ifp->name,
                nhrp_cache_type_str[c->cur.type],
-               buf[0], buf[1],
+               buf[0], buf[1], buf[2],
                c->used ? 'U' : ' ', c->t_timeout ? 'T' : ' ',
                c->t_auth ? 'A' : ' ',
                c->cur.peer ? c->cur.peer->vc->remote.id : "-");
@@ -970,7 +998,8 @@ static void clear_nhrp_cache(struct nhrp_cache *c, void *data)
 {
        struct info_ctx *ctx = data;
        if (c->cur.type <= NHRP_CACHE_DYNAMIC) {
-               nhrp_cache_update_binding(c, c->cur.type, -1, NULL, 0, NULL);
+               nhrp_cache_update_binding(c, c->cur.type, -1, NULL, 0, NULL,
+                                         NULL);
                ctx->count++;
        }
 }
index 9c8c293b9e26fd6aa442cc332b34f3028d207315..e4afb22f803f35f07341d1e3d270347cb3881469 100644 (file)
@@ -156,6 +156,7 @@ struct nhrp_peer {
        struct nhrp_vc *vc;
        struct thread *t_fallback;
        struct notifier_block vc_notifier, ifp_notifier;
+       struct thread *t_timer;
 };
 
 struct nhrp_packet_parser {
@@ -225,9 +226,11 @@ struct nhrp_cache {
        struct {
                enum nhrp_cache_type type;
                union sockunion remote_nbma_natoa;
+               union sockunion remote_nbma_claimed;
                struct nhrp_peer *peer;
                time_t expires;
                uint32_t mtu;
+               int holding_time;
        } cur, new;
 };
 
@@ -383,7 +386,8 @@ void nhrp_cache_config_foreach(struct interface *ifp,
 void nhrp_cache_set_used(struct nhrp_cache *, int);
 int nhrp_cache_update_binding(struct nhrp_cache *, enum nhrp_cache_type type,
                              int holding_time, struct nhrp_peer *p,
-                             uint32_t mtu, union sockunion *nbma_natoa);
+                             uint32_t mtu, union sockunion *nbma_natoa,
+                             union sockunion *claimed_nbma);
 void nhrp_cache_notify_add(struct nhrp_cache *c, struct notifier_block *,
                           notifier_fn_t);
 void nhrp_cache_notify_del(struct nhrp_cache *c, struct notifier_block *);
@@ -465,4 +469,6 @@ void nhrp_peer_recv(struct nhrp_peer *p, struct zbuf *zb);
 void nhrp_peer_send(struct nhrp_peer *p, struct zbuf *zb);
 void nhrp_peer_send_indication(struct interface *ifp, uint16_t, struct zbuf *);
 
+int nhrp_nhs_match_ip(union sockunion *in_ip, struct nhrp_interface *nifp);
+
 #endif
index a78d827ea59073265a43f89cb3ca1f4e2d12a463..a23526af484ebaad4031404f660e36ffe0d93482 100644 (file)
@@ -230,3 +230,15 @@ void zbuf_copy(struct zbuf *zdst, struct zbuf *zsrc, size_t len)
                return;
        memcpy(dst, src, len);
 }
+
+void zbuf_copy_peek(struct zbuf *zdst, struct zbuf *zsrc, size_t len)
+{
+       const void *src;
+       void *dst;
+
+       dst = zbuf_pushn(zdst, len);
+       src = zbuf_pulln(zsrc, 0);
+       if (!dst || !src)
+               return;
+       memcpy(dst, src, len);
+}
index e6f7101d635572f351646bb53231d491fb75f08e..d4a7c15a95a07a49fb2a26c23a6f0589946cee77 100644 (file)
@@ -190,6 +190,7 @@ static inline void zbuf_put_be32(struct zbuf *zb, uint32_t val)
 }
 
 void zbuf_copy(struct zbuf *zb, struct zbuf *src, size_t len);
+void zbuf_copy_peek(struct zbuf *zdst, struct zbuf *zsrc, size_t len);
 
 void zbufq_init(struct zbuf_queue *);
 void zbufq_reset(struct zbuf_queue *);
index b202cd01f12958407a82a312d05c6597d43dc284..2ab7db68bdca0174efb31b44f599d1d48129168a 100644 (file)
@@ -166,7 +166,9 @@ void ospf_bfd_write_config(struct vty *vty, const struct ospf_if_params *params
                           __attribute__((unused)))
 {
 #if HAVE_BFDD == 0
-       if (CHECK_FLAG(bfd_info->flags, BFD_FLAG_PARAM_CFG))
+       if (params->bfd_config->detection_multiplier != BFD_DEF_DETECT_MULT
+           || params->bfd_config->min_rx != BFD_DEF_MIN_RX
+           || params->bfd_config->min_tx != BFD_DEF_MIN_TX)
                vty_out(vty, " ip ospf bfd %d %d %d\n",
                        params->bfd_config->detection_multiplier,
                        params->bfd_config->min_rx, params->bfd_config->min_tx);
index d7e86654899394b46d1fa548101fe24bd0c920b5..92d13e616cd9edfad3a218c419a1a90b699a3d05 100644 (file)
@@ -7865,10 +7865,9 @@ DEFUN (ip_ospf_message_digest_key,
        }
 
        key_id = strtol(keyid, NULL, 10);
-       if (ospf_crypt_key_lookup(params->auth_crypt, key_id) != NULL) {
-               vty_out(vty, "OSPF: Key %d already exists\n", key_id);
-               return CMD_WARNING;
-       }
+
+       /* Remove existing key, if any */
+       ospf_crypt_key_delete(params->auth_crypt, key_id);
 
        ck = ospf_crypt_key_new();
        ck->key_id = (uint8_t)key_id;
@@ -8968,9 +8967,12 @@ DEFUN (ip_ospf_area,
                // update/create address-level params
                params = ospf_get_if_params((ifp), (addr));
                if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
-                       vty_out(vty,
-                               "Must remove previous area/address config before changing ospf area\n");
-                       return CMD_WARNING_CONFIG_FAILED;
+                       if (!IPV4_ADDR_SAME(&params->if_area, &area_id)) {
+                               vty_out(vty,
+                                       "Must remove previous area/address config before changing ospf area\n");
+                               return CMD_WARNING_CONFIG_FAILED;
+                       } else
+                               return CMD_SUCCESS;
                }
                ospf_if_update_params((ifp), (addr));
        }
index 5861f25a410ce9aaf4403e300a8a549084ac377a..a82fe5a867fb50020de9579d20f5b0e6ba019861 100644 (file)
@@ -1,10 +1,22 @@
 pcep_pcc
 test/pcep_msg_tests
+test/pcep_msg_tests.log
+test/pcep_msg_tests.trs
 test/pcep_pcc_api_tests
+test/pcep_pcc_api_tests.log
+test/pcep_pcc_api_tests.trs
 test/pcep_session_logic_tests
+test/pcep_session_logic_tests.log
+test/pcep_session_logic_tests.trs
 test/pcep_socket_comm_tests
+test/pcep_socket_comm_tests.log
+test/pcep_socket_comm_tests.trs
 test/pcep_timers_tests
+test/pcep_timers_tests.log
+test/pcep_timers_tests.trs
 test/pcep_utils_tests
+test/pcep_utils_tests.log
+test/pcep_utils_tests.trs
 test/valgrind.pcep_msg_tests.log
 test/valgrind.pcep_pcc_api_tests.log
 test/valgrind.pcep_session_logic_tests.log
index 479fcaeb54d6a21312f3734b59a1afcc02539ceb..554b1d68f6bb483b825f7cd0c36d1bab5935bfdd 100644 (file)
@@ -163,8 +163,8 @@ void ripng_peer_display(struct vty *vty, struct ripng *ripng)
        char timebuf[RIPNG_UPTIME_LEN];
 
        for (ALL_LIST_ELEMENTS(ripng->peer_list, node, nnode, peer)) {
-               vty_out(vty, "    %s \n%14s %10d %10d %10d      %s\n",
-                       inet6_ntoa(peer->addr), " ", peer->recv_badpackets,
+               vty_out(vty, "    %pI6 \n%14s %10d %10d %10d      %s\n",
+                       &peer->addr, " ", peer->recv_badpackets,
                        peer->recv_badroutes, ZEBRA_RIPNG_DISTANCE_DEFAULT,
                        ripng_peer_uptime(peer, timebuf, RIPNG_UPTIME_LEN));
        }
index 749feaca6cdadb370e7cc9d7b8f8a6039b7918f6..0e831401493b0f210f88d7c24694433117c45ca9 100644 (file)
@@ -191,7 +191,7 @@ int ripng_send_packet(caddr_t buf, int bufsize, struct sockaddr_in6 *to,
 
        if (IS_RIPNG_DEBUG_SEND) {
                if (to)
-                       zlog_debug("send to %s", inet6_ntoa(to->sin6_addr));
+                       zlog_debug("send to %pI6", &to->sin6_addr);
                zlog_debug("  send interface %s", ifp->name);
                zlog_debug("  send packet size %d", bufsize);
        }
@@ -237,8 +237,8 @@ int ripng_send_packet(caddr_t buf, int bufsize, struct sockaddr_in6 *to,
        if (ret < 0) {
                if (to)
                        flog_err_sys(EC_LIB_SOCKET,
-                                    "RIPng send fail on %s to %s: %s",
-                                    ifp->name, inet6_ntoa(to->sin6_addr),
+                                    "RIPng send fail on %s to %pI6: %s",
+                                    ifp->name, &to->sin6_addr,
                                     safe_strerror(errno));
                else
                        flog_err_sys(EC_LIB_SOCKET, "RIPng send fail on %s: %s",
@@ -338,11 +338,11 @@ void ripng_packet_dump(struct ripng_packet *packet, int size,
 
        for (lim = (caddr_t)packet + size; (caddr_t)rte < lim; rte++) {
                if (rte->metric == RIPNG_METRIC_NEXTHOP)
-                       zlog_debug("  nexthop %s/%d", inet6_ntoa(rte->addr),
+                       zlog_debug("  nexthop %pI6/%d", &rte->addr,
                                   rte->prefixlen);
                else
-                       zlog_debug("  %s/%d metric %d tag %" ROUTE_TAG_PRI,
-                                  inet6_ntoa(rte->addr), rte->prefixlen,
+                       zlog_debug("  %pI6/%d metric %d tag %" ROUTE_TAG_PRI,
+                                  &rte->addr, rte->prefixlen,
                                   rte->metric, (route_tag_t)ntohs(rte->tag));
        }
 }
@@ -353,9 +353,9 @@ static void ripng_nexthop_rte(struct rte *rte, struct sockaddr_in6 *from,
 {
        /* Logging before checking RTE. */
        if (IS_RIPNG_DEBUG_RECV)
-               zlog_debug("RIPng nexthop RTE address %s tag %" ROUTE_TAG_PRI
+               zlog_debug("RIPng nexthop RTE address %pI6 tag %" ROUTE_TAG_PRI
                           " prefixlen %d",
-                          inet6_ntoa(rte->addr), (route_tag_t)ntohs(rte->tag),
+                          &rte->addr, (route_tag_t)ntohs(rte->tag),
                           rte->prefixlen);
 
        /* RFC2080 2.1.1 Next Hop:
@@ -364,14 +364,13 @@ static void ripng_nexthop_rte(struct rte *rte, struct sockaddr_in6 *from,
        if (ntohs(rte->tag) != 0)
                zlog_warn(
                        "RIPng nexthop RTE with non zero tag value %" ROUTE_TAG_PRI
-                       " from %s",
-                       (route_tag_t)ntohs(rte->tag),
-                       inet6_ntoa(from->sin6_addr));
+                       " from %pI6",
+                       (route_tag_t)ntohs(rte->tag), &from->sin6_addr);
 
        if (rte->prefixlen != 0)
                zlog_warn(
-                       "RIPng nexthop RTE with non zero prefixlen value %d from %s",
-                       rte->prefixlen, inet6_ntoa(from->sin6_addr));
+                       "RIPng nexthop RTE with non zero prefixlen value %d from %pI6",
+                       rte->prefixlen, &from->sin6_addr);
 
        /* Specifying a value of 0:0:0:0:0:0:0:0 in the prefix field of a
         next hop RTE indicates that the next hop address should be the
@@ -396,8 +395,8 @@ static void ripng_nexthop_rte(struct rte *rte, struct sockaddr_in6 *from,
         information is ignored, a possibly sub-optimal, but absolutely
         valid, route may be taken.  If the received next hop address is not
         a link-local address, it should be treated as 0:0:0:0:0:0:0:0.  */
-       zlog_warn("RIPng nexthop RTE with non link-local address %s from %pI6",
-                 inet6_ntoa(rte->addr), &from->sin6_addr);
+       zlog_warn("RIPng nexthop RTE with non link-local address %pI6 from %pI6",
+                 &rte->addr, &from->sin6_addr);
 
        nexthop->flag = RIPNG_NEXTHOP_UNSPEC;
        memset(&nexthop->address, 0, sizeof(struct in6_addr));
@@ -750,8 +749,8 @@ static void ripng_route_process(struct rte *rte, struct sockaddr_in6 *from,
                if (ret == RMAP_DENYMATCH) {
                        if (IS_RIPNG_DEBUG_PACKET)
                                zlog_debug(
-                                       "RIPng %s/%d is filtered by route-map in",
-                                       inet6_ntoa(p.prefix), p.prefixlen);
+                                       "RIPng %pFX is filtered by route-map in",
+                                       &p);
                        return;
                }
 
@@ -993,8 +992,8 @@ void ripng_redistribute_add(struct ripng *ripng, int type, int sub_type,
                                p, ifindex2ifname(ifindex, ripng->vrf->vrf_id));
                else
                        zlog_debug(
-                               "Redistribute new prefix %pFX with nexthop %s on the interface %s",
-                               p, inet6_ntoa(*nexthop),
+                               "Redistribute new prefix %pFX with nexthop %pI6 on the interface %s",
+                               p, nexthop,
                                ifindex2ifname(ifindex, ripng->vrf->vrf_id));
        }
 
@@ -1106,8 +1105,8 @@ static void ripng_response_process(struct ripng_packet *packet, int size,
        /* RFC2080 2.4.2  Response Messages:
         The Response must be ignored if it is not from the RIPng port.  */
        if (ntohs(from->sin6_port) != RIPNG_PORT_DEFAULT) {
-               zlog_warn("RIPng packet comes from non RIPng port %d from %s",
-                         ntohs(from->sin6_port), inet6_ntoa(from->sin6_addr));
+               zlog_warn("RIPng packet comes from non RIPng port %d from %pI6",
+                         ntohs(from->sin6_port), &from->sin6_addr);
                ripng_peer_bad_packet(ripng, from);
                return;
        }
@@ -1116,8 +1115,8 @@ static void ripng_response_process(struct ripng_packet *packet, int size,
         whether the datagram is from a valid neighbor; the source of the
         datagram must be a link-local address.  */
        if (!IN6_IS_ADDR_LINKLOCAL(&from->sin6_addr)) {
-               zlog_warn("RIPng packet comes from non link local address %s",
-                         inet6_ntoa(from->sin6_addr));
+               zlog_warn("RIPng packet comes from non link local address %pI6",
+                         &from->sin6_addr);
                ripng_peer_bad_packet(ripng, from);
                return;
        }
@@ -1129,8 +1128,8 @@ static void ripng_response_process(struct ripng_packet *packet, int size,
         and such datagrams must be ignored. */
        if (ripng_lladdr_check(ifp, &from->sin6_addr)) {
                zlog_warn(
-                       "RIPng packet comes from my own link local address %s",
-                       inet6_ntoa(from->sin6_addr));
+                       "RIPng packet comes from my own link local address %pI6",
+                       &from->sin6_addr);
                ripng_peer_bad_packet(ripng, from);
                return;
        }
@@ -1141,8 +1140,8 @@ static void ripng_response_process(struct ripng_packet *packet, int size,
         packets) must be examined to ensure that the hop count is 255. */
        if (hoplimit >= 0 && hoplimit != 255) {
                zlog_warn(
-                       "RIPng packet comes with non 255 hop count %d from %s",
-                       hoplimit, inet6_ntoa(from->sin6_addr));
+                       "RIPng packet comes with non 255 hop count %d from %pI6",
+                       hoplimit, &from->sin6_addr);
                ripng_peer_bad_packet(ripng, from);
                return;
        }
@@ -1173,25 +1172,22 @@ static void ripng_response_process(struct ripng_packet *packet, int size,
                   should never be present in an RTE. */
                if (IN6_IS_ADDR_MULTICAST(&rte->addr)) {
                        zlog_warn(
-                               "Destination prefix is a multicast address %s/%d [%d]",
-                               inet6_ntoa(rte->addr), rte->prefixlen,
-                               rte->metric);
+                               "Destination prefix is a multicast address %pI6/%d [%d]",
+                               &rte->addr, rte->prefixlen, rte->metric);
                        ripng_peer_bad_route(ripng, from);
                        continue;
                }
                if (IN6_IS_ADDR_LINKLOCAL(&rte->addr)) {
                        zlog_warn(
-                               "Destination prefix is a link-local address %s/%d [%d]",
-                               inet6_ntoa(rte->addr), rte->prefixlen,
-                               rte->metric);
+                               "Destination prefix is a link-local address %pI6/%d [%d]",
+                               &rte->addr, rte->prefixlen, rte->metric);
                        ripng_peer_bad_route(ripng, from);
                        continue;
                }
                if (IN6_IS_ADDR_LOOPBACK(&rte->addr)) {
                        zlog_warn(
-                               "Destination prefix is a loopback address %s/%d [%d]",
-                               inet6_ntoa(rte->addr), rte->prefixlen,
-                               rte->metric);
+                               "Destination prefix is a loopback address %pI6/%d [%d]",
+                               &rte->addr, rte->prefixlen, rte->metric);
                        ripng_peer_bad_route(ripng, from);
                        continue;
                }
@@ -1199,17 +1195,17 @@ static void ripng_response_process(struct ripng_packet *packet, int size,
                /* - is the prefix length valid (i.e., between 0 and 128,
                   inclusive) */
                if (rte->prefixlen > 128) {
-                       zlog_warn("Invalid prefix length %s/%d from %s%%%s",
-                                 inet6_ntoa(rte->addr), rte->prefixlen,
-                                 inet6_ntoa(from->sin6_addr), ifp->name);
+                       zlog_warn("Invalid prefix length %pI6/%d from %pI6%%%s",
+                                 &rte->addr, rte->prefixlen,
+                                 &from->sin6_addr, ifp->name);
                        ripng_peer_bad_route(ripng, from);
                        continue;
                }
 
                /* - is the metric valid (i.e., between 1 and 16, inclusive) */
                if (!(rte->metric >= 1 && rte->metric <= 16)) {
-                       zlog_warn("Invalid metric %d from %s%%%s", rte->metric,
-                                 inet6_ntoa(from->sin6_addr), ifp->name);
+                       zlog_warn("Invalid metric %d from %pI6%%%s",
+                                 rte->metric, &from->sin6_addr, ifp->name);
                        ripng_peer_bad_route(ripng, from);
                        continue;
                }
@@ -1342,8 +1338,8 @@ static int ripng_read(struct thread *thread)
        /* Check RTE boundary.  RTE size (Packet length - RIPng header size
           (4)) must be multiple size of one RTE size (20). */
        if (((len - 4) % 20) != 0) {
-               zlog_warn("RIPng invalid packet size %d from %s (VRF %s)", len,
-                         inet6_ntoa(from.sin6_addr), ripng->vrf_name);
+               zlog_warn("RIPng invalid packet size %d from %pI6 (VRF %s)",
+                         len, &from.sin6_addr, ripng->vrf_name);
                ripng_peer_bad_packet(ripng, &from);
                return 0;
        }
@@ -1354,8 +1350,8 @@ static int ripng_read(struct thread *thread)
        /* RIPng packet received. */
        if (IS_RIPNG_DEBUG_EVENT)
                zlog_debug(
-                       "RIPng packet received from %s port %d on %s (VRF %s)",
-                       inet6_ntoa(from.sin6_addr), ntohs(from.sin6_port),
+                       "RIPng packet received from %pI6 port %d on %s (VRF %s)",
+                       &from.sin6_addr, ntohs(from.sin6_port),
                        ifp ? ifp->name : "unknown", ripng->vrf_name);
 
        /* Logging before packet checking. */
@@ -1581,8 +1577,8 @@ void ripng_output_process(struct interface *ifp, struct sockaddr_in6 *to,
 
        if (IS_RIPNG_DEBUG_EVENT) {
                if (to)
-                       zlog_debug("RIPng update routes to neighbor %s",
-                                  inet6_ntoa(to->sin6_addr));
+                       zlog_debug("RIPng update routes to neighbor %pI6",
+                                  &to->sin6_addr);
                else
                        zlog_debug("RIPng update routes on interface %s",
                                   ifp->name);
@@ -2089,8 +2085,8 @@ DEFUN (show_ipv6_ripng,
 #endif /* DEBUG */
                                vty_out(vty, "\n");
                                vty_out(vty, "%*s", 18, " ");
-                               len = vty_out(vty, "%s",
-                                             inet6_ntoa(rinfo->nexthop));
+                               len = vty_out(vty, "%pI6",
+                                             &rinfo->nexthop);
 
                                len = 28 - len;
                                if (len > 0)
index 739c08b09ebcac108046d6b3b8e375a3ddd3017c..cdafc4a76a39abd7bc064f88e44a5abdd7825fb9 100644 (file)
@@ -139,9 +139,6 @@ struct route_node *static_add_route(afi_t afi, safi_t safi, struct prefix *p,
 
        rn->info = si;
 
-       /* Mark as having FRR configuration */
-       vrf_set_user_cfged(svrf->vrf);
-
        return rn;
 }
 
@@ -160,9 +157,6 @@ static void static_del_src_route(struct route_node *rn, safi_t safi,
 
        XFREE(MTYPE_STATIC_ROUTE, rn->info);
        route_unlock_node(rn);
-       /* If no other FRR config for this VRF, mark accordingly. */
-       if (!static_vrf_has_config(svrf))
-               vrf_reset_user_cfged(svrf->vrf);
 }
 
 void static_del_route(struct route_node *rn, safi_t safi,
@@ -192,9 +186,6 @@ void static_del_route(struct route_node *rn, safi_t safi,
        }
        XFREE(MTYPE_STATIC_ROUTE, rn->info);
        route_unlock_node(rn);
-       /* If no other FRR config for this VRF, mark accordingly. */
-       if (!static_vrf_has_config(svrf))
-               vrf_reset_user_cfged(svrf->vrf);
 }
 
 bool static_add_nexthop_validate(const char *nh_vrf_name, static_types type,
index ba1367b877f4175dc553e61ffc64f08b4693de23..96e5d37d68d91221c4e4e904c337fa50b4bb43b3 100644 (file)
@@ -170,27 +170,6 @@ static int static_vrf_config_write(struct vty *vty)
        return 0;
 }
 
-int static_vrf_has_config(struct static_vrf *svrf)
-{
-       struct route_table *table;
-       safi_t safi;
-       afi_t afi;
-
-       /*
-        * NOTE: This is a don't care for the default VRF, but we go through
-        * the motions to keep things consistent.
-        */
-       FOREACH_AFI_SAFI (afi, safi) {
-               table = svrf->stable[afi][safi];
-               if (!table)
-                       continue;
-               if (route_table_count(table))
-                       return 1;
-       }
-
-       return 0;
-}
-
 void static_vrf_init(void)
 {
        vrf_init(static_vrf_new, static_vrf_enable,
index 81296f286463351e7ce6ca65239532d6f310a709..3977899054a061d0a6d114f1232d60a5dc170f7e 100644 (file)
@@ -37,8 +37,6 @@ struct stable_info {
 struct static_vrf *static_vrf_lookup_by_name(const char *vrf_name);
 struct static_vrf *static_vrf_lookup_by_id(vrf_id_t vrf_id);
 
-int static_vrf_has_config(struct static_vrf *svrf);
-
 void static_vrf_init(void);
 
 struct route_table *static_vrf_static_table(afi_t afi, safi_t safi,
index 24de3fa88d0d88720d7a8dedb7dda11babee1b1e..21b3a916b862464b49b69f527aa22882b53fba92 100644 (file)
@@ -59,21 +59,88 @@ static void printcmp(const char *fmt, ...)
                errors++;
 }
 
-static void printchk(const char *ref, const char *fmt, ...) PRINTFRR(2, 3);
-static void printchk(const char *ref, const char *fmt, ...)
+static int printchk(const char *ref, const char *fmt, ...) PRINTFRR(2, 3);
+static int printchk(const char *ref, const char *fmt, ...)
 {
        va_list ap;
        char bufrr[256];
+       bool truncfail = false;
+       size_t i;
+       size_t expectlen;
+
        memset(bufrr, 0xcc, sizeof(bufrr));
 
        va_start(ap, fmt);
-       vsnprintfrr(bufrr, sizeof(bufrr), fmt, ap);
+       expectlen = vsnprintfrr(NULL, 0, fmt, ap);
+       va_end(ap);
+
+       va_start(ap, fmt);
+       vsnprintfrr(bufrr, 7, fmt, ap);
        va_end(ap);
 
-       printf("fmt: \"%s\"\nref: \"%s\"\nfrr: \"%s\"\n%s\n\n",
+       if (strnlen(bufrr, 7) == 7)
+               truncfail = true;
+       if (strnlen(bufrr, 7) < 7 && strncmp(ref, bufrr, 6) != 0)
+               truncfail = true;
+       for (i = 7; i < sizeof(bufrr); i++)
+               if (bufrr[i] != (char)0xcc) {
+                       truncfail = true;
+                       break;
+               }
+
+       if (truncfail) {
+               printf("truncation test FAILED:\n"
+                      "fmt: \"%s\"\nref: \"%s\"\nfrr[:7]: \"%s\"\n%s\n\n",
+                      fmt, ref, bufrr, strcmp(ref, bufrr) ? "ERROR" : "ok");
+               errors++;
+       }
+
+       struct fmt_outpos outpos[16];
+       struct fbuf fb = {
+               .buf = bufrr,
+               .pos = bufrr,
+               .len = sizeof(bufrr) - 1,
+               .outpos = outpos,
+               .outpos_n = array_size(outpos),
+       };
+
+       va_start(ap, fmt);
+       vbprintfrr(&fb, fmt, ap);
+       fb.pos[0] = '\0';
+       va_end(ap);
+
+       printf("fmt: \"%s\"\nref: \"%s\"\nfrr: \"%s\"\n%s\n",
               fmt, ref, bufrr, strcmp(ref, bufrr) ? "ERROR" : "ok");
        if (strcmp(ref, bufrr))
                errors++;
+       if (strlen(bufrr) != expectlen) {
+               printf("return value <> length mismatch\n");
+               errors++;
+       }
+
+       for (size_t i = 0; i < fb.outpos_i; i++)
+               printf("\t[%zu: %u..%u] = \"%.*s\"\n", i,
+                       outpos[i].off_start,
+                       outpos[i].off_end,
+                       (int)(outpos[i].off_end - outpos[i].off_start),
+                       bufrr + outpos[i].off_start);
+       printf("\n");
+       return 0;
+}
+
+static void test_va(const char *ref, const char *fmt, ...) PRINTFRR(2, 3);
+static void test_va(const char *ref, const char *fmt, ...)
+{
+       struct va_format vaf;
+       va_list ap;
+
+       va_start(ap, fmt);
+       vaf.fmt = fmt;
+       vaf.va = &ap;
+
+       printchk(ref, "VA [%pVA] %s", &vaf, "--");
+
+       va_end(ap);
 }
 
 int main(int argc, char **argv)
@@ -112,9 +179,12 @@ int main(int argc, char **argv)
        inet_aton("192.168.1.2", &ip);
        printchk("192.168.1.2", "%pI4", &ip);
        printchk("         192.168.1.2", "%20pI4", &ip);
+       printchk("192.168.1.2         ", "%-20pI4", &ip);
 
        printcmp("%p", &ip);
 
+       test_va("VA [192.168.1.2 1234] --", "%pI4 %u", &ip, 1234);
+
        snprintfrr(buf, sizeof(buf), "test%s", "#1");
        csnprintfrr(buf, sizeof(buf), "test%s", "#2");
        assert(strcmp(buf, "test#1test#2") == 0);
@@ -146,5 +216,42 @@ int main(int argc, char **argv)
        sg.src.s_addr = INADDR_ANY;
        printchk("(*,224.1.2.3)", "%pSG4", &sg);
 
+       uint8_t randhex[] = { 0x12, 0x34, 0x00, 0xca, 0xfe, 0x00, 0xaa, 0x55 };
+
+       FMT_NSTD(printchk("12 34 00 ca fe 00 aa 55", "%.8pHX", randhex));
+       FMT_NSTD(printchk("12 34 00 ca fe 00 aa 55", "%.*pHX",
+                (int)sizeof(randhex), randhex));
+       FMT_NSTD(printchk("12 34 00 ca", "%.4pHX", randhex));
+
+       printchk("12 34 00 ca fe 00 aa 55", "%8pHX", randhex);
+       printchk("12 34 00 ca fe 00 aa 55", "%*pHX",
+                (int)sizeof(randhex), randhex);
+       printchk("12 34 00 ca", "%4pHX", randhex);
+
+       printchk("", "%pHX", randhex);
+
+       printchk("12:34:00:ca:fe:00:aa:55", "%8pHXc", randhex);
+       printchk("123400cafe00aa55", "%8pHXn", randhex);
+
+       printchk("/test/pa\\ th/\\~spe\\ncial\\x01/file.name", "%pSE",
+                "/test/pa th/~spe\ncial\x01/file.name");
+       printchk("/test/pa\\ th/\\~spe\\n", "%17pSE",
+                "/test/pa th/~spe\ncial\x01/file.name");
+
+       char nulltest[] = { 'n', 'u', 0, 'l', 'l' };
+
+       printchk("nu\\x00ll", "%5pSE", nulltest);
+       printchk("nu\\x00ll", "%*pSE", 5, nulltest);
+
+       printchk("bl\\\"ah\\x01te[st\\nab]c", "%pSQ",
+                "bl\"ah\x01te[st\nab]c");
+       printchk("\"bl\\\"ah\\x01te[st\\nab]c\"", "%pSQq",
+                "bl\"ah\x01te[st\nab]c");
+       printchk("\"bl\\\"ah\\x01te[st\\x0aab\\]c\"", "%pSQqs",
+                "bl\"ah\x01te[st\nab]c");
+       printchk("\"\"", "%pSQqn", "");
+       printchk("\"\"", "%pSQqn", (char *)NULL);
+       printchk("(null)", "%pSQq", (char *)NULL);
+
        return !!errors;
 }
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/__init__.py b/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/bgpd.conf b/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/bgpd.conf
new file mode 100644 (file)
index 0000000..c320bb5
--- /dev/null
@@ -0,0 +1,7 @@
+router bgp 65001
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.101 remote-as external
+ address-family ipv4 unicast
+  redistribute connected
+ exit-address-family
+!
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/zebra.conf b/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/zebra.conf
new file mode 100644 (file)
index 0000000..1782edc
--- /dev/null
@@ -0,0 +1,7 @@
+!
+int lo
+ ip address 172.16.1.1/32
+!
+int r1-eth0
+ ip address 192.168.1.1/24
+!
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/bgpd.conf b/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/bgpd.conf
new file mode 100644 (file)
index 0000000..cb712e9
--- /dev/null
@@ -0,0 +1,3 @@
+router bgp 65103
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.101 remote-as external
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/zebra.conf b/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/zebra.conf
new file mode 100644 (file)
index 0000000..968171e
--- /dev/null
@@ -0,0 +1,4 @@
+!
+int r2-eth0
+ ip address 192.168.1.103/24
+!
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/bgpd.conf b/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/bgpd.conf
new file mode 100644 (file)
index 0000000..a6e3260
--- /dev/null
@@ -0,0 +1,5 @@
+router bgp 65000
+ bgp router-id 192.168.1.101
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.1 remote-as external
+ neighbor 192.168.1.103 remote-as external
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/zebra.conf b/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/zebra.conf
new file mode 100644 (file)
index 0000000..ddcf862
--- /dev/null
@@ -0,0 +1,4 @@
+!
+int r3-eth0
+ ip address 192.168.1.101/24
+!
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py b/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py
new file mode 100644 (file)
index 0000000..19c4c5f
--- /dev/null
@@ -0,0 +1,127 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2021 by
+# Donatas Abraitis <donatas.abraitis@gmail.com>
+#
+# Permission to use, copy, modify, and/or distribute this software
+# for any purpose with or without fee is hereby granted, provided
+# that the above copyright notice and this permission notice appear
+# in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
+# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+# OF THIS SOFTWARE.
+#
+
+"""
+https://tools.ietf.org/html/rfc4271
+
+Check if NEXT_HOP attribute is not changed if peer X shares a
+common subnet with this address.
+
+- Otherwise, if the route being announced was learned from an
+  external peer, the speaker can use an IP address of any
+  adjacent router (known from the received NEXT_HOP attribute)
+  that the speaker itself uses for local route calculation in
+  the NEXT_HOP attribute, provided that peer X shares a common
+  subnet with this address.  This is a second form of "third
+  party" NEXT_HOP attribute.
+"""
+
+import os
+import sys
+import json
+import time
+import pytest
+import functools
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.topolog import logger
+from mininet.topo import Topo
+
+
+class TemplateTopo(Topo):
+    def build(self, *_args, **_opts):
+        tgen = get_topogen(self)
+
+        for routern in range(1, 4):
+            tgen.add_router("r{}".format(routern))
+
+        switch = tgen.add_switch("s1")
+        switch.add_link(tgen.gears["r1"])
+        switch.add_link(tgen.gears["r2"])
+        switch.add_link(tgen.gears["r3"])
+
+
+def setup_module(mod):
+    tgen = Topogen(TemplateTopo, mod.__name__)
+    tgen.start_topology()
+
+    router_list = tgen.routers()
+
+    for i, (rname, router) in enumerate(router_list.items(), 1):
+        router.load_config(
+            TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
+        )
+        router.load_config(
+            TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
+        )
+
+    tgen.start_router()
+
+
+def teardown_module(mod):
+    tgen = get_topogen()
+    tgen.stop_topology()
+
+
+def test_bgp_ebgp_common_subnet_nh_unchanged():
+    tgen = get_topogen()
+
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    r2 = tgen.gears["r2"]
+    r3 = tgen.gears["r3"]
+
+    def _bgp_converge(router):
+        output = json.loads(router.vtysh_cmd("show ip bgp summary json"))
+        expected = {
+            "ipv4Unicast": {
+                "peers": {
+                    "192.168.1.1": {"state": "Established"},
+                    "192.168.1.103": {"state": "Established"},
+                }
+            }
+        }
+        return topotest.json_cmp(output, expected)
+
+    test_func = functools.partial(_bgp_converge, r3)
+    success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+
+    assert result is None, 'Failed bgp convergence in "{}"'.format(r3)
+
+    def _bgp_nh_unchanged(router):
+        output = json.loads(router.vtysh_cmd("show ip bgp 172.16.1.1/32 json"))
+        expected = {"paths": [{"nexthops": [{"ip": "192.168.1.1"}]}]}
+        return topotest.json_cmp(output, expected)
+
+    test_func = functools.partial(_bgp_nh_unchanged, r2)
+    success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+
+    assert result is None, 'Wrong next-hop in "{}"'.format(r2)
+
+
+if __name__ == "__main__":
+    args = ["-s"] + sys.argv[1:]
+    sys.exit(pytest.main(args))
index a6338d0c70611c899d5bbfa4254d128c61d27aa4..aa99ebf6d0ec6d832796e4aff570b93847adb31d 100644 (file)
@@ -137,7 +137,7 @@ from lib.common_config import (
     kill_mininet_routers_process,
     get_frr_ipv6_linklocal,
     create_route_maps,
-    required_linux_kernel_version,
+    required_linux_kernel_version
 )
 
 # Reading the data from JSON File for topology and configuration creation
@@ -258,10 +258,12 @@ def configure_gr_followed_by_clear(tgen, topo, input_dict, tc_name, dut, peer):
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     for addr_type in ADDR_TYPES:
-        clear_bgp(tgen, addr_type, dut)
+        neighbor = topo["routers"][peer]["links"]["r1-link1"][addr_type].split("/")[0]
+        clear_bgp(tgen, addr_type, dut, neighbor=neighbor)
 
     for addr_type in ADDR_TYPES:
-        clear_bgp(tgen, addr_type, peer)
+        neighbor = topo["routers"][dut]["links"]["r2-link1"][addr_type].split("/")[0]
+        clear_bgp(tgen, addr_type, peer, neighbor=neighbor)
 
     result = verify_bgp_convergence_from_running_config(tgen)
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
@@ -551,7 +553,7 @@ def test_BGP_GR_TC_46_p1(request):
     write_test_footer(tc_name)
 
 
-def test_BGP_GR_TC_50_p1(request):
+def BGP_GR_TC_50_p1(request):
     """
     Test Objective : Transition from Peer-level helper to Global inherit helper
     Global Mode : None
@@ -613,9 +615,6 @@ def test_BGP_GR_TC_50_p1(request):
 
     configure_gr_followed_by_clear(tgen, topo, input_dict, tc_name, dut="r1", peer="r2")
 
-    result = verify_bgp_convergence_from_running_config(tgen)
-    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
-
     step("Verify on R2 that R1 advertises GR capabilities as a helper node")
 
     for addr_type in ADDR_TYPES:
@@ -721,7 +720,12 @@ def test_BGP_GR_TC_50_p1(request):
         }
     }
 
-    configure_gr_followed_by_clear(tgen, topo, input_dict, tc_name, dut="r1", peer="r2")
+    result = create_router_bgp(tgen, topo, input_dict)
+    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
+
+    for addr_type in ADDR_TYPES:
+        neighbor = topo["routers"]["r2"]["links"]["r1-link1"][addr_type].split("/")[0]
+        clear_bgp(tgen, addr_type, "r1", neighbor=neighbor)
 
     result = verify_bgp_convergence_from_running_config(tgen)
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
@@ -979,7 +983,15 @@ def test_BGP_GR_TC_51_p1(request):
         }
     }
 
-    configure_gr_followed_by_clear(tgen, topo, input_dict, tc_name, dut="r1", peer="r2")
+    result = create_router_bgp(tgen, topo, input_dict)
+    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
+
+    for addr_type in ADDR_TYPES:
+        neighbor = topo["routers"]["r2"]["links"]["r1-link1"][addr_type].split("/")[0]
+        clear_bgp(tgen, addr_type, "r1", neighbor=neighbor)
+
+    result = verify_bgp_convergence_from_running_config(tgen)
+    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     step("Verify on R2 that R1 advertises GR capabilities as a helper node")
 
@@ -1695,10 +1707,10 @@ def test_BGP_GR_TC_6_1_2_p1(request):
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     for addr_type in ADDR_TYPES:
-        clear_bgp(tgen, addr_type, "r1")
-        clear_bgp(tgen, addr_type, "r2")
+        neighbor = topo["routers"]["r2"]["links"]["r1-link1"][addr_type].split("/")[0]
+        clear_bgp(tgen, addr_type, "r1", neighbor=neighbor)
 
-    result = verify_bgp_convergence_from_running_config(tgen, topo)
+    result = verify_bgp_convergence_from_running_config(tgen)
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     # Verify GR stats
@@ -2651,10 +2663,10 @@ def test_BGP_GR_TC_31_1_p1(request):
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     for addr_type in ADDR_TYPES:
-        clear_bgp(tgen, addr_type, "r1")
-        clear_bgp(tgen, addr_type, "r2")
+        neighbor = topo["routers"]["r2"]["links"]["r1-link1"][addr_type].split("/")[0]
+        clear_bgp(tgen, addr_type, "r1", neighbor=neighbor)
 
-    result = verify_bgp_convergence_from_running_config(tgen, topo)
+    result = verify_bgp_convergence_from_running_config(tgen)
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     # Verify GR stats
@@ -2932,10 +2944,10 @@ def test_BGP_GR_TC_31_2_p1(request):
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     for addr_type in ADDR_TYPES:
-        clear_bgp(tgen, addr_type, "r1")
-        clear_bgp(tgen, addr_type, "r2")
+        neighbor = topo["routers"]["r2"]["links"]["r1-link1"][addr_type].split("/")[0]
+        clear_bgp(tgen, addr_type, "r1", neighbor=neighbor)
 
-    result = verify_bgp_convergence_from_running_config(tgen, topo)
+    result = verify_bgp_convergence_from_running_config(tgen)
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     # Verify GR stats
@@ -5258,7 +5270,7 @@ def test_BGP_GR_TC_49_p1(request):
     write_test_footer(tc_name)
 
 
-def test_BGP_GR_TC_52_p1(request):
+def BGP_GR_TC_52_p1(request):
     """
     Test Objective : Transition from Peer-level disbale to Global inherit helper
     Global Mode : None
index 2c5dd92f545494593229d923a07cdd4da72ba339..c7dca72570e87d6edd94f8701d566c6eeb4880ca 100644 (file)
@@ -136,7 +136,7 @@ from lib.common_config import (
     kill_mininet_routers_process,
     get_frr_ipv6_linklocal,
     create_route_maps,
-    required_linux_kernel_version,
+    required_linux_kernel_version
 )
 
 # Reading the data from JSON File for topology and configuration creation
@@ -251,12 +251,14 @@ def configure_gr_followed_by_clear(tgen, topo, input_dict, tc_name, dut, peer):
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     for addr_type in ADDR_TYPES:
-        clear_bgp(tgen, addr_type, dut)
+        neighbor = topo["routers"][peer]["links"][dut][addr_type].split("/")[0]
+        clear_bgp(tgen, addr_type, dut, neighbor=neighbor)
 
     for addr_type in ADDR_TYPES:
-        clear_bgp(tgen, addr_type, peer)
+        neighbor = topo["routers"][dut]["links"][peer][addr_type].split("/")[0]
+        clear_bgp(tgen, addr_type, peer, neighbor=neighbor)
 
-    result = verify_bgp_convergence_from_running_config(tgen, topo)
+    result = verify_bgp_convergence_from_running_config(tgen)
     assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
 
     return True
@@ -930,7 +932,7 @@ def test_BGP_GR_10_p2(request):
     write_test_footer(tc_name)
 
 
-def test_BGP_GR_16_p2(request):
+def BGP_GR_16_p2(request):
     """
     Test Objective : Verify BGP-GR feature when restarting node
     is a transit router for it's iBGP peers.
index 8e3cdc7bd64f2e1659996044035f2b5a15278882..1a6fe6d5c616a5c9ce56cd441939e8e0d0b53067 100644 (file)
@@ -5,73 +5,73 @@
         {
           "vertex": "r1"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r1"
         }
       ]
-    }, 
+    },
     "level-2": {
       "ipv4": [
         {
           "vertex": "r1"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r1(4)",
+          "type": "IP internal",
           "vertex": "10.0.20.0/24"
-        }, 
+        },
         {
-          "interface": "r1-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r1(4)", 
-          "type": "TE-IS", 
+          "interface": "r1-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r1(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r1-eth0", 
-          "type": "IP", 
+          "interface": "r1-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.20.0/24"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r1-eth0", 
-          "type": "IP", 
+          "interface": "r1-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.10.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r1"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r1(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:1::/64"
-        }, 
+        },
         {
-          "interface": "r1-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r1(4)", 
-          "type": "TE-IS", 
+          "interface": "r1-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r1(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r1-eth0", 
-          "type": "IP6", 
+          "interface": "r1-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:1::/64"
         }
       ]
index 72022a8167801b3cebe8041962d97cc20c110432..a77f7977f940196e6db4bfeb651c074a8e3da297 100644 (file)
@@ -5,76 +5,76 @@
         {
           "vertex": "r2"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r2"
         }
       ]
-    }, 
+    },
     "level-2": {
       "ipv4": [
         {
           "vertex": "r2"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r2(4)",
+          "type": "IP internal",
           "vertex": "10.0.21.0/24"
-        }, 
+        },
         {
-          "interface": "r2-eth0", 
-          "metric": "10", 
-          "next-hop": "r4", 
-          "parent": "r2(4)", 
-          "type": "TE-IS", 
+          "interface": "r2-eth0",
+          "metric": "10",
+          "next-hop": "r4",
+          "parent": "r2(4)",
+          "type": "TE-IS",
           "vertex": "r4"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r2-eth0", 
-          "type": "IP", 
+          "interface": "r2-eth0",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.21.0/24"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r2-eth0", 
-          "type": "IP", 
+          "interface": "r2-eth0",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.11.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r2"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r2(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:2::/64"
-        }, 
+        },
         {
-          "interface": "r2-eth0", 
-          "metric": "10", 
-          "next-hop": "r4", 
-          "parent": "r2(4)", 
-          "type": "TE-IS", 
+          "interface": "r2-eth0",
+          "metric": "10",
+          "next-hop": "r4",
+          "parent": "r2(4)",
+          "type": "TE-IS",
           "vertex": "r4"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r2-eth0", 
-          "type": "IP6", 
+          "interface": "r2-eth0",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:2::/64"
         }
       ]
     }
   }
-}
\ No newline at end of file
+}
index 62b895766e8dc6e1dce8535369858f97b66cc974..1e5d331965b9f08a8545c74f9dfa7d9dbfeaee3e 100644 (file)
       "ipv4": [
         {
           "vertex": "r3"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r3(4)",
+          "type": "IP internal",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "interface": "r3-eth1", 
-          "metric": "10", 
-          "next-hop": "r5", 
-          "parent": "r3(4)", 
-          "type": "TE-IS", 
+          "interface": "r3-eth1",
+          "metric": "10",
+          "next-hop": "r5",
+          "parent": "r3(4)",
+          "type": "TE-IS",
           "vertex": "r5"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r3-eth1", 
-          "type": "IP", 
+          "interface": "r3-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP TE",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r3-eth1", 
-          "type": "IP", 
+          "interface": "r3-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP TE",
           "vertex": "10.0.11.0/24"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "30", 
-          "parent": "r3-eth1", 
-          "type": "IP", 
+          "interface": "r3-eth1",
+          "metric": "30",
+          "next-hop": "r5",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.21.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r3"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:1::/64"
-        }, 
+        },
         {
-          "interface": "r3-eth1", 
-          "metric": "10", 
-          "next-hop": "r5", 
-          "parent": "r3(4)", 
-          "type": "TE-IS", 
+          "interface": "r3-eth1",
+          "metric": "10",
+          "next-hop": "r5",
+          "parent": "r3(4)",
+          "type": "TE-IS",
           "vertex": "r5"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r3-eth1", 
-          "type": "IP6", 
+          "interface": "r3-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:2::/64"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "internal", 
-          "next-hop": "30", 
-          "parent": "r3-eth1", 
-          "type": "IP6", 
+          "interface": "r3-eth1",
+          "metric": "30",
+          "next-hop": "r5",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:2::/64"
         }
       ]
-    }, 
+    },
     "level-2": {
       "ipv4": [
         {
           "vertex": "r3"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r3(4)",
+          "type": "IP internal",
           "vertex": "10.0.20.0/24"
-        }, 
+        },
         {
-          "interface": "r3-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r3(4)", 
-          "type": "TE-IS", 
+          "interface": "r3-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r3-eth0", 
-          "type": "IP", 
+          "interface": "r3-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.20.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r3"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:1::/64"
-        }, 
+        },
         {
-          "interface": "r3-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r3(4)", 
-          "type": "TE-IS", 
+          "interface": "r3-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "TE-IS",
           "vertex": "r3"
         }
       ]
index 0d69550cadd386a0b68eb91bd463bef68639bbd4..34f5ac9ca41353b46c7777fe052641dc59ab891d 100644 (file)
       "ipv4": [
         {
           "vertex": "r4"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r4(4)",
+          "type": "IP internal",
           "vertex": "10.0.11.0/24"
-        }, 
+        },
         {
-          "interface": "r4-eth1", 
-          "metric": "10", 
-          "next-hop": "r5", 
-          "parent": "r4(4)", 
-          "type": "TE-IS", 
+          "interface": "r4-eth1",
+          "metric": "10",
+          "next-hop": "r5",
+          "parent": "r4(4)",
+          "type": "TE-IS",
           "vertex": "r5"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r4-eth1", 
-          "type": "IP", 
+          "interface": "r4-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP TE",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r4-eth1", 
-          "type": "IP", 
+          "interface": "r4-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP TE",
           "vertex": "10.0.11.0/24"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "TE", 
-          "next-hop": "30", 
-          "parent": "r4-eth1", 
-          "type": "IP", 
+          "interface": "r4-eth1",
+          "metric": "30",
+          "next-hop": "r5",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.20.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r4"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:2::/64"
-        }, 
+        },
         {
-          "interface": "r4-eth1", 
-          "metric": "10", 
-          "next-hop": "r5", 
-          "parent": "r4(4)", 
-          "type": "TE-IS", 
+          "interface": "r4-eth1",
+          "metric": "10",
+          "next-hop": "r5",
+          "parent": "r4(4)",
+          "type": "TE-IS",
           "vertex": "r5"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r4-eth1", 
-          "type": "IP6", 
+          "interface": "r4-eth1",
+          "metric": "20",
+          "next-hop": "r5",
+          "parent": "r5(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:1::/64"
-        }, 
+        },
         {
-          "interface": "r5", 
-          "metric": "internal", 
-          "next-hop": "30", 
-          "parent": "r4-eth1", 
-          "type": "IP6", 
+          "interface": "r4-eth1",
+          "metric": "30",
+          "next-hop": "r5",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:1::/64"
         }
       ]
-    }, 
+    },
     "level-2": {
       "ipv4": [
         {
           "vertex": "r4"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r4(4)",
+          "type": "IP internal",
           "vertex": "10.0.21.0/24"
-        }, 
+        },
         {
-          "interface": "r4-eth0", 
-          "metric": "10", 
-          "next-hop": "r2", 
-          "parent": "r4(4)", 
-          "type": "TE-IS", 
+          "interface": "r4-eth0",
+          "metric": "10",
+          "next-hop": "r2",
+          "parent": "r4(4)",
+          "type": "TE-IS",
           "vertex": "r2"
-        }, 
+        },
         {
-          "interface": "r2", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r4-eth0", 
-          "type": "IP", 
+          "interface": "r4-eth0",
+          "metric": "20",
+          "next-hop": "r2",
+          "parent": "r2(4)",
+          "type": "IP TE",
           "vertex": "10.0.21.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r4"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:2::/64"
-        }, 
+        },
         {
-          "interface": "r4-eth0", 
-          "metric": "10", 
-          "next-hop": "r2", 
-          "parent": "r4(4)", 
-          "type": "TE-IS", 
+          "interface": "r4-eth0",
+          "metric": "10",
+          "next-hop": "r2",
+          "parent": "r4(4)",
+          "type": "TE-IS",
           "vertex": "r2"
         }
       ]
index b4ed6a069dac3851f3ca9d5e4c1f87b2cf9e64c4..ace56536e9f34c09bef7d361839a1b646923564b 100644 (file)
       "ipv4": [
         {
           "vertex": "r5"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r5(4)",
+          "type": "IP internal",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP", 
+          "metric": "0",
+          "parent": "r5(4)",
+          "type": "IP internal",
           "vertex": "10.0.11.0/24"
-        }, 
+        },
         {
-          "interface": "r5-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r5(4)", 
-          "type": "TE-IS", 
+          "interface": "r5-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r5(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r5-eth1", 
-          "metric": "10", 
-          "next-hop": "r4", 
-          "parent": "r5(4)", 
-          "type": "TE-IS", 
+          "interface": "r5-eth1",
+          "metric": "10",
+          "next-hop": "r4",
+          "parent": "r5(4)",
+          "type": "TE-IS",
           "vertex": "r4"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r5-eth0", 
-          "type": "IP", 
+          "interface": "r5-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.20.0/24"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r5-eth0", 
-          "type": "IP", 
+          "interface": "r5-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP TE",
           "vertex": "10.0.10.0/24"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r5-eth1", 
-          "type": "IP", 
+          "interface": "r5-eth1",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.21.0/24"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "TE", 
-          "next-hop": "20", 
-          "parent": "r5-eth1", 
-          "type": "IP", 
+          "interface": "r5-eth1",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP TE",
           "vertex": "10.0.11.0/24"
         }
-      ], 
+      ],
       "ipv6": [
         {
           "vertex": "r5"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r5(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:1::/64"
-        }, 
+        },
         {
-          "metric": "internal", 
-          "parent": "0", 
-          "type": "IP6", 
+          "metric": "0",
+          "parent": "r5(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:2:2::/64"
-        }, 
+        },
         {
-          "interface": "r5-eth0", 
-          "metric": "10", 
-          "next-hop": "r3", 
-          "parent": "r5(4)", 
-          "type": "TE-IS", 
+          "interface": "r5-eth0",
+          "metric": "10",
+          "next-hop": "r3",
+          "parent": "r5(4)",
+          "type": "TE-IS",
           "vertex": "r3"
-        }, 
+        },
         {
-          "interface": "r5-eth1", 
-          "metric": "10", 
-          "next-hop": "r4", 
-          "parent": "r5(4)", 
-          "type": "TE-IS", 
+          "interface": "r5-eth1",
+          "metric": "10",
+          "next-hop": "r4",
+          "parent": "r5(4)",
+          "type": "TE-IS",
           "vertex": "r4"
-        }, 
+        },
         {
-          "interface": "r3", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r5-eth0", 
-          "type": "IP6", 
+          "interface": "r5-eth0",
+          "metric": "20",
+          "next-hop": "r3",
+          "parent": "r3(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:1::/64"
-        }, 
+        },
         {
-          "interface": "r4", 
-          "metric": "internal", 
-          "next-hop": "20", 
-          "parent": "r5-eth1", 
-          "type": "IP6", 
+          "interface": "r5-eth1",
+          "metric": "20",
+          "next-hop": "r4",
+          "parent": "r4(4)",
+          "type": "IP6 internal",
           "vertex": "2001:db8:1:2::/64"
         }
       ]
-    }, 
+    },
     "level-2": {
-      "ipv4": [], 
+      "ipv4": [],
       "ipv6": []
     }
   }
-}
\ No newline at end of file
+}
index ae904ba69e831f087e93178bd90628df7216dd27..3e2c217664a822ac4be6ef0187a123d6383044ca 100644 (file)
@@ -47,6 +47,19 @@ from mininet.topo import Topo
 
 pytestmark = [pytest.mark.isisd]
 
+VERTEX_TYPE_LIST = [
+               "pseudo_IS",
+               "pseudo_TE-IS",
+               "IS",
+               "TE-IS",
+               "ES",
+               "IP internal",
+               "IP external",
+               "IP TE",
+               "IP6 internal",
+               "IP6 external",
+               "UNKNOWN"
+             ]
 
 class ISISTopo1(Topo):
     "Simple two layer ISIS vrf topology"
@@ -316,6 +329,7 @@ def parse_topology(lines, level):
     areas = {}
     area = None
     ipv = None
+    vertex_type_regex = "|".join(VERTEX_TYPE_LIST)
 
     for line in lines:
         area_match = re.match(r"Area (.+):", line)
@@ -335,44 +349,50 @@ def parse_topology(lines, level):
             ipv = "ipv4"
             continue
 
-        item_match = re.match(r"([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)", line)
-        if item_match is not None:
+        item_match = re.match(r"([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+)"
+                              , line)
+        if (
+            item_match is not None
+            and item_match.group(1) == "Vertex"
+            and item_match.group(2) == "Type"
+            and item_match.group(3) == "Metric"
+            and item_match.group(4) == "Next-Hop"
+            and item_match.group(5) == "Interface"
+            and item_match.group(6) == "Parent"
+        ):
             # Skip header
-            if (
-                item_match.group(1) == "Vertex"
-                and item_match.group(2) == "Type"
-                and item_match.group(3) == "Metric"
-                and item_match.group(4) == "Next-Hop"
-                and item_match.group(5) == "Interface"
-                and item_match.group(6) == "Parent"
-            ):
-                continue
+            continue
 
+        item_match = re.match(r"([^\s]+) ({}) ([0]|([1-9][0-9]*)) ([^\s]+) ([^\s]+) ([^\s]+)"
+                              .format(vertex_type_regex), line)
+        if item_match is not None:
             areas[area][level][ipv].append(
                 {
                     "vertex": item_match.group(1),
                     "type": item_match.group(2),
                     "metric": item_match.group(3),
-                    "next-hop": item_match.group(4),
-                    "interface": item_match.group(5),
-                    "parent": item_match.group(6),
+                    "next-hop": item_match.group(5),
+                    "interface": item_match.group(6),
+                    "parent": item_match.group(7),
                 }
             )
             continue
 
-        item_match = re.match(r"([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)", line)
+        item_match = re.match(r"([^\s]+) ({}) ([0]|([1-9][0-9]*)) ([^\s]+)"
+                              .format(vertex_type_regex), line)
+
         if item_match is not None:
             areas[area][level][ipv].append(
                 {
                     "vertex": item_match.group(1),
                     "type": item_match.group(2),
                     "metric": item_match.group(3),
-                    "parent": item_match.group(4),
+                    "parent": item_match.group(5),
                 }
             )
             continue
 
-        item_match = re.match(r"([^ ]+)", line)
+        item_match = re.match(r"([^\s]+)", line)
         if item_match is not None:
             areas[area][level][ipv].append({"vertex": item_match.group(1)})
             continue
index 867831e11428ad90f10f26bd7ca9a9fb02f34b70..83ee866636c887d02cfdfb50a03c625395946813 100644 (file)
@@ -1582,7 +1582,7 @@ def verify_bgp_convergence_from_running_config(tgen, dut=None):
     return True
 
 
-def clear_bgp(tgen, addr_type, router, vrf=None):
+def clear_bgp(tgen, addr_type, router, vrf=None, neighbor=None):
     """
     This API is to clear bgp neighborship by running
     clear ip bgp */clear bgp ipv6 * command,
@@ -1593,6 +1593,7 @@ def clear_bgp(tgen, addr_type, router, vrf=None):
     * `addr_type`: ip type ipv4/ipv6
     * `router`: device under test
     * `vrf`: vrf name
+    * `neighbor`: Neighbor for which bgp needs to be cleared
 
     Usage
     -----
@@ -1616,12 +1617,16 @@ def clear_bgp(tgen, addr_type, router, vrf=None):
         if vrf:
             for _vrf in vrf:
                 run_frr_cmd(rnode, "clear ip bgp vrf {} *".format(_vrf))
+        elif neighbor:
+            run_frr_cmd(rnode, "clear bgp ipv4 {}".format(neighbor))
         else:
             run_frr_cmd(rnode, "clear ip bgp *")
     elif addr_type == "ipv6":
         if vrf:
             for _vrf in vrf:
                 run_frr_cmd(rnode, "clear bgp vrf {} ipv6 *".format(_vrf))
+        elif neighbor:
+            run_frr_cmd(rnode, "clear bgp ipv6 {}".format(neighbor))
         else:
             run_frr_cmd(rnode, "clear bgp ipv6 *")
     else:
index a4c98924b6e6d193c0882e2891f0a07134ef96b0..2224b4f3a3c1234ca49c8b8d5fe51d05d2d25d2c 100644 (file)
@@ -72,6 +72,59 @@ config.read(PYTESTINI_PATH)
 
 config_section = "topogen"
 
+# Debug logs for daemons
+DEBUG_LOGS = {
+    "pimd": [
+       'debug msdp events',
+       'debug msdp packets',
+       'debug igmp events',
+       'debug igmp trace',
+       'debug mroute',
+       'debug mroute detail',
+       'debug pim events',
+       'debug pim packets',
+       'debug pim trace',
+       'debug pim zebra',
+       'debug pim bsm',
+       'debug pim packets joins',
+       'debug pim packets register',
+       'debug pim nht'
+    ],
+    "bgpd": [
+        'debug bgp neighbor-events',
+        'debug bgp updates',
+        'debug bgp zebra',
+        'debug bgp nht',
+        'debug bgp neighbor-events',
+        'debug bgp graceful-restart',
+        'debug bgp update-groups',
+        'debug bgp vpn leak-from-vrf',
+        'debug bgp vpn leak-to-vrf',
+        'debug bgp zebr',
+        'debug bgp updates',
+        'debug bgp nht',
+        'debug bgp neighbor-events',
+        'debug vrf'
+    ],
+    "zebra": [
+        'debug zebra events',
+        'debug zebra rib',
+        'debug zebra vxlan',
+        'debug zebra nht'
+    ],
+    "ospf": [
+        'debug ospf event',
+        'debug ospf ism',
+        'debug ospf lsa',
+        'debug ospf nsm',
+        'debug ospf nssa',
+        'debug ospf packet all',
+        'debug ospf sr',
+        'debug ospf te',
+        'debug ospf zebra',
+    ]
+}
+
 if config.has_option("topogen", "verbosity"):
     loglevel = config.get("topogen", "verbosity")
     loglevel = loglevel.upper()
@@ -249,6 +302,7 @@ def create_common_configuration(
     config_map = OrderedDict(
         {
             "general_config": "! FRR General Config\n",
+            "debug_log_config": "! Debug log Config\n",
             "interface_config": "! Interfaces Config\n",
             "static_route": "! Static Route Config\n",
             "prefix_list": "! Prefix List Config\n",
@@ -1052,6 +1106,92 @@ def tcpdump_capture_stop(tgen, router):
     return True
 
 
+def create_debug_log_config(tgen, input_dict, build=False):
+    """
+    Enable/disable debug logs for any protocol with defined debug
+    options and logs would be saved to created log file
+
+    Parameters
+    ----------
+    * `tgen` : Topogen object
+    * `input_dict` : details to enable debug logs for protocols
+    * `build` : Only for initial setup phase this is set as True.
+
+
+    Usage:
+    ------
+     input_dict = {
+        "r2": {
+            "debug":{
+                "log_file" : "debug.log",
+                "enable": ["pimd", "zebra"],
+                "disable": {
+                    "bgpd":[
+                        'debug bgp neighbor-events',
+                        'debug bgp updates',
+                        'debug bgp zebra',
+                    ]
+                }
+            }
+        }
+    }
+
+    result = create_debug_log_config(tgen, input_dict)
+
+    Returns
+    -------
+    True or False
+    """
+
+    result = False
+    try:
+        for router in input_dict.keys():
+            debug_config = []
+            if "debug" in input_dict[router]:
+                debug_dict = input_dict[router]["debug"]
+
+                disable_logs = debug_dict.setdefault("disable", None)
+                enable_logs = debug_dict.setdefault("enable", None)
+                log_file = debug_dict.setdefault("log_file", None)
+
+                if log_file:
+                    _log_file = os.path.join(LOGDIR, tgen.modname,
+                        log_file)
+                    debug_config.append("log file {} \n".\
+                                        format(_log_file))
+
+                if type(enable_logs) is list:
+                    for daemon in enable_logs:
+                        for debug_log in DEBUG_LOGS[daemon]:
+                            debug_config.append("{}".format(debug_log))
+                elif type(enable_logs) is dict:
+                    for daemon, debug_logs in enable_logs.items():
+                        for debug_log in debug_logs:
+                            debug_config.append("{}".format(debug_log))
+
+                if type(disable_logs) is list:
+                    for daemon in disable_logs:
+                        for debug_log in DEBUG_LOGS[daemon]:
+                            debug_config.append("no {}".format(debug_log))
+                elif type(disable_logs) is dict:
+                    for daemon, debug_logs in disable_logs.items():
+                        for debug_log in debug_logs:
+                            debug_config.append("no {}".format(debug_log))
+
+                result = create_common_configuration(tgen, router,
+                                                 debug_config,
+                                                 "debug_log_config",
+                                                 build=build)
+    except InvalidCLIError:
+        # Traceback
+        errormsg = traceback.format_exc()
+        logger.error(errormsg)
+        return errormsg
+
+    logger.debug("Exiting lib API: {}".format(sys._getframe().f_code.co_name))
+    return result
+
+
 #############################################
 # Common APIs, will be used by all protocols
 #############################################
diff --git a/tests/topotests/ospf-topo1/r1/ospf6d.conf-pre-v4 b/tests/topotests/ospf-topo1/r1/ospf6d.conf-pre-v4
deleted file mode 100644 (file)
index 6a40f85..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-!
-router ospf6
- router-id 10.0.255.1
- redistribute kernel
- redistribute connected
- redistribute static
- interface r1-eth0 area 0.0.0.0
- interface r1-eth1 area 0.0.0.0
-!
diff --git a/tests/topotests/ospf-topo1/r2/ospf6d.conf-pre-v4 b/tests/topotests/ospf-topo1/r2/ospf6d.conf-pre-v4
deleted file mode 100644 (file)
index 7448b25..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-!
-router ospf6
- router-id 10.0.255.2
- redistribute kernel
- redistribute connected
- redistribute static
- interface r2-eth0 area 0.0.0.0
- interface r2-eth1 area 0.0.0.0
-!
diff --git a/tests/topotests/ospf-topo1/r3/ospf6d.conf-pre-v4 b/tests/topotests/ospf-topo1/r3/ospf6d.conf-pre-v4
deleted file mode 100644 (file)
index e853e0e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-!
-router ospf6
- router-id 10.0.255.3
- redistribute kernel
- redistribute connected
- redistribute static
- interface r3-eth0 area 0.0.0.0
- interface r3-eth1 area 0.0.0.0
- interface r3-eth2 area 0.0.0.1
-!
diff --git a/tests/topotests/ospf-topo1/r4/ospf6d.conf-pre-v4 b/tests/topotests/ospf-topo1/r4/ospf6d.conf-pre-v4
deleted file mode 100644 (file)
index dcc07a4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-!
-router ospf6
- router-id 10.0.255.4
- redistribute kernel
- redistribute connected
- redistribute static
- interface r4-eth0 area 0.0.0.1
- interface r4-eth1 area 0.0.0.1
-!
index 5bb6c2c818d5ef045c42c82be9c43786dc7dc3e1..9117247ebd98856ee55626c7cafa59505d94b685 100644 (file)
@@ -93,8 +93,6 @@ def setup_module(mod):
     tgen.start_topology()
 
     ospf6_config = "ospf6d.conf"
-    if tgen.gears["r1"].has_version("<", "4.0"):
-        ospf6_config = "ospf6d.conf-pre-v4"
 
     router_list = tgen.routers()
     for rname, router in router_list.items():
@@ -118,6 +116,78 @@ def teardown_module(mod):
     tgen.stop_topology()
 
 
+def test_wait_protocol_convergence():
+    "Wait for OSPFv2/OSPFv3 to converge"
+    tgen = get_topogen()
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    logger.info("waiting for protocols to converge")
+
+    def expect_ospfv2_neighbor_full(router, neighbor):
+        "Wait until OSPFv2 convergence."
+        logger.info("waiting OSPFv2 router '{}'".format(router))
+
+        def run_command_and_expect():
+            """
+            Function that runs command and expect the following outcomes:
+             * Full/DR
+             * Full/DROther
+             * Full/Backup
+            """
+            result = tgen.gears[router].vtysh_cmd('show ip ospf neighbor json',
+                                                  isjson=True)
+            if topotest.json_cmp(result, {"neighbors": {neighbor: [
+                    {"state": "Full/DR"}]}}) is None:
+                return None
+
+            if topotest.json_cmp(result, {"neighbors": {neighbor: [
+                    {"state": "Full/DROther"}]}}) is None:
+                return None
+
+            return topotest.json_cmp(result, {"neighbors": {neighbor: [
+                {"state": "Full/Backup"}]}})
+
+        _, result = topotest.run_and_expect(run_command_and_expect, None,
+                                            count=130, wait=1)
+        assertmsg = '"{}" convergence failure'.format(router)
+        assert result is None, assertmsg
+
+
+    def expect_ospfv3_neighbor_full(router, neighbor):
+        "Wait until OSPFv3 convergence."
+        logger.info("waiting OSPFv3 router '{}'".format(router))
+        test_func = partial(
+            topotest.router_json_cmp,
+            tgen.gears[router],
+            "show ipv6 ospf6 neighbor json",
+            {"neighbors": [{"neighborId": neighbor, "state": "Full"}]},
+        )
+        _, result = topotest.run_and_expect(test_func, None, count=130, wait=1)
+        assertmsg = '"{}" convergence failure'.format(router)
+        assert result is None, assertmsg
+
+    # Wait for OSPFv2 convergence
+    expect_ospfv2_neighbor_full("r1", "10.0.255.2")
+    expect_ospfv2_neighbor_full("r1", "10.0.255.3")
+    expect_ospfv2_neighbor_full("r2", "10.0.255.1")
+    expect_ospfv2_neighbor_full("r2", "10.0.255.3")
+    expect_ospfv2_neighbor_full("r3", "10.0.255.1")
+    expect_ospfv2_neighbor_full("r3", "10.0.255.2")
+    expect_ospfv2_neighbor_full("r3", "10.0.255.4")
+    expect_ospfv2_neighbor_full("r4", "10.0.255.3")
+
+    # Wait for OSPFv3 convergence
+    expect_ospfv3_neighbor_full("r1", "10.0.255.2")
+    expect_ospfv3_neighbor_full("r1", "10.0.255.3")
+    expect_ospfv3_neighbor_full("r2", "10.0.255.1")
+    expect_ospfv3_neighbor_full("r2", "10.0.255.3")
+    expect_ospfv3_neighbor_full("r3", "10.0.255.1")
+    expect_ospfv3_neighbor_full("r3", "10.0.255.2")
+    expect_ospfv3_neighbor_full("r3", "10.0.255.4")
+    expect_ospfv3_neighbor_full("r4", "10.0.255.3")
+
+
 def compare_show_ipv6_ospf6(rname, expected):
     """
     Calls 'show ipv6 ospf6 route' for router `rname` and compare the obtained
index ab2c0c647e83ba09ba2b68efeead81d8caecb918..9f7e058931b6211c71ad7fbf89acacf6a201d00f 100644 (file)
@@ -11,9 +11,13 @@ debug ospf6 flooding
 !
 interface r1-stubnet
  ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
 !
 interface r1-sw5
  ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
 !
 router ospf6
  ospf6 router-id 10.0.0.1
index 075e815ed88f0b4f0478676fcd24965fbcbcfad8..26ebc2c0eacc3ec624dbb8b8300229998988b9c4 100644 (file)
@@ -11,9 +11,13 @@ debug ospf6 flooding
 !
 interface r2-stubnet
  ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
 !
 interface r2-sw5
  ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
 !
 router ospf6
  ospf6 router-id 10.0.0.2
index e9a07a7e283427eddd4362fab1128b997e6e5e45..e90249653007165f53f1dc8d31c5e59d2206f15c 100644 (file)
@@ -11,12 +11,18 @@ debug ospf6 flooding
 !
 interface r3-stubnet
  ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
 !
 interface r3-sw5
  ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
 !
 interface r3-sw6
  ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
 !
 router ospf6
  ospf6 router-id 10.0.0.3
index fa66645f5a432e93829c39b810cc6231b91663f5..5607a789def839b50f02703e1ef57acffe67d815 100644 (file)
@@ -11,9 +11,13 @@ debug ospf6 flooding
 !
 interface r4-stubnet
  ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
 !
 interface r4-sw6
  ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
 !
 router ospf6
  ospf6 router-id 10.0.0.4
index 6ae886b76ebb0b3c7c23c0e49f6733a6a817cc8f..f8c3476e18ff37cc5a235a473e9ad2e33c56d194 100644 (file)
@@ -185,70 +185,38 @@ def teardown_module(mod):
     tgen.stop_topology()
 
 
-def test_ospf6_converged():
-
+def test_wait_protocol_convergence():
+    "Wait for OSPFv3 to converge"
     tgen = get_topogen()
-
-    # Don't run this test if we have any failure.
     if tgen.routers_have_failure():
         pytest.skip(tgen.errors)
 
-    # For debugging, uncomment the next line
-    # tgen.mininet_cli()
-
-    # Wait for OSPF6 to converge  (All Neighbors in either Full or TwoWay State)
-    logger.info("Waiting for OSPF6 convergence")
-
-    # Set up for regex
-    pat1 = re.compile("^[0-9]")
-    pat2 = re.compile("Full")
-
-    timeout = 60
-    while timeout > 0:
-        logger.info("Timeout in %s: " % timeout),
-        sys.stdout.flush()
-
-        # Look for any node not yet converged
-        for router, rnode in tgen.routers().items():
-            resStr = rnode.vtysh_cmd("show ipv6 ospf neigh")
-
-            isConverged = False
+    logger.info("waiting for protocols to converge")
 
-            for line in resStr.splitlines():
-                res1 = pat1.match(line)
-                if res1:
-                    isConverged = True
-                    res2 = pat2.search(line)
-
-                    if res2 == None:
-                        isConverged = False
-                        break
-
-            if isConverged == False:
-                logger.info("Waiting for {}".format(router))
-                sys.stdout.flush()
-                break
-
-        if isConverged:
-            logger.info("Done")
-            break
-        else:
-            sleep(5)
-            timeout -= 5
+    def expect_neighbor_full(router, neighbor):
+        "Wait until OSPFv3 convergence."
+        logger.info("waiting OSPFv3 router '{}'".format(router))
+        test_func = partial(
+            topotest.router_json_cmp,
+            tgen.gears[router],
+            "show ipv6 ospf6 neighbor json",
+            {"neighbors": [{"neighborId": neighbor, "state": "Full"}]},
+        )
+        _, result = topotest.run_and_expect(test_func, None, count=130, wait=1)
+        assertmsg = '"{}" convergence failure'.format(router)
+        assert result is None, assertmsg
 
-    if timeout == 0:
-        # Bail out with error if a router fails to converge
-        ospfStatus = rnode.vtysh_cmd("show ipv6 ospf neigh")
-        assert False, "OSPFv6 did not converge:\n{}".format(ospfStatus)
+    expect_neighbor_full("r1", "10.0.0.2")
+    expect_neighbor_full("r1", "10.0.0.3")
 
-    logger.info("OSPFv3 converged.")
+    expect_neighbor_full("r2", "10.0.0.1")
+    expect_neighbor_full("r2", "10.0.0.3")
 
-    # For debugging, uncomment the next line
-    # tgen.mininet_cli()
+    expect_neighbor_full("r3", "10.0.0.1")
+    expect_neighbor_full("r3", "10.0.0.2")
+    expect_neighbor_full("r3", "10.0.0.4")
 
-    # Make sure that all daemons are still running
-    if tgen.routers_have_failure():
-        assert tgen.errors == "", tgen.errors
+    expect_neighbor_full("r4", "10.0.0.3")
 
 
 def compare_show_ipv6(rname, expected):
index f6d512be72f383698fd51544f5f4b74d574aba29..b1526888ed813f2cac0e354e24df507edd1ac266 100644 (file)
@@ -30,6 +30,7 @@ pbrd=no
 bfdd=no
 fabricd=no
 vrrpd=no
+pathd=no
 
 #
 # If this option is set the /etc/init.d/frr script automatically loads
@@ -55,6 +56,7 @@ staticd_options="-A 127.0.0.1"
 bfdd_options="   -A 127.0.0.1"
 fabricd_options="-A 127.0.0.1"
 vrrpd_options="  -A 127.0.0.1"
+pathd_options="  -A 127.0.0.1"
 
 # configuration profile
 #
index 1461e0f2960f01925c56e0a02d8e5bb85cdbecde..f4b832691ec3a0ce24cd3c03d0c70f9322d2ed50 100755 (executable)
@@ -108,7 +108,7 @@ class Vtysh(object):
         stdout, stderr = proc.communicate()
         if proc.wait() != 0:
             if stdouts is not None:
-                stdouts.append(stdout.decode('UTF-8'))
+                stdouts.append(stdout.decode("UTF-8"))
             raise VtyshException(
                 'vtysh returned status %d for command "%s"' % (proc.returncode, command)
             )
@@ -279,6 +279,35 @@ class Config(object):
             if ":" in line:
                 line = get_normalized_mac_ip_line(line)
 
+            """
+              vrf static routes can be added in two ways. The old way is:
+
+              "ip route x.x.x.x/x y.y.y.y vrf <vrfname>"
+
+              but it's rendered in the configuration as the new way::
+
+              vrf <vrf-name>
+               ip route x.x.x.x/x y.y.y.y
+               exit-vrf
+
+              this difference causes frr-reload to not consider them a
+              match and delete vrf static routes incorrectly.
+              fix the old way to match new "show running" output so a
+              proper match is found.
+            """
+            if (
+                line.startswith("ip route ") or line.startswith("ipv6 route ")
+            ) and " vrf " in line:
+                newline = line.split(" ")
+                vrf_index = newline.index("vrf")
+                vrf_ctx = newline[vrf_index] + " " + newline[vrf_index + 1]
+                del newline[vrf_index : vrf_index + 2]
+                newline = " ".join(newline)
+                self.lines.append(vrf_ctx)
+                self.lines.append(newline)
+                self.lines.append("exit-vrf")
+                line = "end"
+
             self.lines.append(line)
 
         self.load_contexts()
@@ -460,6 +489,23 @@ class Config(object):
         ):
             key[0] = re.sub(r"\s+null0(\s*$)", " Null0", key[0])
 
+        """
+          Similar to above, but when the static is in a vrf, it turns into a
+          blackhole nexthop for both null0 and Null0.  Fix it accordingly
+        """
+        if lines and key[0].startswith("vrf "):
+            newlines = []
+            for line in lines:
+                if line.startswith("ip route ") or line.startswith("ipv6 route "):
+                    if "null0" in line:
+                        line = re.sub(r"\s+null0(\s*$)", " blackhole", line)
+                    elif "Null0" in line:
+                        line = re.sub(r"\s+Null0(\s*$)", " blackhole", line)
+                    newlines.append(line)
+                else:
+                    newlines.append(line)
+            lines = newlines
+
         if lines:
             if tuple(key) not in self.contexts:
                 ctx = Context(tuple(key), lines)
@@ -582,11 +628,13 @@ end
             if line.startswith("!") or line.startswith("#"):
                 continue
 
-            if (len(ctx_keys) == 2
-                and ctx_keys[0].startswith('bfd')
-                and ctx_keys[1].startswith('profile ')
-                and line == 'end'):
-                log.debug('LINE %-50s: popping from sub context, %-50s', line, ctx_keys)
+            if (
+                len(ctx_keys) == 2
+                and ctx_keys[0].startswith("bfd")
+                and ctx_keys[1].startswith("profile ")
+                and line == "end"
+            ):
+                log.debug("LINE %-50s: popping from sub context, %-50s", line, ctx_keys)
 
                 if main_ctx_key:
                     self.save_contexts(ctx_keys, current_context_lines)
@@ -907,9 +955,9 @@ end
                 ctx_keys.append(line)
 
             elif (
-                line.startswith('profile ')
+                line.startswith("profile ")
                 and len(ctx_keys) == 1
-                and ctx_keys[0].startswith('bfd')
+                and ctx_keys[0].startswith("bfd")
             ):
 
                 # Save old context first
@@ -918,7 +966,7 @@ end
                 main_ctx_key = copy.deepcopy(ctx_keys)
                 log.debug(
                     "LINE %-50s: entering BFD profile sub-context, append to ctx_keys",
-                    line
+                    line,
                 )
                 ctx_keys.append(line)
 
@@ -1067,6 +1115,16 @@ def ignore_delete_re_add_lines(lines_to_add, lines_to_del):
     for (ctx_keys, line) in lines_to_del:
         deleted = False
 
+        # If there is a change in the segment routing block ranges, do it
+        # in-place, to avoid requesting spurious label chunks which might fail
+        if line and "segment-routing global-block" in line:
+            for (add_key, add_line) in lines_to_add:
+                if ctx_keys[0] == add_key[0] and add_line and "segment-routing global-block" in add_line:
+                    lines_to_del_to_del.append((ctx_keys, line))
+                    break
+            continue
+
+
         if ctx_keys[0].startswith("router bgp") and line:
 
             if line.startswith("neighbor "):
index 2d925dbac3f77b86c426948d623931c0654866e0..475e56cf7258648626ba3c54d2c367f66a0d00e3 100644 (file)
@@ -35,7 +35,7 @@ FRR_DEFAULT_PROFILE="@DFLT_NAME@" # traditional / datacenter
 # - keep zebra first
 # - watchfrr does NOT belong in this list
 
-DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pimd ldpd nhrpd eigrpd sharpd pbrd staticd bfdd fabricd vrrpd"
+DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pimd ldpd nhrpd eigrpd sharpd pbrd staticd bfdd fabricd vrrpd pathd"
 RELOAD_SCRIPT="$D_PATH/frr-reload.py"
 
 #
index 6d91d2cdcd034c2d3f1e87028d17ba8a565368bf..e9f397f225044859ec24c66ec6f25e52c8013324 100644 (file)
@@ -2343,7 +2343,7 @@ check_argument_type (const format_char_info *fci,
       /* note printf extension type checks are *additional* - %p must always
        * be pointer compatible, %d always int compatible.
        */
-      if (!kef)
+      if (first_wanted_type->kind != CF_KIND_FORMAT || !kef)
        return true;
 
       const struct kernel_ext_fmt *kef_now;
@@ -4241,6 +4241,11 @@ handle_finish_parse (void *event_data, void *data)
                  continue;
                }
              node = TREE_TYPE (node);
+
+             if (etab->t_unsigned)
+               node = c_common_unsigned_type (node);
+             else if (etab->t_signed)
+               node = c_common_signed_type (node);
            }
 
          etab->type = node;
@@ -4357,9 +4362,17 @@ handle_pragma_printfrr_ext (cpp_reader *dummy)
   ttype = pragma_lex (&token, &loc);
 
   /* qualifiers */
-  if (ttype == CPP_NAME && !strcmp (IDENTIFIER_POINTER (token), "const"))
+  while (ttype == CPP_NAME)
     {
-      etab->t_const = true;
+      if (!strcmp (IDENTIFIER_POINTER (token), "const"))
+        etab->t_const = true;
+      else if (!strcmp (IDENTIFIER_POINTER (token), "signed"))
+        etab->t_signed = true;
+      else if (!strcmp (IDENTIFIER_POINTER (token), "unsigned"))
+        etab->t_unsigned = true;
+      else
+        break;
+
       ttype = pragma_lex (&token, &loc);
     }
 
index 87d2049ed4f997cbdf29cf7fadbde234a33ee4a5..599dbc56f9cb23f84767e062860cf5e5f47ac63d 100644 (file)
@@ -113,6 +113,8 @@ struct kernel_ext_fmt
        tree_code type_code;
        int ptrlevel;
        bool t_const;
+       bool t_unsigned;
+       bool t_signed;
        bool warned;
 
        const char *type_str;
index 62d9c255ad8d26ccd3851c63feaa476d815245af..3764188292a8d013f52e0fa93dab72e74bd9f874 100644 (file)
@@ -2237,7 +2237,7 @@ DEFUNSH(VTYSH_BFDD, bfd_peer_enter, bfd_peer_enter_cmd,
 }
 
 DEFUNSH(VTYSH_BFDD, bfd_profile_enter, bfd_profile_enter_cmd,
-       "profile WORD",
+       "profile BFDPROF",
        BFD_PROFILE_STR
        BFD_PROFILE_NAME_STR)
 {
index 1840e3728c9ea52f066661c0ae181c98d8fe060d..1a19d529656261664772b073489f767f2fb9c660 100644 (file)
@@ -393,7 +393,7 @@ submodule frr-bgp-common {
     container global-neighbor-config {
       leaf dynamic-neighbors-limit {
         type uint32 {
-          range "1..5000";
+          range "1..65535";
         }
         description
           "Maximum number of BGP Dynamic Neighbors that can be created.";
index 24998a470df85f9b8c2826533925f28473cf89ed..ae44447df73d595dd934c667958020cd710c0c8a 100644 (file)
@@ -1057,6 +1057,8 @@ module frr-bgp {
     uses structure-neighbor-route-server;
 
     uses structure-neighbor-group-soft-reconfiguration;
+
+    uses structure-neighbor-group-filter-config;
   }
 
   augment "/frr-rt:routing/frr-rt:control-plane-protocols/frr-rt:control-plane-protocol/bgp/neighbors/unnumbered-neighbor/afi-safis/afi-safi/ipv4-flowspec" {
@@ -1332,6 +1334,8 @@ module frr-bgp {
     uses structure-neighbor-route-server;
 
     uses structure-neighbor-group-soft-reconfiguration;
+
+    uses structure-neighbor-group-filter-config;
   }
 
   augment "/frr-rt:routing/frr-rt:control-plane-protocols/frr-rt:control-plane-protocol/bgp/peer-groups/peer-group/afi-safis/afi-safi/ipv4-flowspec" {
index 21fa765c636bb3b944a1f01d431af65bbaafbd8d..05eed0d26e9a73a376913f9992640288b5fca16b 100644 (file)
@@ -94,8 +94,11 @@ DEFUN_NOSH (show_debugging_zebra,
                vty_out(vty, "  Zebra detailed next-hop tracking debugging is on\n");
        else if (IS_ZEBRA_DEBUG_NHT)
                vty_out(vty, "  Zebra next-hop tracking debugging is on\n");
-       if (IS_ZEBRA_DEBUG_MPLS)
+       if (IS_ZEBRA_DEBUG_MPLS_DETAIL)
+               vty_out(vty, "  Zebra detailed MPLS debugging is on\n");
+       else if (IS_ZEBRA_DEBUG_MPLS)
                vty_out(vty, "  Zebra MPLS debugging is on\n");
+
        if (IS_ZEBRA_DEBUG_VXLAN)
                vty_out(vty, "  Zebra VXLAN debugging is on\n");
        if (IS_ZEBRA_DEBUG_PW)
@@ -159,14 +162,19 @@ DEFUN (debug_zebra_nht,
        return CMD_SUCCESS;
 }
 
-DEFUN (debug_zebra_mpls,
+DEFPY (debug_zebra_mpls,
        debug_zebra_mpls_cmd,
-       "debug zebra mpls",
+       "debug zebra mpls [detailed$detail]",
        DEBUG_STR
        "Zebra configuration\n"
-       "Debug option set for zebra MPLS LSPs\n")
+       "Debug option set for zebra MPLS LSPs\n"
+       "Debug option for detailed info\n")
 {
        zebra_debug_mpls = ZEBRA_DEBUG_MPLS;
+
+       if (detail)
+               zebra_debug_mpls |= ZEBRA_DEBUG_MPLS_DETAILED;
+
        return CMD_SUCCESS;
 }
 
@@ -422,11 +430,12 @@ DEFUN (no_debug_zebra_nht,
 
 DEFUN (no_debug_zebra_mpls,
        no_debug_zebra_mpls_cmd,
-       "no debug zebra mpls",
+       "no debug zebra mpls [detailed]",
        NO_STR
        DEBUG_STR
        "Zebra configuration\n"
-       "Debug option set for zebra MPLS LSPs\n")
+       "Debug option set for zebra MPLS LSPs\n"
+       "Debug option for zebra detailed info\n")
 {
        zebra_debug_mpls = 0;
        return CMD_SUCCESS;
@@ -628,10 +637,14 @@ static int config_write_debug(struct vty *vty)
                write++;
        }
 
-       if (IS_ZEBRA_DEBUG_MPLS) {
+       if (IS_ZEBRA_DEBUG_MPLS_DETAIL) {
+               vty_out(vty, "debug zebra mpls detailed\n");
+               write++;
+       } else if (IS_ZEBRA_DEBUG_MPLS) {
                vty_out(vty, "debug zebra mpls\n");
                write++;
        }
+
        if (IS_ZEBRA_DEBUG_VXLAN) {
                vty_out(vty, "debug zebra vxlan\n");
                write++;
index 86506846ad65cd2bb8b889278b1fca7b3ce1cb65..dc44367d01d06dad2718817120f5eb23d8e1d9b7 100644 (file)
@@ -48,7 +48,8 @@ extern "C" {
 #define ZEBRA_DEBUG_NHT 0x01
 #define ZEBRA_DEBUG_NHT_DETAILED 0x02
 
-#define ZEBRA_DEBUG_MPLS    0x01
+#define ZEBRA_DEBUG_MPLS             0x01
+#define ZEBRA_DEBUG_MPLS_DETAILED    0x02
 
 #define ZEBRA_DEBUG_VXLAN   0x01
 
@@ -93,6 +94,8 @@ extern "C" {
 #define IS_ZEBRA_DEBUG_NHT_DETAILED (zebra_debug_nht & ZEBRA_DEBUG_NHT_DETAILED)
 
 #define IS_ZEBRA_DEBUG_MPLS  (zebra_debug_mpls & ZEBRA_DEBUG_MPLS)
+#define IS_ZEBRA_DEBUG_MPLS_DETAIL \
+       (zebra_debug_mpls & ZEBRA_DEBUG_MPLS_DETAILED)
 #define IS_ZEBRA_DEBUG_VXLAN (zebra_debug_vxlan & ZEBRA_DEBUG_VXLAN)
 #define IS_ZEBRA_DEBUG_PW  (zebra_debug_pw & ZEBRA_DEBUG_PW)
 
index c0c064cbc7aea4df56556a71d37907b681a03538..6d42957b24c59b025a67d802ee17c9573e3b9d56 100644 (file)
@@ -872,6 +872,22 @@ static void lsp_schedule(struct hash_bucket *bucket, void *ctxt)
        zebra_lsp_t *lsp;
 
        lsp = (zebra_lsp_t *)bucket->data;
+
+       /* In the common flow, this is used when external events occur. For
+        * LSPs with backup nhlfes, we'll assume that the forwarding
+        * plane will use the backups to handle these events, until the
+        * owning protocol can react.
+        */
+       if (ctxt == NULL) {
+               /* Skip LSPs with backups */
+               if (nhlfe_list_first(&lsp->backup_nhlfe_list) != NULL) {
+                       if (IS_ZEBRA_DEBUG_MPLS_DETAIL)
+                               zlog_debug("%s: skip LSP in-label %u",
+                                          __func__, lsp->ile.in_label);
+                       return;
+               }
+       }
+
        (void)lsp_processq_add(lsp);
 }
 
index e23a515168dba199f5499ee851f1409d11359b98..6296f6f445f0c056a0fe7c694fbe9685090f1cdd 100644 (file)
@@ -1218,9 +1218,6 @@ int lib_vrf_zebra_l3vni_id_modify(struct nb_cb_modify_args *args)
                        return NB_ERR;
                }
 
-               /* Mark as having FRR configuration */
-               vrf_set_user_cfged(vrf);
-
                break;
        }
 
@@ -1268,10 +1265,6 @@ int lib_vrf_zebra_l3vni_id_destroy(struct nb_cb_destroy_args *args)
                        return NB_ERR;
                }
 
-               /* If no other FRR config for this VRF, mark accordingly. */
-               if (!zebra_vrf_has_config(zvrf))
-                       vrf_reset_user_cfged(vrf);
-
                break;
        }
 
index b42923640f27e684b1d6ae569a35e494f06de31f..212557423b8c4548480a809526067943c4d2a654 100644 (file)
@@ -338,20 +338,6 @@ static int zebra_vrf_update(struct vrf *vrf)
        return 0;
 }
 
-
-/* Return if this VRF has any FRR configuration or not.
- * IMPORTANT: This function needs to be updated when additional configuration
- * is added for a VRF.
- */
-int zebra_vrf_has_config(struct zebra_vrf *zvrf)
-{
-       /* EVPN L3-VNI? */
-       if (zvrf->l3vni)
-               return 1;
-
-       return 0;
-}
-
 /* Lookup the routing table in a VRF based on both VRF-Id and table-id.
  * NOTE: Table-id is relevant on two modes:
  * - case VRF backend is default : on default VRF only
index ed6376b01f14072211b41a028e83213e04ad999f..000b5a723825dd68cd262fd4b3e1bb05aa3ecc7e 100644 (file)
@@ -254,7 +254,6 @@ extern struct zebra_vrf *zebra_vrf_lookup_by_name(const char *);
 extern struct zebra_vrf *zebra_vrf_alloc(void);
 extern struct route_table *zebra_vrf_table(afi_t, safi_t, vrf_id_t);
 
-extern int zebra_vrf_has_config(struct zebra_vrf *zvrf);
 extern void zebra_vrf_init(void);
 
 extern void zebra_rtable_node_cleanup(struct route_table *table,