blob: f7b4ea75029e7bbbaff14fce7a53cc3f2f076fd0 [file] [log] [blame]
The patch titled:
bridge: use rx_handler_data pointer to store net_bridge_port pointer
by Jiri Pirko <jpirko@redhat.com> moved the br_ports pointer
out of the netdev which older kernels relied on and then added
a flag to the netdev to check for it as follows:
- dev->br_port) {
+ (dev->priv_flags & IFF_BRIDGE_PORT)) {
So to backport this we instead rely on a br_port_exists() call
which compat.git provides and depending on the kernel it will either
check for the dev->br_port or the IFF_BRIDGE_PORT flag. A patch
to get the blow code merged upstream and to use br_port_exists()
everywhere else will be submitted but not sure if it will be
accepted.
This patch can be removed once we get br_port_exists() accessible
to drivers and not just private bridge code. If that patch doesn't
get accepted upstream we'l have to carry this patch around for
compat-drivers.
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -816,7 +816,7 @@ int cfg80211_change_iface(struct cfg8021
return -EOPNOTSUPP;
/* if it's part of a bridge, reject changing type to station/ibss */
- if ((dev->priv_flags & IFF_BRIDGE_PORT) &&
+ if (br_port_exists(dev) &&
(ntype == NL80211_IFTYPE_ADHOC ||
ntype == NL80211_IFTYPE_STATION ||
ntype == NL80211_IFTYPE_P2P_CLIENT))
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -2298,7 +2298,7 @@ static int nl80211_valid_4addr(struct cf
enum nl80211_iftype iftype)
{
if (!use_4addr) {
- if (netdev && (netdev->priv_flags & IFF_BRIDGE_PORT))
+ if (netdev && br_port_exists(netdev))
return -EBUSY;
return 0;
}