Lines Matching defs:iapp

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