cfg80211: handle SIOCGIWNAME
Johannes Berg [Wed, 26 Nov 2008 21:36:31 +0000 (22:36 +0100)]
This patch moves the SIOCGIWNAME handling from mac80211 to cfg80211.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

include/net/cfg80211.h
net/mac80211/wext.c
net/wireless/Makefile
net/wireless/wext-compat.c [new file with mode: 0644]

index 53b06f6..c97eac3 100644 (file)
@@ -5,6 +5,8 @@
 #include <linux/skbuff.h>
 #include <linux/nl80211.h>
 #include <net/genetlink.h>
+/* remove once we remove the wext stuff */
+#include <net/iw_handler.h>
 
 /*
  * 802.11 configuration in-kernel interface
@@ -524,4 +526,9 @@ struct cfg80211_ops {
                               enum nl80211_sec_chan_offset);
 };
 
+/* temporary wext handlers */
+int cfg80211_wext_giwname(struct net_device *dev,
+                         struct iw_request_info *info,
+                         char *name, char *extra);
+
 #endif /* __NET_CFG80211_H */
index b3ce28d..b9eee3c 100644 (file)
@@ -135,48 +135,6 @@ static int ieee80211_ioctl_siwgenie(struct net_device *dev,
        return -EOPNOTSUPP;
 }
 
-static int ieee80211_ioctl_giwname(struct net_device *dev,
-                                  struct iw_request_info *info,
-                                  char *name, char *extra)
-{
-       struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
-       struct ieee80211_supported_band *sband;
-       u8 is_ht = 0, is_a = 0, is_b = 0, is_g = 0;
-
-
-       sband = local->hw.wiphy->bands[IEEE80211_BAND_5GHZ];
-       if (sband) {
-               is_a = 1;
-               is_ht |= sband->ht_cap.ht_supported;
-       }
-
-       sband = local->hw.wiphy->bands[IEEE80211_BAND_2GHZ];
-       if (sband) {
-               int i;
-               /* Check for mandatory rates */
-               for (i = 0; i < sband->n_bitrates; i++) {
-                       if (sband->bitrates[i].bitrate == 10)
-                               is_b = 1;
-                       if (sband->bitrates[i].bitrate == 60)
-                               is_g = 1;
-               }
-               is_ht |= sband->ht_cap.ht_supported;
-       }
-
-       strcpy(name, "IEEE 802.11");
-       if (is_a)
-               strcat(name, "a");
-       if (is_b)
-               strcat(name, "b");
-       if (is_g)
-               strcat(name, "g");
-       if (is_ht)
-               strcat(name, "n");
-
-       return 0;
-}
-
-
 static int ieee80211_ioctl_giwrange(struct net_device *dev,
                                 struct iw_request_info *info,
                                 struct iw_point *data, char *extra)
@@ -1146,7 +1104,7 @@ static int ieee80211_ioctl_siwencodeext(struct net_device *dev,
 static const iw_handler ieee80211_handler[] =
 {
        (iw_handler) NULL,                              /* SIOCSIWCOMMIT */
-       (iw_handler) ieee80211_ioctl_giwname,           /* SIOCGIWNAME */
+       (iw_handler) cfg80211_wext_giwname,             /* SIOCGIWNAME */
        (iw_handler) NULL,                              /* SIOCSIWNWID */
        (iw_handler) NULL,                              /* SIOCGIWNWID */
        (iw_handler) ieee80211_ioctl_siwfreq,           /* SIOCSIWFREQ */
index cc547ed..9bc412c 100644 (file)
@@ -6,4 +6,5 @@ obj-$(CONFIG_LIB80211_CRYPT_CCMP) += lib80211_crypt_ccmp.o
 obj-$(CONFIG_LIB80211_CRYPT_TKIP) += lib80211_crypt_tkip.o
 
 cfg80211-y += core.o sysfs.o radiotap.o util.o reg.o
+cfg80211-$(CONFIG_WIRELESS_EXT) += wext-compat.o
 cfg80211-$(CONFIG_NL80211) += nl80211.o
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
new file mode 100644 (file)
index 0000000..a5db455
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * cfg80211 - wext compat code
+ *
+ * This is temporary code until all wireless functionality is migrated
+ * into cfg80211, when that happens all the exports here go away and
+ * we directly assign the wireless handlers of wireless interfaces.
+ *
+ * Copyright 2008      Johannes Berg <johannes@sipsolutions.net>
+ */
+
+#include <linux/wireless.h>
+#include <linux/nl80211.h>
+#include <net/iw_handler.h>
+#include <net/wireless.h>
+#include <net/cfg80211.h>
+#include "core.h"
+
+int cfg80211_wext_giwname(struct net_device *dev,
+                         struct iw_request_info *info,
+                         char *name, char *extra)
+{
+       struct wireless_dev *wdev = dev->ieee80211_ptr;
+       struct ieee80211_supported_band *sband;
+       bool is_ht = false, is_a = false, is_b = false, is_g = false;
+
+       if (!wdev)
+               return -EOPNOTSUPP;
+
+       sband = wdev->wiphy->bands[IEEE80211_BAND_5GHZ];
+       if (sband) {
+               is_a = true;
+               is_ht |= sband->ht_cap.ht_supported;
+       }
+
+       sband = wdev->wiphy->bands[IEEE80211_BAND_2GHZ];
+       if (sband) {
+               int i;
+               /* Check for mandatory rates */
+               for (i = 0; i < sband->n_bitrates; i++) {
+                       if (sband->bitrates[i].bitrate == 10)
+                               is_b = true;
+                       if (sband->bitrates[i].bitrate == 60)
+                               is_g = true;
+               }
+               is_ht |= sband->ht_cap.ht_supported;
+       }
+
+       strcpy(name, "IEEE 802.11");
+       if (is_a)
+               strcat(name, "a");
+       if (is_b)
+               strcat(name, "b");
+       if (is_g)
+               strcat(name, "g");
+       if (is_ht)
+               strcat(name, "n");
+
+       return 0;
+}
+EXPORT_SYMBOL(cfg80211_wext_giwname);