Commit 49f7b33e authored by Patrick McHardy's avatar Patrick McHardy Committed by Pablo Neira Ayuso

rhashtable: provide len to obj_hashfn

nftables sets will be converted to use so called setextensions, moving
the key to a non-fixed position. To hash it, the obj_hashfn must be used,
however it so far doesn't receive the length parameter.

Pass the key length to obj_hashfn() and convert existing users.
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 14d14a5d
...@@ -88,7 +88,7 @@ struct rhashtable_compare_arg { ...@@ -88,7 +88,7 @@ struct rhashtable_compare_arg {
}; };
typedef u32 (*rht_hashfn_t)(const void *data, u32 len, u32 seed); typedef u32 (*rht_hashfn_t)(const void *data, u32 len, u32 seed);
typedef u32 (*rht_obj_hashfn_t)(const void *data, u32 seed); typedef u32 (*rht_obj_hashfn_t)(const void *data, u32 len, u32 seed);
typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *arg, typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *arg,
const void *obj); const void *obj);
...@@ -242,7 +242,9 @@ static inline unsigned int rht_head_hashfn( ...@@ -242,7 +242,9 @@ static inline unsigned int rht_head_hashfn(
const char *ptr = rht_obj(ht, he); const char *ptr = rht_obj(ht, he);
return likely(params.obj_hashfn) ? return likely(params.obj_hashfn) ?
rht_bucket_index(tbl, params.obj_hashfn(ptr, tbl->hash_rnd)) : rht_bucket_index(tbl, params.obj_hashfn(ptr, params.key_len ?:
ht->p.key_len,
tbl->hash_rnd)) :
rht_key_hashfn(ht, tbl, ptr + params.key_offset, params); rht_key_hashfn(ht, tbl, ptr + params.key_offset, params);
} }
......
...@@ -691,7 +691,7 @@ static u32 rhashtable_jhash2(const void *key, u32 length, u32 seed) ...@@ -691,7 +691,7 @@ static u32 rhashtable_jhash2(const void *key, u32 length, u32 seed)
* struct rhash_head node; * struct rhash_head node;
* }; * };
* *
* u32 my_hash_fn(const void *data, u32 seed) * u32 my_hash_fn(const void *data, u32 len, u32 seed)
* { * {
* struct test_obj *obj = data; * struct test_obj *obj = data;
* *
......
...@@ -3127,7 +3127,7 @@ static struct pernet_operations __net_initdata netlink_net_ops = { ...@@ -3127,7 +3127,7 @@ static struct pernet_operations __net_initdata netlink_net_ops = {
.exit = netlink_net_exit, .exit = netlink_net_exit,
}; };
static inline u32 netlink_hash(const void *data, u32 seed) static inline u32 netlink_hash(const void *data, u32 len, u32 seed)
{ {
const struct netlink_sock *nlk = data; const struct netlink_sock *nlk = data;
struct netlink_compare_arg arg; struct netlink_compare_arg arg;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment