Ejemplo n.º 1
0
struct sta_info * ap_sta_add(struct hostapd_data *hapd, const u8 *addr)
{
    struct sta_info *sta;

    sta = ap_get_sta(hapd, addr);
    if (sta)
        return sta;

    wpa_printf(MSG_DEBUG, "  New STA");
    if (hapd->num_sta >= hapd->conf->max_num_sta) {
        /* FIX: might try to remove some old STAs first? */
        wpa_printf(MSG_DEBUG, "no more room for new STAs (%d/%d)",
                   hapd->num_sta, hapd->conf->max_num_sta);
        return NULL;
    }

    sta = os_zalloc(sizeof(struct sta_info));
    if (sta == NULL) {
        wpa_printf(MSG_ERROR, "malloc failed");
        return NULL;
    }
    sta->acct_interim_interval = hapd->conf->acct_interim_interval;
    if (accounting_sta_get_id(hapd, sta) < 0) {
        os_free(sta);
        return NULL;
    }

    if (!(hapd->iface->drv_flags & WPA_DRIVER_FLAGS_INACTIVITY_TIMER)) {
        wpa_printf(MSG_DEBUG, "%s: register ap_handle_timer timeout "
                   "for " MACSTR " (%d seconds - ap_max_inactivity)",
                   __func__, MAC2STR(addr),
                   hapd->conf->ap_max_inactivity);
        eloop_register_timeout(hapd->conf->ap_max_inactivity, 0,
                               ap_handle_timer, hapd, sta);
    }

    /* initialize STA info data */
    os_memcpy(sta->addr, addr, ETH_ALEN);
    sta->next = hapd->sta_list;
    hapd->sta_list = sta;
    hapd->num_sta++;
    ap_sta_hash_add(hapd, sta);
    ap_sta_remove_in_other_bss(hapd, sta);
    sta->last_seq_ctrl = WLAN_INVALID_MGMT_SEQ;
    dl_list_init(&sta->ip6addr);

#ifdef CONFIG_TAXONOMY
    sta_track_claim_taxonomy_info(hapd->iface, addr,
                                  &sta->probe_ie_taxonomy);
#endif /* CONFIG_TAXONOMY */

    return sta;
}
Ejemplo n.º 2
0
struct sta_info * ap_sta_add(struct hostapd_data *hapd, const u8 *addr)
{
	struct sta_info *sta;

	sta = ap_get_sta(hapd, addr);
	if (sta)
	{
		printf("sta exists\n");
		return sta;
	}
	wpa_printf(MSG_DEBUG, "  New STA");
	printf("New Sta\n");
	if (hapd->num_sta >= hapd->conf->max_num_sta) {
		/* FIX: might try to remove some old STAs first? */
		wpa_printf(MSG_DEBUG, "no more room for new STAs (%d/%d)",hapd->num_sta, hapd->conf->max_num_sta);
		printf("Space problem\n");
		return NULL;
	}

	sta = os_zalloc(sizeof(struct sta_info));
	if (sta == NULL) {
		wpa_printf(MSG_ERROR, "malloc failed");
		printf("malloc problem\n");
		return NULL;
	}
	sta->acct_interim_interval = hapd->conf->acct_interim_interval;
	accounting_sta_get_id(hapd, sta);

	/* initialize STA info data */
	wpa_printf(MSG_DEBUG, "%s: register ap_handle_timer timeout "
		   "for " MACSTR " (%d seconds - ap_max_inactivity)",
		   __func__, MAC2STR(addr),
		   hapd->conf->ap_max_inactivity);
	eloop_register_timeout(hapd->conf->ap_max_inactivity, 0,
			       ap_handle_timer, hapd, sta);
	os_memcpy(sta->addr, addr, ETH_ALEN);
	sta->next = hapd->sta_list;
	hapd->sta_list = sta;
	hapd->num_sta++;
	ap_sta_hash_add(hapd, sta);
	sta->ssid = &hapd->conf->ssid;
	ap_sta_remove_in_other_bss(hapd, sta);
	printf("Sta added!!\n");
	return sta;
}
Ejemplo n.º 3
0
struct sta_info * ap_sta_add(struct hostapd_data *hapd, const u8 *addr)
{
	struct sta_info *sta;

	sta = ap_get_sta(hapd, addr);
	if (sta)
		return sta;

	wpa_printf(MSG_DEBUG, "  New STA");
	if (hapd->num_sta >= hapd->conf->max_num_sta) {
		/* FIX: might try to remove some old STAs first? */
		wpa_printf(MSG_DEBUG, "no more room for new STAs (%d/%d)",
			   hapd->num_sta, hapd->conf->max_num_sta);
		return NULL;
	}

	sta = os_zalloc(sizeof(struct sta_info));
	if (sta == NULL) {
		wpa_printf(MSG_ERROR, "malloc failed");
		return NULL;
	}
	sta->acct_interim_interval = hapd->conf->acct_interim_interval;

	/* initialize STA info data */
	eloop_register_timeout(hapd->conf->ap_max_inactivity, 0,
			       ap_handle_timer, hapd, sta);
	os_memcpy(sta->addr, addr, ETH_ALEN);
	sta->next = hapd->sta_list;
	hapd->sta_list = sta;
	hapd->num_sta++;
	ap_sta_hash_add(hapd, sta);
	sta->ssid = &hapd->conf->ssid;
	ap_sta_remove_in_other_bss(hapd, sta);

	return sta;
}