From: Phil Sutter Date: Fri, 16 May 2025 17:17:00 +0000 (+0200) Subject: netlink: Pass netlink_ctx to netlink_delinearize_setelem() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6296f09b8b8ecb6d46cfcd90fd955a39bd86c6c9;p=thirdparty%2Fnftables.git netlink: Pass netlink_ctx to netlink_delinearize_setelem() Prepare for calling netlink_io_error() which needs the context pointer. Trade this in for the cache pointer since no caller uses a special one. No functional change intended. Signed-off-by: Phil Sutter Reviewed-by: Pablo Neira Ayuso --- diff --git a/include/netlink.h b/include/netlink.h index e9667a24..c7da6f9e 100644 --- a/include/netlink.h +++ b/include/netlink.h @@ -172,9 +172,9 @@ extern int netlink_list_setelems(struct netlink_ctx *ctx, extern int netlink_get_setelem(struct netlink_ctx *ctx, const struct handle *h, const struct location *loc, struct set *cache_set, struct set *set, struct expr *init, bool reset); -extern int netlink_delinearize_setelem(struct nftnl_set_elem *nlse, - struct set *set, - struct nft_cache *cache); +extern int netlink_delinearize_setelem(struct netlink_ctx *ctx, + struct nftnl_set_elem *nlse, + struct set *set); extern int netlink_list_objs(struct netlink_ctx *ctx, const struct handle *h); extern struct obj *netlink_delinearize_obj(struct netlink_ctx *ctx, diff --git a/src/monitor.c b/src/monitor.c index d70bf295..4ceff948 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -469,8 +469,8 @@ static int netlink_events_setelem_cb(const struct nlmsghdr *nlh, int type, nftnl_set_elems_iter_destroy(nlsei); goto out; } - if (netlink_delinearize_setelem(nlse, dummyset, - &monh->ctx->nft->cache) < 0) { + if (netlink_delinearize_setelem(monh->ctx, + nlse, dummyset) < 0) { set_free(dummyset); nftnl_set_elems_iter_destroy(nlsei); goto out; @@ -771,8 +771,7 @@ static void netlink_events_cache_addsetelem(struct netlink_mon_handler *monh, nlse = nftnl_set_elems_iter_next(nlsei); while (nlse != NULL) { - if (netlink_delinearize_setelem(nlse, set, - &monh->ctx->nft->cache) < 0) { + if (netlink_delinearize_setelem(monh->ctx, nlse, set) < 0) { fprintf(stderr, "W: Unable to cache set_elem. " "Delinearize failed.\n"); diff --git a/src/netlink.c b/src/netlink.c index 52010c74..0154728b 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -1412,12 +1412,13 @@ static void set_elem_parse_udata(struct nftnl_set_elem *nlse, } } -int netlink_delinearize_setelem(struct nftnl_set_elem *nlse, - struct set *set, struct nft_cache *cache) +int netlink_delinearize_setelem(struct netlink_ctx *ctx, + struct nftnl_set_elem *nlse, + struct set *set) { struct setelem_parse_ctx setelem_parse_ctx = { .set = set, - .cache = cache, + .cache = &ctx->nft->cache, }; struct nft_data_delinearize nld; struct expr *expr, *key, *data; @@ -1475,7 +1476,7 @@ key_end: struct stmt *stmt; nle = nftnl_set_elem_get(nlse, NFTNL_SET_ELEM_EXPR, NULL); - stmt = netlink_parse_set_expr(set, cache, nle); + stmt = netlink_parse_set_expr(set, &ctx->nft->cache, nle); list_add_tail(&stmt->list, &setelem_parse_ctx.stmt_list); } else if (nftnl_set_elem_is_set(nlse, NFTNL_SET_ELEM_EXPRESSIONS)) { nftnl_set_elem_expr_foreach(nlse, set_elem_parse_expressions, @@ -1552,7 +1553,7 @@ out: static int list_setelem_cb(struct nftnl_set_elem *nlse, void *arg) { struct netlink_ctx *ctx = arg; - return netlink_delinearize_setelem(nlse, ctx->set, &ctx->nft->cache); + return netlink_delinearize_setelem(ctx, nlse, ctx->set); } static int list_setelem_debug_cb(struct nftnl_set_elem *nlse, void *arg)