• Ahmed Abdelsalam's avatar
    ipv6: sr: extract the right key values for "seg6_make_flowlabel" · 6df93462
    Ahmed Abdelsalam authored
    The seg6_make_flowlabel() is used by seg6_do_srh_encap() to compute the
    flowlabel from a given skb. It relies on skb_get_hash() which eventually
    calls __skb_flow_dissect() to extract the flow_keys struct values from
    the skb.
    
    In case of IPv4 traffic, calling seg6_make_flowlabel() after skb_push(),
    skb_reset_network_header(), and skb_mac_header_rebuild() will results in
    flow_keys struct of all key values set to zero.
    
    This patch calls seg6_make_flowlabel() before resetting the headers of skb
    to get the right key values.
    
    Extracted Key values are based on the type inner packet as follows:
    1) IPv6 traffic: src_IP, dst_IP, L4 proto, and flowlabel of inner packet.
    2) IPv4 traffic: src_IP, dst_IP, L4 proto, src_port, and dst_port
    3) L2 traffic: depends on what kind of traffic carried into the L2
    frame. IPv6 and IPv4 traffic works as discussed 1) and 2)
    
    Here a hex_dump of struct flow_keys for IPv4 and IPv6 traffic
    10.100.1.100: 47302 > 30.0.0.2: 5001
    00000000: 14 00 02 00 00 00 00 00 08 00 11 00 00 00 00 00
    00000010: 00 00 00 00 00 00 00 00 13 89 b8 c6 1e 00 00 02
    00000020: 0a 64 01 64
    
    fc00:a1:a > b2::2
    00000000: 28 00 03 00 00 00 00 00 86 dd 11 00 99 f9 02 00
    00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 b2 00 00
    00000020: 00 00 00 00 00 00 00 00 00 00 00 02 fc 00 00 a1
    00000030: 00 00 00 00 00 00 00 00 00 00 00 0a
    Signed-off-by: default avatarAhmed Abdelsalam <amsalam20@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6df93462
seg6_iptunnel.c 11.5 KB