aboutsummaryrefslogtreecommitdiffstats
path: root/net/netfilter/nft_rt.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2018-08-29 00:19:00 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2018-09-17 11:29:49 +0200
commit02b408fae3d5552d10d1189fc0bd7e5b1e76af71 (patch)
tree24d5c7411d344dd87bb9bcef6554b2c1575e080a /net/netfilter/nft_rt.c
parentip6_gre: simplify gre header parsing in ip6gre_err (diff)
downloadlinux-dev-02b408fae3d5552d10d1189fc0bd7e5b1e76af71.tar.xz
linux-dev-02b408fae3d5552d10d1189fc0bd7e5b1e76af71.zip
netfilter: nf_tables: rt: allow checking if dst has xfrm attached
Useful e.g. to avoid NATting inner headers of to-be-encrypted packets. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net/netfilter/nft_rt.c')
-rw-r--r--net/netfilter/nft_rt.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/netfilter/nft_rt.c b/net/netfilter/nft_rt.c
index 76dba9f6b6f6..f35fa33913ae 100644
--- a/net/netfilter/nft_rt.c
+++ b/net/netfilter/nft_rt.c
@@ -90,6 +90,11 @@ static void nft_rt_get_eval(const struct nft_expr *expr,
case NFT_RT_TCPMSS:
nft_reg_store16(dest, get_tcpmss(pkt, dst));
break;
+#ifdef CONFIG_XFRM
+ case NFT_RT_XFRM:
+ nft_reg_store8(dest, !!dst->xfrm);
+ break;
+#endif
default:
WARN_ON(1);
goto err;
@@ -130,6 +135,11 @@ static int nft_rt_get_init(const struct nft_ctx *ctx,
case NFT_RT_TCPMSS:
len = sizeof(u16);
break;
+#ifdef CONFIG_XFRM
+ case NFT_RT_XFRM:
+ len = sizeof(u8);
+ break;
+#endif
default:
return -EOPNOTSUPP;
}
@@ -164,6 +174,7 @@ static int nft_rt_validate(const struct nft_ctx *ctx, const struct nft_expr *exp
case NFT_RT_NEXTHOP4:
case NFT_RT_NEXTHOP6:
case NFT_RT_CLASSID:
+ case NFT_RT_XFRM:
return 0;
case NFT_RT_TCPMSS:
hooks = (1 << NF_INET_FORWARD) |