wpa_supplicant preauthenticate过程分析

当执行

wpa_cli -p /var/run/wpa_supplicant-ath2 -i ath2 preauthenticate 88:ff:ff:12:40:01

代码分析如下:

char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
					 char *buf, size_t *resp_len)
{
    #ifdef IEEE8021X_EAPOL
        } else if (os_strncmp(buf, "PREAUTH ", 8) == 0) {
            if (wpa_supplicant_ctrl_iface_preauth(wpa_s, buf + 8))
                reply_len = -1;
    #endif /* IEEE8021X_EAPOL */
}

接下来分析wpa_supplicant_ctrl_iface_preauth函数

#ifdef IEEE8021X_EAPOL
static int wpa_supplicant_ctrl_iface_preauth(struct wpa_supplicant *wpa_s,
					     char *addr)
{
	u8 bssid[ETH_ALEN];
	struct wpa_ssid *ssid = wpa_s->current_ssid;

	if (hwaddr_aton(addr, bssid)) {
		wpa_printf(MSG_DEBUG, "CTRL_IFACE PREAUTH: invalid address "
			   "'%s'", addr);
		return -1;
	}

	wpa_printf(MSG_DEBUG, "CTRL_IFACE PREAUTH " MACSTR, MAC2STR(bssid));
	rsn_preauth_deinit(wpa_s->wpa);
	if (rsn_preauth_init(wpa_s->wpa, bssid, ssid ? &ssid->eap : NUL))
		return -1;

	return 0;
}
#endif /* IEEE8021X_EAPOL */