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

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

    HOSTAPD_DEBUG(HOSTAPD_DEBUG_MINIMAL, "  New STA\n");
    if (hapd->num_sta >= MAX_STA_COUNT) {
        /* FIX: might try to remove some old STAs first? */
        printf("  no more room for new STAs (%d/%d)\n",
               hapd->num_sta, MAX_STA_COUNT);
        return NULL;
    }

    sta = (struct sta_info *) malloc(sizeof(struct sta_info));
    if (sta == NULL) {
        printf("  malloc failed\n");
        return NULL;
    }
    memset(sta, 0, sizeof(struct sta_info));
    sta->acct_interim_interval = hapd->conf->radius_acct_interim_interval;

    /* initialize STA info data */
    eloop_register_timeout(AP_MAX_INACTIVITY, 0, ap_handle_timer,
                           hapd, sta);
    memcpy(sta->addr, addr, ETH_ALEN);
    sta->next = hapd->sta_list;
    hapd->sta_list = sta;
    hapd->num_sta++;
    ap_sta_hash_add(hapd, sta);

    return sta;
}
Esempio 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)
		return sta;

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

	sta = wpa_zalloc(sizeof(struct sta_info));
	if (sta == NULL) {
		printf("  malloc failed\n");
		return NULL;
	}
	sta->acct_interim_interval = hapd->conf->radius->acct_interim_interval;

	/* initialize STA info data */
	eloop_register_timeout(hapd->conf->ap_max_inactivity, 0,
			       ap_handle_timer, hapd, sta);
	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;

	return sta;
}
Esempio 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;
    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;
}
Esempio n. 4
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;
}
Esempio n. 5
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;
}