summaryrefslogtreecommitdiff
path: root/lib/filter_nb.c
diff options
context:
space:
mode:
authorChristian Hopps <chopps@labn.net>2024-02-25 16:54:16 -0500
committerGitHub <noreply@github.com>2024-02-25 16:54:16 -0500
commit2aa6a67ec30824cd66119b4c0b8b7aea416ed5a6 (patch)
tree2826ce68cea3ec16014683f54fbcb5dcb0d9030e /lib/filter_nb.c
parent81db16976c0b4c17d6c418cc0110b2c830cdfdab (diff)
parente5acf6797cbeb3c68946c3a7f65d4d8b433d85f5 (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.c69
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,