• P
    bpf: handle GSO in bpf_lwt_push_encap · ca78801a
    Peter Oskolkov 提交于
    This patch adds handling of GSO packets in bpf_lwt_push_ip_encap()
    (called from bpf_lwt_push_encap):
    
    * IPIP, GRE, and UDP encapsulation types are deduced by looking
      into iphdr->protocol or ipv6hdr->next_header;
    * SCTP GSO packets are not supported (as bpf_skb_proto_4_to_6
      and similar do);
    * UDP_L4 GSO packets are also not supported (although they are
      not blocked in bpf_skb_proto_4_to_6 and similar), as
      skb_decrease_gso_size() will break it;
    * SKB_GSO_DODGY bit is set.
    
    Note: it may be possible to support SCTP and UDP_L4 gso packets;
          but as these cases seem to be not well handled by other
          tunneling/encapping code paths, the solution should
          be generic enough to apply to all tunneling/encapping code.
    
    v8 changes:
       - make sure that if GRE or UDP encap is detected, there is
         enough of pushed bytes to cover both IP[v6] + GRE|UDP headers;
       - do not reject double-encapped packets;
       - whitelist TCP GSO packets rather than block SCTP GSO and
         UDP GSO.
    Signed-off-by: NPeter Oskolkov <posk@google.com>
    Signed-off-by: NAlexei Starovoitov <ast@kernel.org>
    ca78801a
lwt_bpf.c 12.0 KB