diff options
author | John W. Linville <linville@tuxdriver.com> | 2008-10-29 11:35:05 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-11-21 11:08:17 -0500 |
commit | 274bfb8dc5ffa16cb073801bebe76ab7f4e2e73d (patch) | |
tree | 04cd3f6a062496911b56737daa6a0858b769ccd6 /net/ieee80211/ieee80211_wx.c | |
parent | dfe1bafdbac1c7b48b636fb7ace799e78170e0d6 (diff) |
lib80211: absorb crypto bits from net/ieee80211
These bits are shared already between ipw2x00 and hostap, and could
probably be shared both more cleanly and with other drivers. This
commit simply relocates the code to lib80211 and adjusts the drivers
appropriately.
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/ieee80211/ieee80211_wx.c')
-rw-r--r-- | net/ieee80211/ieee80211_wx.c | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/net/ieee80211/ieee80211_wx.c b/net/ieee80211/ieee80211_wx.c index 7cc4e5ee3660..31ea3abfc327 100644 --- a/net/ieee80211/ieee80211_wx.c +++ b/net/ieee80211/ieee80211_wx.c | |||
@@ -307,7 +307,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
307 | .flags = 0 | 307 | .flags = 0 |
308 | }; | 308 | }; |
309 | int i, key, key_provided, len; | 309 | int i, key, key_provided, len; |
310 | struct ieee80211_crypt_data **crypt; | 310 | struct lib80211_crypt_data **crypt; |
311 | int host_crypto = ieee->host_encrypt || ieee->host_decrypt || ieee->host_build_iv; | 311 | int host_crypto = ieee->host_encrypt || ieee->host_decrypt || ieee->host_build_iv; |
312 | DECLARE_SSID_BUF(ssid); | 312 | DECLARE_SSID_BUF(ssid); |
313 | 313 | ||
@@ -321,30 +321,30 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
321 | key_provided = 1; | 321 | key_provided = 1; |
322 | } else { | 322 | } else { |
323 | key_provided = 0; | 323 | key_provided = 0; |
324 | key = ieee->tx_keyidx; | 324 | key = ieee->crypt_info.tx_keyidx; |
325 | } | 325 | } |
326 | 326 | ||
327 | IEEE80211_DEBUG_WX("Key: %d [%s]\n", key, key_provided ? | 327 | IEEE80211_DEBUG_WX("Key: %d [%s]\n", key, key_provided ? |
328 | "provided" : "default"); | 328 | "provided" : "default"); |
329 | 329 | ||
330 | crypt = &ieee->crypt[key]; | 330 | crypt = &ieee->crypt_info.crypt[key]; |
331 | 331 | ||
332 | if (erq->flags & IW_ENCODE_DISABLED) { | 332 | if (erq->flags & IW_ENCODE_DISABLED) { |
333 | if (key_provided && *crypt) { | 333 | if (key_provided && *crypt) { |
334 | IEEE80211_DEBUG_WX("Disabling encryption on key %d.\n", | 334 | IEEE80211_DEBUG_WX("Disabling encryption on key %d.\n", |
335 | key); | 335 | key); |
336 | ieee80211_crypt_delayed_deinit(ieee, crypt); | 336 | lib80211_crypt_delayed_deinit(&ieee->crypt_info, crypt); |
337 | } else | 337 | } else |
338 | IEEE80211_DEBUG_WX("Disabling encryption.\n"); | 338 | IEEE80211_DEBUG_WX("Disabling encryption.\n"); |
339 | 339 | ||
340 | /* Check all the keys to see if any are still configured, | 340 | /* Check all the keys to see if any are still configured, |
341 | * and if no key index was provided, de-init them all */ | 341 | * and if no key index was provided, de-init them all */ |
342 | for (i = 0; i < WEP_KEYS; i++) { | 342 | for (i = 0; i < WEP_KEYS; i++) { |
343 | if (ieee->crypt[i] != NULL) { | 343 | if (ieee->crypt_info.crypt[i] != NULL) { |
344 | if (key_provided) | 344 | if (key_provided) |
345 | break; | 345 | break; |
346 | ieee80211_crypt_delayed_deinit(ieee, | 346 | lib80211_crypt_delayed_deinit(&ieee->crypt_info, |
347 | &ieee->crypt[i]); | 347 | &ieee->crypt_info.crypt[i]); |
348 | } | 348 | } |
349 | } | 349 | } |
350 | 350 | ||
@@ -366,21 +366,21 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
366 | strcmp((*crypt)->ops->name, "WEP") != 0) { | 366 | strcmp((*crypt)->ops->name, "WEP") != 0) { |
367 | /* changing to use WEP; deinit previously used algorithm | 367 | /* changing to use WEP; deinit previously used algorithm |
368 | * on this key */ | 368 | * on this key */ |
369 | ieee80211_crypt_delayed_deinit(ieee, crypt); | 369 | lib80211_crypt_delayed_deinit(&ieee->crypt_info, crypt); |
370 | } | 370 | } |
371 | 371 | ||
372 | if (*crypt == NULL && host_crypto) { | 372 | if (*crypt == NULL && host_crypto) { |
373 | struct ieee80211_crypt_data *new_crypt; | 373 | struct lib80211_crypt_data *new_crypt; |
374 | 374 | ||
375 | /* take WEP into use */ | 375 | /* take WEP into use */ |
376 | new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), | 376 | new_crypt = kzalloc(sizeof(struct lib80211_crypt_data), |
377 | GFP_KERNEL); | 377 | GFP_KERNEL); |
378 | if (new_crypt == NULL) | 378 | if (new_crypt == NULL) |
379 | return -ENOMEM; | 379 | return -ENOMEM; |
380 | new_crypt->ops = ieee80211_get_crypto_ops("WEP"); | 380 | new_crypt->ops = lib80211_get_crypto_ops("WEP"); |
381 | if (!new_crypt->ops) { | 381 | if (!new_crypt->ops) { |
382 | request_module("ieee80211_crypt_wep"); | 382 | request_module("lib80211_crypt_wep"); |
383 | new_crypt->ops = ieee80211_get_crypto_ops("WEP"); | 383 | new_crypt->ops = lib80211_get_crypto_ops("WEP"); |
384 | } | 384 | } |
385 | 385 | ||
386 | if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) | 386 | if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) |
@@ -391,7 +391,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
391 | new_crypt = NULL; | 391 | new_crypt = NULL; |
392 | 392 | ||
393 | printk(KERN_WARNING "%s: could not initialize WEP: " | 393 | printk(KERN_WARNING "%s: could not initialize WEP: " |
394 | "load module ieee80211_crypt_wep\n", dev->name); | 394 | "load module lib80211_crypt_wep\n", dev->name); |
395 | return -EOPNOTSUPP; | 395 | return -EOPNOTSUPP; |
396 | } | 396 | } |
397 | *crypt = new_crypt; | 397 | *crypt = new_crypt; |
@@ -440,7 +440,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
440 | if (key_provided) { | 440 | if (key_provided) { |
441 | IEEE80211_DEBUG_WX("Setting key %d to default Tx " | 441 | IEEE80211_DEBUG_WX("Setting key %d to default Tx " |
442 | "key.\n", key); | 442 | "key.\n", key); |
443 | ieee->tx_keyidx = key; | 443 | ieee->crypt_info.tx_keyidx = key; |
444 | sec.active_key = key; | 444 | sec.active_key = key; |
445 | sec.flags |= SEC_ACTIVE_KEY; | 445 | sec.flags |= SEC_ACTIVE_KEY; |
446 | } | 446 | } |
@@ -485,7 +485,7 @@ int ieee80211_wx_get_encode(struct ieee80211_device *ieee, | |||
485 | { | 485 | { |
486 | struct iw_point *erq = &(wrqu->encoding); | 486 | struct iw_point *erq = &(wrqu->encoding); |
487 | int len, key; | 487 | int len, key; |
488 | struct ieee80211_crypt_data *crypt; | 488 | struct lib80211_crypt_data *crypt; |
489 | struct ieee80211_security *sec = &ieee->sec; | 489 | struct ieee80211_security *sec = &ieee->sec; |
490 | 490 | ||
491 | IEEE80211_DEBUG_WX("GET_ENCODE\n"); | 491 | IEEE80211_DEBUG_WX("GET_ENCODE\n"); |
@@ -496,9 +496,9 @@ int ieee80211_wx_get_encode(struct ieee80211_device *ieee, | |||
496 | return -EINVAL; | 496 | return -EINVAL; |
497 | key--; | 497 | key--; |
498 | } else | 498 | } else |
499 | key = ieee->tx_keyidx; | 499 | key = ieee->crypt_info.tx_keyidx; |
500 | 500 | ||
501 | crypt = ieee->crypt[key]; | 501 | crypt = ieee->crypt_info.crypt[key]; |
502 | erq->flags = key + 1; | 502 | erq->flags = key + 1; |
503 | 503 | ||
504 | if (!sec->enabled) { | 504 | if (!sec->enabled) { |
@@ -531,8 +531,8 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee, | |||
531 | int i, idx, ret = 0; | 531 | int i, idx, ret = 0; |
532 | int group_key = 0; | 532 | int group_key = 0; |
533 | const char *alg, *module; | 533 | const char *alg, *module; |
534 | struct ieee80211_crypto_ops *ops; | 534 | struct lib80211_crypto_ops *ops; |
535 | struct ieee80211_crypt_data **crypt; | 535 | struct lib80211_crypt_data **crypt; |
536 | 536 | ||
537 | struct ieee80211_security sec = { | 537 | struct ieee80211_security sec = { |
538 | .flags = 0, | 538 | .flags = 0, |
@@ -544,17 +544,17 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee, | |||
544 | return -EINVAL; | 544 | return -EINVAL; |
545 | idx--; | 545 | idx--; |
546 | } else | 546 | } else |
547 | idx = ieee->tx_keyidx; | 547 | idx = ieee->crypt_info.tx_keyidx; |
548 | 548 | ||
549 | if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { | 549 | if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { |
550 | crypt = &ieee->crypt[idx]; | 550 | crypt = &ieee->crypt_info.crypt[idx]; |
551 | group_key = 1; | 551 | group_key = 1; |
552 | } else { | 552 | } else { |
553 | /* some Cisco APs use idx>0 for unicast in dynamic WEP */ | 553 | /* some Cisco APs use idx>0 for unicast in dynamic WEP */ |
554 | if (idx != 0 && ext->alg != IW_ENCODE_ALG_WEP) | 554 | if (idx != 0 && ext->alg != IW_ENCODE_ALG_WEP) |
555 | return -EINVAL; | 555 | return -EINVAL; |
556 | if (ieee->iw_mode == IW_MODE_INFRA) | 556 | if (ieee->iw_mode == IW_MODE_INFRA) |
557 | crypt = &ieee->crypt[idx]; | 557 | crypt = &ieee->crypt_info.crypt[idx]; |
558 | else | 558 | else |
559 | return -EINVAL; | 559 | return -EINVAL; |
560 | } | 560 | } |
@@ -563,10 +563,10 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee, | |||
563 | if ((encoding->flags & IW_ENCODE_DISABLED) || | 563 | if ((encoding->flags & IW_ENCODE_DISABLED) || |
564 | ext->alg == IW_ENCODE_ALG_NONE) { | 564 | ext->alg == IW_ENCODE_ALG_NONE) { |
565 | if (*crypt) | 565 | if (*crypt) |
566 | ieee80211_crypt_delayed_deinit(ieee, crypt); | 566 | lib80211_crypt_delayed_deinit(&ieee->crypt_info, crypt); |
567 | 567 | ||
568 | for (i = 0; i < WEP_KEYS; i++) | 568 | for (i = 0; i < WEP_KEYS; i++) |
569 | if (ieee->crypt[i] != NULL) | 569 | if (ieee->crypt_info.crypt[i] != NULL) |
570 | break; | 570 | break; |
571 | 571 | ||
572 | if (i == WEP_KEYS) { | 572 | if (i == WEP_KEYS) { |
@@ -589,15 +589,15 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee, | |||
589 | switch (ext->alg) { | 589 | switch (ext->alg) { |
590 | case IW_ENCODE_ALG_WEP: | 590 | case IW_ENCODE_ALG_WEP: |
591 | alg = "WEP"; | 591 | alg = "WEP"; |
592 | module = "ieee80211_crypt_wep"; | 592 | module = "lib80211_crypt_wep"; |
593 | break; | 593 | break; |
594 | case IW_ENCODE_ALG_TKIP: | 594 | case IW_ENCODE_ALG_TKIP: |
595 | alg = "TKIP"; | 595 | alg = "TKIP"; |
596 | module = "ieee80211_crypt_tkip"; | 596 | module = "lib80211_crypt_tkip"; |
597 | break; | 597 | break; |
598 | case IW_ENCODE_ALG_CCMP: | 598 | case IW_ENCODE_ALG_CCMP: |
599 | alg = "CCMP"; | 599 | alg = "CCMP"; |
600 | module = "ieee80211_crypt_ccmp"; | 600 | module = "lib80211_crypt_ccmp"; |
601 | break; | 601 | break; |
602 | default: | 602 | default: |
603 | IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", | 603 | IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", |
@@ -606,10 +606,10 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee, | |||
606 | goto done; | 606 | goto done; |
607 | } | 607 | } |
608 | 608 | ||
609 | ops = ieee80211_get_crypto_ops(alg); | 609 | ops = lib80211_get_crypto_ops(alg); |
610 | if (ops == NULL) { | 610 | if (ops == NULL) { |
611 | request_module(module); | 611 | request_module(module); |
612 | ops = ieee80211_get_crypto_ops(alg); | 612 | ops = lib80211_get_crypto_ops(alg); |
613 | } | 613 | } |
614 | if (ops == NULL) { | 614 | if (ops == NULL) { |
615 | IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", | 615 | IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n", |
@@ -619,9 +619,9 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee, | |||
619 | } | 619 | } |
620 | 620 | ||
621 | if (*crypt == NULL || (*crypt)->ops != ops) { | 621 | if (*crypt == NULL || (*crypt)->ops != ops) { |
622 | struct ieee80211_crypt_data *new_crypt; | 622 | struct lib80211_crypt_data *new_crypt; |
623 | 623 | ||
624 | ieee80211_crypt_delayed_deinit(ieee, crypt); | 624 | lib80211_crypt_delayed_deinit(&ieee->crypt_info, crypt); |
625 | 625 | ||
626 | new_crypt = kzalloc(sizeof(*new_crypt), GFP_KERNEL); | 626 | new_crypt = kzalloc(sizeof(*new_crypt), GFP_KERNEL); |
627 | if (new_crypt == NULL) { | 627 | if (new_crypt == NULL) { |
@@ -649,7 +649,7 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee, | |||
649 | 649 | ||
650 | skip_host_crypt: | 650 | skip_host_crypt: |
651 | if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { | 651 | if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { |
652 | ieee->tx_keyidx = idx; | 652 | ieee->crypt_info.tx_keyidx = idx; |
653 | sec.active_key = idx; | 653 | sec.active_key = idx; |
654 | sec.flags |= SEC_ACTIVE_KEY; | 654 | sec.flags |= SEC_ACTIVE_KEY; |
655 | } | 655 | } |
@@ -715,7 +715,7 @@ int ieee80211_wx_get_encodeext(struct ieee80211_device *ieee, | |||
715 | return -EINVAL; | 715 | return -EINVAL; |
716 | idx--; | 716 | idx--; |
717 | } else | 717 | } else |
718 | idx = ieee->tx_keyidx; | 718 | idx = ieee->crypt_info.tx_keyidx; |
719 | 719 | ||
720 | if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) && | 720 | if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) && |
721 | ext->alg != IW_ENCODE_ALG_WEP) | 721 | ext->alg != IW_ENCODE_ALG_WEP) |