ath6kl: Report PMKSA candidate events through cfg80211
This allows RSN pre-authentication to be used when roaming decisions are done in the target. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
011a36e119
commit
865121361f
|
@ -1097,6 +1097,35 @@ static int ath6kl_wmi_scan_complete_rx(struct wmi *wmi, u8 *datap, int len)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ath6kl_wmi_neighbor_report_event_rx(struct wmi *wmi, u8 *datap,
|
||||||
|
int len)
|
||||||
|
{
|
||||||
|
struct wmi_neighbor_report_event *ev;
|
||||||
|
u8 i;
|
||||||
|
|
||||||
|
if (len < sizeof(*ev))
|
||||||
|
return -EINVAL;
|
||||||
|
ev = (struct wmi_neighbor_report_event *) datap;
|
||||||
|
if (sizeof(*ev) + ev->num_neighbors * sizeof(struct wmi_neighbor_info)
|
||||||
|
> len) {
|
||||||
|
ath6kl_dbg(ATH6KL_DBG_WMI, "truncated neighbor event "
|
||||||
|
"(num=%d len=%d)\n", ev->num_neighbors, len);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
for (i = 0; i < ev->num_neighbors; i++) {
|
||||||
|
ath6kl_dbg(ATH6KL_DBG_WMI, "neighbor %d/%d - %pM 0x%x\n",
|
||||||
|
i + 1, ev->num_neighbors, ev->neighbor[i].bssid,
|
||||||
|
ev->neighbor[i].bss_flags);
|
||||||
|
cfg80211_pmksa_candidate_notify(wmi->parent_dev->net_dev, i,
|
||||||
|
ev->neighbor[i].bssid,
|
||||||
|
!!(ev->neighbor[i].bss_flags &
|
||||||
|
WMI_PREAUTH_CAPABLE_BSS),
|
||||||
|
GFP_ATOMIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Target is reporting a programming error. This is for
|
* Target is reporting a programming error. This is for
|
||||||
* developer aid only. Target only checks a few common violations
|
* developer aid only. Target only checks a few common violations
|
||||||
|
@ -2870,6 +2899,7 @@ int ath6kl_wmi_control_rx(struct wmi *wmi, struct sk_buff *skb)
|
||||||
break;
|
break;
|
||||||
case WMI_NEIGHBOR_REPORT_EVENTID:
|
case WMI_NEIGHBOR_REPORT_EVENTID:
|
||||||
ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_NEIGHBOR_REPORT_EVENTID\n");
|
ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_NEIGHBOR_REPORT_EVENTID\n");
|
||||||
|
ret = ath6kl_wmi_neighbor_report_event_rx(wmi, datap, len);
|
||||||
break;
|
break;
|
||||||
case WMI_SCAN_COMPLETE_EVENTID:
|
case WMI_SCAN_COMPLETE_EVENTID:
|
||||||
ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_SCAN_COMPLETE_EVENTID\n");
|
ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_SCAN_COMPLETE_EVENTID\n");
|
||||||
|
|
|
@ -1439,6 +1439,16 @@ enum wmi_bss_flags {
|
||||||
WMI_PMKID_VALID_BSS = 0x02,
|
WMI_PMKID_VALID_BSS = 0x02,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct wmi_neighbor_info {
|
||||||
|
u8 bssid[ETH_ALEN];
|
||||||
|
u8 bss_flags; /* enum wmi_bss_flags */
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct wmi_neighbor_report_event {
|
||||||
|
u8 num_neighbors;
|
||||||
|
struct wmi_neighbor_info neighbor[0];
|
||||||
|
} __packed;
|
||||||
|
|
||||||
/* TKIP MIC Error Event */
|
/* TKIP MIC Error Event */
|
||||||
struct wmi_tkip_micerr_event {
|
struct wmi_tkip_micerr_event {
|
||||||
u8 key_id;
|
u8 key_id;
|
||||||
|
|
Loading…
Reference in New Issue