Commit b473a1f5 authored by Christian Göttsche's avatar Christian Göttsche Committed by Pablo Neira Ayuso

netfilter: nf_tables: add requirements for connsecmark support

Add ability to set the connection tracking secmark value.

Add ability to set the meta secmark value.
Signed-off-by: default avatarChristian Göttsche <cgzones@googlemail.com>
Acked-by: default avatarFlorian Westphal <fw@strlen.de>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent fb961945
...@@ -279,7 +279,7 @@ static void nft_ct_set_eval(const struct nft_expr *expr, ...@@ -279,7 +279,7 @@ static void nft_ct_set_eval(const struct nft_expr *expr,
{ {
const struct nft_ct *priv = nft_expr_priv(expr); const struct nft_ct *priv = nft_expr_priv(expr);
struct sk_buff *skb = pkt->skb; struct sk_buff *skb = pkt->skb;
#ifdef CONFIG_NF_CONNTRACK_MARK #if defined(CONFIG_NF_CONNTRACK_MARK) || defined(CONFIG_NF_CONNTRACK_SECMARK)
u32 value = regs->data[priv->sreg]; u32 value = regs->data[priv->sreg];
#endif #endif
enum ip_conntrack_info ctinfo; enum ip_conntrack_info ctinfo;
...@@ -298,6 +298,14 @@ static void nft_ct_set_eval(const struct nft_expr *expr, ...@@ -298,6 +298,14 @@ static void nft_ct_set_eval(const struct nft_expr *expr,
} }
break; break;
#endif #endif
#ifdef CONFIG_NF_CONNTRACK_SECMARK
case NFT_CT_SECMARK:
if (ct->secmark != value) {
ct->secmark = value;
nf_conntrack_event_cache(IPCT_SECMARK, ct);
}
break;
#endif
#ifdef CONFIG_NF_CONNTRACK_LABELS #ifdef CONFIG_NF_CONNTRACK_LABELS
case NFT_CT_LABELS: case NFT_CT_LABELS:
nf_connlabels_replace(ct, nf_connlabels_replace(ct,
...@@ -564,6 +572,13 @@ static int nft_ct_set_init(const struct nft_ctx *ctx, ...@@ -564,6 +572,13 @@ static int nft_ct_set_init(const struct nft_ctx *ctx,
return -EINVAL; return -EINVAL;
len = sizeof(u32); len = sizeof(u32);
break; break;
#endif
#ifdef CONFIG_NF_CONNTRACK_SECMARK
case NFT_CT_SECMARK:
if (tb[NFTA_CT_DIRECTION])
return -EINVAL;
len = sizeof(u32);
break;
#endif #endif
default: default:
return -EOPNOTSUPP; return -EOPNOTSUPP;
......
...@@ -284,6 +284,11 @@ static void nft_meta_set_eval(const struct nft_expr *expr, ...@@ -284,6 +284,11 @@ static void nft_meta_set_eval(const struct nft_expr *expr,
skb->nf_trace = !!value8; skb->nf_trace = !!value8;
break; break;
#ifdef CONFIG_NETWORK_SECMARK
case NFT_META_SECMARK:
skb->secmark = value;
break;
#endif
default: default:
WARN_ON(1); WARN_ON(1);
} }
...@@ -436,6 +441,9 @@ static int nft_meta_set_init(const struct nft_ctx *ctx, ...@@ -436,6 +441,9 @@ static int nft_meta_set_init(const struct nft_ctx *ctx,
switch (priv->key) { switch (priv->key) {
case NFT_META_MARK: case NFT_META_MARK:
case NFT_META_PRIORITY: case NFT_META_PRIORITY:
#ifdef CONFIG_NETWORK_SECMARK
case NFT_META_SECMARK:
#endif
len = sizeof(u32); len = sizeof(u32);
break; break;
case NFT_META_NFTRACE: case NFT_META_NFTRACE:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment