diff options
author | Nikolay Aleksandrov <nikolay@cumulusnetworks.com> | 2017-03-16 15:28:00 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-03-21 15:27:19 -0700 |
commit | bf4e0a3db97eb882368fd82980b3b1fa0b5b9778 (patch) | |
tree | f1e5a3fd90d22fc603bc5a6780fc1c716684ad94 /include/net/route.h | |
parent | 88997e4208aea117627898e5f6f9801cf3cd42d2 (diff) | |
download | op-kernel-dev-bf4e0a3db97eb882368fd82980b3b1fa0b5b9778.zip op-kernel-dev-bf4e0a3db97eb882368fd82980b3b1fa0b5b9778.tar.gz |
net: ipv4: add support for ECMP hash policy choice
This patch adds support for ECMP hash policy choice via a new sysctl
called fib_multipath_hash_policy and also adds support for L4 hashes.
The current values for fib_multipath_hash_policy are:
0 - layer 3 (default)
1 - layer 4
If there's an skb hash already set and it matches the chosen policy then it
will be used instead of being calculated (currently only for L4).
In L3 mode we always calculate the hash due to the ICMP error special
case, the flow dissector's field consistentification should handle the
address order thus we can remove the address reversals.
If the skb is provided we always use it for the hash calculation,
otherwise we fallback to fl4, that is if skb is NULL fl4 has to be set.
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/route.h')
-rw-r--r-- | include/net/route.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/include/net/route.h b/include/net/route.h index c0874c8..2cc0e14 100644 --- a/include/net/route.h +++ b/include/net/route.h @@ -113,13 +113,13 @@ struct in_device; int ip_rt_init(void); void rt_cache_flush(struct net *net); void rt_flush_dev(struct net_device *dev); -struct rtable *__ip_route_output_key_hash(struct net *, struct flowi4 *flp, - int mp_hash); +struct rtable *__ip_route_output_key_hash(struct net *net, struct flowi4 *flp, + const struct sk_buff *skb); static inline struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *flp) { - return __ip_route_output_key_hash(net, flp, -1); + return __ip_route_output_key_hash(net, flp, NULL); } struct rtable *ip_route_output_flow(struct net *, struct flowi4 *flp, |