diff options
author | Florian Westphal <fw@strlen.de> | 2020-02-24 01:03:21 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2020-02-24 10:58:04 +0100 |
commit | 6f0d90ec72b78f49729fc88a6a177c89a57d779e (patch) | |
tree | 6f9d285d486b2c49b2efabbfa2dba2ff924979e5 /src | |
parent | 1da9f9887cf1c35c190a703569e99e47e1cc4491 (diff) |
netlink: handle concatenations on set elements mappings
We can already handle concatenated keys, this extends concat
coverage to the data type as well, i.e. this can be dissected:
type ipv4_addr : ipv4_addr . inet_service
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/netlink.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/netlink.c b/src/netlink.c index e4128963..0c6b8c58 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -169,6 +169,9 @@ static struct nftnl_set_elem *alloc_nftnl_setelem(const struct expr *set, nftnl_set_elem_set(nlse, NFTNL_SET_ELEM_CHAIN, nld.chain, strlen(nld.chain)); break; + case EXPR_CONCAT: + assert(nld.len > 0); + /* fallthrough */ case EXPR_VALUE: nftnl_set_elem_set(nlse, NFTNL_SET_ELEM_DATA, nld.value, nld.len); @@ -1005,6 +1008,10 @@ key_end: NFT_REG_VERDICT : NFT_REG_1); datatype_set(data, set->data->dtype); data->byteorder = set->data->byteorder; + + if (set->data->dtype->subtypes) + data = netlink_parse_concat_elem(set->data->dtype, data); + if (data->byteorder == BYTEORDER_HOST_ENDIAN) mpz_switch_byteorder(data->value, data->len / BITS_PER_BYTE); |