Commit 9d6a1ecd authored by wenxu's avatar wenxu Committed by Pablo Neira Ayuso

netfilter: nft_meta_bridge: Remove the br_private.h header

nft_bridge_meta should not access the bridge internal API.
Signed-off-by: default avatarwenxu <wenxu@ucloud.cn>
Reviewed-by: default avatarNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 30e103fe
...@@ -8,7 +8,14 @@ ...@@ -8,7 +8,14 @@
#include <net/netfilter/nf_tables.h> #include <net/netfilter/nf_tables.h>
#include <net/netfilter/nft_meta.h> #include <net/netfilter/nft_meta.h>
#include "../br_private.h" static const struct net_device *
nft_meta_get_bridge(const struct net_device *dev)
{
if (dev && netif_is_bridge_port(dev))
return netdev_master_upper_dev_get_rcu((struct net_device *)dev);
return NULL;
}
static void nft_meta_bridge_get_eval(const struct nft_expr *expr, static void nft_meta_bridge_get_eval(const struct nft_expr *expr,
struct nft_regs *regs, struct nft_regs *regs,
...@@ -17,22 +24,24 @@ static void nft_meta_bridge_get_eval(const struct nft_expr *expr, ...@@ -17,22 +24,24 @@ static void nft_meta_bridge_get_eval(const struct nft_expr *expr,
const struct nft_meta *priv = nft_expr_priv(expr); const struct nft_meta *priv = nft_expr_priv(expr);
const struct net_device *in = nft_in(pkt), *out = nft_out(pkt); const struct net_device *in = nft_in(pkt), *out = nft_out(pkt);
u32 *dest = &regs->data[priv->dreg]; u32 *dest = &regs->data[priv->dreg];
const struct net_bridge_port *p; const struct net_device *br_dev;
switch (priv->key) { switch (priv->key) {
case NFT_META_BRI_IIFNAME: case NFT_META_BRI_IIFNAME:
if (in == NULL || (p = br_port_get_rcu(in)) == NULL) br_dev = nft_meta_get_bridge(in);
if (!br_dev)
goto err; goto err;
break; break;
case NFT_META_BRI_OIFNAME: case NFT_META_BRI_OIFNAME:
if (out == NULL || (p = br_port_get_rcu(out)) == NULL) br_dev = nft_meta_get_bridge(out);
if (!br_dev)
goto err; goto err;
break; break;
default: default:
goto out; goto out;
} }
strncpy((char *)dest, p->br->dev->name, IFNAMSIZ); strncpy((char *)dest, br_dev->name, IFNAMSIZ);
return; return;
out: out:
return nft_meta_get_eval(expr, regs, pkt); return nft_meta_get_eval(expr, regs, pkt);
......
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