From: Chung-Hsien Hsu <[email protected]>

With FT-802.1X, driver should send a port authorized event right after
sending a roamed event. It is used to indicate that a new AP is already
authorized so 802.1X is not required.

Acked-by: Arend van Spriel <[email protected]>
Signed-off-by: Chung-Hsien Hsu <[email protected]>
Signed-off-by: Chi-Hsien Lin <[email protected]>
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 8 ++++++++
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h | 1 +
 2 files changed, 9 insertions(+)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 
b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 8ee8af4e7ec4..549efb91933c 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -1634,6 +1634,7 @@ brcmf_set_key_mgmt(struct net_device *ndev, struct 
cfg80211_connect_params *sme)
        u16 count;
 
        profile->use_fwsup = BRCMF_PROFILE_FWSUP_NONE;
+       profile->is_ft = false;
 
        if (!sme->crypto.n_akm_suites)
                return 0;
@@ -1678,11 +1679,13 @@ brcmf_set_key_mgmt(struct net_device *ndev, struct 
cfg80211_connect_params *sme)
                        break;
                case WLAN_AKM_SUITE_FT_8021X:
                        val = WPA2_AUTH_UNSPECIFIED | WPA2_AUTH_FT;
+                       profile->is_ft = true;
                        if (sme->want_1x)
                                profile->use_fwsup = BRCMF_PROFILE_FWSUP_1X;
                        break;
                case WLAN_AKM_SUITE_FT_PSK:
                        val = WPA2_AUTH_PSK | WPA2_AUTH_FT;
+                       profile->is_ft = true;
                        break;
                default:
                        bphy_err(drvr, "invalid cipher group (%d)\n",
@@ -5557,6 +5560,11 @@ brcmf_bss_roaming_done(struct brcmf_cfg80211_info *cfg,
        cfg80211_roamed(ndev, &roam_info, GFP_KERNEL);
        brcmf_dbg(CONN, "Report roaming result\n");
 
+       if (profile->use_fwsup == BRCMF_PROFILE_FWSUP_1X && profile->is_ft) {
+               cfg80211_port_authorized(ndev, profile->bssid, GFP_KERNEL);
+               brcmf_dbg(CONN, "Report port authorized\n");
+       }
+
        set_bit(BRCMF_VIF_STATUS_CONNECTED, &ifp->vif->sme_state);
        brcmf_dbg(TRACE, "Exit\n");
        return err;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h 
b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
index 9a6287f084a9..6a7dec908b6f 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
@@ -133,6 +133,7 @@ struct brcmf_cfg80211_profile {
        struct brcmf_cfg80211_security sec;
        struct brcmf_wsec_key key[BRCMF_MAX_DEFAULT_KEYS];
        enum brcmf_profile_fwsup use_fwsup;
+       bool is_ft;
 };
 
 /**
-- 
2.1.0

Reply via email to