]> git.puffer.fish Git - mirror/frr.git/commitdiff
*: move all userdata when changing node xpath
authorIgor Ryzhov <iryzhov@nfware.com>
Thu, 24 Sep 2020 18:05:32 +0000 (21:05 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Tue, 6 Oct 2020 12:54:25 +0000 (15:54 +0300)
The same thing was done for interfaces in commit f7c20aa1f.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
bfdd/bfd.c
ripd/ripd.c
ripngd/ripngd.c

index c16912060cfe112694e730cf0ce0895b25fe84fb..4877abd5738f149875a358a31a5e2ff481e0bbb2 100644 (file)
@@ -2158,6 +2158,7 @@ void bfd_session_update_vrf_name(struct bfd_session *bs, struct vrf *vrf)
        if (yang_module_find("frr-bfdd") && bs->key.vrfname[0]) {
                struct lyd_node *bfd_dnode;
                char xpath[XPATH_MAXLEN], xpath_srcaddr[XPATH_MAXLEN + 32];
+               char oldpath[XPATH_MAXLEN], newpath[XPATH_MAXLEN];
                char addr_buf[INET6_ADDRSTRLEN];
                int slen;
 
@@ -2185,7 +2186,12 @@ void bfd_session_update_vrf_name(struct bfd_session *bs, struct vrf *vrf)
                bfd_dnode = yang_dnode_get(running_config->dnode, xpath,
                                           bs->key.vrfname);
                if (bfd_dnode) {
+                       yang_dnode_get_path(bfd_dnode->parent, oldpath,
+                                           sizeof(oldpath));
                        yang_dnode_change_leaf(bfd_dnode, vrf->name);
+                       yang_dnode_get_path(bfd_dnode->parent, newpath,
+                                           sizeof(newpath));
+                       nb_running_move_tree(oldpath, newpath);
                        running_config->version++;
                }
        }
index ecadf8fb712f82d39d7eba181a5567c8e9176135..bcf73e8f8908e8c0a52c942df37cd414ac3c3c7e 100644 (file)
@@ -3667,13 +3667,20 @@ static int rip_vrf_enable(struct vrf *vrf)
                 */
                if (yang_module_find("frr-ripd") && old_vrf_name) {
                        struct lyd_node *rip_dnode;
+                       char oldpath[XPATH_MAXLEN];
+                       char newpath[XPATH_MAXLEN];
 
                        rip_dnode = yang_dnode_get(
                                running_config->dnode,
                                "/frr-ripd:ripd/instance[vrf='%s']/vrf",
                                old_vrf_name);
                        if (rip_dnode) {
+                               yang_dnode_get_path(rip_dnode->parent, oldpath,
+                                                   sizeof(oldpath));
                                yang_dnode_change_leaf(rip_dnode, vrf->name);
+                               yang_dnode_get_path(rip_dnode->parent, newpath,
+                                                   sizeof(newpath));
+                               nb_running_move_tree(oldpath, newpath);
                                running_config->version++;
                        }
                }
index bf6c6ff27b2ae13b53cc31792409f71d1385c266..8a7950daf4f8fc325a6c4ccb26aeca27c03160f4 100644 (file)
@@ -2791,13 +2791,20 @@ static int ripng_vrf_enable(struct vrf *vrf)
                 */
                if (yang_module_find("frr-ripngd") && old_vrf_name) {
                        struct lyd_node *ripng_dnode;
+                       char oldpath[XPATH_MAXLEN];
+                       char newpath[XPATH_MAXLEN];
 
                        ripng_dnode = yang_dnode_get(
                                running_config->dnode,
                                "/frr-ripngd:ripngd/instance[vrf='%s']/vrf",
                                old_vrf_name);
                        if (ripng_dnode) {
+                               yang_dnode_get_path(ripng_dnode->parent, oldpath,
+                                                   sizeof(oldpath));
                                yang_dnode_change_leaf(ripng_dnode, vrf->name);
+                               yang_dnode_get_path(ripng_dnode->parent, newpath,
+                                                   sizeof(newpath));
+                               nb_running_move_tree(oldpath, newpath);
                                running_config->version++;
                        }
                }