netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jiri Benc <jbenc@suse.cz>
To: netdev@vger.kernel.org
Subject: [PATCH 7/10] d80211: get rid of default AP interface
Date: Fri, 21 Apr 2006 22:53:27 +0200 (CEST)	[thread overview]
Message-ID: <20060421205327.2B160482C0@silver.suse.cz> (raw)
In-Reply-To: <20060421225314.048983000.midnight@suse.cz>

There is no need for default non-removable AP interface (wlanX), it just
confuses users. This patch removes it and renames master interface from
wlanX.11 to wlanX.

Signed-off-by: Jiri Benc <jbenc@suse.cz>

---

 net/d80211/ieee80211.c       |   78 +++++++++---------------------------------
 net/d80211/ieee80211_i.h     |    3 +-
 net/d80211/ieee80211_iface.c |    3 +-
 net/d80211/ieee80211_ioctl.c |   12 +++---
 net/d80211/ieee80211_proc.c  |    8 ++--
 5 files changed, 27 insertions(+), 77 deletions(-)

11da4bbdb5dd3f83a991f9e8df2d2356606b87b4
diff --git a/net/d80211/ieee80211.c b/net/d80211/ieee80211.c
index ad63bab..2386454 100644
--- a/net/d80211/ieee80211.c
+++ b/net/d80211/ieee80211.c
@@ -2032,7 +2032,7 @@ static int ieee80211_open(struct net_dev
 		struct net_device *ndev = nsdata->dev;
 
 		if (ndev != dev && ndev != local->mdev &&
-		    ndev != local->wdev && ndev != local->apdev &&
+		    ndev != local->apdev &&
 		    netif_running(ndev) &&
 		    memcmp(dev->dev_addr, ndev->dev_addr, ETH_ALEN) == 0 &&
 		    !identical_mac_addr_allowed(sdata->type, nsdata->type)) {
@@ -3684,7 +3684,7 @@ static void ieee80211_tasklet_handler(un
 			break;
 		default: /* should never get here! */
 			printk(KERN_ERR "%s: Unknown message type (%d)\n",
-			       local->wdev->name, skb->pkt_type);
+			       local->mdev->name, skb->pkt_type);
 			dev_kfree_skb(skb);
 			break;
                 }
@@ -3979,7 +3979,7 @@ static void ieee80211_if_init(struct net
 }
 
 
-/* Must not be called for wdev, mdev and apdev */
+/* Must not be called for mdev and apdev */
 void ieee80211_if_setup(struct net_device *dev)
 {
 	ether_setup(dev);
@@ -4018,7 +4018,7 @@ static void ieee80211_precalc_rates(stru
 struct net_device *ieee80211_alloc_hw(size_t priv_data_len,
 				      void (*setup)(struct net_device *))
 {
-	struct net_device *dev, *apdev, *mdev;
+	struct net_device *apdev, *mdev;
         struct ieee80211_local *local;
         struct ieee80211_sub_if_data *sdata;
 	int alloc_size;
@@ -4042,10 +4042,6 @@ struct net_device *ieee80211_alloc_hw(si
          * 17c0 *****************
          *      * sub_if        *
 	 *      *****************
-	 *      * master net_dev*
-	 *      *****************
-	 *      * sub_if        *
-         *      *****************
          */
         alloc_size = sizeof(struct net_device) +
                 sizeof(struct ieee80211_sub_if_data) + 3 +
@@ -4053,8 +4049,6 @@ struct net_device *ieee80211_alloc_hw(si
                 priv_data_len + 3 +
                 sizeof(struct net_device) + 3 +
 		sizeof(struct ieee80211_sub_if_data) + 3 +
-                sizeof(struct net_device) + 3 +
-		sizeof(struct ieee80211_sub_if_data) + 3 +
 		4096;
         mdev = (struct net_device *) kzalloc(alloc_size, GFP_KERNEL);
 	if (mdev == NULL)
@@ -4069,29 +4063,14 @@ struct net_device *ieee80211_alloc_hw(si
 		((char *) local + ((sizeof(struct ieee80211_local) + 3) & ~3));
 	apdev = (struct net_device *)
 		((char *) local->hw_priv + ((priv_data_len + 3) & ~3));
-        dev = (struct net_device *)
-		((char *) apdev +
-		 ((sizeof(struct net_device) + 3) & ~3) +
-		 ((sizeof(struct ieee80211_sub_if_data) + 3) & ~3));
-        dev->priv = local;
 
-	ether_setup(dev);
-	memcpy(dev->name, "wlan%d", 7);
+	ether_setup(mdev);
+	memcpy(mdev->name, "wlan%d", 7);
 
-        dev->hard_start_xmit = ieee80211_subif_start_xmit;
-	dev->wireless_handlers =
-		(struct iw_handler_def *) &ieee80211_iw_handler_def;
-        dev->do_ioctl = ieee80211_ioctl;
-	dev->change_mtu = ieee80211_change_mtu;
-        dev->tx_timeout = ieee80211_tx_timeout;
-        dev->get_stats = ieee80211_get_stats;
-        dev->open = ieee80211_open;
-        dev->stop = ieee80211_stop;
-	dev->tx_queue_len = 0;
-	dev->set_mac_address = ieee80211_set_mac_address;
+	if (strlen(mdev->name) + 2 >= sizeof(mdev->name))
+		goto fail;
 
 	local->dev_index = -1;
-        local->wdev = dev;
 	local->mdev = mdev;
         local->rx_handlers = ieee80211_rx_handlers;
         local->tx_handlers = ieee80211_tx_handlers;
@@ -4119,22 +4098,11 @@ struct net_device *ieee80211_alloc_hw(si
 	init_timer(&local->stat_timer);
 	local->stat_timer.function = ieee80211_stat_refresh;
 	local->stat_timer.data = (unsigned long) local;
-	ieee80211_rx_bss_list_init(dev);
+	ieee80211_rx_bss_list_init(mdev);
 
         sta_info_init(local);
 
-        ieee80211_if_init(dev);
-
-        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
-        sdata->dev = dev;
-        sdata->master = mdev;
-        sdata->local = local;
-	ieee80211_if_sdata_init(sdata);
-	ieee80211_if_set_type(dev, IEEE80211_IF_TYPE_AP);
-	list_add_tail(&sdata->list, &local->sub_if_list);
-
-	if (strlen(dev->name) + 2 >= sizeof(dev->name))
-		goto fail;
+        ieee80211_if_init(mdev);
 
         apdev = (struct net_device *)
 		((char *) local->hw_priv + ((priv_data_len + 3) & ~3));
@@ -4149,7 +4117,7 @@ struct net_device *ieee80211_alloc_hw(si
 	apdev->type = ARPHRD_IEEE80211_PRISM;
         apdev->hard_header_parse = header_parse_80211;
 	apdev->tx_queue_len = 0;
-	sprintf(apdev->name, "%sap", dev->name);
+	sprintf(apdev->name, "%sap", mdev->name);
 
         sdata = IEEE80211_DEV_TO_SUB_IF(apdev);
         sdata->type = IEEE80211_IF_TYPE_MGMT;
@@ -4158,7 +4126,6 @@ struct net_device *ieee80211_alloc_hw(si
         sdata->local = local;
         list_add_tail(&sdata->list, &local->sub_if_list);
 
-	ether_setup(mdev);
 	mdev->hard_start_xmit = ieee80211_master_start_xmit;
 	mdev->wireless_handlers =
 		(struct iw_handler_def *) &ieee80211_iw_handler_def;
@@ -4170,7 +4137,6 @@ struct net_device *ieee80211_alloc_hw(si
 	mdev->stop = ieee80211_master_stop;
 	mdev->type = ARPHRD_IEEE80211;
         mdev->hard_header_parse = header_parse_80211;
-	sprintf(mdev->name, "%s.11", dev->name);
 
 	sdata = IEEE80211_DEV_TO_SUB_IF(mdev);
 	sdata->type = IEEE80211_IF_TYPE_AP;
@@ -4226,19 +4192,15 @@ int ieee80211_register_hw(struct net_dev
 
 	sta_info_start(local);
 
-	result = register_netdev(local->wdev);
-	if (result < 0)
-		goto fail_1st_dev;
-
 	result = register_netdev(local->apdev);
 	if (result < 0)
-		goto fail_2nd_dev;
+		goto fail_1st_dev;
 
 	if (hw->fraglist)
 		dev->features |= NETIF_F_FRAGLIST;
 	result = register_netdev(dev);
 	if (result < 0)
-		goto fail_3rd_dev;
+		goto fail_2nd_dev;
 
 	if (rate_control_initialize(local) < 0) {
 		printk(KERN_DEBUG "%s: Failed to initialize rate control "
@@ -4255,10 +4217,8 @@ int ieee80211_register_hw(struct net_dev
 
 fail_rate:
 	unregister_netdev(dev);
-fail_3rd_dev:
-	unregister_netdev(local->apdev);
 fail_2nd_dev:
-	unregister_netdev(local->wdev);
+	unregister_netdev(local->apdev);
 fail_1st_dev:
 	sta_info_stop(local);
 	ieee80211_unregister_sysfs(local);
@@ -4284,12 +4244,6 @@ int ieee80211_update_hw(struct net_devic
 	local->apdev->mem_start = dev->mem_start;
 	local->apdev->mem_end = dev->mem_end;
 
-        memcpy(local->wdev->dev_addr, dev->dev_addr, ETH_ALEN);
-	local->wdev->base_addr = dev->base_addr;
-	local->wdev->irq = dev->irq;
-	local->wdev->mem_start = dev->mem_start;
-	local->wdev->mem_end = dev->mem_end;
-
 	if (!hw->modes || !hw->modes->channels || !hw->modes->rates ||
 	    !hw->modes->num_channels || !hw->modes->num_rates)
 		return -1;
@@ -4470,14 +4424,14 @@ static int rate_control_initialize(struc
 		local->rate_ctrl_priv = rate_control_alloc(local);
 		if (local->rate_ctrl_priv) {
 			printk(KERN_DEBUG "%s: Selected rate control "
-			       "algorithm '%s'\n", local->wdev->name,
+			       "algorithm '%s'\n", local->mdev->name,
 			       local->rate_ctrl->name);
 			return 0;
 		}
 	}
 
 	printk(KERN_WARNING "%s: Failed to select rate control algorithm\n",
-	       local->wdev->name);
+	       local->mdev->name);
 	return -1;
 }
 
diff --git a/net/d80211/ieee80211_i.h b/net/d80211/ieee80211_i.h
index 98c30ff..77517c9 100644
--- a/net/d80211/ieee80211_i.h
+++ b/net/d80211/ieee80211_i.h
@@ -316,8 +316,7 @@ #define IEEE80211_SUB_IF_TO_DEV(sub_if) 
 struct ieee80211_local {
 	struct ieee80211_hw *hw;
 	void *hw_priv;
-	struct net_device *mdev; /* wlan#.11 - "master" 802.11 device */
-        struct net_device *wdev; /* wlan# - default Ethernet (data) devide */
+	struct net_device *mdev; /* wlan# - "master" 802.11 device */
 	struct net_device *apdev; /* wlan#ap - management frames (hostapd) */
 	int open_count;
 	int monitors;
diff --git a/net/d80211/ieee80211_iface.c b/net/d80211/ieee80211_iface.c
index 42ea643..58fd946 100644
--- a/net/d80211/ieee80211_iface.c
+++ b/net/d80211/ieee80211_iface.c
@@ -258,7 +258,6 @@ int ieee80211_if_remove(struct net_devic
 		if ((sdata->type == id || id == -1) &&
 		    strcmp(name, sdata->dev->name) == 0 &&
 		    sdata->dev != local->mdev &&
-		    sdata->dev != local->wdev &&
 		    sdata->dev != local->apdev) {
 			__ieee80211_if_del(local, sdata);
 			return 0;
@@ -271,7 +270,7 @@ void ieee80211_if_free(struct net_device
 {
 	struct ieee80211_local *local = dev->priv;
 
-	BUG_ON(dev == local->mdev || dev == local->wdev || dev == local->apdev);
+	BUG_ON(dev == local->mdev || dev == local->apdev);
 	kfree(dev);
 }
 
diff --git a/net/d80211/ieee80211_ioctl.c b/net/d80211/ieee80211_ioctl.c
index 3eaad0a..1d3f5cf 100644
--- a/net/d80211/ieee80211_ioctl.c
+++ b/net/d80211/ieee80211_ioctl.c
@@ -499,13 +499,11 @@ static int ieee80211_set_encryption(stru
 		 * must be used. This should be done automatically
 		 * based on configured station devices. For the time
 		 * being, this can be only set at compile time. */
-		if (sdata->type == IEEE80211_IF_TYPE_STA) {
-			if (0 /* FIX: more than one STA per AP */)
-				try_hwaccel = 0;
-		} else
-		if (sdata->type != IEEE80211_IF_TYPE_AP ||
-		    dev != local->wdev)
-			try_hwaccel = 0;
+		/* FIXME: There is no more anything like "default
+		 * interface". We should try hwaccel if there is just one
+		 * interface - for now, hwaccel is unconditionaly
+		 * disabled. */
+		try_hwaccel = 0;
 	} else {
 		set_tx_key = 0;
 		if (idx != 0) {
diff --git a/net/d80211/ieee80211_proc.c b/net/d80211/ieee80211_proc.c
index a886280..c9f5567 100644
--- a/net/d80211/ieee80211_proc.c
+++ b/net/d80211/ieee80211_proc.c
@@ -702,7 +702,7 @@ void ieee80211_proc_init_interface(struc
 	if (!ieee80211_proc)
 		return;
 
-	local->proc = proc_mkdir(local->wdev->name, ieee80211_proc);
+	local->proc = proc_mkdir(local->mdev->name, ieee80211_proc);
 	if (!local->proc)
 		return;
 
@@ -722,7 +722,7 @@ void ieee80211_proc_init_interface(struc
                                ieee80211_proc_debug_read, local);
 	create_proc_read_entry("info", 0, local->proc,
 			       ieee80211_proc_info_read, local);
-	ieee80211_proc_init_virtual(local->wdev);
+	ieee80211_proc_init_virtual(local->mdev);
 }
 
 
@@ -731,7 +731,7 @@ void ieee80211_proc_deinit_interface(str
 	if (!local->proc)
 		return;
 
-	ieee80211_proc_deinit_virtual(local->wdev);
+	ieee80211_proc_deinit_virtual(local->mdev);
 	remove_proc_entry("iface", local->proc);
 	remove_proc_entry("sta", local->proc);
         remove_proc_entry("counters", local->proc);
@@ -742,7 +742,7 @@ void ieee80211_proc_deinit_interface(str
 	remove_proc_entry("multicast", local->proc);
 	remove_proc_entry("info", local->proc);
 	local->proc = NULL;
-	remove_proc_entry(local->wdev->name, ieee80211_proc);
+	remove_proc_entry(local->mdev->name, ieee80211_proc);
 }
 
 
-- 
1.3.0


  parent reply	other threads:[~2006-04-21 20:52 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-21 20:53 [PATCH 0/10] d80211: bugfixes and reducing number of interfaces Jiri Benc
2006-04-21 20:53 ` [PATCH 1/10] d80211: fix SIOCGIWESSID ioctl Jiri Benc
2006-04-21 20:53 ` [PATCH 2/10] d80211: use is_multicast_ether_addr Jiri Benc
2006-04-21 20:53 ` [PATCH 3/10] d80211: fix Oops caused by packets sent directly to master device Jiri Benc
2006-04-21 20:53 ` [PATCH 4/10] d80211: don't use pointer in ieee80211_tx_control Jiri Benc
2006-04-21 20:53 ` [PATCH 5/10] d80211: per-interface SSID Jiri Benc
2006-04-21 20:53 ` [PATCH 6/10] d80211: per-interface generic_elem Jiri Benc
2006-04-21 20:53 ` Jiri Benc [this message]
2006-04-21 20:53 ` [PATCH 8/10] d80211: get rid of default management interface Jiri Benc
2006-04-21 20:59   ` Johannes Berg
2006-04-21 21:03     ` Jiri Benc
2006-04-22  2:44   ` Jouni Malinen
2006-04-24 13:01     ` Jiri Benc
2006-04-26 18:53       ` John W. Linville
2006-04-21 20:53 ` [PATCH 9/10] d80211: rename master interface Jiri Benc
2006-04-21 21:02   ` Stephen Hemminger
2006-04-21 21:06     ` Jiri Benc
2006-04-21 20:53 ` [PATCH 10/10] d80211: add one default interface Jiri Benc

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060421205327.2B160482C0@silver.suse.cz \
    --to=jbenc@suse.cz \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).