Home | History | Annotate | Download | only in ap

Lines Matching refs:iface

32 static int ap_list_beacon_olbc(struct hostapd_iface *iface, struct ap_info *ap)
36 if (iface->current_mode->mode != HOSTAPD_MODE_IEEE80211G ||
37 iface->conf->channel != ap->channel)
53 struct ap_info * ap_get_ap(struct hostapd_iface *iface, const u8 *ap)
57 s = iface->ap_hash[STA_HASH(ap)];
64 static void ap_ap_list_add(struct hostapd_iface *iface, struct ap_info *ap)
66 if (iface->ap_list) {
67 ap->prev = iface->ap_list->prev;
68 iface->ap_list->prev = ap;
71 ap->next = iface->ap_list;
72 iface->ap_list = ap;
76 static void ap_ap_list_del(struct hostapd_iface *iface, struct ap_info *ap)
78 if (iface->ap_list == ap)
79 iface->ap_list = ap->next;
85 else if (iface->ap_list)
86 iface->ap_list->prev = ap->prev;
90 static void ap_ap_iter_list_add(struct hostapd_iface *iface,
93 if (iface->ap_iter_list) {
94 ap->iter_prev = iface->ap_iter_list->iter_prev;
95 iface->ap_iter_list->iter_prev = ap;
98 ap->iter_next = iface->ap_iter_list;
99 iface->ap_iter_list = ap;
103 static void ap_ap_iter_list_del(struct hostapd_iface *iface,
106 if (iface->ap_iter_list == ap)
107 iface->ap_iter_list = ap->iter_next;
113 else if (iface->ap_iter_list)
114 iface->ap_iter_list->iter_prev = ap->iter_prev;
118 static void ap_ap_hash_add(struct hostapd_iface *iface, struct ap_info *ap)
120 ap->hnext = iface->ap_hash[STA_HASH(ap->addr)];
121 iface->ap_hash[STA_HASH(ap->addr)] = ap;
125 static void ap_ap_hash_del(struct hostapd_iface *iface, struct ap_info *ap)
129 s = iface->ap_hash[STA_HASH(ap->addr)];
132 iface->ap_hash[STA_HASH(ap->addr)] = s->hnext;
147 static void ap_free_ap(struct hostapd_iface *iface, struct ap_info *ap)
149 ap_ap_hash_del(iface, ap);
150 ap_ap_list_del(iface, ap);
151 ap_ap_iter_list_del(iface, ap);
153 iface->num_ap--;
158 static void hostapd_free_aps(struct hostapd_iface *iface)
162 ap = iface->ap_list;
167 ap_free_ap(iface, prev);
170 iface->ap_list = NULL;
174 int ap_ap_for_each(struct hostapd_iface *iface,
180 s = iface->ap_list;
193 static struct ap_info * ap_ap_add(struct hostapd_iface *iface, const u8 *addr)
203 ap_ap_list_add(iface, ap);
204 iface->num_ap++;
205 ap_ap_hash_add(iface, ap);
206 ap_ap_iter_list_add(iface, ap);
208 if (iface->num_ap > iface->conf->ap_table_max_size && ap != ap->prev) {
211 ap_free_ap(iface, ap->prev);
218 void ap_list_process_beacon(struct hostapd_iface *iface,
229 if (iface->conf->ap_table_max_size < 1)
232 ap = ap_get_ap(iface, mgmt->bssid);
234 ap = ap_ap_add(iface, mgmt->bssid);
281 if (!new_ap && ap != iface->ap_list) {
284 ap_ap_list_del(iface, ap);
285 ap_ap_list_add(iface, ap);
288 if (!iface->olbc &&
289 ap_list_beacon_olbc(iface, ap)) {
290 iface->olbc = 1;
297 if (!iface->olbc_ht && !ap->ht_support) {
298 iface->olbc_ht = 1;
299 hostapd_ht_operation_update(iface);
307 ieee802_11_update_beacons(iface);
313 struct hostapd_iface *iface = eloop_ctx;
318 eloop_register_timeout(10, 0, ap_list_timer, iface, NULL);
320 if (!iface->ap_list)
325 while (iface->ap_list) {
326 ap = iface->ap_list->prev;
327 if (ap->last_beacon + iface->conf->ap_table_expiration_time >=
331 ap_free_ap(iface, ap);
334 if (iface->olbc || iface->olbc_ht) {
338 ap = iface->ap_list;
340 if (ap_list_beacon_olbc(iface, ap))
346 if (!olbc && iface->olbc) {
348 iface->olbc = 0;
352 if (!olbc_ht && iface->olbc_ht) {
354 iface->olbc_ht = 0;
355 hostapd_ht_operation_update(iface);
362 ieee802_11_update_beacons(iface);
366 int ap_list_init(struct hostapd_iface *iface)
368 eloop_register_timeout(10, 0, ap_list_timer, iface, NULL);
373 void ap_list_deinit(struct hostapd_iface *iface)
375 eloop_cancel_timeout(ap_list_timer, iface, NULL);
376 hostapd_free_aps(iface);