netfilter: bridge: remove BRNF_STATE_BRIDGED flag
Subsystems (3)
Florian Westphal
maintainerPATCH RESEND 1/1 netfilter: bridge: remove BRNF_STATE_BRIDGED flag
Its not needed anymore since 2bf540b73ed5b
([NETFILTER]: bridge-netfilter: remove deferred hooks). Before this it was possible to have physoutdev set for locally generated packets -- this isn't the case anymore:
BRNF_STATE_BRIDGED flag is set when we assign nf_bridge->physoutdev, so physoutdev != NULL means BRNF_STATE_BRIDGED is set.
If physoutdev is NULL, then we are looking at locally-delivered and routed packet.
---
Resending it outside of rest-of-series because it has no dependencies.
include/linux/netfilter_bridge.h | 1 - net/bridge/br_netfilter.c | 9 ++++++--- net/netfilter/xt_physdev.c | 3 +-- 3 files changed, 7 insertions(+), 6 deletions(-)
include/linux/netfilter_bridge.h +0 -1
@@ -19,7 +19,6 @@ enum nf_br_hook_priorities {#define BRNF_PKT_TYPE 0x01#define BRNF_BRIDGED_DNAT 0x02 -#define BRNF_BRIDGED 0x04#define BRNF_NF_BRIDGE_PREROUTING 0x08#define BRNF_8021Q 0x10#define BRNF_PPPoE 0x20
net/bridge/br_netfilter.c +6 -3
@@ -736,8 +736,6 @@ static unsigned int br_nf_forward_ip(const struct nf_hook_ops *ops,if (pf ==NFPROTO_IPV4 &&br_parse_ip_options (skb))return NF_DROP ; -/* The physdev module checks on this */ - nf_bridge->mask |=BRNF_BRIDGED ; nf_bridge->physoutdev = skb->dev;if (pf ==NFPROTO_IPV4 ) skb->protocol =htons (ETH_P_IP );
@@ -857,7 +855,12 @@ static unsigned int br_nf_post_routing(const struct nf_hook_ops *ops,struct net_device *realoutdev =bridge_parent (skb->dev);u_int8_t pf; -if (!nf_bridge || !(nf_bridge->mask &BRNF_BRIDGED )) +/* if nf_bridge is set, but ->physoutdev is NULL, this packet came in +* on a bridge, but was delivered locally and is now being routed: +* +* POST_ROUTING was already invoked from the ip stack. +*/ +if (!nf_bridge || !nf_bridge->physoutdev)return NF_ACCEPT ;if (!realoutdev)
net/netfilter/xt_physdev.c +1 -2
@@ -56,8 +56,7 @@ physdev_mt(const struct sk_buff *skb, struct xt_action_param *par)/* This only makes sense in the FORWARD and POSTROUTING chains */ if ((info->bitmask &XT_PHYSDEV_OP_BRIDGED ) && - (!!(nf_bridge->mask &BRNF_BRIDGED ) ^ - !(info->invert &XT_PHYSDEV_OP_BRIDGED ))) + (!!nf_bridge->physoutdev ^ !(info->invert &XT_PHYSDEV_OP_BRIDGED )))return false; if ((info->bitmask & XT_PHYSDEV_OP_ISIN &&
Signature · 1 line
2.0.5
Pablo Neira Ayuso
maintainerQuoted 9 lines · Florian Westphal
Its not needed anymore since
2bf540b73ed5b
([NETFILTER]: bridge-netfilter: remove deferred hooks). Before this it was possible to have physoutdev set for locally generated packets -- this isn't the case anymore:
BRNF_STATE_BRIDGEDflag is set when we assignnf_bridge->physoutdev, so physoutdev != NULL meansBRNF_STATE_BRIDGEDis set.
If physoutdev is NULL, then we are looking at locally-delivered and routed packet.
Also applied, thanks.