• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/net/wireless/hostap/

Lines Matching refs:sta

49 static struct sta_info* ap_get_sta(struct ap_data *ap, u8 *sta);
51 struct sta_info *sta);
88 static void ap_sta_hash_add(struct ap_data *ap, struct sta_info *sta)
90 sta->hnext = ap->sta_hash[STA_HASH(sta->addr)];
91 ap->sta_hash[STA_HASH(sta->addr)] = sta;
94 static void ap_sta_hash_del(struct ap_data *ap, struct sta_info *sta)
98 s = ap->sta_hash[STA_HASH(sta->addr)];
100 if (memcmp(s->addr, sta->addr, ETH_ALEN) == 0) {
101 ap->sta_hash[STA_HASH(sta->addr)] = s->hnext;
105 while (s->hnext != NULL && memcmp(s->hnext->addr, sta->addr, ETH_ALEN)
112 MAC2STR(sta->addr));
115 static void ap_free_sta(struct ap_data *ap, struct sta_info *sta)
117 if (sta->ap && sta->local)
118 hostap_event_expired_sta(sta->local->dev, sta);
122 sprintf(name, MACSTR, MAC2STR(sta->addr));
126 if (sta->crypt) {
127 sta->crypt->ops->deinit(sta->crypt->priv);
128 kfree(sta->crypt);
129 sta->crypt = NULL;
132 skb_queue_purge(&sta->tx_buf);
136 if (sta->aid > 0)
137 ap->sta_aid[sta->aid - 1] = NULL;
139 if (!sta->ap && sta->u.sta.challenge)
140 kfree(sta->u.sta.challenge);
141 del_timer(&sta->timer);
144 kfree(sta);
155 static void hostap_event_new_sta(struct net_device *dev, struct sta_info *sta)
159 memcpy(wrqu.addr.sa_data, sta->addr, ETH_ALEN);
166 struct sta_info *sta)
170 memcpy(wrqu.addr.sa_data, sta->addr, ETH_ALEN);
180 struct sta_info *sta = (struct sta_info *) data;
186 if (sta == NULL || sta->local == NULL || sta->local->ap == NULL) {
191 local = sta->local;
193 was_assoc = sta->flags & WLAN_STA_ASSOC;
195 if (atomic_read(&sta->users) != 0)
197 else if ((sta->flags & WLAN_STA_PERM) && !(sta->flags & WLAN_STA_AUTH))
200 if (time_before(jiffies, sta->last_rx + ap->max_inactivity)) {
202 sta->timeout_next = STA_NULLFUNC;
203 next_time = sta->last_rx + ap->max_inactivity;
204 } else if (sta->timeout_next == STA_DISASSOC &&
205 !(sta->flags & WLAN_STA_PENDING_POLL)) {
207 sta->timeout_next = STA_NULLFUNC;
212 sta->timer.expires = next_time;
213 add_timer(&sta->timer);
217 if (sta->ap)
218 sta->timeout_next = STA_DEAUTH;
220 if (sta->timeout_next == STA_DEAUTH && !(sta->flags & WLAN_STA_PERM)) {
222 ap_sta_hash_del(ap, sta);
223 list_del(&sta->list);
225 sta->flags &= ~(WLAN_STA_AUTH | WLAN_STA_ASSOC);
226 } else if (sta->timeout_next == STA_DISASSOC)
227 sta->flags &= ~WLAN_STA_ASSOC;
229 if (was_assoc && !(sta->flags & WLAN_STA_ASSOC) && !sta->ap)
230 hostap_event_expired_sta(local->dev, sta);
232 if (sta->timeout_next == STA_DEAUTH && sta->aid > 0 &&
233 !skb_queue_empty(&sta->tx_buf)) {
234 hostap_set_tim(local, sta->aid, 0);
235 sta->flags &= ~WLAN_STA_TIM;
238 if (sta->ap) {
242 local->dev->name, MAC2STR(sta->addr));
243 hostap_wds_link_oper(local, sta->addr, WDS_DEL);
245 } else if (sta->timeout_next == STA_NULLFUNC) {
251 sta->flags |= WLAN_STA_PENDING_POLL;
254 sta->addr, ap->tx_callback_poll);
256 int deauth = sta->timeout_next == STA_DEAUTH;
262 MAC2STR(sta->addr), sta->last_rx, jiffies);
269 (char *) &resp, 2, sta->addr, 0);
272 if (sta->timeout_next == STA_DEAUTH) {
273 if (sta->flags & WLAN_STA_PERM) {
276 local->dev->name, MAC2STR(sta->addr));
278 ap_free_sta(ap, sta);
282 if (sta->timeout_next == STA_NULLFUNC) {
283 sta->timeout_next = STA_DISASSOC;
284 sta->timer.expires = jiffies + AP_DISASSOC_DELAY;
286 sta->timeout_next = STA_DEAUTH;
287 sta->timer.expires = jiffies + AP_DEAUTH_DELAY;
290 add_timer(&sta->timer);
465 struct sta_info *sta;
469 sta = ap_get_sta(ap, mac);
470 if (sta) {
471 ap_sta_hash_del(ap, sta);
472 list_del(&sta->list);
476 if (!sta)
481 (char *) &resp, 2, sta->addr, 0);
483 if ((sta->flags & WLAN_STA_ASSOC) && !sta->ap)
484 hostap_event_expired_sta(dev, sta);
486 ap_free_sta(ap, sta);
497 struct sta_info *sta;
502 sta = list_entry(ptr, struct sta_info, list);
503 ap_sta_hash_del(ap, sta);
504 list_del(&sta->list);
505 if ((sta->flags & WLAN_STA_ASSOC) && !sta->ap && sta->local)
506 hostap_event_expired_sta(sta->local->dev, sta);
507 ap_free_sta(ap, sta);
533 struct sta_info *sta = (struct sta_info *) ptr;
535 if (!sta->ap)
538 p += sprintf(p, MACSTR " %d %d %d %d '", MAC2STR(sta->addr),
539 sta->u.ap.channel, sta->last_rx_signal,
540 sta->last_rx_silence, sta->last_rx_rate);
541 for (i = 0; i < sta->u.ap.ssid_len; i++)
542 p += sprintf(p, ((sta->u.ap.ssid[i] >= 32 &&
543 sta->u.ap.ssid[i] < 127) ?
545 sta->u.ap.ssid[i]);
547 if (sta->capability & WLAN_CAPABILITY_ESS)
549 if (sta->capability & WLAN_CAPABILITY_IBSS)
551 if (sta->capability & WLAN_CAPABILITY_PRIVACY)
633 struct sta_info *sta = NULL;
663 sta = ap_get_sta(ap, hdr->addr1);
664 if (sta)
665 atomic_inc(&sta->users);
668 if (!sta) {
677 sta->flags |= WLAN_STA_AUTH;
678 sta->last_auth = jiffies;
683 if (sta)
684 atomic_dec(&sta->users);
702 struct sta_info *sta = NULL;
728 sta = ap_get_sta(ap, hdr->addr1);
729 if (sta)
730 atomic_inc(&sta->users);
733 if (!sta) {
742 if (!(sta->flags & WLAN_STA_ASSOC))
743 hostap_event_new_sta(dev, sta);
745 sta->flags |= WLAN_STA_ASSOC;
746 sta->last_assoc = jiffies;
751 if (sta)
752 atomic_dec(&sta->users);
766 struct sta_info *sta;
773 sta = ap_get_sta(ap, hdr->addr1);
774 if (sta)
775 sta->flags &= ~WLAN_STA_PENDING_POLL;
879 struct sta_info *sta = list_entry(ptr, struct sta_info, list);
880 ap_sta_hash_del(ap, sta);
881 list_del(&sta->list);
882 if ((sta->flags & WLAN_STA_ASSOC) && !sta->ap && sta->local)
883 hostap_event_expired_sta(sta->local->dev, sta);
884 ap_free_sta(ap, sta);
906 static struct sta_info* ap_get_sta(struct ap_data *ap, u8 *sta)
910 s = ap->sta_hash[STA_HASH(sta)];
911 while (s != NULL && memcmp(s->addr, sta, ETH_ALEN) != 0)
996 struct sta_info *sta = (struct sta_info *) data;
1011 sta->ap ? "AP" : "STA",
1012 MAC2STR(sta->addr), atomic_read(&sta->users), sta->aid,
1013 sta->flags,
1014 sta->flags & WLAN_STA_AUTH ? " AUTH" : "",
1015 sta->flags & WLAN_STA_ASSOC ? " ASSOC" : "",
1016 sta->flags & WLAN_STA_PS ? " PS" : "",
1017 sta->flags & WLAN_STA_TIM ? " TIM" : "",
1018 sta->flags & WLAN_STA_PERM ? " PERM" : "",
1019 sta->flags & WLAN_STA_AUTHORIZED ? " AUTHORIZED" : "",
1020 sta->flags & WLAN_STA_PENDING_POLL ? " POLL" : "",
1021 sta->capability, sta->listen_interval);
1023 for (i = 0; i < sizeof(sta->supported_rates); i++)
1024 if (sta->supported_rates[i] != 0)
1026 (sta->supported_rates[i] & 0x7f) / 2,
1027 sta->supported_rates[i] & 1 ? ".5" : "");
1036 jiffies, sta->last_auth, sta->last_assoc, sta->last_rx,
1037 sta->last_tx,
1038 sta->rx_packets, sta->tx_packets, sta->rx_bytes,
1039 sta->tx_bytes, skb_queue_len(&sta->tx_buf),
1040 sta->last_rx_silence,
1041 sta->last_rx_signal, sta->last_rx_rate / 10,
1042 sta->last_rx_rate % 10 ? ".5" : "",
1043 sta->tx_rate, sta->tx_count[0], sta->tx_count[1],
1044 sta->tx_count[2], sta->tx_count[3], sta->rx_count[0],
1045 sta->rx_count[1], sta->rx_count[2], sta->rx_count[3]);
1046 if (sta->crypt && sta->crypt->ops && sta->crypt->ops->print_stats)
1047 p = sta->crypt->ops->print_stats(p, sta->crypt->priv);
1049 if (sta->ap) {
1050 if (sta->u.ap.channel >= 0)
1051 p += sprintf(p, "channel=%d\n", sta->u.ap.channel);
1053 for (i = 0; i < sta->u.ap.ssid_len; i++)
1054 p += sprintf(p, ((sta->u.ap.ssid[i] >= 32 &&
1055 sta->u.ap.ssid[i] < 127) ?
1057 sta->u.ap.ssid[i]);
1070 struct sta_info *sta;
1079 sta = ap_get_sta(ap, entry->addr);
1080 if (sta)
1081 atomic_inc(&sta->users);
1084 if (sta) {
1085 sprintf(name, MACSTR, MAC2STR(sta->addr));
1086 sta->proc = create_proc_read_entry(
1088 prism2_sta_proc_read, sta);
1090 atomic_dec(&sta->users);
1102 struct sta_info *sta;
1104 sta = kzalloc(sizeof(struct sta_info), GFP_ATOMIC);
1105 if (sta == NULL) {
1111 sta->local = ap->local;
1112 skb_queue_head_init(&sta->tx_buf);
1113 memcpy(sta->addr, addr, ETH_ALEN);
1115 atomic_inc(&sta->users);
1117 list_add(&sta->list, &ap->sta_list);
1119 ap_sta_hash_add(ap, sta);
1128 memcpy(entry->addr, sta->addr, ETH_ALEN);
1137 init_timer(&sta->timer);
1138 sta->timer.expires = jiffies + ap->max_inactivity;
1139 sta->timer.data = (unsigned long) sta;
1140 sta->timer.function = ap_handle_timer;
1142 add_timer(&sta->timer);
1145 return sta;
1149 static int ap_tx_rate_ok(int rateidx, struct sta_info *sta,
1152 if (rateidx > sta->tx_max_rate ||
1153 !(sta->tx_supp_rates & (1 << rateidx)))
1164 static void prism2_check_tx_rates(struct sta_info *sta)
1168 sta->tx_supp_rates = 0;
1169 for (i = 0; i < sizeof(sta->supported_rates); i++) {
1170 if ((sta->supported_rates[i] & 0x7f) == 2)
1171 sta->tx_supp_rates |= WLAN_RATE_1M;
1172 if ((sta->supported_rates[i] & 0x7f) == 4)
1173 sta->tx_supp_rates |= WLAN_RATE_2M;
1174 if ((sta->supported_rates[i] & 0x7f) == 11)
1175 sta->tx_supp_rates |= WLAN_RATE_5M5;
1176 if ((sta->supported_rates[i] & 0x7f) == 22)
1177 sta->tx_supp_rates |= WLAN_RATE_11M;
1179 sta->tx_max_rate = sta->tx_rate = sta->tx_rate_idx = 0;
1180 if (sta->tx_supp_rates & WLAN_RATE_1M) {
1181 sta->tx_max_rate = 0;
1182 if (ap_tx_rate_ok(0, sta, sta->local)) {
1183 sta->tx_rate = 10;
1184 sta->tx_rate_idx = 0;
1187 if (sta->tx_supp_rates & WLAN_RATE_2M) {
1188 sta->tx_max_rate = 1;
1189 if (ap_tx_rate_ok(1, sta, sta->local)) {
1190 sta->tx_rate = 20;
1191 sta->tx_rate_idx = 1;
1194 if (sta->tx_supp_rates & WLAN_RATE_5M5) {
1195 sta->tx_max_rate = 2;
1196 if (ap_tx_rate_ok(2, sta, sta->local)) {
1197 sta->tx_rate = 55;
1198 sta->tx_rate_idx = 2;
1201 if (sta->tx_supp_rates & WLAN_RATE_11M) {
1202 sta->tx_max_rate = 3;
1203 if (ap_tx_rate_ok(3, sta, sta->local)) {
1204 sta->tx_rate = 110;
1205 sta->tx_rate_idx = 3;
1300 struct sta_info *sta = NULL;
1317 sta = ap_get_sta(local->ap, hdr->addr2);
1318 if (sta)
1319 atomic_inc(&sta->users);
1322 if (sta && sta->crypt)
1323 crypt = sta->crypt;
1373 if (sta && sta->ap) {
1374 if (time_after(jiffies, sta->u.ap.last_beacon +
1375 (10 * sta->listen_interval * HZ) / 1024)) {
1378 dev->name, MAC2STR(sta->addr));
1379 sta->ap = 0;
1380 sta->flags = 0;
1381 sta->u.sta.challenge = NULL;
1392 (auth_transaction == 3 && sta != NULL &&
1393 sta->u.sta.challenge != NULL)))) {
1400 if (sta == NULL) {
1410 sta = ap_add_sta(local->ap, hdr->addr2);
1411 if (sta == NULL) {
1426 sta->flags |= WLAN_STA_AUTH;
1431 if (sta->u.sta.challenge == NULL) {
1432 sta->u.sta.challenge =
1434 if (sta->u.sta.challenge == NULL) {
1440 if (sta->u.sta.challenge == NULL ||
1442 memcmp(sta->u.sta.challenge, challenge,
1456 sta->flags |= WLAN_STA_AUTH;
1457 kfree(sta->u.sta.challenge);
1458 sta->u.sta.challenge = NULL;
1473 if (resp == WLAN_STATUS_SUCCESS && sta != NULL &&
1474 sta->u.sta.challenge != NULL &&
1480 memcpy(pos, sta->u.sta.challenge, WLAN_AUTH_CHALLENGE_LEN);
1487 if (sta) {
1488 sta->last_rx = jiffies;
1489 atomic_dec(&sta->users);
1511 struct sta_info *sta = NULL;
1526 sta = ap_get_sta(local->ap, hdr->addr2);
1527 if (sta == NULL || (sta->flags & WLAN_STA_AUTH) == 0) {
1532 sta = NULL; /* do not decrement sta->users */
1535 atomic_inc(&sta->users);
1539 sta->capability = __le16_to_cpu(*pos);
1541 sta->listen_interval = __le16_to_cpu(*pos);
1588 memset(sta->supported_rates, 0,
1589 sizeof(sta->supported_rates));
1590 memcpy(sta->supported_rates, u, ileft);
1591 prism2_check_tx_rates(sta);
1614 if (sta->aid > 0)
1618 for (sta->aid = 1; sta->aid <= MAX_AID_TABLE_SIZE; sta->aid++)
1619 if (local->ap->sta_aid[sta->aid - 1] == NULL)
1621 if (sta->aid > MAX_AID_TABLE_SIZE) {
1622 sta->aid = 0;
1627 local->ap->sta_aid[sta->aid - 1] = sta;
1652 *pos = __cpu_to_le16((sta && sta->aid > 0 ? sta->aid : 0) |
1690 if (sta) {
1692 sta->last_rx = jiffies;
1696 atomic_dec(&sta->users);
1711 struct sta_info *sta = NULL;
1728 sta = ap_get_sta(local->ap, hdr->addr2);
1729 if (sta != NULL) {
1730 if ((sta->flags & WLAN_STA_ASSOC) && !sta->ap)
1731 hostap_event_expired_sta(local->dev, sta);
1732 sta->flags &= ~(WLAN_STA_AUTH | WLAN_STA_ASSOC);
1735 if (sta == NULL) {
1752 struct sta_info *sta = NULL;
1769 sta = ap_get_sta(local->ap, hdr->addr2);
1770 if (sta != NULL) {
1771 if ((sta->flags & WLAN_STA_ASSOC) && !sta->ap)
1772 hostap_event_expired_sta(local->dev, sta);
1773 sta->flags &= ~WLAN_STA_ASSOC;
1776 if (sta == NULL) {
1806 struct sta_info *sta;
1810 sta = ap_get_sta(local->ap, hdr->addr2);
1811 if (sta)
1812 atomic_inc(&sta->users);
1815 if (sta != NULL && (sta->flags & WLAN_STA_ASSOC)) {
1817 atomic_dec(&sta->users);
1824 ((sta == NULL || !(sta->flags & WLAN_STA_ASSOC)) ?
1828 if (sta)
1829 atomic_dec(&sta->users);
1836 static void pspoll_send_buffered(local_info_t *local, struct sta_info *sta,
1841 if (!(sta->flags & WLAN_STA_PS)) {
1852 if (!skb_queue_empty(&sta->tx_buf)) {
1866 struct sta_info *sta;
1894 sta = ap_get_sta(local->ap, hdr->addr2);
1895 if (sta)
1896 atomic_inc(&sta->users);
1899 if (sta == NULL) {
1903 if (sta->aid != aid) {
1905 "assoc.aid=%d\n", aid, sta->aid);
1914 * sta; store buffer for later use and leave TIM aid bit set? use
1918 while ((skb = skb_dequeue(&sta->tx_buf)) != NULL) {
1921 " (buffer_count=%d)\n", skb_queue_len(&sta->tx_buf));
1923 pspoll_send_buffered(local, sta, skb);
1925 if (sta->flags & WLAN_STA_PS) {
1934 if (skb_queue_empty(&sta->tx_buf)) {
1936 if (!(sta->flags & WLAN_STA_TIM))
1940 sta->flags &= ~WLAN_STA_TIM;
1943 atomic_dec(&sta->users);
1990 struct sta_info *sta = NULL;
2080 sta = ap_get_sta(local->ap, hdr->addr2);
2081 if (sta != NULL)
2082 atomic_inc(&sta->users);
2085 if (sta == NULL) {
2088 sta = ap_add_sta(local->ap, hdr->addr2);
2089 if (sta == NULL) {
2094 hostap_event_new_sta(local->dev, sta);
2098 sta->flags = WLAN_STA_AUTH | WLAN_STA_ASSOC;
2101 hostap_wds_link_oper(local, sta->addr, WDS_ADD);
2105 sta->ap = 1;
2107 sta->u.ap.ssid_len = ssid_len;
2108 memcpy(sta->u.ap.ssid, ssid, ssid_len);
2109 sta->u.ap.ssid[ssid_len] = '\0';
2111 sta->u.ap.ssid_len = 0;
2112 sta->u.ap.ssid[0] = '\0';
2114 sta->u.ap.channel = channel;
2115 sta->rx_packets++;
2116 sta->rx_bytes += len;
2117 sta->u.ap.last_beacon = sta->last_rx = jiffies;
2118 sta->capability = capability;
2119 sta->listen_interval = beacon_int;
2121 atomic_dec(&sta->users);
2124 memset(sta->supported_rates, 0, sizeof(sta->supported_rates));
2125 memcpy(sta->supported_rates, supp_rates, supp_rates_len);
2126 prism2_check_tx_rates(sta);
2290 static void schedule_packet_send(local_info_t *local, struct sta_info *sta)
2296 if (skb_queue_empty(&sta->tx_buf))
2312 memcpy(hdr->addr2, sta->addr, ETH_ALEN);
2313 hdr->duration_id = cpu_to_le16(sta->aid | BIT(15) | BIT(14));
2316 "STA " MACSTR "\n", local->dev->name, MAC2STR(sta->addr));
2337 struct sta_info *sta = (struct sta_info *) ptr;
2339 if (aplist && !sta->ap)
2342 memcpy(addr[count].sa_data, sta->addr, ETH_ALEN);
2343 if (sta->last_rx_silence == 0)
2344 qual[count].qual = sta->last_rx_signal < 27 ?
2345 0 : (sta->last_rx_signal - 27) * 92 / 127;
2347 qual[count].qual = sta->last_rx_signal -
2348 sta->last_rx_silence - 35;
2349 qual[count].level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
2350 qual[count].noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
2351 qual[count].updated = sta->last_rx_updated;
2353 sta->last_rx_updated = IW_QUAL_DBM;
2388 struct sta_info *sta = (struct sta_info *) ptr;
2394 memcpy(iwe.u.ap_addr.sa_data, sta->addr, ETH_ALEN);
2403 if (sta->ap)
2414 if (sta->last_rx_silence == 0)
2415 iwe.u.qual.qual = sta->last_rx_signal < 27 ?
2416 0 : (sta->last_rx_signal - 27) * 92 / 127;
2418 iwe.u.qual.qual = sta->last_rx_signal -
2419 sta->last_rx_silence - 35;
2420 iwe.u.qual.level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
2421 iwe.u.qual.noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
2422 iwe.u.qual.updated = sta->last_rx_updated;
2428 if (sta->ap) {
2431 iwe.u.data.length = sta->u.ap.ssid_len;
2435 sta->u.ap.ssid);
2439 if (sta->capability & WLAN_CAPABILITY_PRIVACY)
2446 sta->u.ap.ssid
2449 if (sta->u.ap.channel > 0 &&
2450 sta->u.ap.channel <= FREQ_COUNT) {
2453 iwe.u.freq.m = freq_list[sta->u.ap.channel - 1]
2464 sta->listen_interval);
2471 sta->last_rx_updated = IW_QUAL_DBM;
2485 struct sta_info *sta;
2488 sta = ap_get_sta(ap, param->sta_addr);
2489 if (sta)
2490 atomic_inc(&sta->users);
2493 if (sta == NULL) {
2494 sta = ap_add_sta(ap, param->sta_addr);
2495 if (sta == NULL)
2499 if (!(sta->flags & WLAN_STA_ASSOC) && !sta->ap && sta->local)
2500 hostap_event_new_sta(sta->local->dev, sta);
2502 sta->flags |= WLAN_STA_AUTH | WLAN_STA_ASSOC;
2503 sta->last_rx = jiffies;
2504 sta->aid = param->u.add_sta.aid;
2505 sta->capability = param->u.add_sta.capability;
2506 sta->tx_supp_rates = param->u.add_sta.tx_supp_rates;
2507 if (sta->tx_supp_rates & WLAN_RATE_1M)
2508 sta->supported_rates[0] = 2;
2509 if (sta->tx_supp_rates & WLAN_RATE_2M)
2510 sta->supported_rates[1] = 4;
2511 if (sta->tx_supp_rates & WLAN_RATE_5M5)
2512 sta->supported_rates[2] = 11;
2513 if (sta->tx_supp_rates & WLAN_RATE_11M)
2514 sta->supported_rates[3] = 22;
2515 prism2_check_tx_rates(sta);
2516 atomic_dec(&sta->users);
2524 struct sta_info *sta;
2527 sta = ap_get_sta(ap, param->sta_addr);
2528 if (sta) {
2529 ap_sta_hash_del(ap, sta);
2530 list_del(&sta->list);
2534 if (!sta)
2537 if ((sta->flags & WLAN_STA_ASSOC) && !sta->ap && sta->local)
2538 hostap_event_expired_sta(sta->local->dev, sta);
2539 ap_free_sta(ap, sta);
2548 struct sta_info *sta;
2551 sta = ap_get_sta(ap, param->sta_addr);
2552 if (sta)
2553 atomic_inc(&sta->users);
2556 if (!sta)
2559 param->u.get_info_sta.inactive_sec = (jiffies - sta->last_rx) / HZ;
2561 atomic_dec(&sta->users);
2570 struct sta_info *sta;
2573 sta = ap_get_sta(ap, param->sta_addr);
2574 if (sta) {
2575 sta->flags |= param->u.set_flags_sta.flags_or;
2576 sta->flags &= param->u.set_flags_sta.flags_and;
2580 if (!sta)
2590 struct sta_info *sta;
2594 sta = ap_get_sta(ap, param->sta_addr);
2595 if (sta) {
2596 sta->rx_packets = sta->tx_packets = 0;
2597 sta->rx_bytes = sta->tx_bytes = 0;
2599 sta->tx_count[rate] = 0;
2600 sta->rx_count[rate] = 0;
2605 if (!sta)
2638 static int ap_update_sta_tx_rate(struct sta_info *sta, struct net_device *dev)
2640 int ret = sta->tx_rate;
2647 sta->tx_count[sta->tx_rate_idx]++;
2648 sta->tx_since_last_failure++;
2649 sta->tx_consecutive_exc = 0;
2650 if (sta->tx_since_last_failure >= WLAN_RATE_UPDATE_COUNT &&
2651 sta->tx_rate_idx < sta->tx_max_rate) {
2654 old_rate = new_rate = sta->tx_rate_idx;
2655 while (new_rate < sta->tx_max_rate) {
2657 if (ap_tx_rate_ok(new_rate, sta, local)) {
2658 sta->tx_rate_idx = new_rate;
2662 if (old_rate != sta->tx_rate_idx) {
2663 switch (sta->tx_rate_idx) {
2664 case 0: sta->tx_rate = 10; break;
2665 case 1: sta->tx_rate = 20; break;
2666 case 2: sta->tx_rate = 55; break;
2667 case 3: sta->tx_rate = 110; break;
2668 default: sta->tx_rate = 0; break;
2671 " %d\n", dev->name, MAC2STR(sta->addr),
2672 sta->tx_rate);
2674 sta->tx_since_last_failure = 0;
2685 struct sta_info *sta = NULL;
2706 sta = ap_get_sta(local->ap, hdr->addr1);
2707 if (sta)
2708 atomic_inc(&sta->users);
2711 if (local->iw_mode == IW_MODE_MASTER && sta == NULL &&
2720 if (sta == NULL)
2723 if (!(sta->flags & WLAN_STA_AUTHORIZED))
2729 ap_update_sta_tx_rate(sta, local->dev);
2734 if (!(sta->flags & WLAN_STA_PS))
2749 if (skb_queue_len(&sta->tx_buf) >= STA_MAX_TX_BUFFER) {
2751 "mode buffer\n", local->dev->name, MAC2STR(sta->addr));
2756 hostap_set_tim(local, sta->aid, 1);
2757 sta->flags |= WLAN_STA_TIM;
2763 set_tim = skb_queue_empty(&sta->tx_buf);
2764 skb_queue_tail(&sta->tx_buf, skb);
2769 if (sta->flags & WLAN_STA_TIM)
2771 sta->aid);
2772 hostap_set_tim(local, sta->aid, 1);
2773 sta->flags |= WLAN_STA_TIM;
2779 if (sta != NULL) {
2782 sta->tx_packets++;
2783 sta->tx_bytes += skb->len;
2784 sta->last_tx = jiffies;
2789 sta->crypt && tx->host_encrypt) {
2790 tx->crypt = sta->crypt;
2791 tx->sta_ptr = sta; /* hostap_handle_sta_release() will
2792 * be called to release sta info
2795 atomic_dec(&sta->users);
2804 struct sta_info *sta = ptr;
2805 atomic_dec(&sta->users);
2812 struct sta_info *sta;
2820 sta = ap_get_sta(local->ap, hdr->addr1);
2821 if (!sta) {
2829 sta->tx_since_last_failure = 0;
2830 sta->tx_consecutive_exc++;
2832 if (sta->tx_consecutive_exc >= WLAN_RATE_DECREASE_THRESHOLD &&
2833 sta->tx_rate_idx > 0 && meta->rate <= sta->tx_rate) {
2836 old = rate = sta->tx_rate_idx;
2839 if (ap_tx_rate_ok(rate, sta, local)) {
2840 sta->tx_rate_idx = rate;
2844 if (old != sta->tx_rate_idx) {
2845 switch (sta->tx_rate_idx) {
2846 case 0: sta->tx_rate = 10; break;
2847 case 1: sta->tx_rate = 20; break;
2848 case 2: sta->tx_rate = 55; break;
2849 case 3: sta->tx_rate = 110; break;
2850 default: sta->tx_rate = 0; break;
2853 "to %d\n", local->dev->name, MAC2STR(sta->addr),
2854 sta->tx_rate);
2856 sta->tx_consecutive_exc = 0;
2862 static void hostap_update_sta_ps2(local_info_t *local, struct sta_info *sta,
2865 if (pwrmgt && !(sta->flags & WLAN_STA_PS)) {
2866 sta->flags |= WLAN_STA_PS;
2869 MAC2STR(sta->addr), type >> 2, stype >> 4);
2870 } else if (!pwrmgt && (sta->flags & WLAN_STA_PS)) {
2871 sta->flags &= ~WLAN_STA_PS;
2874 MAC2STR(sta->addr), type >> 2, stype >> 4);
2877 schedule_packet_send(local, sta);
2886 struct sta_info *sta;
2890 sta = ap_get_sta(local->ap, hdr->addr2);
2891 if (sta)
2892 atomic_inc(&sta->users);
2895 if (!sta)
2899 hostap_update_sta_ps2(local, sta, fc & IEEE80211_FCTL_PM,
2902 atomic_dec(&sta->users);
2915 struct sta_info *sta;
2929 sta = ap_get_sta(local->ap, hdr->addr2);
2930 if (sta)
2931 atomic_inc(&sta->users);
2934 if (sta && !(sta->flags & WLAN_STA_AUTHORIZED))
2941 if (!wds && (sta == NULL || !(sta->flags & WLAN_STA_ASSOC))) {
2970 } else if (stype == IEEE80211_STYPE_NULLFUNC && sta == NULL &&
3012 if (sta) {
3013 hostap_update_sta_ps2(local, sta, fc & IEEE80211_FCTL_PM,
3016 sta->rx_packets++;
3017 sta->rx_bytes += skb->len;
3018 sta->last_rx = jiffies;
3041 if (sta)
3042 atomic_dec(&sta->users);
3054 struct sta_info *sta;
3057 sta = ap_get_sta(local->ap, hdr->addr2);
3058 if (sta)
3059 atomic_inc(&sta->users);
3062 if (!sta)
3065 if (sta->crypt) {
3066 *crypt = sta->crypt;
3067 *sta_ptr = sta;
3071 atomic_dec(&sta->users);
3080 struct sta_info *sta;
3084 sta = ap_get_sta(ap, sta_addr);
3085 if (sta != NULL && (sta->flags & WLAN_STA_ASSOC) && !sta->ap)
3096 struct sta_info *sta;
3100 sta = ap_get_sta(ap, sta_addr);
3101 if (sta != NULL && (sta->flags & WLAN_STA_ASSOC) && !sta->ap &&
3102 ((sta->flags & WLAN_STA_AUTHORIZED) ||
3114 struct sta_info *sta;
3121 sta = ap_get_sta(ap, sta_addr);
3122 if (sta)
3127 sta = ap_add_sta(ap, sta_addr);
3128 if (!sta)
3130 sta->flags = WLAN_STA_AUTH | WLAN_STA_ASSOC;
3131 sta->ap = 1;
3132 memset(sta->supported_rates, 0, sizeof(sta->supported_rates));
3136 sta->supported_rates[0] = 0x82;
3137 sta->supported_rates[1] = 0x84;
3138 sta->supported_rates[2] = 0x0b;
3139 sta->supported_rates[3] = 0x16;
3140 sta->tx_supp_rates = WLAN_RATE_1M | WLAN_RATE_2M |
3142 sta->tx_rate = 110;
3143 sta->tx_max_rate = sta->tx_rate_idx = 3;
3155 struct sta_info *sta;
3161 sta = ap_get_sta(ap, hdr->addr2);
3162 if (sta) {
3163 sta->last_rx_silence = rx_stats->noise;
3164 sta->last_rx_signal = rx_stats->signal;
3165 sta->last_rx_rate = rx_stats->rate;
3166 sta->last_rx_updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM;
3168 sta->rx_count[0]++;
3170 sta->rx_count[1]++;
3172 sta->rx_count[2]++;
3174 sta->rx_count[3]++;
3178 return sta ? 0 : -1;
3192 struct sta_info *sta = (struct sta_info *) ptr;
3193 prism2_check_tx_rates(sta);
3202 struct sta_info *sta;
3205 sta = ap_get_sta(ap, addr);
3206 if (sta)
3207 atomic_inc(&sta->users);
3210 if (!sta && permanent)
3211 sta = ap_add_sta(ap, addr);
3213 if (!sta)
3217 sta->flags |= WLAN_STA_PERM;
3219 *crypt = &sta->crypt;
3221 return sta;
3232 struct sta_info *sta = list_entry(ptr, struct sta_info, list);
3233 if (sta->ap)
3234 hostap_wds_link_oper(local, sta->addr, WDS_ADD);