Lines Matching refs:iapp

174 static void iapp_send_add(struct iapp_data *iapp, u8 *mac_addr, u16 seq_num)  in iapp_send_add()  argument
187 hdr->identifier = host_to_be16(iapp->identifier++); in iapp_send_add()
199 addr.sin_addr.s_addr = iapp->multicast.s_addr; in iapp_send_add()
201 if (sendto(iapp->udp_sock, buf, (char *) (add + 1) - buf, 0, in iapp_send_add()
207 static void iapp_send_layer2_update(struct iapp_data *iapp, u8 *addr) in iapp_send_layer2_update() argument
229 if (send(iapp->packet_sock, &msg, sizeof(msg), 0) < 0) in iapp_send_layer2_update()
239 void iapp_new_station(struct iapp_data *iapp, struct sta_info *sta) in iapp_new_station() argument
243 if (iapp == NULL) in iapp_new_station()
247 hostapd_logger(iapp->hapd, sta->addr, HOSTAPD_MODULE_IAPP, in iapp_new_station()
249 iapp_send_layer2_update(iapp, sta->addr); in iapp_new_station()
250 iapp_send_add(iapp, sta->addr, seq); in iapp_new_station()
260 static void iapp_process_add_notify(struct iapp_data *iapp, in iapp_process_add_notify() argument
273 sta = ap_get_sta(iapp->hapd, add->mac_addr); in iapp_process_add_notify()
276 hostapd_logger(iapp->hapd, add->mac_addr, HOSTAPD_MODULE_IAPP, in iapp_process_add_notify()
290 hostapd_logger(iapp->hapd, add->mac_addr, HOSTAPD_MODULE_IAPP, in iapp_process_add_notify()
293 ap_sta_disconnect(iapp->hapd, sta, NULL, 0); in iapp_process_add_notify()
305 struct iapp_data *iapp = eloop_ctx; in iapp_receive_udp() local
315 len = recvfrom(iapp->udp_sock, buf, sizeof(buf), 0, in iapp_receive_udp()
323 if (from.sin_addr.s_addr == iapp->own.s_addr) in iapp_receive_udp()
326 hostapd_logger(iapp->hapd, NULL, HOSTAPD_MODULE_IAPP, in iapp_receive_udp()
337 hostapd_logger(iapp->hapd, NULL, HOSTAPD_MODULE_IAPP, in iapp_receive_udp()
360 iapp_process_add_notify(iapp, &from, hdr, len - sizeof(*hdr)); in iapp_receive_udp()
382 struct iapp_data *iapp; in iapp_init() local
386 iapp = os_zalloc(sizeof(*iapp)); in iapp_init()
387 if (iapp == NULL) in iapp_init()
389 iapp->hapd = hapd; in iapp_init()
390 iapp->udp_sock = iapp->packet_sock = -1; in iapp_init()
396 iapp->udp_sock = socket(PF_INET, SOCK_DGRAM, 0); in iapp_init()
397 if (iapp->udp_sock < 0) { in iapp_init()
400 iapp_deinit(iapp); in iapp_init()
406 if (ioctl(iapp->udp_sock, SIOCGIFINDEX, &ifr) != 0) { in iapp_init()
409 iapp_deinit(iapp); in iapp_init()
414 if (ioctl(iapp->udp_sock, SIOCGIFADDR, &ifr) != 0) { in iapp_init()
417 iapp_deinit(iapp); in iapp_init()
424 iapp_deinit(iapp); in iapp_init()
427 iapp->own.s_addr = paddr->sin_addr.s_addr; in iapp_init()
429 if (ioctl(iapp->udp_sock, SIOCGIFBRDADDR, &ifr) != 0) { in iapp_init()
432 iapp_deinit(iapp); in iapp_init()
439 iapp_deinit(iapp); in iapp_init()
442 inet_aton(IAPP_MULTICAST, &iapp->multicast); in iapp_init()
448 if (setsockopt(iapp->udp_sock, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, in iapp_init()
459 if (bind(iapp->udp_sock, (struct sockaddr *) &uaddr, in iapp_init()
463 iapp_deinit(iapp); in iapp_init()
468 mreq.imr_multiaddr = iapp->multicast; in iapp_init()
471 if (setsockopt(iapp->udp_sock, SOL_IP, IP_ADD_MEMBERSHIP, &mreq, in iapp_init()
475 iapp_deinit(iapp); in iapp_init()
479 iapp->packet_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); in iapp_init()
480 if (iapp->packet_sock < 0) { in iapp_init()
483 iapp_deinit(iapp); in iapp_init()
490 if (bind(iapp->packet_sock, (struct sockaddr *) &addr, in iapp_init()
494 iapp_deinit(iapp); in iapp_init()
498 if (eloop_register_read_sock(iapp->udp_sock, iapp_receive_udp, in iapp_init()
499 iapp, NULL)) { in iapp_init()
501 iapp_deinit(iapp); in iapp_init()
512 return iapp; in iapp_init()
516 void iapp_deinit(struct iapp_data *iapp) in iapp_deinit() argument
520 if (iapp == NULL) in iapp_deinit()
523 if (iapp->udp_sock >= 0) { in iapp_deinit()
525 mreq.imr_multiaddr = iapp->multicast; in iapp_deinit()
528 if (setsockopt(iapp->udp_sock, SOL_IP, IP_DROP_MEMBERSHIP, in iapp_deinit()
534 eloop_unregister_read_sock(iapp->udp_sock); in iapp_deinit()
535 close(iapp->udp_sock); in iapp_deinit()
537 if (iapp->packet_sock >= 0) { in iapp_deinit()
538 eloop_unregister_read_sock(iapp->packet_sock); in iapp_deinit()
539 close(iapp->packet_sock); in iapp_deinit()
541 os_free(iapp); in iapp_deinit()