@@ -35,7 +35,7 @@
struct hash *
hash_init(const uint32_t n_buckets, const uint32_t iv,
- uint32_t (*hash_function)(const void *key, uint32_t iv),
+ uint64_t (*hash_function)(const void *key, uint32_t iv),
bool (*compare_function)(const void *key1, const void *key2))
{
struct hash *h;
@@ -76,7 +76,7 @@
}
struct hash_element *
-hash_lookup_fast(struct hash *hash, struct hash_bucket *bucket, const void *key, uint32_t hv)
+hash_lookup_fast(struct hash *hash, struct hash_bucket *bucket, const void *key, uint64_t hv)
{
struct hash_element *he;
struct hash_element *prev = NULL;
@@ -104,7 +104,7 @@
}
bool
-hash_remove_fast(struct hash *hash, struct hash_bucket *bucket, const void *key, uint32_t hv)
+hash_remove_fast(struct hash *hash, struct hash_bucket *bucket, const void *key, uint64_t hv)
{
struct hash_element *he;
struct hash_element *prev = NULL;
@@ -136,7 +136,7 @@
bool
hash_add(struct hash *hash, const void *key, void *value, bool replace)
{
- uint32_t hv;
+ uint64_t hv;
struct hash_bucket *bucket;
struct hash_element *he;
bool ret = false;
@@ -412,7 +412,7 @@
c ^= (b >> 15); \
}
-uint32_t
+uint64_t
hash_func(const uint8_t *k, uint32_t length, uint32_t initval)
{
uint32_t a, b, c, len;
@@ -40,7 +40,7 @@
{
void *value;
const void *key;
- uint32_t hash_value;
+ uint64_t hash_value;
struct hash_element *next;
};
@@ -55,13 +55,13 @@
uint32_t n_elements;
uint32_t mask;
uint32_t iv;
- uint32_t (*hash_function)(const void *key, uint32_t iv);
+ uint64_t (*hash_function)(const void *key, uint32_t iv);
bool (*compare_function)(const void *key1, const void *key2); /* return true if equal */
struct hash_bucket *buckets;
};
struct hash *hash_init(const uint32_t n_buckets, const uint32_t iv,
- uint32_t (*hash_function)(const void *key, uint32_t iv),
+ uint64_t (*hash_function)(const void *key, uint32_t iv),
bool (*compare_function)(const void *key1, const void *key2));
void hash_free(struct hash *hash);
@@ -69,9 +69,9 @@
bool hash_add(struct hash *hash, const void *key, void *value, bool replace);
struct hash_element *hash_lookup_fast(struct hash *hash, struct hash_bucket *bucket,
- const void *key, uint32_t hv);
+ const void *key, uint64_t hv);
-bool hash_remove_fast(struct hash *hash, struct hash_bucket *bucket, const void *key, uint32_t hv);
+bool hash_remove_fast(struct hash *hash, struct hash_bucket *bucket, const void *key, uint64_t hv);
void hash_remove_by_value(struct hash *hash, void *value);
@@ -98,9 +98,9 @@
void hash_iterator_free(struct hash_iterator *hi);
-uint32_t hash_func(const uint8_t *k, uint32_t length, uint32_t initval);
+uint64_t hash_func(const uint8_t *k, uint32_t length, uint32_t initval);
-static inline uint32_t
+static inline uint64_t
hash_value(const struct hash *hash, const void *key)
{
return (*hash->hash_function)(key, hash->iv);
@@ -119,7 +119,7 @@
}
static inline struct hash_bucket *
-hash_bucket(struct hash *hash, uint32_t hv)
+hash_bucket(struct hash *hash, uint64_t hv)
{
return &hash->buckets[hv & hash->mask];
}
@@ -129,7 +129,7 @@
{
void *ret = NULL;
struct hash_element *he;
- uint32_t hv = hash_value(hash, key);
+ uint64_t hv = hash_value(hash, key);
struct hash_bucket *bucket = &hash->buckets[hv & hash->mask];
he = hash_lookup_fast(hash, bucket, key, hv);
@@ -143,7 +143,7 @@
/* NOTE: assumes that key is not a duplicate */
static inline void
-hash_add_fast(struct hash *hash, struct hash_bucket *bucket, const void *key, uint32_t hv,
+hash_add_fast(struct hash *hash, struct hash_bucket *bucket, const void *key, uint64_t hv,
void *value)
{
struct hash_element *he;
@@ -160,7 +160,7 @@
static inline bool
hash_remove(struct hash *hash, const void *key)
{
- uint32_t hv;
+ uint64_t hv;
struct hash_bucket *bucket;
bool ret;
@@ -354,7 +354,7 @@
* address type, number of bits in the network address,
* and the actual address.
*/
-uint32_t
+uint64_t
mroute_addr_hash_function(const void *key, uint32_t iv)
{
return hash_func(mroute_addr_hash_ptr((const struct mroute_addr *)key),
@@ -144,7 +144,7 @@
bool mroute_learnable_address(const struct mroute_addr *addr, struct gc_arena *gc);
-uint32_t mroute_addr_hash_function(const void *key, uint32_t iv);
+uint64_t mroute_addr_hash_function(const void *key, uint32_t iv);
bool mroute_addr_compare_function(const void *key1, const void *key2);
@@ -49,7 +49,7 @@
{
mi->real.proto = sock->info.proto;
struct hash_element *he;
- const uint32_t hv = hash_value(hash, &mi->real);
+ const uint64_t hv = hash_value(hash, &mi->real);
struct hash_bucket *bucket = hash_bucket(hash, hv);
multi_assign_peer_id(m, mi);
@@ -212,7 +212,7 @@
if (mroute_extract_openvpn_sockaddr(&real, &m->top.c2.from.dest, true) && m->top.c2.buf.len > 0)
{
struct hash_element *he;
- const uint32_t hv = hash_value(hash, &real);
+ const uint64_t hv = hash_value(hash, &real);
struct hash_bucket *bucket = hash_bucket(hash, hv);
uint8_t *ptr = BPTR(&m->top.c2.buf);
uint8_t op = ptr[0] >> P_OPCODE_SHIFT;
@@ -228,11 +228,11 @@
#ifdef ENABLE_MANAGEMENT
-static uint32_t
+static uint64_t
cid_hash_function(const void *key, uint32_t iv)
{
const unsigned long *k = (const unsigned long *)key;
- return (uint32_t)*k;
+ return (uint64_t)*k;
}
static bool
@@ -246,19 +246,19 @@
#endif
#ifdef ENABLE_ASYNC_PUSH
-static uint32_t
+static uint64_t
/*
* inotify watcher descriptors are used as hash value
*/
int_hash_function(const void *key, uint32_t iv)
{
- return (uint32_t)(uintptr_t)key;
+ return (uintptr_t)key;
}
static bool
int_compare_function(const void *key1, const void *key2)
{
- return (unsigned long)key1 == (unsigned long)key2;
+ return (uintptr_t)key1 == (uintptr_t)key2;
}
#endif
@@ -1011,7 +1011,7 @@
const unsigned int flags)
{
struct hash_element *he;
- const uint32_t hv = hash_value(m->vhash, addr);
+ const uint64_t hv = hash_value(m->vhash, addr);
struct hash_bucket *bucket = hash_bucket(m->vhash, hv);
struct multi_route *oldroute = NULL;
struct multi_instance *owner = NULL;
@@ -3094,7 +3094,7 @@
goto done;
}
- const uint32_t hv = hash_value(hash, &real);
+ const uint64_t hv = hash_value(hash, &real);
struct hash_bucket *bucket = hash_bucket(hash, hv);
/* make sure that we don't float to an address taken by another client */
@@ -4230,7 +4230,7 @@
multi_unlearn_addr(struct multi_context *m, struct multi_instance *mi, const struct mroute_addr *addr)
{
struct hash_element *he;
- const uint32_t hv = hash_value(m->vhash, addr);
+ const uint64_t hv = hash_value(m->vhash, addr);
struct hash_bucket *bucket = hash_bucket(m->vhash, hv);
struct multi_route *r = NULL;
@@ -124,7 +124,7 @@
};
-static uint32_t
+static uint64_t
word_hash_function(const void *key, uint32_t iv)
{
const char *str = (const char *)key;