diff options
Diffstat (limited to 'net/wireless/sme.c')
-rw-r--r-- | net/wireless/sme.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/net/wireless/sme.c b/net/wireless/sme.c index a8c2d6b877ae..b7b6ff8be553 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c | |||
@@ -250,7 +250,8 @@ static struct cfg80211_bss *cfg80211_get_conn_bss(struct wireless_dev *wdev) | |||
250 | if (wdev->conn->params.privacy) | 250 | if (wdev->conn->params.privacy) |
251 | capa |= WLAN_CAPABILITY_PRIVACY; | 251 | capa |= WLAN_CAPABILITY_PRIVACY; |
252 | 252 | ||
253 | bss = cfg80211_get_bss(wdev->wiphy, NULL, wdev->conn->params.bssid, | 253 | bss = cfg80211_get_bss(wdev->wiphy, wdev->conn->params.channel, |
254 | wdev->conn->params.bssid, | ||
254 | wdev->conn->params.ssid, | 255 | wdev->conn->params.ssid, |
255 | wdev->conn->params.ssid_len, | 256 | wdev->conn->params.ssid_len, |
256 | WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_PRIVACY, | 257 | WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_PRIVACY, |
@@ -411,7 +412,8 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, | |||
411 | 412 | ||
412 | ASSERT_WDEV_LOCK(wdev); | 413 | ASSERT_WDEV_LOCK(wdev); |
413 | 414 | ||
414 | if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) | 415 | if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && |
416 | wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) | ||
415 | return; | 417 | return; |
416 | 418 | ||
417 | if (wdev->sme_state != CFG80211_SME_CONNECTING) | 419 | if (wdev->sme_state != CFG80211_SME_CONNECTING) |
@@ -469,7 +471,10 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, | |||
469 | } | 471 | } |
470 | 472 | ||
471 | if (!bss) | 473 | if (!bss) |
472 | bss = cfg80211_get_bss(wdev->wiphy, NULL, bssid, | 474 | bss = cfg80211_get_bss(wdev->wiphy, |
475 | wdev->conn ? wdev->conn->params.channel : | ||
476 | NULL, | ||
477 | bssid, | ||
473 | wdev->ssid, wdev->ssid_len, | 478 | wdev->ssid, wdev->ssid_len, |
474 | WLAN_CAPABILITY_ESS, | 479 | WLAN_CAPABILITY_ESS, |
475 | WLAN_CAPABILITY_ESS); | 480 | WLAN_CAPABILITY_ESS); |
@@ -537,7 +542,9 @@ void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, | |||
537 | } | 542 | } |
538 | EXPORT_SYMBOL(cfg80211_connect_result); | 543 | EXPORT_SYMBOL(cfg80211_connect_result); |
539 | 544 | ||
540 | void __cfg80211_roamed(struct wireless_dev *wdev, const u8 *bssid, | 545 | void __cfg80211_roamed(struct wireless_dev *wdev, |
546 | struct ieee80211_channel *channel, | ||
547 | const u8 *bssid, | ||
541 | const u8 *req_ie, size_t req_ie_len, | 548 | const u8 *req_ie, size_t req_ie_len, |
542 | const u8 *resp_ie, size_t resp_ie_len) | 549 | const u8 *resp_ie, size_t resp_ie_len) |
543 | { | 550 | { |
@@ -548,7 +555,8 @@ void __cfg80211_roamed(struct wireless_dev *wdev, const u8 *bssid, | |||
548 | 555 | ||
549 | ASSERT_WDEV_LOCK(wdev); | 556 | ASSERT_WDEV_LOCK(wdev); |
550 | 557 | ||
551 | if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) | 558 | if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && |
559 | wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) | ||
552 | return; | 560 | return; |
553 | 561 | ||
554 | if (wdev->sme_state != CFG80211_SME_CONNECTED) | 562 | if (wdev->sme_state != CFG80211_SME_CONNECTED) |
@@ -563,7 +571,7 @@ void __cfg80211_roamed(struct wireless_dev *wdev, const u8 *bssid, | |||
563 | cfg80211_put_bss(&wdev->current_bss->pub); | 571 | cfg80211_put_bss(&wdev->current_bss->pub); |
564 | wdev->current_bss = NULL; | 572 | wdev->current_bss = NULL; |
565 | 573 | ||
566 | bss = cfg80211_get_bss(wdev->wiphy, NULL, bssid, | 574 | bss = cfg80211_get_bss(wdev->wiphy, channel, bssid, |
567 | wdev->ssid, wdev->ssid_len, | 575 | wdev->ssid, wdev->ssid_len, |
568 | WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); | 576 | WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); |
569 | 577 | ||
@@ -601,7 +609,9 @@ void __cfg80211_roamed(struct wireless_dev *wdev, const u8 *bssid, | |||
601 | #endif | 609 | #endif |
602 | } | 610 | } |
603 | 611 | ||
604 | void cfg80211_roamed(struct net_device *dev, const u8 *bssid, | 612 | void cfg80211_roamed(struct net_device *dev, |
613 | struct ieee80211_channel *channel, | ||
614 | const u8 *bssid, | ||
605 | const u8 *req_ie, size_t req_ie_len, | 615 | const u8 *req_ie, size_t req_ie_len, |
606 | const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp) | 616 | const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp) |
607 | { | 617 | { |
@@ -617,6 +627,7 @@ void cfg80211_roamed(struct net_device *dev, const u8 *bssid, | |||
617 | return; | 627 | return; |
618 | 628 | ||
619 | ev->type = EVENT_ROAMED; | 629 | ev->type = EVENT_ROAMED; |
630 | ev->rm.channel = channel; | ||
620 | memcpy(ev->rm.bssid, bssid, ETH_ALEN); | 631 | memcpy(ev->rm.bssid, bssid, ETH_ALEN); |
621 | ev->rm.req_ie = ((u8 *)ev) + sizeof(*ev); | 632 | ev->rm.req_ie = ((u8 *)ev) + sizeof(*ev); |
622 | ev->rm.req_ie_len = req_ie_len; | 633 | ev->rm.req_ie_len = req_ie_len; |
@@ -644,7 +655,8 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie, | |||
644 | 655 | ||
645 | ASSERT_WDEV_LOCK(wdev); | 656 | ASSERT_WDEV_LOCK(wdev); |
646 | 657 | ||
647 | if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) | 658 | if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && |
659 | wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) | ||
648 | return; | 660 | return; |
649 | 661 | ||
650 | if (wdev->sme_state != CFG80211_SME_CONNECTED) | 662 | if (wdev->sme_state != CFG80211_SME_CONNECTED) |
@@ -695,7 +707,7 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie, | |||
695 | */ | 707 | */ |
696 | if (rdev->ops->del_key) | 708 | if (rdev->ops->del_key) |
697 | for (i = 0; i < 6; i++) | 709 | for (i = 0; i < 6; i++) |
698 | rdev->ops->del_key(wdev->wiphy, dev, i, NULL); | 710 | rdev->ops->del_key(wdev->wiphy, dev, i, false, NULL); |
699 | 711 | ||
700 | #ifdef CONFIG_CFG80211_WEXT | 712 | #ifdef CONFIG_CFG80211_WEXT |
701 | memset(&wrqu, 0, sizeof(wrqu)); | 713 | memset(&wrqu, 0, sizeof(wrqu)); |