|
@@ -5735,70 +5735,6 @@ static struct net_device_stats *ipw2100_stats(struct net_device *dev)
|
|
return &priv->ieee->stats;
|
|
return &priv->ieee->stats;
|
|
}
|
|
}
|
|
|
|
|
|
-#if WIRELESS_EXT < 18
|
|
|
|
-/* Support for wpa_supplicant before WE-18, deprecated. */
|
|
|
|
-
|
|
|
|
-/* following definitions must match definitions in driver_ipw.c */
|
|
|
|
-
|
|
|
|
-#define IPW2100_IOCTL_WPA_SUPPLICANT SIOCIWFIRSTPRIV+30
|
|
|
|
-
|
|
|
|
-#define IPW2100_CMD_SET_WPA_PARAM 1
|
|
|
|
-#define IPW2100_CMD_SET_WPA_IE 2
|
|
|
|
-#define IPW2100_CMD_SET_ENCRYPTION 3
|
|
|
|
-#define IPW2100_CMD_MLME 4
|
|
|
|
-
|
|
|
|
-#define IPW2100_PARAM_WPA_ENABLED 1
|
|
|
|
-#define IPW2100_PARAM_TKIP_COUNTERMEASURES 2
|
|
|
|
-#define IPW2100_PARAM_DROP_UNENCRYPTED 3
|
|
|
|
-#define IPW2100_PARAM_PRIVACY_INVOKED 4
|
|
|
|
-#define IPW2100_PARAM_AUTH_ALGS 5
|
|
|
|
-#define IPW2100_PARAM_IEEE_802_1X 6
|
|
|
|
-
|
|
|
|
-#define IPW2100_MLME_STA_DEAUTH 1
|
|
|
|
-#define IPW2100_MLME_STA_DISASSOC 2
|
|
|
|
-
|
|
|
|
-#define IPW2100_CRYPT_ERR_UNKNOWN_ALG 2
|
|
|
|
-#define IPW2100_CRYPT_ERR_UNKNOWN_ADDR 3
|
|
|
|
-#define IPW2100_CRYPT_ERR_CRYPT_INIT_FAILED 4
|
|
|
|
-#define IPW2100_CRYPT_ERR_KEY_SET_FAILED 5
|
|
|
|
-#define IPW2100_CRYPT_ERR_TX_KEY_SET_FAILED 6
|
|
|
|
-#define IPW2100_CRYPT_ERR_CARD_CONF_FAILED 7
|
|
|
|
-
|
|
|
|
-#define IPW2100_CRYPT_ALG_NAME_LEN 16
|
|
|
|
-
|
|
|
|
-struct ipw2100_param {
|
|
|
|
- u32 cmd;
|
|
|
|
- u8 sta_addr[ETH_ALEN];
|
|
|
|
- union {
|
|
|
|
- struct {
|
|
|
|
- u8 name;
|
|
|
|
- u32 value;
|
|
|
|
- } wpa_param;
|
|
|
|
- struct {
|
|
|
|
- u32 len;
|
|
|
|
- u8 reserved[32];
|
|
|
|
- u8 data[0];
|
|
|
|
- } wpa_ie;
|
|
|
|
- struct {
|
|
|
|
- u32 command;
|
|
|
|
- u32 reason_code;
|
|
|
|
- } mlme;
|
|
|
|
- struct {
|
|
|
|
- u8 alg[IPW2100_CRYPT_ALG_NAME_LEN];
|
|
|
|
- u8 set_tx;
|
|
|
|
- u32 err;
|
|
|
|
- u8 idx;
|
|
|
|
- u8 seq[8]; /* sequence counter (set: RX, get: TX) */
|
|
|
|
- u16 key_len;
|
|
|
|
- u8 key[0];
|
|
|
|
- } crypt;
|
|
|
|
-
|
|
|
|
- } u;
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-/* end of driver_ipw.c code */
|
|
|
|
-#endif /* WIRELESS_EXT < 18 */
|
|
|
|
-
|
|
|
|
static int ipw2100_wpa_enable(struct ipw2100_priv *priv, int value)
|
|
static int ipw2100_wpa_enable(struct ipw2100_priv *priv, int value)
|
|
{
|
|
{
|
|
/* This is called when wpa_supplicant loads and closes the driver
|
|
/* This is called when wpa_supplicant loads and closes the driver
|
|
@@ -5807,11 +5743,6 @@ static int ipw2100_wpa_enable(struct ipw2100_priv *priv, int value)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-#if WIRELESS_EXT < 18
|
|
|
|
-#define IW_AUTH_ALG_OPEN_SYSTEM 0x1
|
|
|
|
-#define IW_AUTH_ALG_SHARED_KEY 0x2
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
static int ipw2100_wpa_set_auth_algs(struct ipw2100_priv *priv, int value)
|
|
static int ipw2100_wpa_set_auth_algs(struct ipw2100_priv *priv, int value)
|
|
{
|
|
{
|
|
|
|
|
|
@@ -5855,360 +5786,6 @@ void ipw2100_wpa_assoc_frame(struct ipw2100_priv *priv,
|
|
ipw2100_set_wpa_ie(priv, &frame, 0);
|
|
ipw2100_set_wpa_ie(priv, &frame, 0);
|
|
}
|
|
}
|
|
|
|
|
|
-#if WIRELESS_EXT < 18
|
|
|
|
-static int ipw2100_wpa_set_param(struct net_device *dev, u8 name, u32 value)
|
|
|
|
-{
|
|
|
|
- struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
|
- struct ieee80211_crypt_data *crypt;
|
|
|
|
- unsigned long flags;
|
|
|
|
- int ret = 0;
|
|
|
|
-
|
|
|
|
- switch (name) {
|
|
|
|
- case IPW2100_PARAM_WPA_ENABLED:
|
|
|
|
- ret = ipw2100_wpa_enable(priv, value);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case IPW2100_PARAM_TKIP_COUNTERMEASURES:
|
|
|
|
- crypt = priv->ieee->crypt[priv->ieee->tx_keyidx];
|
|
|
|
- if (!crypt || !crypt->ops->set_flags || !crypt->ops->get_flags)
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- flags = crypt->ops->get_flags(crypt->priv);
|
|
|
|
-
|
|
|
|
- if (value)
|
|
|
|
- flags |= IEEE80211_CRYPTO_TKIP_COUNTERMEASURES;
|
|
|
|
- else
|
|
|
|
- flags &= ~IEEE80211_CRYPTO_TKIP_COUNTERMEASURES;
|
|
|
|
-
|
|
|
|
- crypt->ops->set_flags(flags, crypt->priv);
|
|
|
|
-
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case IPW2100_PARAM_DROP_UNENCRYPTED:{
|
|
|
|
- /* See IW_AUTH_DROP_UNENCRYPTED handling for details */
|
|
|
|
- struct ieee80211_security sec = {
|
|
|
|
- .flags = SEC_ENABLED,
|
|
|
|
- .enabled = value,
|
|
|
|
- };
|
|
|
|
- priv->ieee->drop_unencrypted = value;
|
|
|
|
- /* We only change SEC_LEVEL for open mode. Others
|
|
|
|
- * are set by ipw_wpa_set_encryption.
|
|
|
|
- */
|
|
|
|
- if (!value) {
|
|
|
|
- sec.flags |= SEC_LEVEL;
|
|
|
|
- sec.level = SEC_LEVEL_0;
|
|
|
|
- } else {
|
|
|
|
- sec.flags |= SEC_LEVEL;
|
|
|
|
- sec.level = SEC_LEVEL_1;
|
|
|
|
- }
|
|
|
|
- if (priv->ieee->set_security)
|
|
|
|
- priv->ieee->set_security(priv->ieee->dev, &sec);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- case IPW2100_PARAM_PRIVACY_INVOKED:
|
|
|
|
- priv->ieee->privacy_invoked = value;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case IPW2100_PARAM_AUTH_ALGS:
|
|
|
|
- ret = ipw2100_wpa_set_auth_algs(priv, value);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case IPW2100_PARAM_IEEE_802_1X:
|
|
|
|
- priv->ieee->ieee802_1x = value;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- printk(KERN_ERR DRV_NAME ": %s: Unknown WPA param: %d\n",
|
|
|
|
- dev->name, name);
|
|
|
|
- ret = -EOPNOTSUPP;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return ret;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int ipw2100_wpa_mlme(struct net_device *dev, int command, int reason)
|
|
|
|
-{
|
|
|
|
-
|
|
|
|
- struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
|
- int ret = 0;
|
|
|
|
-
|
|
|
|
- switch (command) {
|
|
|
|
- case IPW2100_MLME_STA_DEAUTH:
|
|
|
|
- // silently ignore
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case IPW2100_MLME_STA_DISASSOC:
|
|
|
|
- ipw2100_disassociate_bssid(priv);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- printk(KERN_ERR DRV_NAME ": %s: Unknown MLME request: %d\n",
|
|
|
|
- dev->name, command);
|
|
|
|
- ret = -EOPNOTSUPP;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return ret;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int ipw2100_wpa_set_wpa_ie(struct net_device *dev,
|
|
|
|
- struct ipw2100_param *param, int plen)
|
|
|
|
-{
|
|
|
|
-
|
|
|
|
- struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
|
- struct ieee80211_device *ieee = priv->ieee;
|
|
|
|
- u8 *buf;
|
|
|
|
-
|
|
|
|
- if (!ieee->wpa_enabled)
|
|
|
|
- return -EOPNOTSUPP;
|
|
|
|
-
|
|
|
|
- if (param->u.wpa_ie.len > MAX_WPA_IE_LEN ||
|
|
|
|
- (param->u.wpa_ie.len && param->u.wpa_ie.data == NULL))
|
|
|
|
- return -EINVAL;
|
|
|
|
-
|
|
|
|
- if (param->u.wpa_ie.len) {
|
|
|
|
- buf = kmalloc(param->u.wpa_ie.len, GFP_KERNEL);
|
|
|
|
- if (buf == NULL)
|
|
|
|
- return -ENOMEM;
|
|
|
|
-
|
|
|
|
- memcpy(buf, param->u.wpa_ie.data, param->u.wpa_ie.len);
|
|
|
|
-
|
|
|
|
- kfree(ieee->wpa_ie);
|
|
|
|
- ieee->wpa_ie = buf;
|
|
|
|
- ieee->wpa_ie_len = param->u.wpa_ie.len;
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- kfree(ieee->wpa_ie);
|
|
|
|
- ieee->wpa_ie = NULL;
|
|
|
|
- ieee->wpa_ie_len = 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ipw2100_wpa_assoc_frame(priv, ieee->wpa_ie, ieee->wpa_ie_len);
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* implementation borrowed from hostap driver */
|
|
|
|
-
|
|
|
|
-static int ipw2100_wpa_set_encryption(struct net_device *dev,
|
|
|
|
- struct ipw2100_param *param,
|
|
|
|
- int param_len)
|
|
|
|
-{
|
|
|
|
- int ret = 0;
|
|
|
|
- struct ipw2100_priv *priv = ieee80211_priv(dev);
|
|
|
|
- struct ieee80211_device *ieee = priv->ieee;
|
|
|
|
- struct ieee80211_crypto_ops *ops;
|
|
|
|
- struct ieee80211_crypt_data **crypt;
|
|
|
|
-
|
|
|
|
- struct ieee80211_security sec = {
|
|
|
|
- .flags = 0,
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- param->u.crypt.err = 0;
|
|
|
|
- param->u.crypt.alg[IPW2100_CRYPT_ALG_NAME_LEN - 1] = '\0';
|
|
|
|
-
|
|
|
|
- if (param_len !=
|
|
|
|
- (int)((char *)param->u.crypt.key - (char *)param) +
|
|
|
|
- param->u.crypt.key_len) {
|
|
|
|
- IPW_DEBUG_INFO("Len mismatch %d, %d\n", param_len,
|
|
|
|
- param->u.crypt.key_len);
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
- if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
|
|
|
|
- param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
|
|
|
|
- param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) {
|
|
|
|
- if (param->u.crypt.idx >= WEP_KEYS)
|
|
|
|
- return -EINVAL;
|
|
|
|
- crypt = &ieee->crypt[param->u.crypt.idx];
|
|
|
|
- } else {
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sec.flags |= SEC_ENABLED | SEC_ENCRYPT;
|
|
|
|
- if (strcmp(param->u.crypt.alg, "none") == 0) {
|
|
|
|
- if (crypt) {
|
|
|
|
- sec.enabled = 0;
|
|
|
|
- sec.encrypt = 0;
|
|
|
|
- sec.level = SEC_LEVEL_0;
|
|
|
|
- sec.flags |= SEC_LEVEL;
|
|
|
|
- ieee80211_crypt_delayed_deinit(ieee, crypt);
|
|
|
|
- }
|
|
|
|
- goto done;
|
|
|
|
- }
|
|
|
|
- sec.enabled = 1;
|
|
|
|
- sec.encrypt = 1;
|
|
|
|
-
|
|
|
|
- ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
|
|
|
- if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) {
|
|
|
|
- request_module("ieee80211_crypt_wep");
|
|
|
|
- ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
|
|
|
- } else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) {
|
|
|
|
- request_module("ieee80211_crypt_tkip");
|
|
|
|
- ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
|
|
|
- } else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) {
|
|
|
|
- request_module("ieee80211_crypt_ccmp");
|
|
|
|
- ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
|
|
|
- }
|
|
|
|
- if (ops == NULL) {
|
|
|
|
- IPW_DEBUG_INFO("%s: unknown crypto alg '%s'\n",
|
|
|
|
- dev->name, param->u.crypt.alg);
|
|
|
|
- param->u.crypt.err = IPW2100_CRYPT_ERR_UNKNOWN_ALG;
|
|
|
|
- ret = -EINVAL;
|
|
|
|
- goto done;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (*crypt == NULL || (*crypt)->ops != ops) {
|
|
|
|
- struct ieee80211_crypt_data *new_crypt;
|
|
|
|
-
|
|
|
|
- ieee80211_crypt_delayed_deinit(ieee, crypt);
|
|
|
|
-
|
|
|
|
- new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), GFP_KERNEL);
|
|
|
|
- if (new_crypt == NULL) {
|
|
|
|
- ret = -ENOMEM;
|
|
|
|
- goto done;
|
|
|
|
- }
|
|
|
|
- new_crypt->ops = ops;
|
|
|
|
- if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
|
|
|
- new_crypt->priv =
|
|
|
|
- new_crypt->ops->init(param->u.crypt.idx);
|
|
|
|
-
|
|
|
|
- if (new_crypt->priv == NULL) {
|
|
|
|
- kfree(new_crypt);
|
|
|
|
- param->u.crypt.err =
|
|
|
|
- IPW2100_CRYPT_ERR_CRYPT_INIT_FAILED;
|
|
|
|
- ret = -EINVAL;
|
|
|
|
- goto done;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- *crypt = new_crypt;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (param->u.crypt.key_len > 0 && (*crypt)->ops->set_key &&
|
|
|
|
- (*crypt)->ops->set_key(param->u.crypt.key,
|
|
|
|
- param->u.crypt.key_len, param->u.crypt.seq,
|
|
|
|
- (*crypt)->priv) < 0) {
|
|
|
|
- IPW_DEBUG_INFO("%s: key setting failed\n", dev->name);
|
|
|
|
- param->u.crypt.err = IPW2100_CRYPT_ERR_KEY_SET_FAILED;
|
|
|
|
- ret = -EINVAL;
|
|
|
|
- goto done;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (param->u.crypt.set_tx) {
|
|
|
|
- ieee->tx_keyidx = param->u.crypt.idx;
|
|
|
|
- sec.active_key = param->u.crypt.idx;
|
|
|
|
- sec.flags |= SEC_ACTIVE_KEY;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (ops->name != NULL) {
|
|
|
|
-
|
|
|
|
- if (strcmp(ops->name, "WEP") == 0) {
|
|
|
|
- memcpy(sec.keys[param->u.crypt.idx],
|
|
|
|
- param->u.crypt.key, param->u.crypt.key_len);
|
|
|
|
- sec.key_sizes[param->u.crypt.idx] =
|
|
|
|
- param->u.crypt.key_len;
|
|
|
|
- sec.flags |= (1 << param->u.crypt.idx);
|
|
|
|
- sec.flags |= SEC_LEVEL;
|
|
|
|
- sec.level = SEC_LEVEL_1;
|
|
|
|
- } else if (strcmp(ops->name, "TKIP") == 0) {
|
|
|
|
- sec.flags |= SEC_LEVEL;
|
|
|
|
- sec.level = SEC_LEVEL_2;
|
|
|
|
- } else if (strcmp(ops->name, "CCMP") == 0) {
|
|
|
|
- sec.flags |= SEC_LEVEL;
|
|
|
|
- sec.level = SEC_LEVEL_3;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- done:
|
|
|
|
- if (ieee->set_security)
|
|
|
|
- ieee->set_security(ieee->dev, &sec);
|
|
|
|
-
|
|
|
|
- /* Do not reset port if card is in Managed mode since resetting will
|
|
|
|
- * generate new IEEE 802.11 authentication which may end up in looping
|
|
|
|
- * with IEEE 802.1X. If your hardware requires a reset after WEP
|
|
|
|
- * configuration (for example... Prism2), implement the reset_port in
|
|
|
|
- * the callbacks structures used to initialize the 802.11 stack. */
|
|
|
|
- if (ieee->reset_on_keychange &&
|
|
|
|
- ieee->iw_mode != IW_MODE_INFRA &&
|
|
|
|
- ieee->reset_port && ieee->reset_port(dev)) {
|
|
|
|
- IPW_DEBUG_INFO("%s: reset_port failed\n", dev->name);
|
|
|
|
- param->u.crypt.err = IPW2100_CRYPT_ERR_CARD_CONF_FAILED;
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return ret;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int ipw2100_wpa_supplicant(struct net_device *dev, struct iw_point *p)
|
|
|
|
-{
|
|
|
|
-
|
|
|
|
- struct ipw2100_param *param;
|
|
|
|
- int ret = 0;
|
|
|
|
-
|
|
|
|
- IPW_DEBUG_IOCTL("wpa_supplicant: len=%d\n", p->length);
|
|
|
|
-
|
|
|
|
- if (p->length < sizeof(struct ipw2100_param) || !p->pointer)
|
|
|
|
- return -EINVAL;
|
|
|
|
-
|
|
|
|
- param = (struct ipw2100_param *)kmalloc(p->length, GFP_KERNEL);
|
|
|
|
- if (param == NULL)
|
|
|
|
- return -ENOMEM;
|
|
|
|
-
|
|
|
|
- if (copy_from_user(param, p->pointer, p->length)) {
|
|
|
|
- kfree(param);
|
|
|
|
- return -EFAULT;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- switch (param->cmd) {
|
|
|
|
-
|
|
|
|
- case IPW2100_CMD_SET_WPA_PARAM:
|
|
|
|
- ret = ipw2100_wpa_set_param(dev, param->u.wpa_param.name,
|
|
|
|
- param->u.wpa_param.value);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case IPW2100_CMD_SET_WPA_IE:
|
|
|
|
- ret = ipw2100_wpa_set_wpa_ie(dev, param, p->length);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case IPW2100_CMD_SET_ENCRYPTION:
|
|
|
|
- ret = ipw2100_wpa_set_encryption(dev, param, p->length);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case IPW2100_CMD_MLME:
|
|
|
|
- ret = ipw2100_wpa_mlme(dev, param->u.mlme.command,
|
|
|
|
- param->u.mlme.reason_code);
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- printk(KERN_ERR DRV_NAME
|
|
|
|
- ": %s: Unknown WPA supplicant request: %d\n", dev->name,
|
|
|
|
- param->cmd);
|
|
|
|
- ret = -EOPNOTSUPP;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (ret == 0 && copy_to_user(p->pointer, param, p->length))
|
|
|
|
- ret = -EFAULT;
|
|
|
|
-
|
|
|
|
- kfree(param);
|
|
|
|
- return ret;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int ipw2100_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|
|
|
-{
|
|
|
|
- struct iwreq *wrq = (struct iwreq *)rq;
|
|
|
|
- int ret = -1;
|
|
|
|
- switch (cmd) {
|
|
|
|
- case IPW2100_IOCTL_WPA_SUPPLICANT:
|
|
|
|
- ret = ipw2100_wpa_supplicant(dev, &wrq->u.data);
|
|
|
|
- return ret;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- return -EOPNOTSUPP;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return -EOPNOTSUPP;
|
|
|
|
-}
|
|
|
|
-#endif /* WIRELESS_EXT < 18 */
|
|
|
|
-
|
|
|
|
static void ipw_ethtool_get_drvinfo(struct net_device *dev,
|
|
static void ipw_ethtool_get_drvinfo(struct net_device *dev,
|
|
struct ethtool_drvinfo *info)
|
|
struct ethtool_drvinfo *info)
|
|
{
|
|
{
|
|
@@ -6337,9 +5914,6 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
|
|
dev->open = ipw2100_open;
|
|
dev->open = ipw2100_open;
|
|
dev->stop = ipw2100_close;
|
|
dev->stop = ipw2100_close;
|
|
dev->init = ipw2100_net_init;
|
|
dev->init = ipw2100_net_init;
|
|
-#if WIRELESS_EXT < 18
|
|
|
|
- dev->do_ioctl = ipw2100_ioctl;
|
|
|
|
-#endif
|
|
|
|
dev->get_stats = ipw2100_stats;
|
|
dev->get_stats = ipw2100_stats;
|
|
dev->ethtool_ops = &ipw2100_ethtool_ops;
|
|
dev->ethtool_ops = &ipw2100_ethtool_ops;
|
|
dev->tx_timeout = ipw2100_tx_timeout;
|
|
dev->tx_timeout = ipw2100_tx_timeout;
|
|
@@ -7855,7 +7429,6 @@ static int ipw2100_wx_get_power(struct net_device *dev,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-#if WIRELESS_EXT > 17
|
|
|
|
/*
|
|
/*
|
|
* WE-18 WPA support
|
|
* WE-18 WPA support
|
|
*/
|
|
*/
|
|
@@ -8117,7 +7690,6 @@ static int ipw2100_wx_set_mlme(struct net_device *dev,
|
|
}
|
|
}
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
-#endif /* WIRELESS_EXT > 17 */
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
*
|
|
*
|
|
@@ -8350,11 +7922,7 @@ static iw_handler ipw2100_wx_handlers[] = {
|
|
NULL, /* SIOCWIWTHRSPY */
|
|
NULL, /* SIOCWIWTHRSPY */
|
|
ipw2100_wx_set_wap, /* SIOCSIWAP */
|
|
ipw2100_wx_set_wap, /* SIOCSIWAP */
|
|
ipw2100_wx_get_wap, /* SIOCGIWAP */
|
|
ipw2100_wx_get_wap, /* SIOCGIWAP */
|
|
-#if WIRELESS_EXT > 17
|
|
|
|
ipw2100_wx_set_mlme, /* SIOCSIWMLME */
|
|
ipw2100_wx_set_mlme, /* SIOCSIWMLME */
|
|
-#else
|
|
|
|
- NULL, /* -- hole -- */
|
|
|
|
-#endif
|
|
|
|
NULL, /* SIOCGIWAPLIST -- deprecated */
|
|
NULL, /* SIOCGIWAPLIST -- deprecated */
|
|
ipw2100_wx_set_scan, /* SIOCSIWSCAN */
|
|
ipw2100_wx_set_scan, /* SIOCSIWSCAN */
|
|
ipw2100_wx_get_scan, /* SIOCGIWSCAN */
|
|
ipw2100_wx_get_scan, /* SIOCGIWSCAN */
|
|
@@ -8378,7 +7946,6 @@ static iw_handler ipw2100_wx_handlers[] = {
|
|
ipw2100_wx_get_encode, /* SIOCGIWENCODE */
|
|
ipw2100_wx_get_encode, /* SIOCGIWENCODE */
|
|
ipw2100_wx_set_power, /* SIOCSIWPOWER */
|
|
ipw2100_wx_set_power, /* SIOCSIWPOWER */
|
|
ipw2100_wx_get_power, /* SIOCGIWPOWER */
|
|
ipw2100_wx_get_power, /* SIOCGIWPOWER */
|
|
-#if WIRELESS_EXT > 17
|
|
|
|
NULL, /* -- hole -- */
|
|
NULL, /* -- hole -- */
|
|
NULL, /* -- hole -- */
|
|
NULL, /* -- hole -- */
|
|
ipw2100_wx_set_genie, /* SIOCSIWGENIE */
|
|
ipw2100_wx_set_genie, /* SIOCSIWGENIE */
|
|
@@ -8388,7 +7955,6 @@ static iw_handler ipw2100_wx_handlers[] = {
|
|
ipw2100_wx_set_encodeext, /* SIOCSIWENCODEEXT */
|
|
ipw2100_wx_set_encodeext, /* SIOCSIWENCODEEXT */
|
|
ipw2100_wx_get_encodeext, /* SIOCGIWENCODEEXT */
|
|
ipw2100_wx_get_encodeext, /* SIOCGIWENCODEEXT */
|
|
NULL, /* SIOCSIWPMKSA */
|
|
NULL, /* SIOCSIWPMKSA */
|
|
-#endif
|
|
|
|
};
|
|
};
|
|
|
|
|
|
#define IPW2100_PRIV_SET_MONITOR SIOCIWFIRSTPRIV
|
|
#define IPW2100_PRIV_SET_MONITOR SIOCIWFIRSTPRIV
|