From: Phil Sutter Date: Fri, 16 May 2025 17:17:00 +0000 (+0200) Subject: netlink: Pass netlink_ctx to netlink_delinearize_setelem() X-Git-Tag: v1.0.6.1~57 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=70d70685e9aad87770a07e0d4d175b155f9bb0a4;p=thirdparty%2Fnftables.git netlink: Pass netlink_ctx to netlink_delinearize_setelem() commit 6296f09b8b8ecb6d46cfcd90fd955a39bd86c6c9 upstream. 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 Signed-off-by: Pablo Neira Ayuso --- diff --git a/include/netlink.h b/include/netlink.h index 0c053a32..27779634 100644 --- a/include/netlink.h +++ b/include/netlink.h @@ -162,9 +162,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); -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 int netlink_reset_objs(struct netlink_ctx *ctx, const struct cmd *cmd, diff --git a/src/monitor.c b/src/monitor.c index 46a2333f..d5b8ac83 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -453,8 +453,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; @@ -711,8 +711,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 58efb6c2..ea83ab81 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -1401,12 +1401,13 @@ static void set_elem_parse_udata(struct nftnl_set_elem *nlse, nftnl_udata_get_u32(ud[NFTNL_UDATA_SET_ELEM_FLAGS]); } -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; @@ -1457,7 +1458,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, @@ -1534,7 +1535,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)