|
@@ -5254,11 +5254,7 @@ static int set_wep_key(struct airo_info *ai, u16 index, const char *key,
|
|
|
WepKeyRid wkr;
|
|
|
int rc;
|
|
|
|
|
|
- if (keylen == 0) {
|
|
|
- airo_print_err(ai->dev->name, "%s: key length to set was zero",
|
|
|
- __func__);
|
|
|
- return -1;
|
|
|
- }
|
|
|
+ WARN_ON(keylen == 0);
|
|
|
|
|
|
memset(&wkr, 0, sizeof(wkr));
|
|
|
wkr.len = cpu_to_le16(sizeof(wkr));
|
|
@@ -6405,11 +6401,7 @@ static int airo_set_encode(struct net_device *dev,
|
|
|
if (dwrq->length > MIN_KEY_SIZE)
|
|
|
key.len = MAX_KEY_SIZE;
|
|
|
else
|
|
|
- if (dwrq->length > 0)
|
|
|
- key.len = MIN_KEY_SIZE;
|
|
|
- else
|
|
|
- /* Disable the key */
|
|
|
- key.len = 0;
|
|
|
+ key.len = MIN_KEY_SIZE;
|
|
|
/* Check if the key is not marked as invalid */
|
|
|
if(!(dwrq->flags & IW_ENCODE_NOKEY)) {
|
|
|
/* Cleanup */
|
|
@@ -6590,12 +6582,22 @@ static int airo_set_encodeext(struct net_device *dev,
|
|
|
default:
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
- /* Send the key to the card */
|
|
|
- rc = set_wep_key(local, idx, key.key, key.len, perm, 1);
|
|
|
- if (rc < 0) {
|
|
|
- airo_print_err(local->dev->name, "failed to set WEP key"
|
|
|
- " at index %d: %d.", idx, rc);
|
|
|
- return rc;
|
|
|
+ if (key.len == 0) {
|
|
|
+ rc = set_wep_tx_idx(local, idx, perm, 1);
|
|
|
+ if (rc < 0) {
|
|
|
+ airo_print_err(local->dev->name,
|
|
|
+ "failed to set WEP transmit index to %d: %d.",
|
|
|
+ idx, rc);
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ rc = set_wep_key(local, idx, key.key, key.len, perm, 1);
|
|
|
+ if (rc < 0) {
|
|
|
+ airo_print_err(local->dev->name,
|
|
|
+ "failed to set WEP key at index %d: %d.",
|
|
|
+ idx, rc);
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|