• Pablo Neira Ayuso's avatar
    netfilter: nft_inner: support for inner tunnel header matching · 3a07327d
    Pablo Neira Ayuso authored
    This new expression allows you to match on the inner headers that are
    encapsulated by any of the existing tunneling protocols.
    
    This expression parses the inner packet to set the link, network and
    transport offsets, so the existing expressions (with a few updates) can
    be reused to match on the inner headers.
    
    The inner expression supports for different tunnel combinations such as:
    
    - ethernet frame over IPv4/IPv6 packet, eg. VxLAN.
    - IPv4/IPv6 packet over IPv4/IPv6 packet, eg. IPIP.
    - IPv4/IPv6 packet over IPv4/IPv6 + transport header, eg. GRE.
    - transport header (ESP or SCTP) over transport header (usually UDP)
    
    The following fields are used to describe the tunnel protocol:
    
    - flags, which describe how to parse the inner headers:
    
      NFT_PAYLOAD_CTX_INNER_TUN, the tunnel provides its own header.
      NFT_PAYLOAD_CTX_INNER_ETHER, the ethernet frame is available as inner header.
      NFT_PAYLOAD_CTX_INNER_NH, the network header is available as inner header.
      NFT_PAYLOAD_CTX_INNER_TH, the transport header is available as inner header.
    
    For example, VxLAN sets on all of these flags. While GRE only sets on
    NFT_PAYLOAD_CTX_INNER_NH and NFT_PAYLOAD_CTX_INNER_TH. Then, ESP over
    UDP only sets on NFT_PAYLOAD_CTX_INNER_TH.
    
    The tunnel description is composed of the following attributes:
    
    - header size: in case the tunnel comes with its own header, eg. VxLAN.
    
    - type: this provides a hint to userspace on how to delinearize the rule.
      This is useful for VxLAN and Geneve since they run over UDP, since
      transport does not provide a hint. This is also useful in case hardware
      offload is ever supported. The type is not currently interpreted by the
      kernel.
    
    - expression: currently only payload supported. Follow up patch adds
      also inner meta support which is required by autogenerated
      dependencies. The exthdr expression should be supported too
      at some point. There is a new inner_ops operation that needs to be
      set on to allow to use an existing expression from the inner expression.
    
    This patch adds a new NFT_PAYLOAD_TUN_HEADER base which allows to match
    on the tunnel header fields, eg. vxlan vni.
    
    The payload expression is embedded into nft_inner private area and this
    private data area is passed to the payload inner eval function via
    direct call.
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    3a07327d
Makefile 9.4 KB