netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: wenxu@ucloud.cn
To: pablo@netfilter.org, nikolay@cumulusnetworks.com
Cc: netfilter-devel@vger.kernel.org, bridge@lists.linux-foundation.org
Subject: [PATCH 2/7 nf-next] netfilter: nft_meta_bridge: Remove the br_private.h header
Date: Thu,  4 Jul 2019 15:22:30 +0800	[thread overview]
Message-ID: <1562224955-3979-2-git-send-email-wenxu@ucloud.cn> (raw)
In-Reply-To: <1562224955-3979-1-git-send-email-wenxu@ucloud.cn>

From: wenxu <wenxu@ucloud.cn>

Mkae the nft_bridge_meta can't direct access the bridge
internal API.

Signed-off-by: wenxu <wenxu@ucloud.cn>
---
 net/bridge/netfilter/nft_meta_bridge.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/net/bridge/netfilter/nft_meta_bridge.c b/net/bridge/netfilter/nft_meta_bridge.c
index dde8651..2ea8acb 100644
--- a/net/bridge/netfilter/nft_meta_bridge.c
+++ b/net/bridge/netfilter/nft_meta_bridge.c
@@ -8,7 +8,14 @@
 #include <net/netfilter/nf_tables.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,
 				     struct nft_regs *regs,
@@ -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 net_device *in = nft_in(pkt), *out = nft_out(pkt);
 	u32 *dest = &regs->data[priv->dreg];
-	const struct net_bridge_port *p;
+	const struct net_device *br_dev;
 
 	switch (priv->key) {
 	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;
 		break;
 	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;
 		break;
 	default:
 		goto out;
 	}
 
-	strncpy((char *)dest, p->br->dev->name, IFNAMSIZ);
+	strncpy((char *)dest, br_dev->name, IFNAMSIZ);
 	return;
 out:
 	return nft_meta_get_eval(expr, regs, pkt);
-- 
1.8.3.1


  reply	other threads:[~2019-07-04  7:22 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-04  7:22 [PATCH 1/7 nf-next] netfilter: separate bridge meta key from nft_meta into meta_bridge wenxu
2019-07-04  7:22 ` wenxu [this message]
2019-07-05  8:18   ` [PATCH 2/7 nf-next] netfilter: nft_meta_bridge: Remove the br_private.h header Nikolay Aleksandrov
2019-07-04  7:22 ` [PATCH 3/7 nf-next] bridge: add br_vlan_get_pvid_rcu() wenxu
2019-07-05  8:23   ` Nikolay Aleksandrov
2019-07-04  7:22 ` [PATCH 4/7 nf-next] netfilter: nft_meta_bridge: add NFT_META_BRI_IIFPVID support wenxu
2019-07-05  8:24   ` Nikolay Aleksandrov
2019-07-04  7:22 ` [PATCH 5/7 nf-next] bridge: add br_vlan_get_proto() wenxu
2019-07-05  8:25   ` Nikolay Aleksandrov
2019-07-04  7:22 ` [PATCH 6/7 nf-next] netfilter: nft_meta_bridge: Add NFT_META_BRI_IIFVPROTO support wenxu
2019-07-05  8:28   ` Nikolay Aleksandrov
2019-07-04  7:22 ` [PATCH 7/7 nf-next] netfilter:nft_meta: add NFT_META_VLAN support wenxu
2019-07-05  8:34   ` Nikolay Aleksandrov
2019-07-05  8:59     ` Nikolay Aleksandrov
2019-07-05  8:16 ` [PATCH 1/7 nf-next] netfilter: separate bridge meta key from nft_meta into meta_bridge Nikolay Aleksandrov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1562224955-3979-2-git-send-email-wenxu@ucloud.cn \
    --to=wenxu@ucloud.cn \
    --cc=bridge@lists.linux-foundation.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=nikolay@cumulusnetworks.com \
    --cc=pablo@netfilter.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).