summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2022-09-27 23:15:37 +0200
committerPhil Sutter <phil@nwl.cc>2022-09-28 14:21:13 +0200
commit8dc22798bf813ce92aaac58a6fe8749fe3fc18dc (patch)
treefd910c937bf58f33c4c0e2136c08096e6cafb882
parentdb420e268735e8499ca16146234ace79a9f1128a (diff)
nft-shared: Introduce __get_cmp_data()
This is an inner function to get_cmp_data() returning the op value as-is for caller examination. Signed-off-by: Phil Sutter <phil@nwl.cc>
-rw-r--r--iptables/nft-shared.c17
-rw-r--r--iptables/nft-shared.h1
2 files changed, 11 insertions, 7 deletions
diff --git a/iptables/nft-shared.c b/iptables/nft-shared.c
index 555f74f0..f8de2b71 100644
--- a/iptables/nft-shared.c
+++ b/iptables/nft-shared.c
@@ -471,17 +471,20 @@ static void nft_parse_match(struct nft_xt_ctx *ctx, struct nftnl_expr *e)
ctx->h->ops->parse_match(match, ctx->cs);
}
-void get_cmp_data(struct nftnl_expr *e, void *data, size_t dlen, bool *inv)
+void __get_cmp_data(struct nftnl_expr *e, void *data, size_t dlen, uint8_t *op)
{
uint32_t len;
- uint8_t op;
memcpy(data, nftnl_expr_get(e, NFTNL_EXPR_CMP_DATA, &len), dlen);
- op = nftnl_expr_get_u32(e, NFTNL_EXPR_CMP_OP);
- if (op == NFT_CMP_NEQ)
- *inv = true;
- else
- *inv = false;
+ *op = nftnl_expr_get_u32(e, NFTNL_EXPR_CMP_OP);
+}
+
+void get_cmp_data(struct nftnl_expr *e, void *data, size_t dlen, bool *inv)
+{
+ uint8_t op;
+
+ __get_cmp_data(e, data, dlen, &op);
+ *inv = (op == NFT_CMP_NEQ);
}
static void nft_meta_set_to_target(struct nft_xt_ctx *ctx,
diff --git a/iptables/nft-shared.h b/iptables/nft-shared.h
index 42170638..8fcedcdd 100644
--- a/iptables/nft-shared.h
+++ b/iptables/nft-shared.h
@@ -217,6 +217,7 @@ bool is_same_interfaces(const char *a_iniface, const char *a_outiface,
int parse_meta(struct nft_xt_ctx *ctx, struct nftnl_expr *e, uint8_t key,
char *iniface, unsigned char *iniface_mask, char *outiface,
unsigned char *outiface_mask, uint8_t *invflags);
+void __get_cmp_data(struct nftnl_expr *e, void *data, size_t dlen, uint8_t *op);
void get_cmp_data(struct nftnl_expr *e, void *data, size_t dlen, bool *inv);
void nft_rule_to_iptables_command_state(struct nft_handle *h,
const struct nftnl_rule *r,