summaryrefslogtreecommitdiffstats
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
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>
-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));