Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 89966
b: refs/heads/master
c: 665e8aa
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Feb 29, 2008
1 parent 18a31dc commit eac8ce0
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 43ba7e958f2ca05e4e9171a15402288419289d71
refs/heads/master: 665e8aafb4e0826caec9db25617b186ea3f3ec91
51 changes: 47 additions & 4 deletions trunk/net/mac80211/ieee80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,52 @@ static int ieee80211_open(struct net_device *dev)
list_for_each_entry(nsdata, &local->interfaces, list) {
struct net_device *ndev = nsdata->dev;

if (ndev != dev && ndev != local->mdev && netif_running(ndev) &&
compare_ether_addr(dev->dev_addr, ndev->dev_addr) == 0) {
if (ndev != dev && ndev != local->mdev && netif_running(ndev)) {
/*
* Allow only a single IBSS interface to be up at any
* time. This is restricted because beacon distribution
* cannot work properly if both are in the same IBSS.
*
* To remove this restriction we'd have to disallow them
* from setting the same SSID on different IBSS interfaces
* belonging to the same hardware. Then, however, we're
* faced with having to adopt two different TSF timers...
*/
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS &&
nsdata->vif.type == IEEE80211_IF_TYPE_IBSS)
return -EBUSY;

/*
* Disallow multiple IBSS/STA mode interfaces.
*
* This is a technical restriction, it is possible although
* most likely not IEEE 802.11 compliant to have multiple
* STAs with just a single hardware (the TSF timer will not
* be adjusted properly.)
*
* However, because mac80211 uses the master device's BSS
* information for each STA/IBSS interface, doing this will
* currently corrupt that BSS information completely, unless,
* a not very useful case, both STAs are associated to the
* same BSS.
*
* To remove this restriction, the BSS information needs to
* be embedded in the STA/IBSS mode sdata instead of using
* the master device's BSS structure.
*/
if ((sdata->vif.type == IEEE80211_IF_TYPE_STA ||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) &&
(nsdata->vif.type == IEEE80211_IF_TYPE_STA ||
nsdata->vif.type == IEEE80211_IF_TYPE_IBSS))
return -EBUSY;

/*
* The remaining checks are only performed for interfaces
* with the same MAC address.
*/
if (compare_ether_addr(dev->dev_addr, ndev->dev_addr))
continue;

/*
* check whether it may have the same address
*/
Expand All @@ -196,8 +240,7 @@ static int ieee80211_open(struct net_device *dev)
* can only add VLANs to enabled APs
*/
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN &&
nsdata->vif.type == IEEE80211_IF_TYPE_AP &&
netif_running(nsdata->dev))
nsdata->vif.type == IEEE80211_IF_TYPE_AP)
sdata->u.vlan.ap = nsdata;
}
}
Expand Down

0 comments on commit eac8ce0

Please sign in to comment.