mirror of
https://github.com/LineageOS/android_kernel_fxtec_sm6115.git
synced 2026-04-01 17:23:15 +00:00
UPSTREAM: ipv4: Support multipath hashing on inner IP pkts for GRE tunnel
Multipath hash policy value of 0 isn't distributing since the outer IP
dest and src aren't varied eventhough the inner ones are. Since the flow
is on the inner ones in the case of tunneled traffic, hashing on them is
desired.
This is done mainly for IP over GRE, hence only tested for that. But
anything else supported by flow dissection should work.
v2: Use skb_flow_dissect_flow_keys() directly so that other tunneling
can be supported through flow dissection (per Nikolay Aleksandrov).
v3: Remove accidental inclusion of ports in the hash keys and clarify
the documentation (Nikolay Alexandrov).
Change-Id: I0d364a630b27883285024c23c2e31b8325b272b4
Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com>
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
Nolen Johnson
parent
44c760b495
commit
3bbee950fa
@ -80,6 +80,7 @@ fib_multipath_hash_policy - INTEGER
|
||||
Possible values:
|
||||
0 - Layer 3
|
||||
1 - Layer 4
|
||||
2 - Layer 3 or inner Layer 3 if present
|
||||
|
||||
ip_forward_update_priority - INTEGER
|
||||
Whether to update SKB priority from "TOS" field in IPv4 header after it
|
||||
|
||||
@ -1971,6 +1971,23 @@ int fib_multipath_hash(const struct net *net, const struct flowi4 *fl4,
|
||||
hash_keys.basic.ip_proto = fl4->flowi4_proto;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
memset(&hash_keys, 0, sizeof(hash_keys));
|
||||
hash_keys.control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
|
||||
/* skb is currently provided only when forwarding */
|
||||
if (skb) {
|
||||
struct flow_keys keys;
|
||||
|
||||
skb_flow_dissect_flow_keys(skb, &keys, 0);
|
||||
|
||||
hash_keys.addrs.v4addrs.src = keys.addrs.v4addrs.src;
|
||||
hash_keys.addrs.v4addrs.dst = keys.addrs.v4addrs.dst;
|
||||
} else {
|
||||
/* Same as case 0 */
|
||||
hash_keys.addrs.v4addrs.src = fl4->saddr;
|
||||
hash_keys.addrs.v4addrs.dst = fl4->daddr;
|
||||
}
|
||||
break;
|
||||
}
|
||||
mhash = flow_hash_from_keys(&hash_keys);
|
||||
|
||||
|
||||
@ -974,7 +974,7 @@ static struct ctl_table ipv4_net_table[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_fib_multipath_hash_policy,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &one,
|
||||
.extra2 = &two,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user