static void ieee802_1x_dump_state(FILE *f, const char *prefix, struct sta_info *sta) { struct eapol_state_machine *sm = sta->eapol_sm; if (sm == NULL) return; fprintf(f, "%sIEEE 802.1X:\n", prefix); if (sm->identity) { size_t i; fprintf(f, "%sidentity=", prefix); for (i = 0; i < sm->identity_len; i++) fprint_char(f, sm->identity[i]); fprintf(f, "\n"); } fprintf(f, "%slast EAP type: Authentication Server: %d (%s) " "Supplicant: %d (%s)\n", prefix, sm->eap_type_authsrv, eap_server_get_name(0, sm->eap_type_authsrv), sm->eap_type_supp, eap_server_get_name(0, sm->eap_type_supp)); fprintf(f, "%scached_packets=%s\n", prefix, sm->last_recv_radius ? "[RX RADIUS]" : ""); eapol_auth_dump_state(f, prefix, sm); }
int hostapd_ctrl_iface_sta(struct hostapd_data *hapd, const char *txtaddr, char *buf, size_t buflen) { u8 addr[ETH_ALEN]; int ret; const char *pos; struct sta_info *sta; if (hwaddr_aton(txtaddr, addr)) { ret = os_snprintf(buf, buflen, "FAIL\n"); if (os_snprintf_error(buflen, ret)) return 0; return ret; } sta = ap_get_sta(hapd, addr); if (sta == NULL) return -1; pos = os_strchr(txtaddr, ' '); if (pos) { pos++; #ifdef HOSTAPD_DUMP_STATE if (os_strcmp(pos, "eapol") == 0) { if (sta->eapol_sm == NULL) return -1; return eapol_auth_dump_state(sta->eapol_sm, buf, buflen); } #endif /* HOSTAPD_DUMP_STATE */ return -1; } ret = hostapd_ctrl_iface_sta_mib(hapd, sta, buf, buflen); ret += fst_ctrl_iface_mb_info(addr, buf + ret, buflen - ret); return ret; }