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;
}
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;
}
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;
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;
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;
{
void *value;
const void *key;
- uint32_t hash_value;
+ uint64_t hash_value;
struct hash_element *next;
};
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);
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);
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);
}
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];
}
{
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);
/* 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;
static inline bool
hash_remove(struct hash *hash, const void *key)
{
- uint32_t hv;
+ uint64_t hv;
struct hash_bucket *bucket;
bool ret;
* 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),
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);
{
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);
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;
#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
#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
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;
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 */
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;
};
-static uint32_t
+static uint64_t
word_hash_function(const void *key, uint32_t iv)
{
const char *str = (const char *)key;