diff options
author | Giuseppe Longo <giuseppelng@gmail.com> | 2014-08-22 11:16:29 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-08-24 16:02:47 +0200 |
commit | 1cc84d47766ad74be8609477d3496544848b75b1 (patch) | |
tree | ebdc7348c4321e9e19ddca78d5dce658d8715a09 /iptables/nft-arp.c | |
parent | d579c3cba69ec958ca93216a77f15acfa1487e09 (diff) |
nft: add nft_xt_ctx struct
This patch provides the context used to transfer
information between different nft_parse_* function calls.
Signed-off-by: Giuseppe Longo <giuseppelng@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'iptables/nft-arp.c')
-rw-r--r-- | iptables/nft-arp.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/iptables/nft-arp.c b/iptables/nft-arp.c index 6dcc6ee6..902d1d2b 100644 --- a/iptables/nft-arp.c +++ b/iptables/nft-arp.c @@ -364,26 +364,31 @@ void nft_rule_to_arpt_entry(struct nft_rule *r, struct arpt_entry *fw) struct nft_rule_expr_iter *iter; struct nft_rule_expr *expr; int family = nft_rule_attr_get_u32(r, NFT_RULE_ATTR_FAMILY); + struct nft_xt_ctx ctx = { + .state.fw = fw, + .family = family, + }; iter = nft_rule_expr_iter_create(r); if (iter == NULL) return; + ctx.iter = iter; expr = nft_rule_expr_iter_next(iter); while (expr != NULL) { const char *name = nft_rule_expr_get_str(expr, NFT_RULE_EXPR_ATTR_NAME); if (strcmp(name, "counter") == 0) - nft_parse_counter(expr, iter, &fw->counters); + nft_parse_counter(expr, &ctx.state.fw->counters); else if (strcmp(name, "payload") == 0) - nft_parse_payload(expr, iter, family, fw); + nft_parse_payload(&ctx, expr); else if (strcmp(name, "meta") == 0) - nft_parse_meta(expr, iter, family, fw); + nft_parse_meta(&ctx, expr); else if (strcmp(name, "immediate") == 0) - nft_parse_immediate(expr, iter, family, fw); + nft_parse_immediate(&ctx, expr); else if (strcmp(name, "target") == 0) - nft_parse_target(expr, iter, family, fw); + nft_parse_target(&ctx, expr); expr = nft_rule_expr_iter_next(iter); } |