Lines Matching refs:iface
31 static int ap_list_beacon_olbc(struct hostapd_iface *iface, struct ap_info *ap) in ap_list_beacon_olbc() argument
35 if (iface->current_mode == NULL || in ap_list_beacon_olbc()
36 iface->current_mode->mode != HOSTAPD_MODE_IEEE80211G || in ap_list_beacon_olbc()
37 iface->conf->channel != ap->channel) in ap_list_beacon_olbc()
53 static struct ap_info * ap_get_ap(struct hostapd_iface *iface, const u8 *ap) in ap_get_ap() argument
57 s = iface->ap_hash[STA_HASH(ap)]; in ap_get_ap()
64 static void ap_ap_list_add(struct hostapd_iface *iface, struct ap_info *ap) in ap_ap_list_add() argument
66 if (iface->ap_list) { in ap_ap_list_add()
67 ap->prev = iface->ap_list->prev; in ap_ap_list_add()
68 iface->ap_list->prev = ap; in ap_ap_list_add()
71 ap->next = iface->ap_list; in ap_ap_list_add()
72 iface->ap_list = ap; in ap_ap_list_add()
76 static void ap_ap_list_del(struct hostapd_iface *iface, struct ap_info *ap) in ap_ap_list_del() argument
78 if (iface->ap_list == ap) in ap_ap_list_del()
79 iface->ap_list = ap->next; in ap_ap_list_del()
85 else if (iface->ap_list) in ap_ap_list_del()
86 iface->ap_list->prev = ap->prev; in ap_ap_list_del()
90 static void ap_ap_hash_add(struct hostapd_iface *iface, struct ap_info *ap) in ap_ap_hash_add() argument
92 ap->hnext = iface->ap_hash[STA_HASH(ap->addr)]; in ap_ap_hash_add()
93 iface->ap_hash[STA_HASH(ap->addr)] = ap; in ap_ap_hash_add()
97 static void ap_ap_hash_del(struct hostapd_iface *iface, struct ap_info *ap) in ap_ap_hash_del() argument
101 s = iface->ap_hash[STA_HASH(ap->addr)]; in ap_ap_hash_del()
104 iface->ap_hash[STA_HASH(ap->addr)] = s->hnext; in ap_ap_hash_del()
119 static void ap_free_ap(struct hostapd_iface *iface, struct ap_info *ap) in ap_free_ap() argument
121 ap_ap_hash_del(iface, ap); in ap_free_ap()
122 ap_ap_list_del(iface, ap); in ap_free_ap()
124 iface->num_ap--; in ap_free_ap()
129 static void hostapd_free_aps(struct hostapd_iface *iface) in hostapd_free_aps() argument
133 ap = iface->ap_list; in hostapd_free_aps()
138 ap_free_ap(iface, prev); in hostapd_free_aps()
141 iface->ap_list = NULL; in hostapd_free_aps()
145 static struct ap_info * ap_ap_add(struct hostapd_iface *iface, const u8 *addr) in ap_ap_add() argument
155 ap_ap_list_add(iface, ap); in ap_ap_add()
156 iface->num_ap++; in ap_ap_add()
157 ap_ap_hash_add(iface, ap); in ap_ap_add()
159 if (iface->num_ap > iface->conf->ap_table_max_size && ap != ap->prev) { in ap_ap_add()
162 ap_free_ap(iface, ap->prev); in ap_ap_add()
169 void ap_list_process_beacon(struct hostapd_iface *iface, in ap_list_process_beacon() argument
178 if (iface->conf->ap_table_max_size < 1) in ap_list_process_beacon()
181 ap = ap_get_ap(iface, mgmt->bssid); in ap_list_process_beacon()
183 ap = ap_ap_add(iface, mgmt->bssid); in ap_list_process_beacon()
215 if (!new_ap && ap != iface->ap_list) { in ap_list_process_beacon()
218 ap_ap_list_del(iface, ap); in ap_list_process_beacon()
219 ap_ap_list_add(iface, ap); in ap_list_process_beacon()
222 if (!iface->olbc && in ap_list_process_beacon()
223 ap_list_beacon_olbc(iface, ap)) { in ap_list_process_beacon()
224 iface->olbc = 1; in ap_list_process_beacon()
231 if (!iface->olbc_ht && !ap->ht_support && in ap_list_process_beacon()
233 ap->channel == iface->conf->channel || in ap_list_process_beacon()
234 ap->channel == iface->conf->channel + in ap_list_process_beacon()
235 iface->conf->secondary_channel * 4)) { in ap_list_process_beacon()
236 iface->olbc_ht = 1; in ap_list_process_beacon()
237 hostapd_ht_operation_update(iface); in ap_list_process_beacon()
245 ieee802_11_update_beacons(iface); in ap_list_process_beacon()
249 void ap_list_timer(struct hostapd_iface *iface) in ap_list_timer() argument
255 if (!iface->ap_list) in ap_list_timer()
260 while (iface->ap_list) { in ap_list_timer()
261 ap = iface->ap_list->prev; in ap_list_timer()
263 iface->conf->ap_table_expiration_time)) in ap_list_timer()
266 ap_free_ap(iface, ap); in ap_list_timer()
269 if (iface->olbc || iface->olbc_ht) { in ap_list_timer()
273 ap = iface->ap_list; in ap_list_timer()
275 if (ap_list_beacon_olbc(iface, ap)) in ap_list_timer()
281 if (!olbc && iface->olbc) { in ap_list_timer()
283 iface->olbc = 0; in ap_list_timer()
286 if (!olbc_ht && iface->olbc_ht) { in ap_list_timer()
288 iface->olbc_ht = 0; in ap_list_timer()
289 hostapd_ht_operation_update(iface); in ap_list_timer()
295 ieee802_11_update_beacons(iface); in ap_list_timer()
299 int ap_list_init(struct hostapd_iface *iface) in ap_list_init() argument
305 void ap_list_deinit(struct hostapd_iface *iface) in ap_list_deinit() argument
307 hostapd_free_aps(iface); in ap_list_deinit()