diff options
| author | Christian Hopps <chopps@labn.net> | 2024-02-25 16:54:16 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-25 16:54:16 -0500 |
| commit | 2aa6a67ec30824cd66119b4c0b8b7aea416ed5a6 (patch) | |
| tree | 2826ce68cea3ec16014683f54fbcb5dcb0d9030e /lib/filter_nb.c | |
| parent | 81db16976c0b4c17d6c418cc0110b2c830cdfdab (diff) | |
| parent | e5acf6797cbeb3c68946c3a7f65d4d8b433d85f5 (diff) | |
Merge pull request #15423 from idryzhov/fix-nb-choice
lib: fix processing of choices in northbound
Diffstat (limited to 'lib/filter_nb.c')
| -rw-r--r-- | lib/filter_nb.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/filter_nb.c b/lib/filter_nb.c index eba4e421c0..ec31f6d395 100644 --- a/lib/filter_nb.c +++ b/lib/filter_nb.c @@ -757,6 +757,32 @@ lib_access_list_entry_host_destroy(struct nb_cb_destroy_args *args) } /* + * XPath: /frr-filter:lib/access-list/entry/network + */ +static int lib_access_list_entry_network_create(struct nb_cb_create_args *args) +{ + /* Nothing to do here, everything is done in children callbacks */ + return NB_OK; +} + +static int lib_access_list_entry_network_destroy(struct nb_cb_destroy_args *args) +{ + struct filter_cisco *fc; + struct filter *f; + + if (args->event != NB_EV_APPLY) + return NB_OK; + + f = nb_running_get_entry(args->dnode, NULL, true); + fc = &f->u.cfilter; + cisco_unset_addr_mask(&fc->addr, &fc->addr_mask); + + acl_notify_route_map(f->acl, RMAP_EVENT_FILTER_DELETED); + + return NB_OK; +} + +/* * XPath: /frr-filter:lib/access-list/entry/network/address */ static int @@ -928,6 +954,35 @@ static int lib_access_list_entry_destination_host_destroy( } /* + * XPath: /frr-filter:lib/access-list/entry/destination-network + */ +static int +lib_access_list_entry_destination_network_create(struct nb_cb_create_args *args) +{ + /* Nothing to do here, everything is done in children callbacks */ + return NB_OK; +} + +static int lib_access_list_entry_destination_network_destroy( + struct nb_cb_destroy_args *args) +{ + struct filter_cisco *fc; + struct filter *f; + + if (args->event != NB_EV_APPLY) + return NB_OK; + + f = nb_running_get_entry(args->dnode, NULL, true); + fc = &f->u.cfilter; + fc->extended = 0; + cisco_unset_addr_mask(&fc->mask, &fc->mask_mask); + + acl_notify_route_map(f->acl, RMAP_EVENT_FILTER_DELETED); + + return NB_OK; +} + +/* * XPath: /frr-filter:lib/access-list/entry/destination-network/address */ static int lib_access_list_entry_destination_network_address_modify( @@ -1629,6 +1684,13 @@ const struct frr_yang_module_info frr_filter_info = { } }, { + .xpath = "/frr-filter:lib/access-list/entry/network", + .cbs = { + .create = lib_access_list_entry_network_create, + .destroy = lib_access_list_entry_network_destroy, + } + }, + { .xpath = "/frr-filter:lib/access-list/entry/network/address", .cbs = { .modify = lib_access_list_entry_network_address_modify, @@ -1655,6 +1717,13 @@ const struct frr_yang_module_info frr_filter_info = { } }, { + .xpath = "/frr-filter:lib/access-list/entry/destination-network", + .cbs = { + .create = lib_access_list_entry_destination_network_create, + .destroy = lib_access_list_entry_destination_network_destroy, + } + }, + { .xpath = "/frr-filter:lib/access-list/entry/destination-network/address", .cbs = { .modify = lib_access_list_entry_destination_network_address_modify, |
