diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2016-05-12 18:11:12 +0200 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2016-05-12 18:11:12 +0200 |
commit | 776d6b2c05fe8b14e5ec357eca24fe59c549bfa4 (patch) | |
tree | e51624fc0984bf98d6c23b46e9c15e2dccf410ce /nest/rt-attr.c | |
parent | af678af0d5c9ef3d8afdc0789b33dd0c40b6d6e5 (diff) | |
parent | 54ac0beceedb9b36eb58dd8599ba903c668382f6 (diff) |
Merge remote-tracking branch 'origin/int-new' into int-new
Diffstat (limited to 'nest/rt-attr.c')
-rw-r--r-- | nest/rt-attr.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/nest/rt-attr.c b/nest/rt-attr.c index fb958f7e..edd9ebf5 100644 --- a/nest/rt-attr.c +++ b/nest/rt-attr.c @@ -946,8 +946,23 @@ rta_alloc_hash(void) static inline uint rta_hash(rta *a) { - return mem_hash(((void *)a) + offsetof(rta, src), sizeof(rta) - offsetof(rta, src)) ^ - mpnh_hash(a->nexthops) ^ ea_hash(a->eattrs); + mem_hash_t h; + mem_hash_init(&h); +#define MIX(f) mem_hash_mix(&h, &(rta->f), sizeof(rta->f)); + MIX(src); + MIX(hostentry); + MIX(iface); + MIX(gw); + MIX(from); + MIX(igp_metric); + MIX(source); + MIX(scope); + MIX(cast); + MIX(dest); + MIX(flags); + MIX(aflags); + + return mem_hash_value(&h) ^ mpnh_hash(a->nexthops) ^ ea_hash(a->eattrs); } static inline int |