summaryrefslogtreecommitdiff
path: root/lib/if.c
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2020-06-04 19:26:42 -0400
committerQuentin Young <qlyoung@cumulusnetworks.com>2020-06-04 20:24:52 -0400
commitf7c20aa1fd5b997a6c545f0f064b82ad8a5cd3ce (patch)
treec02e2394dbbff468c651e803ee144d6e818fc649 /lib/if.c
parentf981d44931ced06f594b33c54a27d6d843ad0379 (diff)
lib: move all userdata when changing node xpath
All userdata pointers need to be rekeyed to their new xpaths, not just the one associated with the dnode being moved. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'lib/if.c')
-rw-r--r--lib/if.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/if.c b/lib/if.c
index 9efd298a4f..b34744f80d 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -263,15 +263,21 @@ void if_update_to_new_vrf(struct interface *ifp, vrf_id_t vrf_id)
*/
if (yang_module_find("frr-interface")) {
struct lyd_node *if_dnode;
+ char oldpath[XPATH_MAXLEN];
+ char newpath[XPATH_MAXLEN];
if_dnode = yang_dnode_get(
running_config->dnode,
"/frr-interface:lib/interface[name='%s'][vrf='%s']/vrf",
ifp->name, old_vrf->name);
+
if (if_dnode) {
- nb_running_unset_entry(if_dnode->parent);
+ yang_dnode_get_path(if_dnode->parent, oldpath,
+ sizeof(oldpath));
yang_dnode_change_leaf(if_dnode, vrf->name);
- nb_running_set_entry(if_dnode->parent, ifp);
+ yang_dnode_get_path(if_dnode->parent, newpath,
+ sizeof(newpath));
+ nb_running_move_tree(oldpath, newpath);
running_config->version++;
}
}