Beispiel #1
0
int ibss_rsn_rx_eapol(struct ibss_rsn *ibss_rsn, const u8 *src_addr,
		      const u8 *buf, size_t len)
{
	struct ibss_rsn_peer *peer;

	if (ibss_rsn == NULL)
		return -1;

	peer = ibss_rsn_get_peer(ibss_rsn, src_addr);
	if (peer)
		return ibss_rsn_process_rx_eapol(ibss_rsn, peer, buf, len);

	if (ibss_rsn_eapol_dst_supp(buf, len) > 0) {
		/*
		 * Create new IBSS peer based on an EAPOL message from the peer
		 * Authenticator.
		 */
		if (ibss_rsn_start(ibss_rsn, src_addr) < 0)
			return -1;
		return ibss_rsn_process_rx_eapol(ibss_rsn, ibss_rsn->peers,
						 buf, len);
	}

	return 0;
}
Beispiel #2
0
static void wpa_supplicant_event_ibss_rsn_start(struct wpa_supplicant *wpa_s,
						union wpa_event_data *data)
{
	if (data == NULL)
		return;
	ibss_rsn_start(wpa_s->ibss_rsn, data->ibss_rsn_start.peer);
}
Beispiel #3
0
int ibss_rsn_rx_eapol(struct ibss_rsn *ibss_rsn, const u8 *src_addr,
                      const u8 *buf, size_t len)
{
    struct ibss_rsn_peer *peer;

    if (ibss_rsn == NULL)
        return -1;

    for (peer = ibss_rsn->peers; peer; peer = peer->next) {
        if (os_memcmp(src_addr, peer->addr, ETH_ALEN) == 0)
            return ibss_rsn_process_rx_eapol(ibss_rsn, peer,
                                             buf, len);
    }

    if (ibss_rsn_eapol_dst_supp(buf, len) > 0) {
        /*
         * Create new IBSS peer based on an EAPOL message from the peer
         * Authenticator.
         */
        if (ibss_rsn_start(ibss_rsn, src_addr) < 0)
            return -1;
        return ibss_rsn_process_rx_eapol(ibss_rsn, ibss_rsn->peers,
                                         buf, len);
    }

    return 0;
}