• Guillaume Nault's avatar
    sit: allow redirecting ip6ip, ipip and mplsip packets to eth devices · 730eed27
    Guillaume Nault authored
    Even though sit transports L3 data (IPv6, IPv4 or MPLS) packets, it
    needs to reset the mac_header pointer, so that other parts of the stack
    don't mistakenly access the outer header after the packet has been
    decapsulated. There are two rx handlers to modify: ipip6_rcv() for the
    ip6ip mode and sit_tunnel_rcv() which is used to re-implement the ipip
    and mplsip modes of ipip.ko.
    
    This allows to push an Ethernet header to sit packets and redirect
    them to an Ethernet device:
    
      $ tc filter add dev sit0 ingress matchall          \
          action vlan push_eth dst_mac 00:00:5e:00:53:01 \
                               src_mac 00:00:5e:00:53:00 \
          action mirred egress redirect dev eth0
    
    Without this patch, push_eth refuses to add an ethernet header because
    the skb appears to already have a MAC header.
    Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    730eed27
sit.c 47.1 KB