From: Ahmed Abdelsalam <amsala...@gmail.com> Date: Tue, 24 Apr 2018 20:23:16 +0200
> ECMP (equal-cost multipath) hashes are typically computed on the packets' > 5-tuple(src IP, dst IP, src port, dst port, L4 proto). > > For encapsulated packets, the L4 data is not readily available and ECMP > hashing will often revert to (src IP, dst IP). This will lead to traffic > polarization on a single ECMP path, causing congestion and waste of network > capacity. > > In IPv6, the 20-bit flow label field is also used as part of the ECMP hash. > In the lack of L4 data, the hashing will be on (src IP, dst IP, flow > label). Having a non-zero flow label is thus important for proper traffic > load balancing when L4 data is unavailable (i.e., when packets are > encapsulated). > > Currently, the seg6_do_srh_encap() function extracts the original packet's > flow label and set it as the outer IPv6 flow label. There are two issues > with this behaviour: > > a) There is no guarantee that the inner flow label is set by the source. > b) If the original packet is not IPv6, the flow label will be set to > zero (e.g., IPv4 or L2 encap). > > This patch adds a function, named seg6_make_flowlabel(), that computes a > flow label from a given skb. It supports IPv6, IPv4 and L2 payloads, and > leverages the per namespace 'seg6_flowlabel" sysctl value. > > The currently support behaviours are as follows: > -1 set flowlabel to zero. > 0 copy flowlabel from Inner paceket in case of Inner IPv6 > (Set flowlabel to 0 in case IPv4/L2) > 1 Compute the flowlabel using seg6_make_flowlabel() > > This patch has been tested for IPv6, IPv4, and L2 traffic. > > Signed-off-by: Ahmed Abdelsalam <amsala...@gmail.com> Applied. Please submit a patch which adds appropriate documentation for this new sysctl to Documentation/networking/ip-sysctl.txt Thank you.