diff options
| author | Rafael Zalamena <rzalamena@opensourcerouting.org> | 2020-04-29 15:33:46 -0300 |
|---|---|---|
| committer | Rafael Zalamena <rzalamena@opensourcerouting.org> | 2020-06-05 14:36:52 -0300 |
| commit | fb8884f355d6db9626fb78c99efd26d479404376 (patch) | |
| tree | 76d8c8453d8958ab6932ed1b2bc360e36aa9763c /lib/filter_nb.c | |
| parent | 89b7c834a54ac9bacf0b97e4daa1f3ff85beee63 (diff) | |
lib: fix northbound conflicts
Changes:
- Use the northbound callback prototypes.
- Re-implement the removed function: `ipv4_network_addr` (more
information: https://github.com/FRRouting/frr/pull/5535 )
Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
Diffstat (limited to 'lib/filter_nb.c')
| -rw-r--r-- | lib/filter_nb.c | 465 |
1 files changed, 199 insertions, 266 deletions
diff --git a/lib/filter_nb.c b/lib/filter_nb.c index e18064a23f..23cea50870 100644 --- a/lib/filter_nb.c +++ b/lib/filter_nb.c @@ -22,7 +22,6 @@ #include "zebra.h" -#include "lib/log.h" #include "lib/northbound.h" #include "lib/prefix.h" @@ -30,36 +29,43 @@ #include "lib/plist.h" #include "lib/plist_int.h" +/* Helper function. */ +static in_addr_t +ipv4_network_addr(in_addr_t hostaddr, int masklen) +{ + struct in_addr mask; + + masklen2ip(masklen, &mask); + return hostaddr & mask.s_addr; +} + /* * XPath: /frr-filter:lib/access-list-legacy */ -static int lib_access_list_legacy_create(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_access_list_legacy_create(struct nb_cb_create_args *args) { struct access_list *acl; const char *acl_name; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - acl_name = yang_dnode_get_string(dnode, "./number"); + acl_name = yang_dnode_get_string(args->dnode, "./number"); acl = access_list_get(AFI_IP, acl_name); - nb_running_set_entry(dnode, acl); + nb_running_set_entry(args->dnode, acl); return NB_OK; } -static int lib_access_list_legacy_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_access_list_legacy_destroy(struct nb_cb_destroy_args *args) { struct access_master *am; struct access_list *acl; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - acl = nb_running_unset_entry(dnode); + acl = nb_running_unset_entry(args->dnode); am = acl->master; if (am->delete_hook) am->delete_hook(acl); @@ -72,35 +78,33 @@ static int lib_access_list_legacy_destroy(enum nb_event event, /* * XPath: /frr-filter:lib/access-list-legacy/remark */ -static int lib_access_list_legacy_remark_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_access_list_legacy_remark_modify(struct nb_cb_modify_args *args) { struct access_list *acl; const char *remark; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - acl = nb_running_get_entry(dnode, NULL, true); + acl = nb_running_get_entry(args->dnode, NULL, true); if (acl->remark) XFREE(MTYPE_TMP, acl->remark); - remark = yang_dnode_get_string(dnode, NULL); + remark = yang_dnode_get_string(args->dnode, NULL); acl->remark = XSTRDUP(MTYPE_TMP, remark); return NB_OK; } -static int lib_access_list_legacy_remark_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int +lib_access_list_legacy_remark_destroy(struct nb_cb_destroy_args *args) { struct access_list *acl; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - acl = nb_running_get_entry(dnode, NULL, true); + acl = nb_running_get_entry(args->dnode, NULL, true); if (acl->remark) XFREE(MTYPE_TMP, acl->remark); @@ -112,9 +116,7 @@ static int lib_access_list_legacy_remark_destroy(enum nb_event event, /* * XPath: /frr-filter:lib/access-list-legacy/entry */ -static int lib_access_list_legacy_entry_create(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_access_list_legacy_entry_create(struct nb_cb_create_args *args) { struct filter_cisco *fc; struct access_list *acl; @@ -123,38 +125,37 @@ static int lib_access_list_legacy_entry_create(enum nb_event event, /* TODO: validate `filter_lookup_cisco` returns NULL. */ - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - aclno = yang_dnode_get_uint16(dnode, "../number"); + aclno = yang_dnode_get_uint16(args->dnode, "../number"); f = filter_new(); f->cisco = 1; - f->seq = yang_dnode_get_uint32(dnode, "./sequence"); + f->seq = yang_dnode_get_uint32(args->dnode, "./sequence"); fc = &f->u.cfilter; if ((aclno >= 1 && aclno <= 99) || (aclno >= 1300 && aclno <= 1999)) fc->extended = 0; else fc->extended = 1; - acl = nb_running_get_entry(dnode, NULL, true); + acl = nb_running_get_entry(args->dnode, NULL, true); f->acl = acl; access_list_filter_add(acl, f); - nb_running_set_entry(dnode, f); + nb_running_set_entry(args->dnode, f); return NB_OK; } -static int lib_access_list_legacy_entry_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_access_list_legacy_entry_destroy(struct nb_cb_destroy_args *args) { struct access_list *acl; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_unset_entry(dnode); + f = nb_running_unset_entry(args->dnode); acl = f->acl; access_list_filter_delete(acl, f); @@ -165,18 +166,16 @@ static int lib_access_list_legacy_entry_destroy(enum nb_event event, * XPath: /frr-filter:lib/access-list-legacy/entry/action */ static int -lib_access_list_legacy_entry_action_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +lib_access_list_legacy_entry_action_modify(struct nb_cb_modify_args *args) { const char *filter_type; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); - filter_type = yang_dnode_get_string(dnode, NULL); + f = nb_running_get_entry(args->dnode, NULL, true); + filter_type = yang_dnode_get_string(args->dnode, NULL); if (strcmp(filter_type, "permit") == 0) f->type = FILTER_PERMIT; else @@ -189,35 +188,32 @@ lib_access_list_legacy_entry_action_modify(enum nb_event event, * XPath: /frr-filter:lib/access-list-legacy/entry/host */ static int -lib_access_list_legacy_entry_host_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +lib_access_list_legacy_entry_host_modify(struct nb_cb_modify_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; - yang_dnode_get_ipv4(&fc->addr, dnode, NULL); + yang_dnode_get_ipv4(&fc->addr, args->dnode, NULL); fc->addr_mask.s_addr = INADDR_ANY; return NB_OK; } static int -lib_access_list_legacy_entry_host_destroy(enum nb_event event, - const struct lyd_node *dnode) +lib_access_list_legacy_entry_host_destroy(struct nb_cb_destroy_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; fc->addr.s_addr = INADDR_ANY; fc->addr_mask.s_addr = INADDR_NONE; @@ -229,20 +225,18 @@ lib_access_list_legacy_entry_host_destroy(enum nb_event event, * XPath: /frr-filter:lib/access-list-legacy/entry/network */ static int -lib_access_list_legacy_entry_network_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +lib_access_list_legacy_entry_network_modify(struct nb_cb_modify_args *args) { struct filter_cisco *fc; struct filter *f; struct prefix p; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; - yang_dnode_get_prefix(&p, dnode, NULL); + yang_dnode_get_prefix(&p, args->dnode, NULL); fc->addr.s_addr = ipv4_network_addr(p.u.prefix4.s_addr, p.prefixlen); masklen2ip(p.prefixlen, &fc->addr_mask); @@ -250,16 +244,15 @@ lib_access_list_legacy_entry_network_modify(enum nb_event event, } static int -lib_access_list_legacy_entry_network_destroy(enum nb_event event, - const struct lyd_node *dnode) +lib_access_list_legacy_entry_network_destroy(struct nb_cb_destroy_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; fc->addr.s_addr = INADDR_ANY; fc->addr_mask.s_addr = INADDR_NONE; @@ -270,17 +263,16 @@ lib_access_list_legacy_entry_network_destroy(enum nb_event event, /* * XPath: /frr-filter:lib/access-list-legacy/entry/any */ -static int lib_access_list_legacy_entry_any_create(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int +lib_access_list_legacy_entry_any_create(struct nb_cb_create_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; fc->addr.s_addr = INADDR_ANY; fc->addr_mask.s_addr = INADDR_NONE; @@ -289,16 +281,15 @@ static int lib_access_list_legacy_entry_any_create(enum nb_event event, } static int -lib_access_list_legacy_entry_any_destroy(enum nb_event event, - const struct lyd_node *dnode) +lib_access_list_legacy_entry_any_destroy(struct nb_cb_destroy_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; fc->addr.s_addr = INADDR_ANY; fc->addr_mask.s_addr = INADDR_NONE; @@ -310,33 +301,32 @@ lib_access_list_legacy_entry_any_destroy(enum nb_event event, * XPath: /frr-filter:lib/access-list-legacy/entry/destination-host */ static int lib_access_list_legacy_entry_destination_host_modify( - enum nb_event event, const struct lyd_node *dnode, - union nb_resource *resource) + struct nb_cb_modify_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; - yang_dnode_get_ipv4(&fc->mask, dnode, NULL); + yang_dnode_get_ipv4(&fc->mask, args->dnode, NULL); fc->mask_mask.s_addr = INADDR_ANY; return NB_OK; } static int lib_access_list_legacy_entry_destination_host_destroy( - enum nb_event event, const struct lyd_node *dnode) + struct nb_cb_destroy_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; fc->mask.s_addr = INADDR_ANY; fc->mask_mask.s_addr = INADDR_NONE; @@ -348,19 +338,18 @@ static int lib_access_list_legacy_entry_destination_host_destroy( * XPath: /frr-filter:lib/access-list-legacy/entry/destination-network */ static int lib_access_list_legacy_entry_destination_network_modify( - enum nb_event event, const struct lyd_node *dnode, - union nb_resource *resource) + struct nb_cb_modify_args *args) { struct filter_cisco *fc; struct filter *f; struct prefix p; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; - yang_dnode_get_prefix(&p, dnode, NULL); + yang_dnode_get_prefix(&p, args->dnode, NULL); fc->addr.s_addr = ipv4_network_addr(p.u.prefix4.s_addr, p.prefixlen); masklen2ip(p.prefixlen, &fc->addr_mask); @@ -368,15 +357,15 @@ static int lib_access_list_legacy_entry_destination_network_modify( } static int lib_access_list_legacy_entry_destination_network_destroy( - enum nb_event event, const struct lyd_node *dnode) + struct nb_cb_destroy_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; fc->mask.s_addr = INADDR_ANY; fc->mask_mask.s_addr = INADDR_NONE; @@ -388,16 +377,15 @@ static int lib_access_list_legacy_entry_destination_network_destroy( * XPath: /frr-filter:lib/access-list-legacy/entry/destination-any */ static int lib_access_list_legacy_entry_destination_any_create( - enum nb_event event, const struct lyd_node *dnode, - union nb_resource *resource) + struct nb_cb_create_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; fc->mask.s_addr = INADDR_ANY; fc->mask_mask.s_addr = INADDR_NONE; @@ -406,15 +394,15 @@ static int lib_access_list_legacy_entry_destination_any_create( } static int lib_access_list_legacy_entry_destination_any_destroy( - enum nb_event event, const struct lyd_node *dnode) + struct nb_cb_destroy_args *args) { struct filter_cisco *fc; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fc = &f->u.cfilter; fc->mask.s_addr = INADDR_ANY; fc->mask_mask.s_addr = INADDR_NONE; @@ -425,19 +413,17 @@ static int lib_access_list_legacy_entry_destination_any_destroy( /* * XPath: /frr-filter:lib/access-list */ -static int lib_access_list_create(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_access_list_create(struct nb_cb_create_args *args) { struct access_list *acl; const char *acl_name; int type; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - type = yang_dnode_get_enum(dnode, "./type"); - acl_name = yang_dnode_get_string(dnode, "./name"); + type = yang_dnode_get_enum(args->dnode, "./type"); + acl_name = yang_dnode_get_string(args->dnode, "./name"); switch (type) { case 0: /* ipv4 */ @@ -451,21 +437,20 @@ static int lib_access_list_create(enum nb_event event, break; } - nb_running_set_entry(dnode, acl); + nb_running_set_entry(args->dnode, acl); return NB_OK; } -static int lib_access_list_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_access_list_destroy(struct nb_cb_destroy_args *args) { struct access_master *am; struct access_list *acl; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - acl = nb_running_unset_entry(dnode); + acl = nb_running_unset_entry(args->dnode); am = acl->master; if (am->delete_hook) am->delete_hook(acl); @@ -478,55 +463,49 @@ static int lib_access_list_destroy(enum nb_event event, /* * XPath: /frr-filter:lib/access-list/remark */ -static int lib_access_list_remark_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_access_list_remark_modify(struct nb_cb_modify_args *args) { - return lib_access_list_legacy_remark_modify(event, dnode, resource); + return lib_access_list_legacy_remark_modify(args); } -static int lib_access_list_remark_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_access_list_remark_destroy(struct nb_cb_destroy_args *args) { - return lib_access_list_legacy_remark_destroy(event, dnode); + return lib_access_list_legacy_remark_destroy(args); } /* * XPath: /frr-filter:lib/access-list/entry */ -static int lib_access_list_entry_create(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_access_list_entry_create(struct nb_cb_create_args *args) { struct access_list *acl; struct filter *f; /* TODO: validate `filter_lookup_zebra` returns NULL. */ - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; f = filter_new(); - f->seq = yang_dnode_get_uint32(dnode, "./sequence"); + f->seq = yang_dnode_get_uint32(args->dnode, "./sequence"); - acl = nb_running_get_entry(dnode, NULL, true); + acl = nb_running_get_entry(args->dnode, NULL, true); f->acl = acl; access_list_filter_add(acl, f); - nb_running_set_entry(dnode, f); + nb_running_set_entry(args->dnode, f); return NB_OK; } -static int lib_access_list_entry_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_access_list_entry_destroy(struct nb_cb_destroy_args *args) { struct access_list *acl; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_unset_entry(dnode); + f = nb_running_unset_entry(args->dnode); acl = f->acl; access_list_filter_delete(acl, f); @@ -536,46 +515,40 @@ static int lib_access_list_entry_destroy(enum nb_event event, /* * XPath: /frr-filter:lib/access-list/entry/action */ -static int lib_access_list_entry_action_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_access_list_entry_action_modify(struct nb_cb_modify_args *args) { - return lib_access_list_legacy_entry_action_modify(event, dnode, - resource); + return lib_access_list_legacy_entry_action_modify(args); } /* * XPath: /frr-filter:lib/access-list/entry/ipv4-prefix */ static int -lib_access_list_entry_ipv4_prefix_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +lib_access_list_entry_ipv4_prefix_modify(struct nb_cb_modify_args *args) { struct filter_zebra *fz; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fz = &f->u.zfilter; - yang_dnode_get_prefix(&fz->prefix, dnode, NULL); + yang_dnode_get_prefix(&fz->prefix, args->dnode, NULL); return NB_OK; } static int -lib_access_list_entry_ipv4_prefix_destroy(enum nb_event event, - const struct lyd_node *dnode) +lib_access_list_entry_ipv4_prefix_destroy(struct nb_cb_destroy_args *args) { struct filter_zebra *fz; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fz = &f->u.zfilter; memset(&fz->prefix, 0, sizeof(fz->prefix)); @@ -586,34 +559,31 @@ lib_access_list_entry_ipv4_prefix_destroy(enum nb_event event, * XPath: /frr-filter:lib/access-list/entry/ipv4-exact-match */ static int -lib_access_list_entry_ipv4_exact_match_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +lib_access_list_entry_ipv4_exact_match_modify(struct nb_cb_modify_args *args) { struct filter_zebra *fz; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fz = &f->u.zfilter; - fz->exact = yang_dnode_get_bool(dnode, NULL); + fz->exact = yang_dnode_get_bool(args->dnode, NULL); return NB_OK; } static int -lib_access_list_entry_ipv4_exact_match_destroy(enum nb_event event, - const struct lyd_node *dnode) +lib_access_list_entry_ipv4_exact_match_destroy(struct nb_cb_destroy_args *args) { struct filter_zebra *fz; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fz = &f->u.zfilter; fz->exact = 0; @@ -624,74 +594,62 @@ lib_access_list_entry_ipv4_exact_match_destroy(enum nb_event event, * XPath: /frr-filter:lib/access-list/entry/ipv6-prefix */ static int -lib_access_list_entry_ipv6_prefix_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +lib_access_list_entry_ipv6_prefix_modify(struct nb_cb_modify_args *args) { - return lib_access_list_entry_ipv4_prefix_modify(event, dnode, resource); + return lib_access_list_entry_ipv4_prefix_modify(args); } static int -lib_access_list_entry_ipv6_prefix_destroy(enum nb_event event, - const struct lyd_node *dnode) +lib_access_list_entry_ipv6_prefix_destroy(struct nb_cb_destroy_args *args) { - return lib_access_list_entry_ipv4_prefix_destroy(event, dnode); + return lib_access_list_entry_ipv4_prefix_destroy(args); } /* * XPath: /frr-filter:lib/access-list/entry/ipv6-exact-match */ static int -lib_access_list_entry_ipv6_exact_match_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +lib_access_list_entry_ipv6_exact_match_modify(struct nb_cb_modify_args *args) { - return lib_access_list_entry_ipv4_exact_match_modify(event, dnode, - resource); + return lib_access_list_entry_ipv4_exact_match_modify(args); } static int -lib_access_list_entry_ipv6_exact_match_destroy(enum nb_event event, - const struct lyd_node *dnode) +lib_access_list_entry_ipv6_exact_match_destroy(struct nb_cb_destroy_args *args) { - return lib_access_list_entry_ipv4_exact_match_destroy(event, dnode); + return lib_access_list_entry_ipv4_exact_match_destroy(args); } /* * XPath: /frr-filter:lib/access-list/entry/mac */ -static int lib_access_list_entry_mac_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_access_list_entry_mac_modify(struct nb_cb_modify_args *args) { - return lib_access_list_entry_ipv4_prefix_modify(event, dnode, resource); + return lib_access_list_entry_ipv4_prefix_modify(args); } -static int lib_access_list_entry_mac_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_access_list_entry_mac_destroy(struct nb_cb_destroy_args *args) { - return lib_access_list_entry_ipv4_prefix_destroy(event, dnode); + return lib_access_list_entry_ipv4_prefix_destroy(args); } /* * XPath: /frr-filter:lib/access-list/entry/any */ -static int lib_access_list_entry_any_create(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_access_list_entry_any_create(struct nb_cb_create_args *args) { struct filter_zebra *fz; struct filter *f; int type; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fz = &f->u.zfilter; memset(&fz->prefix, 0, sizeof(fz->prefix)); - type = yang_dnode_get_enum(dnode, "../../type"); + type = yang_dnode_get_enum(args->dnode, "../../type"); switch (type) { case 0: /* ipv4 */ fz->prefix.family = AF_INET; @@ -707,16 +665,15 @@ static int lib_access_list_entry_any_create(enum nb_event event, return NB_OK; } -static int lib_access_list_entry_any_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_access_list_entry_any_destroy(struct nb_cb_destroy_args *args) { struct filter_zebra *fz; struct filter *f; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - f = nb_running_get_entry(dnode, NULL, true); + f = nb_running_get_entry(args->dnode, NULL, true); fz = &f->u.zfilter; fz->prefix.family = 0; @@ -726,9 +683,7 @@ static int lib_access_list_entry_any_destroy(enum nb_event event, /* * XPath: /frr-filter:lib/prefix-list */ -static int lib_prefix_list_create(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_prefix_list_create(struct nb_cb_create_args *args) { struct prefix_list *pl; const char *name; @@ -736,11 +691,11 @@ static int lib_prefix_list_create(enum nb_event event, /* TODO: validate prefix_entry_dup_check() passes. */ - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - type = yang_dnode_get_enum(dnode, "./type"); - name = yang_dnode_get_string(dnode, "./name"); + type = yang_dnode_get_enum(args->dnode, "./type"); + name = yang_dnode_get_string(args->dnode, "./name"); switch (type) { case 0: /* ipv4 */ pl = prefix_list_get(AFI_IP, 0, name); @@ -750,20 +705,19 @@ static int lib_prefix_list_create(enum nb_event event, break; } - nb_running_set_entry(dnode, pl); + nb_running_set_entry(args->dnode, pl); return NB_OK; } -static int lib_prefix_list_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_prefix_list_destroy(struct nb_cb_destroy_args *args) { struct prefix_list *pl; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - pl = nb_running_unset_entry(dnode); + pl = nb_running_unset_entry(args->dnode); prefix_list_delete(pl); return NB_OK; @@ -772,35 +726,32 @@ static int lib_prefix_list_destroy(enum nb_event event, /* * XPath: /frr-filter:lib/prefix-list/description */ -static int lib_prefix_list_description_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_prefix_list_description_modify(struct nb_cb_modify_args *args) { struct prefix_list *pl; const char *remark; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - pl = nb_running_get_entry(dnode, NULL, true); + pl = nb_running_get_entry(args->dnode, NULL, true); if (pl->desc) XFREE(MTYPE_TMP, pl->desc); - remark = yang_dnode_get_string(dnode, NULL); + remark = yang_dnode_get_string(args->dnode, NULL); pl->desc = XSTRDUP(MTYPE_TMP, remark); return NB_OK; } -static int lib_prefix_list_description_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_prefix_list_description_destroy(struct nb_cb_destroy_args *args) { struct prefix_list *pl; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - pl = nb_running_get_entry(dnode, NULL, true); + pl = nb_running_get_entry(args->dnode, NULL, true); if (pl->desc) XFREE(MTYPE_TMP, pl->desc); @@ -812,37 +763,34 @@ static int lib_prefix_list_description_destroy(enum nb_event event, /* * XPath: /frr-filter:lib/prefix-list/entry */ -static int lib_prefix_list_entry_create(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_prefix_list_entry_create(struct nb_cb_create_args *args) { struct prefix_list_entry *ple; struct prefix_list *pl; struct prefix p; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; memset(&p, 0, sizeof(p)); - pl = nb_running_get_entry(dnode, NULL, true); + pl = nb_running_get_entry(args->dnode, NULL, true); ple = prefix_list_entry_new(); ple->pl = pl; ple->any = 1; - ple->seq = yang_dnode_get_int64(dnode, "./sequence"); + ple->seq = yang_dnode_get_int64(args->dnode, "./sequence"); return NB_OK; } -static int lib_prefix_list_entry_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_prefix_list_entry_destroy(struct nb_cb_destroy_args *args) { struct prefix_list_entry *ple; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_unset_entry(dnode); + ple = nb_running_unset_entry(args->dnode); prefix_list_entry_delete(ple->pl, ple, 1); return NB_OK; @@ -851,18 +799,16 @@ static int lib_prefix_list_entry_destroy(enum nb_event event, /* * XPath: /frr-filter:lib/prefix-list/entry/action */ -static int lib_prefix_list_entry_action_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_prefix_list_entry_action_modify(struct nb_cb_modify_args *args) { struct prefix_list_entry *ple; const char *action_str; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_get_entry(dnode, NULL, true); - action_str = yang_dnode_get_string(dnode, "./action"); + ple = nb_running_get_entry(args->dnode, NULL, true); + action_str = yang_dnode_get_string(args->dnode, "./action"); if (strcmp(action_str, "permit") == 0) ple->type = PREFIX_PERMIT; else @@ -875,31 +821,28 @@ static int lib_prefix_list_entry_action_modify(enum nb_event event, * XPath: /frr-filter:lib/prefix-list/entry/ipv4-prefix */ static int -lib_prefix_list_entry_ipv4_prefix_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +lib_prefix_list_entry_ipv4_prefix_modify(struct nb_cb_modify_args *args) { struct prefix_list_entry *ple; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_get_entry(dnode, NULL, true); - yang_dnode_get_prefix(&ple->prefix, dnode, NULL); + ple = nb_running_get_entry(args->dnode, NULL, true); + yang_dnode_get_prefix(&ple->prefix, args->dnode, NULL); return NB_OK; } static int -lib_prefix_list_entry_ipv4_prefix_destroy(enum nb_event event, - const struct lyd_node *dnode) +lib_prefix_list_entry_ipv4_prefix_destroy(struct nb_cb_destroy_args *args) { struct prefix_list_entry *ple; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_get_entry(dnode, NULL, true); + ple = nb_running_get_entry(args->dnode, NULL, true); memset(&ple->prefix, 0, sizeof(ple->prefix)); ple->any = 1; @@ -910,29 +853,28 @@ lib_prefix_list_entry_ipv4_prefix_destroy(enum nb_event event, * XPath: /frr-filter:lib/prefix-list/entry/ipv4-prefix-length-greater-or-equal */ static int lib_prefix_list_entry_ipv4_prefix_length_greater_or_equal_modify( - enum nb_event event, const struct lyd_node *dnode, - union nb_resource *resource) + struct nb_cb_modify_args *args) { struct prefix_list_entry *ple; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_get_entry(dnode, NULL, true); - ple->ge = yang_dnode_get_uint8(dnode, NULL); + ple = nb_running_get_entry(args->dnode, NULL, true); + ple->ge = yang_dnode_get_uint8(args->dnode, NULL); return NB_OK; } static int lib_prefix_list_entry_ipv4_prefix_length_greater_or_equal_destroy( - enum nb_event event, const struct lyd_node *dnode) + struct nb_cb_destroy_args *args) { struct prefix_list_entry *ple; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_get_entry(dnode, NULL, true); + ple = nb_running_get_entry(args->dnode, NULL, true); ple->ge = 0; return NB_OK; @@ -942,29 +884,28 @@ static int lib_prefix_list_entry_ipv4_prefix_length_greater_or_equal_destroy( * XPath: /frr-filter:lib/prefix-list/entry/ipv4-prefix-length-lesser-or-equal */ static int lib_prefix_list_entry_ipv4_prefix_length_lesser_or_equal_modify( - enum nb_event event, const struct lyd_node *dnode, - union nb_resource *resource) + struct nb_cb_modify_args *args) { struct prefix_list_entry *ple; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_get_entry(dnode, NULL, true); - ple->le = yang_dnode_get_uint8(dnode, NULL); + ple = nb_running_get_entry(args->dnode, NULL, true); + ple->le = yang_dnode_get_uint8(args->dnode, NULL); return NB_OK; } static int lib_prefix_list_entry_ipv4_prefix_length_lesser_or_equal_destroy( - enum nb_event event, const struct lyd_node *dnode) + struct nb_cb_destroy_args *args) { struct prefix_list_entry *ple; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_get_entry(dnode, NULL, true); + ple = nb_running_get_entry(args->dnode, NULL, true); ple->le = 0; return NB_OK; @@ -974,84 +915,76 @@ static int lib_prefix_list_entry_ipv4_prefix_length_lesser_or_equal_destroy( * XPath: /frr-filter:lib/prefix-list/entry/ipv6-prefix */ static int -lib_prefix_list_entry_ipv6_prefix_modify(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +lib_prefix_list_entry_ipv6_prefix_modify(struct nb_cb_modify_args *args) { - return lib_prefix_list_entry_ipv4_prefix_modify(event, dnode, resource); + return lib_prefix_list_entry_ipv4_prefix_modify(args); } static int -lib_prefix_list_entry_ipv6_prefix_destroy(enum nb_event event, - const struct lyd_node *dnode) +lib_prefix_list_entry_ipv6_prefix_destroy(struct nb_cb_destroy_args *args) { - return lib_prefix_list_entry_ipv4_prefix_destroy(event, dnode); + return lib_prefix_list_entry_ipv4_prefix_destroy(args); } /* * XPath: /frr-filter:lib/prefix-list/entry/ipv6-prefix-length-greater-or-equal */ static int lib_prefix_list_entry_ipv6_prefix_length_greater_or_equal_modify( - enum nb_event event, const struct lyd_node *dnode, - union nb_resource *resource) + struct nb_cb_modify_args *args) { return lib_prefix_list_entry_ipv4_prefix_length_greater_or_equal_modify( - event, dnode, resource); + args); } static int lib_prefix_list_entry_ipv6_prefix_length_greater_or_equal_destroy( - enum nb_event event, const struct lyd_node *dnode) + struct nb_cb_destroy_args *args) { return lib_prefix_list_entry_ipv4_prefix_length_greater_or_equal_destroy( - event, dnode); + args); } /* * XPath: /frr-filter:lib/prefix-list/entry/ipv6-prefix-length-lesser-or-equal */ static int lib_prefix_list_entry_ipv6_prefix_length_lesser_or_equal_modify( - enum nb_event event, const struct lyd_node *dnode, - union nb_resource *resource) + struct nb_cb_modify_args *args) { return lib_prefix_list_entry_ipv4_prefix_length_lesser_or_equal_modify( - event, dnode, resource); + args); } static int lib_prefix_list_entry_ipv6_prefix_length_lesser_or_equal_destroy( - enum nb_event event, const struct lyd_node *dnode) + struct nb_cb_destroy_args *args) { return lib_prefix_list_entry_ipv4_prefix_length_lesser_or_equal_destroy( - event, dnode); + args); } /* * XPath: /frr-filter:lib/prefix-list/entry/any */ -static int lib_prefix_list_entry_any_create(enum nb_event event, - const struct lyd_node *dnode, - union nb_resource *resource) +static int lib_prefix_list_entry_any_create(struct nb_cb_create_args *args) { struct prefix_list_entry *ple; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_get_entry(dnode, NULL, true); + ple = nb_running_get_entry(args->dnode, NULL, true); memset(&ple->prefix, 0, sizeof(ple->prefix)); ple->any = 1; return NB_OK; } -static int lib_prefix_list_entry_any_destroy(enum nb_event event, - const struct lyd_node *dnode) +static int lib_prefix_list_entry_any_destroy(struct nb_cb_destroy_args *args) { struct prefix_list_entry *ple; - if (event != NB_EV_APPLY) + if (args->event != NB_EV_APPLY) return NB_OK; - ple = nb_running_get_entry(dnode, NULL, true); + ple = nb_running_get_entry(args->dnode, NULL, true); memset(&ple->prefix, 0, sizeof(ple->prefix)); ple->any = 1; |
