• Daniel Borkmann's avatar
    netkit: Fix pkt_type override upon netkit pass verdict · 3998d184
    Daniel Borkmann authored
    When running Cilium connectivity test suite with netkit in L2 mode, we
    found that compared to tcx a few tests were failing which pushed traffic
    into an L7 proxy sitting in host namespace. The problem in particular is
    around the invocation of eth_type_trans() in netkit.
    
    In case of tcx, this is run before the tcx ingress is triggered inside
    host namespace and thus if the BPF program uses the bpf_skb_change_type()
    helper the newly set type is retained. However, in case of netkit, the
    late eth_type_trans() invocation overrides the earlier decision from the
    BPF program which eventually leads to the test failure.
    
    Instead of eth_type_trans(), split out the relevant parts, meaning, reset
    of mac header and call to eth_skb_pkt_type() before the BPF program is run
    in order to have the same behavior as with tcx, and refactor a small helper
    called eth_skb_pull_mac() which is run in case it's passed up the stack
    where the mac header must be pulled. With this all ...
    3998d184