From 6f0d90ec72b78f49729fc88a6a177c89a57d779e Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Mon, 24 Feb 2020 01:03:21 +0100 Subject: 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 Signed-off-by: Pablo Neira Ayuso --- src/netlink.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/netlink.c') 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); -- cgit v1.2.3