diff options
author | Neale Ranns <neale@graphiant.com> | 2021-01-22 16:12:38 +0000 |
---|---|---|
committer | Ole Tr�an <otroan@employees.org> | 2021-01-28 09:47:56 +0000 |
commit | 3d5f08a825a978cd6853989a5df8c9b9811e7fb8 (patch) | |
tree | c12651cb21792551accced579d7949e3e1ae4a56 /src/vnet/ip/ip6_inlines.h | |
parent | 86c7ff6a4c014b65af0d309173e89c2fe8377614 (diff) |
ip: Router ID included in flow hash
Type: feature
A device/router needs to have a unique ID which is included in the flow
has so that flows are not polarised through the network, i.e. each deice
in the network chooses the same nth link for the same flow.
Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: I963e03674adbb085902b4084fdc4886b88f5734c
Diffstat (limited to 'src/vnet/ip/ip6_inlines.h')
-rw-r--r-- | src/vnet/ip/ip6_inlines.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/vnet/ip/ip6_inlines.h b/src/vnet/ip/ip6_inlines.h index 8376377600a..2a4bb70573b 100644 --- a/src/vnet/ip/ip6_inlines.h +++ b/src/vnet/ip/ip6_inlines.h @@ -106,10 +106,13 @@ ip6_compute_flow_hash (const ip6_header_t * ip, } b ^= (flow_hash_config & IP_FLOW_HASH_PROTO) ? protocol : 0; - c = (flow_hash_config & IP_FLOW_HASH_REVERSE_SRC_DST) ? - ((t1 << 16) | t2) : ((t2 << 16) | t1); - t1 = ip->ip_version_traffic_class_and_flow_label & IP6_PACKET_FL_MASK; - c ^= (flow_hash_config & IP_FLOW_HASH_FL) ? (t1 << 32) : 0; + c = ((flow_hash_config & IP_FLOW_HASH_REVERSE_SRC_DST) ? ((t1 << 16) | t2) : + ((t2 << 16) | t1)); + t1 = ((u64) ip_flow_hash_router_id << 32); + t1 |= + ((flow_hash_config & IP_FLOW_HASH_FL) ? ip6_flow_label_network_order (ip) : + 0); + c ^= t1; hash_mix64 (a, b, c); return (u32) c; |