summaryrefslogtreecommitdiffstats
path: root/src/netlink.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2015-08-14 03:16:32 +0200
committerFlorian Westphal <fw@strlen.de>2015-09-18 00:06:03 +0200
commit7c587d4b4d05a24cedcb2b0b339c18d79b9d4eb2 (patch)
tree369d3541e6cc7cd2fe41687b31ee521890f561d8 /src/netlink.c
parentc3f0501b41e653e980e60d14eb88ac9dfc3afc61 (diff)
src: netlink: don't truncate set key lengths
If key is e.g. 12 bits, pretend its 16 instead of 8. This is needed to make sets work with header fields with size not divisible by 8. Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'src/netlink.c')
-rw-r--r--src/netlink.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/netlink.c b/src/netlink.c
index ad1f16df..4d1e977f 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -1106,7 +1106,7 @@ static int netlink_add_set_compat(struct netlink_ctx *ctx,
nftnl_set_set_u32(nls, NFTNL_SET_KEY_TYPE,
dtype_map_to_kernel(set->keytype));
nftnl_set_set_u32(nls, NFTNL_SET_KEY_LEN,
- set->keylen / BITS_PER_BYTE);
+ div_round_up(set->keylen, BITS_PER_BYTE));
if (set->flags & NFT_SET_MAP) {
nftnl_set_set_u32(nls, NFTNL_SET_DATA_TYPE,
dtype_map_to_kernel(set->datatype));
@@ -1138,7 +1138,7 @@ static int netlink_add_set_batch(struct netlink_ctx *ctx,
nftnl_set_set_u32(nls, NFTNL_SET_KEY_TYPE,
dtype_map_to_kernel(set->keytype));
nftnl_set_set_u32(nls, NFTNL_SET_KEY_LEN,
- set->keylen / BITS_PER_BYTE);
+ div_round_up(set->keylen, BITS_PER_BYTE));
if (set->flags & NFT_SET_MAP) {
nftnl_set_set_u32(nls, NFTNL_SET_DATA_TYPE,
dtype_map_to_kernel(set->datatype));