Thread (9 messages) 9 messages, 2 authors, 2007-09-27
STALE6853d

[patch 6/7] mac80211: allow only one IBSS interface

From: Johannes Berg <johannes@sipsolutions.net>
Date: 2007-09-26 15:55:11

Consider the case of multiple virtual IBSS interfaces
trying to join the same IBSS. They wouldn't see beacons
that the other virtual interface sent of course so this
leads to problems. Disallow it.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>

---
 net/mac80211/ieee80211.c |   21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)
--- wireless-dev.orig/net/mac80211/ieee80211.c	2007-09-26 17:21:42.667337342 +0200
+++ wireless-dev/net/mac80211/ieee80211.c	2007-09-26 17:21:51.317337342 +0200
@@ -170,8 +170,25 @@ static int ieee80211_open(struct net_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)) {
+			/*
+			 * We really only support one IBSS interface, think
+			 * what would happen if they tried to be in the same
+			 * BSS.
+			 */
+			if (sdata->type == IEEE80211_IF_TYPE_IBSS &&
+			    nsdata->type == IEEE80211_IF_TYPE_IBSS &&
+			    netif_running(nsdata->dev))
+				return -EBUSY;
+
+			/*
+			 * The remaining checks are only done for devices
+			 * with the same MAC address.
+			 */
+			if (compare_ether_addr(dev->dev_addr, ndev->dev_addr))
+				continue;
+
 			/*
 			 * check whether it may have the same address
 			 */
-- 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help