netfilter: nft_tunnel: add support for geneve opts
authorXin Long <lucien.xin@gmail.com>
Mon, 10 Feb 2020 05:41:22 +0000 (13:41 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Sun, 15 Mar 2020 14:20:16 +0000 (15:20 +0100)
commit925d844696d9287f841d6b3e0ed62a35fb175970
tree0e372db696e609b8d7ad6fae7715be01c5556984
parent68983a354a655c35d3fb204489d383a2a051fda7
netfilter: nft_tunnel: add support for geneve opts

Like vxlan and erspan opts, geneve opts should also be supported in
nft_tunnel. The difference is geneve RFC (draft-ietf-nvo3-geneve-14)
allows a geneve packet to carry multiple geneve opts. So with this
patch, nftables/libnftnl would do:

  # nft add table ip filter
  # nft add chain ip filter input { type filter hook input priority 0 \; }
  # nft add tunnel filter geneve_02 { type geneve\; id 2\; \
    ip saddr 192.168.1.1\; ip daddr 192.168.1.2\; \
    sport 9000\; dport 9001\; dscp 1234\; ttl 64\; flags 1\; \
    opts \"1:1:34567890,2:2:12121212,3:3:1212121234567890\"\; }
  # nft list tunnels table filter
    table ip filter {
     tunnel geneve_02 {
     id 2
     ip saddr 192.168.1.1
     ip daddr 192.168.1.2
     sport 9000
     dport 9001
     tos 18
     ttl 64
     flags 1
     geneve opts 1:1:34567890,2:2:12121212,3:3:1212121234567890
     }
    }

v1->v2:
  - no changes, just post it separately.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/uapi/linux/netfilter/nf_tables.h
net/netfilter/nft_tunnel.c