mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-06-06 05:47:18 +00:00
lib: fix distribute-list deletion
When a whole distribute-list is deleted (can be done only using API),
all its children must be cleaned up manually.
Fixes #16538
Signed-off-by: Igor Ryzhov <idryzhov@gmail.com>
(cherry picked from commit 8fad4f317e
)
This commit is contained in:
parent
3d5f11736a
commit
c3cc4b4ede
@ -456,10 +456,43 @@ int group_distribute_list_create_helper(
|
|||||||
* XPath: /frr-ripd:ripd/instance/distribute-lists/distribute-list/{in,out}/{access,prefix}-list
|
* XPath: /frr-ripd:ripd/instance/distribute-lists/distribute-list/{in,out}/{access,prefix}-list
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static int distribute_list_leaf_update(const struct lyd_node *dnode,
|
||||||
|
int ip_version, bool no);
|
||||||
|
|
||||||
int group_distribute_list_destroy(struct nb_cb_destroy_args *args)
|
int group_distribute_list_destroy(struct nb_cb_destroy_args *args)
|
||||||
{
|
{
|
||||||
|
struct lyd_node *dnode;
|
||||||
|
|
||||||
if (args->event != NB_EV_APPLY)
|
if (args->event != NB_EV_APPLY)
|
||||||
return NB_OK;
|
return NB_OK;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We don't keep the IP version of distribute-list anywhere, so we're
|
||||||
|
* trying to remove both. If one doesn't exist, it's simply skipped by
|
||||||
|
* the remove function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
dnode = yang_dnode_get(args->dnode, "in/access-list");
|
||||||
|
if (dnode) {
|
||||||
|
distribute_list_leaf_update(dnode, 4, true);
|
||||||
|
distribute_list_leaf_update(dnode, 6, true);
|
||||||
|
}
|
||||||
|
dnode = yang_dnode_get(args->dnode, "in/prefix-list");
|
||||||
|
if (dnode) {
|
||||||
|
distribute_list_leaf_update(dnode, 4, true);
|
||||||
|
distribute_list_leaf_update(dnode, 6, true);
|
||||||
|
}
|
||||||
|
dnode = yang_dnode_get(args->dnode, "out/access-list");
|
||||||
|
if (dnode) {
|
||||||
|
distribute_list_leaf_update(dnode, 4, true);
|
||||||
|
distribute_list_leaf_update(dnode, 6, true);
|
||||||
|
}
|
||||||
|
dnode = yang_dnode_get(args->dnode, "out/prefix-list");
|
||||||
|
if (dnode) {
|
||||||
|
distribute_list_leaf_update(dnode, 4, true);
|
||||||
|
distribute_list_leaf_update(dnode, 6, true);
|
||||||
|
}
|
||||||
|
|
||||||
nb_running_unset_entry(args->dnode);
|
nb_running_unset_entry(args->dnode);
|
||||||
return NB_OK;
|
return NB_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user