mirror of
https://github.com/adulau/aha.git
synced 2025-01-01 05:36:24 +00:00
mac80211: make bridge_packets a virtual interface option
The bridge_packets configuration really should be per virtual interface (theoretically per AP/VLAN, but this is much easier); there currently is no way to set it yet though. Also invert the option to "NO_BRIDGE_PACKETS" so the default is to bridge. While at it, also document the flags properly. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
e16751c317
commit
213cd118cb
4 changed files with 22 additions and 18 deletions
|
@ -51,8 +51,6 @@ DEBUGFS_READONLY_FILE(antenna_sel_tx, 20, "%d",
|
||||||
local->hw.conf.antenna_sel_tx);
|
local->hw.conf.antenna_sel_tx);
|
||||||
DEBUGFS_READONLY_FILE(antenna_sel_rx, 20, "%d",
|
DEBUGFS_READONLY_FILE(antenna_sel_rx, 20, "%d",
|
||||||
local->hw.conf.antenna_sel_rx);
|
local->hw.conf.antenna_sel_rx);
|
||||||
DEBUGFS_READONLY_FILE(bridge_packets, 20, "%d",
|
|
||||||
local->bridge_packets);
|
|
||||||
DEBUGFS_READONLY_FILE(rts_threshold, 20, "%d",
|
DEBUGFS_READONLY_FILE(rts_threshold, 20, "%d",
|
||||||
local->rts_threshold);
|
local->rts_threshold);
|
||||||
DEBUGFS_READONLY_FILE(fragmentation_threshold, 20, "%d",
|
DEBUGFS_READONLY_FILE(fragmentation_threshold, 20, "%d",
|
||||||
|
@ -206,7 +204,6 @@ void debugfs_hw_add(struct ieee80211_local *local)
|
||||||
DEBUGFS_ADD(frequency);
|
DEBUGFS_ADD(frequency);
|
||||||
DEBUGFS_ADD(antenna_sel_tx);
|
DEBUGFS_ADD(antenna_sel_tx);
|
||||||
DEBUGFS_ADD(antenna_sel_rx);
|
DEBUGFS_ADD(antenna_sel_rx);
|
||||||
DEBUGFS_ADD(bridge_packets);
|
|
||||||
DEBUGFS_ADD(rts_threshold);
|
DEBUGFS_ADD(rts_threshold);
|
||||||
DEBUGFS_ADD(fragmentation_threshold);
|
DEBUGFS_ADD(fragmentation_threshold);
|
||||||
DEBUGFS_ADD(short_retry_limit);
|
DEBUGFS_ADD(short_retry_limit);
|
||||||
|
@ -263,7 +260,6 @@ void debugfs_hw_del(struct ieee80211_local *local)
|
||||||
DEBUGFS_DEL(frequency);
|
DEBUGFS_DEL(frequency);
|
||||||
DEBUGFS_DEL(antenna_sel_tx);
|
DEBUGFS_DEL(antenna_sel_tx);
|
||||||
DEBUGFS_DEL(antenna_sel_rx);
|
DEBUGFS_DEL(antenna_sel_rx);
|
||||||
DEBUGFS_DEL(bridge_packets);
|
|
||||||
DEBUGFS_DEL(rts_threshold);
|
DEBUGFS_DEL(rts_threshold);
|
||||||
DEBUGFS_DEL(fragmentation_threshold);
|
DEBUGFS_DEL(fragmentation_threshold);
|
||||||
DEBUGFS_DEL(short_retry_limit);
|
DEBUGFS_DEL(short_retry_limit);
|
||||||
|
|
|
@ -402,11 +402,25 @@ struct ieee80211_if_mesh {
|
||||||
do { } while (0)
|
do { } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* flags used in struct ieee80211_sub_if_data.flags */
|
/**
|
||||||
#define IEEE80211_SDATA_ALLMULTI BIT(0)
|
* enum ieee80211_sub_if_data_flags - virtual interface flags
|
||||||
#define IEEE80211_SDATA_PROMISC BIT(1)
|
*
|
||||||
#define IEEE80211_SDATA_USERSPACE_MLME BIT(2)
|
* @IEEE80211_SDATA_ALLMULTI: interface wants all multicast packets
|
||||||
#define IEEE80211_SDATA_OPERATING_GMODE BIT(3)
|
* @IEEE80211_SDATA_PROMISC: interface is promisc
|
||||||
|
* @IEEE80211_SDATA_USERSPACE_MLME: userspace MLME is active
|
||||||
|
* @IEEE80211_SDATA_OPERATING_GMODE: operating in G-only mode
|
||||||
|
* @IEEE80211_SDATA_DONT_BRIDGE_PACKETS: bridge packets between
|
||||||
|
* associated stations and deliver multicast frames both
|
||||||
|
* back to wireless media and to the local net stack.
|
||||||
|
*/
|
||||||
|
enum ieee80211_sub_if_data_flags {
|
||||||
|
IEEE80211_SDATA_ALLMULTI = BIT(0),
|
||||||
|
IEEE80211_SDATA_PROMISC = BIT(1),
|
||||||
|
IEEE80211_SDATA_USERSPACE_MLME = BIT(2),
|
||||||
|
IEEE80211_SDATA_OPERATING_GMODE = BIT(3),
|
||||||
|
IEEE80211_SDATA_DONT_BRIDGE_PACKETS = BIT(4),
|
||||||
|
};
|
||||||
|
|
||||||
struct ieee80211_sub_if_data {
|
struct ieee80211_sub_if_data {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
|
|
||||||
|
@ -635,10 +649,6 @@ struct ieee80211_local {
|
||||||
struct crypto_blkcipher *wep_rx_tfm;
|
struct crypto_blkcipher *wep_rx_tfm;
|
||||||
u32 wep_iv;
|
u32 wep_iv;
|
||||||
|
|
||||||
int bridge_packets; /* bridge packets between associated stations and
|
|
||||||
* deliver multicast frames both back to wireless
|
|
||||||
* media and to the local net stack */
|
|
||||||
|
|
||||||
struct list_head interfaces;
|
struct list_head interfaces;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -726,7 +736,6 @@ struct ieee80211_local {
|
||||||
struct dentry *frequency;
|
struct dentry *frequency;
|
||||||
struct dentry *antenna_sel_tx;
|
struct dentry *antenna_sel_tx;
|
||||||
struct dentry *antenna_sel_rx;
|
struct dentry *antenna_sel_rx;
|
||||||
struct dentry *bridge_packets;
|
|
||||||
struct dentry *rts_threshold;
|
struct dentry *rts_threshold;
|
||||||
struct dentry *fragmentation_threshold;
|
struct dentry *fragmentation_threshold;
|
||||||
struct dentry *short_retry_limit;
|
struct dentry *short_retry_limit;
|
||||||
|
|
|
@ -1280,8 +1280,6 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
|
||||||
|
|
||||||
local->hw.queues = 1; /* default */
|
local->hw.queues = 1; /* default */
|
||||||
|
|
||||||
local->bridge_packets = 1;
|
|
||||||
|
|
||||||
local->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD;
|
local->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD;
|
||||||
local->fragmentation_threshold = IEEE80211_MAX_FRAG_THRESHOLD;
|
local->fragmentation_threshold = IEEE80211_MAX_FRAG_THRESHOLD;
|
||||||
local->short_retry_limit = 7;
|
local->short_retry_limit = 7;
|
||||||
|
|
|
@ -1221,8 +1221,9 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
|
||||||
skb = rx->skb;
|
skb = rx->skb;
|
||||||
xmit_skb = NULL;
|
xmit_skb = NULL;
|
||||||
|
|
||||||
if (local->bridge_packets && (sdata->vif.type == IEEE80211_IF_TYPE_AP ||
|
if ((sdata->vif.type == IEEE80211_IF_TYPE_AP ||
|
||||||
sdata->vif.type == IEEE80211_IF_TYPE_VLAN) &&
|
sdata->vif.type == IEEE80211_IF_TYPE_VLAN) &&
|
||||||
|
!(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
|
||||||
(rx->flags & IEEE80211_RX_RA_MATCH)) {
|
(rx->flags & IEEE80211_RX_RA_MATCH)) {
|
||||||
if (is_multicast_ether_addr(ehdr->h_dest)) {
|
if (is_multicast_ether_addr(ehdr->h_dest)) {
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue