summaryrefslogtreecommitdiff
path: root/nest/rt-attr.c
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2016-05-12 18:11:12 +0200
committerOndrej Zajicek (work) <santiago@crfreenet.org>2016-05-12 18:11:12 +0200
commit776d6b2c05fe8b14e5ec357eca24fe59c549bfa4 (patch)
treee51624fc0984bf98d6c23b46e9c15e2dccf410ce /nest/rt-attr.c
parentaf678af0d5c9ef3d8afdc0789b33dd0c40b6d6e5 (diff)
parent54ac0beceedb9b36eb58dd8599ba903c668382f6 (diff)
Merge remote-tracking branch 'origin/int-new' into int-new
Diffstat (limited to 'nest/rt-attr.c')
-rw-r--r--nest/rt-attr.c19
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