Lines Matching refs:iapp

50 #include "iapp.h"
178 static void iapp_send_add(struct iapp_data *iapp, u8 *mac_addr, u16 seq_num)
191 hdr->identifier = host_to_be16(iapp->identifier++);
203 addr.sin_addr.s_addr = iapp->multicast.s_addr;
205 if (sendto(iapp->udp_sock, buf, (char *) (add + 1) - buf, 0,
211 static void iapp_send_layer2_update(struct iapp_data *iapp, u8 *addr)
233 if (send(iapp->packet_sock, &msg, sizeof(msg), 0) < 0)
240 * @iapp: IAPP data
243 void iapp_new_station(struct iapp_data *iapp, struct sta_info *sta)
248 if (iapp == NULL)
255 hostapd_logger(iapp->hapd, sta->addr, HOSTAPD_MODULE_IAPP,
257 iapp_send_layer2_update(iapp, sta->addr);
258 iapp_send_add(iapp, sta->addr, seq);
271 static void iapp_process_add_notify(struct iapp_data *iapp,
284 sta = ap_get_sta(iapp->hapd, add->mac_addr);
287 hostapd_logger(iapp->hapd, add->mac_addr, HOSTAPD_MODULE_IAPP,
301 hostapd_logger(iapp->hapd, add->mac_addr, HOSTAPD_MODULE_IAPP,
304 ap_sta_disconnect(iapp->hapd, sta, NULL, 0);
316 struct iapp_data *iapp = eloop_ctx;
326 len = recvfrom(iapp->udp_sock, buf, sizeof(buf), 0,
333 if (from.sin_addr.s_addr == iapp->own.s_addr)
336 hostapd_logger(iapp->hapd, NULL, HOSTAPD_MODULE_IAPP,
347 hostapd_logger(iapp->hapd, NULL, HOSTAPD_MODULE_IAPP,
369 iapp_process_add_notify(iapp, &from, hdr, hlen - sizeof(*hdr));
391 struct iapp_data *iapp;
394 iapp = os_zalloc(sizeof(*iapp));
395 if (iapp == NULL)
397 iapp->hapd = hapd;
398 iapp->udp_sock = iapp->packet_sock = -1;
404 iapp->udp_sock = socket(PF_INET, SOCK_DGRAM, 0);
405 if (iapp->udp_sock < 0) {
407 iapp_deinit(iapp);
413 if (ioctl(iapp->udp_sock, SIOCGIFINDEX, &ifr) != 0) {
415 iapp_deinit(iapp);
420 if (ioctl(iapp->udp_sock, SIOCGIFADDR, &ifr) != 0) {
422 iapp_deinit(iapp);
429 iapp_deinit(iapp);
432 iapp->own.s_addr = paddr->sin_addr.s_addr;
434 if (ioctl(iapp->udp_sock, SIOCGIFBRDADDR, &ifr) != 0) {
436 iapp_deinit(iapp);
443 iapp_deinit(iapp);
446 inet_aton(IAPP_MULTICAST, &iapp->multicast);
451 if (bind(iapp->udp_sock, (struct sockaddr *) &uaddr,
454 iapp_deinit(iapp);
459 mreq.imr_multiaddr = iapp->multicast;
462 if (setsockopt(iapp->udp_sock, SOL_IP, IP_ADD_MEMBERSHIP, &mreq,
465 iapp_deinit(iapp);
469 iapp->packet_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
470 if (iapp->packet_sock < 0) {
472 iapp_deinit(iapp);
479 if (bind(iapp->packet_sock, (struct sockaddr *) &addr,
482 iapp_deinit(iapp);
486 if (eloop_register_read_sock(iapp->udp_sock, iapp_receive_udp,
487 iapp, NULL)) {
489 iapp_deinit(iapp);
500 return iapp;
504 void iapp_deinit(struct iapp_data *iapp)
508 if (iapp == NULL)
511 if (iapp->udp_sock >= 0) {
513 mreq.imr_multiaddr = iapp->multicast;
516 if (setsockopt(iapp->udp_sock, SOL_IP, IP_DROP_MEMBERSHIP,
521 eloop_unregister_read_sock(iapp->udp_sock);
522 close(iapp->udp_sock);
524 if (iapp->packet_sock >= 0) {
525 eloop_unregister_read_sock(iapp->packet_sock);
526 close(iapp->packet_sock);
528 os_free(iapp);