• Guillaume Nault's avatar
    gre: let mac_header point to outer header only when necessary · aab1e898
    Guillaume Nault authored
    Commit e271c7b4 ("gre: do not keep the GRE header around in collect
    medata mode") did reset the mac_header for the collect_md case. Let's
    extend this behaviour to classical gre devices as well.
    
    ipgre_header_parse() seems to be the only case that requires mac_header
    to point to the outer header. We can detect this case accurately by
    checking ->header_ops. For all other cases, we can reset mac_header.
    
    This allows to push an Ethernet header to ipgre packets and redirect
    them to an Ethernet device:
    
      $ tc filter add dev gre0 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
    
    Before this patch, this worked only for collect_md gre devices.
    Now this works for regular gre devices as well. Only the special case
    of gre devices that use ipgre_header_ops isn't supported.
    Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    aab1e898
ip_gre.c 45.6 KB