Skip to content

Commit af308b9

Browse files
committed
netfilter: nf_tables: add tunnel support
This patch implements the tunnel object type that can be used to configure tunnels via metadata template through the existing lightweight API from the ingress path. Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 033eab5 commit af308b9

File tree

5 files changed

+534
-1
lines changed

5 files changed

+534
-1
lines changed

include/uapi/linux/netfilter/nf_tables.h

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1416,7 +1416,8 @@ enum nft_ct_helper_attributes {
14161416
#define NFT_OBJECT_CT_HELPER 3
14171417
#define NFT_OBJECT_LIMIT 4
14181418
#define NFT_OBJECT_CONNLIMIT 5
1419-
#define __NFT_OBJECT_MAX 6
1419+
#define NFT_OBJECT_TUNNEL 6
1420+
#define __NFT_OBJECT_MAX 7
14201421
#define NFT_OBJECT_MAX (__NFT_OBJECT_MAX - 1)
14211422

14221423
/**
@@ -1580,4 +1581,70 @@ enum nft_ng_types {
15801581
};
15811582
#define NFT_NG_MAX (__NFT_NG_MAX - 1)
15821583

1584+
enum nft_tunnel_key_ip_attributes {
1585+
NFTA_TUNNEL_KEY_IP_UNSPEC,
1586+
NFTA_TUNNEL_KEY_IP_SRC,
1587+
NFTA_TUNNEL_KEY_IP_DST,
1588+
__NFTA_TUNNEL_KEY_IP_MAX
1589+
};
1590+
#define NFTA_TUNNEL_KEY_IP_MAX (__NFTA_TUNNEL_KEY_IP_MAX - 1)
1591+
1592+
enum nft_tunnel_ip6_attributes {
1593+
NFTA_TUNNEL_KEY_IP6_UNSPEC,
1594+
NFTA_TUNNEL_KEY_IP6_SRC,
1595+
NFTA_TUNNEL_KEY_IP6_DST,
1596+
NFTA_TUNNEL_KEY_IP6_FLOWLABEL,
1597+
__NFTA_TUNNEL_KEY_IP6_MAX
1598+
};
1599+
#define NFTA_TUNNEL_KEY_IP6_MAX (__NFTA_TUNNEL_KEY_IP6_MAX - 1)
1600+
1601+
enum nft_tunnel_opts_attributes {
1602+
NFTA_TUNNEL_KEY_OPTS_UNSPEC,
1603+
NFTA_TUNNEL_KEY_OPTS_VXLAN,
1604+
NFTA_TUNNEL_KEY_OPTS_ERSPAN,
1605+
__NFTA_TUNNEL_KEY_OPTS_MAX
1606+
};
1607+
#define NFTA_TUNNEL_KEY_OPTS_MAX (__NFTA_TUNNEL_KEY_OPTS_MAX - 1)
1608+
1609+
enum nft_tunnel_opts_vxlan_attributes {
1610+
NFTA_TUNNEL_KEY_VXLAN_UNSPEC,
1611+
NFTA_TUNNEL_KEY_VXLAN_GBP,
1612+
__NFTA_TUNNEL_KEY_VXLAN_MAX
1613+
};
1614+
#define NFTA_TUNNEL_KEY_VXLAN_MAX (__NFTA_TUNNEL_KEY_VXLAN_MAX - 1)
1615+
1616+
enum nft_tunnel_opts_erspan_attributes {
1617+
NFTA_TUNNEL_KEY_ERSPAN_UNSPEC,
1618+
NFTA_TUNNEL_KEY_ERSPAN_VERSION,
1619+
NFTA_TUNNEL_KEY_ERSPAN_V1_INDEX,
1620+
NFTA_TUNNEL_KEY_ERSPAN_V2_HWID,
1621+
NFTA_TUNNEL_KEY_ERSPAN_V2_DIR,
1622+
__NFTA_TUNNEL_KEY_ERSPAN_MAX
1623+
};
1624+
#define NFTA_TUNNEL_KEY_ERSPAN_MAX (__NFTA_TUNNEL_KEY_ERSPAN_MAX - 1)
1625+
1626+
enum nft_tunnel_flags {
1627+
NFT_TUNNEL_F_ZERO_CSUM_TX = (1 << 0),
1628+
NFT_TUNNEL_F_DONT_FRAGMENT = (1 << 1),
1629+
NFT_TUNNEL_F_SEQ_NUMBER = (1 << 2),
1630+
};
1631+
#define NFT_TUNNEL_F_MASK (NFT_TUNNEL_F_ZERO_CSUM_TX | \
1632+
NFT_TUNNEL_F_DONT_FRAGMENT | \
1633+
NFT_TUNNEL_F_SEQ_NUMBER)
1634+
1635+
enum nft_tunnel_key_attributes {
1636+
NFTA_TUNNEL_KEY_UNSPEC,
1637+
NFTA_TUNNEL_KEY_ID,
1638+
NFTA_TUNNEL_KEY_IP,
1639+
NFTA_TUNNEL_KEY_IP6,
1640+
NFTA_TUNNEL_KEY_FLAGS,
1641+
NFTA_TUNNEL_KEY_TOS,
1642+
NFTA_TUNNEL_KEY_TTL,
1643+
NFTA_TUNNEL_KEY_SPORT,
1644+
NFTA_TUNNEL_KEY_DPORT,
1645+
NFTA_TUNNEL_KEY_OPTS,
1646+
__NFTA_TUNNEL_KEY_MAX
1647+
};
1648+
#define NFTA_TUNNEL_KEY_MAX (__NFTA_TUNNEL_KEY_MAX - 1)
1649+
15831650
#endif /* _LINUX_NF_TABLES_H */

net/core/dst.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ void metadata_dst_free(struct metadata_dst *md_dst)
307307
#endif
308308
kfree(md_dst);
309309
}
310+
EXPORT_SYMBOL_GPL(metadata_dst_free);
310311

311312
struct metadata_dst __percpu *
312313
metadata_dst_alloc_percpu(u8 optslen, enum metadata_type type, gfp_t flags)

net/netfilter/Kconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,12 @@ config NFT_NAT
559559
This option adds the "nat" expression that you can use to perform
560560
typical Network Address Translation (NAT) packet transformations.
561561

562+
config NFT_TUNNEL
563+
tristate "Netfilter nf_tables tunnel module"
564+
help
565+
This option adds the "tunnel" expression that you can use to set
566+
tunneling policies.
567+
562568
config NFT_OBJREF
563569
tristate "Netfilter nf_tables stateful object reference module"
564570
help

net/netfilter/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ obj-$(CONFIG_NFT_QUEUE) += nft_queue.o
101101
obj-$(CONFIG_NFT_QUOTA) += nft_quota.o
102102
obj-$(CONFIG_NFT_REJECT) += nft_reject.o
103103
obj-$(CONFIG_NFT_REJECT_INET) += nft_reject_inet.o
104+
obj-$(CONFIG_NFT_TUNNEL) += nft_tunnel.o
104105
obj-$(CONFIG_NFT_COUNTER) += nft_counter.o
105106
obj-$(CONFIG_NFT_LOG) += nft_log.o
106107
obj-$(CONFIG_NFT_MASQ) += nft_masq.o

0 commit comments

Comments
 (0)