diff options
Diffstat (limited to 'meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2019-5061.patch')
-rw-r--r-- | meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2019-5061.patch | 854 |
1 files changed, 0 insertions, 854 deletions
diff --git a/meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2019-5061.patch b/meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2019-5061.patch deleted file mode 100644 index 9214615d12..0000000000 --- a/meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2019-5061.patch +++ /dev/null @@ -1,854 +0,0 @@ -From 018edec9b2bd3db20605117c32ff79c1e625c432 Mon Sep 17 00:00:00 2001 -From: Jouni Malinen <j@w1.fi> -Date: Wed, 11 Sep 2019 12:34:28 +0300 -Subject: [PATCH] Remove IAPP functionality from hostapd - -IEEE Std 802.11F-2003 was withdrawn in 2006 and as such it has not been -maintained nor is there any expectation of the withdrawn trial-use -recommended practice to be maintained in the future. Furthermore, -implementation of IAPP in hostapd was not complete, i.e., only parts of -the recommended practice were included. The main item of some real use -long time ago was the Layer 2 Update frame to update bridges when a STA -roams within an ESS, but that functionality has, in practice, been moved -to kernel drivers to provide better integration with the networking -stack. - -CVE: CVE-2019-5061 - -Upstream-Status: Backport - -Signed-off-by: Jouni Malinen <j@w1.fi> -Signed-off-by: Mingli Yu <mingli.yu@windriver.com> ---- - hostapd/Android.mk | 5 - - hostapd/Makefile | 5 - - hostapd/android.config | 3 - - hostapd/config_file.c | 3 +- - hostapd/defconfig | 3 - - hostapd/hostapd.conf | 6 - - hostapd/main.c | 3 - - src/ap/Makefile | 2 - - src/ap/ap_config.h | 4 - - src/ap/hostapd.c | 14 - - src/ap/hostapd.h | 2 - - src/ap/iapp.c | 542 ---------------------- - src/ap/iapp.h | 39 -- - src/utils/wpa_debug.h | 1 - - 14 files changed, 1 insertion(+), 633 deletions(-) - delete mode 100644 src/ap/iapp.c - delete mode 100644 src/ap/iapp.h - -diff --git a/hostapd/Android.mk b/hostapd/Android.mk -index 3183323ef..a87ac8144 100644 ---- a/hostapd/Android.mk -+++ b/hostapd/Android.mk -@@ -205,11 +205,6 @@ endif - - L_CFLAGS += -DCONFIG_CTRL_IFACE -DCONFIG_CTRL_IFACE_UNIX - --ifdef CONFIG_IAPP --L_CFLAGS += -DCONFIG_IAPP --OBJS += src/ap/iapp.c --endif -- - ifdef CONFIG_RSN_PREAUTH - L_CFLAGS += -DCONFIG_RSN_PREAUTH - CONFIG_L2_PACKET=y -diff --git a/hostapd/Makefile b/hostapd/Makefile -index f7f4c785b..42bb9e4c8 100644 ---- a/hostapd/Makefile -+++ b/hostapd/Makefile -@@ -248,11 +248,6 @@ ifndef CONFIG_NO_CTRL_IFACE - CFLAGS += -DCONFIG_CTRL_IFACE - endif - --ifdef CONFIG_IAPP --CFLAGS += -DCONFIG_IAPP --OBJS += ../src/ap/iapp.o --endif -- - ifdef CONFIG_RSN_PREAUTH - CFLAGS += -DCONFIG_RSN_PREAUTH - CONFIG_L2_PACKET=y -diff --git a/hostapd/android.config b/hostapd/android.config -index efe252332..e2e6c7821 100644 ---- a/hostapd/android.config -+++ b/hostapd/android.config -@@ -38,9 +38,6 @@ CONFIG_DRIVER_NL80211_QCA=y - # Driver interface for no driver (e.g., RADIUS server only) - #CONFIG_DRIVER_NONE=y - --# IEEE 802.11F/IAPP --#CONFIG_IAPP=y -- - # WPA2/IEEE 802.11i RSN pre-authentication - #CONFIG_RSN_PREAUTH=y - -diff --git a/hostapd/config_file.c b/hostapd/config_file.c -index 680f17ee0..0d340d252 100644 ---- a/hostapd/config_file.c -+++ b/hostapd/config_file.c -@@ -2712,8 +2712,7 @@ static int hostapd_config_fill(struct hostapd_config *conf, - bss->eapol_key_index_workaround = atoi(pos); - #ifdef CONFIG_IAPP - } else if (os_strcmp(buf, "iapp_interface") == 0) { -- bss->ieee802_11f = 1; -- os_strlcpy(bss->iapp_iface, pos, sizeof(bss->iapp_iface)); -+ wpa_printf(MSG_INFO, "DEPRECATED: iapp_interface not used"); - #endif /* CONFIG_IAPP */ - } else if (os_strcmp(buf, "own_ip_addr") == 0) { - if (hostapd_parse_ip_addr(pos, &bss->own_ip_addr)) { -diff --git a/hostapd/defconfig b/hostapd/defconfig -index b1fb56c3b..1a3d9f9ba 100644 ---- a/hostapd/defconfig -+++ b/hostapd/defconfig -@@ -44,9 +44,6 @@ CONFIG_LIBNL32=y - # Driver interface for no driver (e.g., RADIUS server only) - #CONFIG_DRIVER_NONE=y - --# IEEE 802.11F/IAPP --CONFIG_IAPP=y -- - # WPA2/IEEE 802.11i RSN pre-authentication - CONFIG_RSN_PREAUTH=y - -diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf -index 6c96a760a..a3c698480 100644 ---- a/hostapd/hostapd.conf -+++ b/hostapd/hostapd.conf -@@ -41,7 +41,6 @@ interface=wlan0 - # bit 2 (4) = RADIUS - # bit 3 (8) = WPA - # bit 4 (16) = driver interface --# bit 5 (32) = IAPP - # bit 6 (64) = MLME - # - # Levels (minimum value for logged events): -@@ -1243,11 +1242,6 @@ eap_server=0 - # Whether to enable ERP on the EAP server. - #eap_server_erp=1 - --##### IEEE 802.11f - Inter-Access Point Protocol (IAPP) ####################### -- --# Interface to be used for IAPP broadcast packets --#iapp_interface=eth0 -- - - ##### RADIUS client configuration ############################################# - # for IEEE 802.1X with external Authentication Server, IEEE 802.11 -diff --git a/hostapd/main.c b/hostapd/main.c -index 08896ffe2..8bfe24281 100644 ---- a/hostapd/main.c -+++ b/hostapd/main.c -@@ -81,9 +81,6 @@ static void hostapd_logger_cb(void *ctx, const u8 *addr, unsigned int module, - case HOSTAPD_MODULE_DRIVER: - module_str = "DRIVER"; - break; -- case HOSTAPD_MODULE_IAPP: -- module_str = "IAPP"; -- break; - case HOSTAPD_MODULE_MLME: - module_str = "MLME"; - break; -diff --git a/src/ap/Makefile b/src/ap/Makefile -index bd3f33b77..54e48a0dd 100644 ---- a/src/ap/Makefile -+++ b/src/ap/Makefile -@@ -18,7 +18,6 @@ CFLAGS += -DCONFIG_IEEE80211R_AP - CFLAGS += -DCONFIG_WPS - CFLAGS += -DCONFIG_PROXYARP - CFLAGS += -DCONFIG_IPV6 --CFLAGS += -DCONFIG_IAPP - CFLAGS += -DCONFIG_AIRTIME_POLICY - - LIB_OBJS= \ -@@ -41,7 +40,6 @@ LIB_OBJS= \ - hostapd.o \ - hs20.o \ - hw_features.o \ -- iapp.o \ - ieee802_11_auth.o \ - ieee802_11.o \ - ieee802_11_ht.o \ -diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h -index e219160b0..17eb0682b 100644 ---- a/src/ap/ap_config.h -+++ b/src/ap/ap_config.h -@@ -325,10 +325,6 @@ struct hostapd_bss_config { - int erp_send_reauth_start; - char *erp_domain; - -- int ieee802_11f; /* use IEEE 802.11f (IAPP) */ -- char iapp_iface[IFNAMSIZ + 1]; /* interface used with IAPP broadcast -- * frames */ -- - enum macaddr_acl { - ACCEPT_UNLESS_DENIED = 0, - DENY_UNLESS_ACCEPTED = 1, -diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c -index ef988b634..bf7b1f89e 100644 ---- a/src/ap/hostapd.c -+++ b/src/ap/hostapd.c -@@ -28,7 +28,6 @@ - #include "accounting.h" - #include "ap_list.h" - #include "beacon.h" --#include "iapp.h" - #include "ieee802_1x.h" - #include "ieee802_11_auth.h" - #include "vlan_init.h" -@@ -361,8 +360,6 @@ static void hostapd_free_hapd_data(struct hostapd_data *hapd) - hapd->beacon_set_done = 0; - - wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface); -- iapp_deinit(hapd->iapp); -- hapd->iapp = NULL; - accounting_deinit(hapd); - hostapd_deinit_wpa(hapd); - vlan_deinit(hapd); -@@ -1296,13 +1293,6 @@ static int hostapd_setup_bss(struct hostapd_data *hapd, int first) - return -1; - } - -- if (conf->ieee802_11f && -- (hapd->iapp = iapp_init(hapd, conf->iapp_iface)) == NULL) { -- wpa_printf(MSG_ERROR, "IEEE 802.11F (IAPP) initialization " -- "failed."); -- return -1; -- } -- - #ifdef CONFIG_INTERWORKING - if (gas_serv_init(hapd)) { - wpa_printf(MSG_ERROR, "GAS server initialization failed"); -@@ -3056,10 +3046,6 @@ void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta, - hostapd_prune_associations(hapd, sta->addr); - ap_sta_clear_disconnect_timeouts(hapd, sta); - -- /* IEEE 802.11F (IAPP) */ -- if (hapd->conf->ieee802_11f) -- iapp_new_station(hapd->iapp, sta); -- - #ifdef CONFIG_P2P - if (sta->p2p_ie == NULL && !sta->no_p2p_set) { - sta->no_p2p_set = 1; -diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h -index 5b859b8a9..2358d1664 100644 ---- a/src/ap/hostapd.h -+++ b/src/ap/hostapd.h -@@ -179,8 +179,6 @@ struct hostapd_data { - u64 acct_session_id; - struct radius_das_data *radius_das; - -- struct iapp_data *iapp; -- - struct hostapd_cached_radius_acl *acl_cache; - struct hostapd_acl_query_data *acl_queries; - -diff --git a/src/ap/iapp.c b/src/ap/iapp.c -deleted file mode 100644 -index 2556da30c..000000000 ---- a/src/ap/iapp.c -+++ /dev/null -@@ -1,542 +0,0 @@ --/* -- * hostapd / IEEE 802.11F-2003 Inter-Access Point Protocol (IAPP) -- * Copyright (c) 2002-2007, Jouni Malinen <j@w1.fi> -- * -- * This software may be distributed under the terms of the BSD license. -- * See README for more details. -- * -- * Note: IEEE 802.11F-2003 was a experimental use specification. It has expired -- * and IEEE has withdrawn it. In other words, it is likely better to look at -- * using some other mechanism for AP-to-AP communication than extending the -- * implementation here. -- */ -- --/* TODO: -- * Level 1: no administrative or security support -- * (e.g., static BSSID to IP address mapping in each AP) -- * Level 2: support for dynamic mapping of BSSID to IP address -- * Level 3: support for encryption and authentication of IAPP messages -- * - add support for MOVE-notify and MOVE-response (this requires support for -- * finding out IP address for previous AP using RADIUS) -- * - add support for Send- and ACK-Security-Block to speedup IEEE 802.1X during -- * reassociation to another AP -- * - implement counters etc. for IAPP MIB -- * - verify endianness of fields in IAPP messages; are they big-endian as -- * used here? -- * - RADIUS connection for AP registration and BSSID to IP address mapping -- * - TCP connection for IAPP MOVE, CACHE -- * - broadcast ESP for IAPP ADD-notify -- * - ESP for IAPP MOVE messages -- * - security block sending/processing -- * - IEEE 802.11 context transfer -- */ -- --#include "utils/includes.h" --#include <net/if.h> --#include <sys/ioctl.h> --#include <netpacket/packet.h> -- --#include "utils/common.h" --#include "utils/eloop.h" --#include "common/ieee802_11_defs.h" --#include "hostapd.h" --#include "ap_config.h" --#include "ieee802_11.h" --#include "sta_info.h" --#include "iapp.h" -- -- --#define IAPP_MULTICAST "224.0.1.178" --#define IAPP_UDP_PORT 3517 --#define IAPP_TCP_PORT 3517 -- --struct iapp_hdr { -- u8 version; -- u8 command; -- be16 identifier; -- be16 length; -- /* followed by length-6 octets of data */ --} __attribute__ ((packed)); -- --#define IAPP_VERSION 0 -- --enum IAPP_COMMAND { -- IAPP_CMD_ADD_notify = 0, -- IAPP_CMD_MOVE_notify = 1, -- IAPP_CMD_MOVE_response = 2, -- IAPP_CMD_Send_Security_Block = 3, -- IAPP_CMD_ACK_Security_Block = 4, -- IAPP_CMD_CACHE_notify = 5, -- IAPP_CMD_CACHE_response = 6, --}; -- -- --/* ADD-notify - multicast UDP on the local LAN */ --struct iapp_add_notify { -- u8 addr_len; /* ETH_ALEN */ -- u8 reserved; -- u8 mac_addr[ETH_ALEN]; -- be16 seq_num; --} __attribute__ ((packed)); -- -- --/* Layer 2 Update frame (802.2 Type 1 LLC XID Update response) */ --struct iapp_layer2_update { -- u8 da[ETH_ALEN]; /* broadcast */ -- u8 sa[ETH_ALEN]; /* STA addr */ -- be16 len; /* 6 */ -- u8 dsap; /* null DSAP address */ -- u8 ssap; /* null SSAP address, CR=Response */ -- u8 control; -- u8 xid_info[3]; --} __attribute__ ((packed)); -- -- --/* MOVE-notify - unicast TCP */ --struct iapp_move_notify { -- u8 addr_len; /* ETH_ALEN */ -- u8 reserved; -- u8 mac_addr[ETH_ALEN]; -- u16 seq_num; -- u16 ctx_block_len; -- /* followed by ctx_block_len bytes */ --} __attribute__ ((packed)); -- -- --/* MOVE-response - unicast TCP */ --struct iapp_move_response { -- u8 addr_len; /* ETH_ALEN */ -- u8 status; -- u8 mac_addr[ETH_ALEN]; -- u16 seq_num; -- u16 ctx_block_len; -- /* followed by ctx_block_len bytes */ --} __attribute__ ((packed)); -- --enum { -- IAPP_MOVE_SUCCESSFUL = 0, -- IAPP_MOVE_DENIED = 1, -- IAPP_MOVE_STALE_MOVE = 2, --}; -- -- --/* CACHE-notify */ --struct iapp_cache_notify { -- u8 addr_len; /* ETH_ALEN */ -- u8 reserved; -- u8 mac_addr[ETH_ALEN]; -- u16 seq_num; -- u8 current_ap[ETH_ALEN]; -- u16 ctx_block_len; -- /* ctx_block_len bytes of context block followed by 16-bit context -- * timeout */ --} __attribute__ ((packed)); -- -- --/* CACHE-response - unicast TCP */ --struct iapp_cache_response { -- u8 addr_len; /* ETH_ALEN */ -- u8 status; -- u8 mac_addr[ETH_ALEN]; -- u16 seq_num; --} __attribute__ ((packed)); -- --enum { -- IAPP_CACHE_SUCCESSFUL = 0, -- IAPP_CACHE_STALE_CACHE = 1, --}; -- -- --/* Send-Security-Block - unicast TCP */ --struct iapp_send_security_block { -- u8 iv[8]; -- u16 sec_block_len; -- /* followed by sec_block_len bytes of security block */ --} __attribute__ ((packed)); -- -- --/* ACK-Security-Block - unicast TCP */ --struct iapp_ack_security_block { -- u8 iv[8]; -- u8 new_ap_ack_authenticator[48]; --} __attribute__ ((packed)); -- -- --struct iapp_data { -- struct hostapd_data *hapd; -- u16 identifier; /* next IAPP identifier */ -- struct in_addr own, multicast; -- int udp_sock; -- int packet_sock; --}; -- -- --static void iapp_send_add(struct iapp_data *iapp, u8 *mac_addr, u16 seq_num) --{ -- char buf[128]; -- struct iapp_hdr *hdr; -- struct iapp_add_notify *add; -- struct sockaddr_in addr; -- -- /* Send IAPP ADD-notify to remove possible association from other APs -- */ -- -- hdr = (struct iapp_hdr *) buf; -- hdr->version = IAPP_VERSION; -- hdr->command = IAPP_CMD_ADD_notify; -- hdr->identifier = host_to_be16(iapp->identifier++); -- hdr->length = host_to_be16(sizeof(*hdr) + sizeof(*add)); -- -- add = (struct iapp_add_notify *) (hdr + 1); -- add->addr_len = ETH_ALEN; -- add->reserved = 0; -- os_memcpy(add->mac_addr, mac_addr, ETH_ALEN); -- -- add->seq_num = host_to_be16(seq_num); -- -- os_memset(&addr, 0, sizeof(addr)); -- addr.sin_family = AF_INET; -- addr.sin_addr.s_addr = iapp->multicast.s_addr; -- addr.sin_port = htons(IAPP_UDP_PORT); -- if (sendto(iapp->udp_sock, buf, (char *) (add + 1) - buf, 0, -- (struct sockaddr *) &addr, sizeof(addr)) < 0) -- wpa_printf(MSG_INFO, "sendto[IAPP-ADD]: %s", strerror(errno)); --} -- -- --static void iapp_send_layer2_update(struct iapp_data *iapp, u8 *addr) --{ -- struct iapp_layer2_update msg; -- -- /* Send Level 2 Update Frame to update forwarding tables in layer 2 -- * bridge devices */ -- -- /* 802.2 Type 1 Logical Link Control (LLC) Exchange Identifier (XID) -- * Update response frame; IEEE Std 802.2-1998, 5.4.1.2.1 */ -- -- os_memset(msg.da, 0xff, ETH_ALEN); -- os_memcpy(msg.sa, addr, ETH_ALEN); -- msg.len = host_to_be16(6); -- msg.dsap = 0; /* NULL DSAP address */ -- msg.ssap = 0x01; /* NULL SSAP address, CR Bit: Response */ -- msg.control = 0xaf; /* XID response lsb.1111F101. -- * F=0 (no poll command; unsolicited frame) */ -- msg.xid_info[0] = 0x81; /* XID format identifier */ -- msg.xid_info[1] = 1; /* LLC types/classes: Type 1 LLC */ -- msg.xid_info[2] = 1 << 1; /* XID sender's receive window size (RW) -- * FIX: what is correct RW with 802.11? */ -- -- if (send(iapp->packet_sock, &msg, sizeof(msg), 0) < 0) -- wpa_printf(MSG_INFO, "send[L2 Update]: %s", strerror(errno)); --} -- -- --/** -- * iapp_new_station - IAPP processing for a new STA -- * @iapp: IAPP data -- * @sta: The associated station -- */ --void iapp_new_station(struct iapp_data *iapp, struct sta_info *sta) --{ -- u16 seq = 0; /* TODO */ -- -- if (iapp == NULL) -- return; -- -- /* IAPP-ADD.request(MAC Address, Sequence Number, Timeout) */ -- hostapd_logger(iapp->hapd, sta->addr, HOSTAPD_MODULE_IAPP, -- HOSTAPD_LEVEL_DEBUG, "IAPP-ADD.request(seq=%d)", seq); -- iapp_send_layer2_update(iapp, sta->addr); -- iapp_send_add(iapp, sta->addr, seq); -- -- /* TODO: If this was reassociation: -- * IAPP-MOVE.request(MAC Address, Sequence Number, Old AP, -- * Context Block, Timeout) -- * TODO: Send IAPP-MOVE to the old AP; Map Old AP BSSID to -- * IP address */ --} -- -- --static void iapp_process_add_notify(struct iapp_data *iapp, -- struct sockaddr_in *from, -- struct iapp_hdr *hdr, int len) --{ -- struct iapp_add_notify *add = (struct iapp_add_notify *) (hdr + 1); -- struct sta_info *sta; -- -- if (len != sizeof(*add)) { -- wpa_printf(MSG_INFO, "Invalid IAPP-ADD packet length %d (expected %lu)", -- len, (unsigned long) sizeof(*add)); -- return; -- } -- -- sta = ap_get_sta(iapp->hapd, add->mac_addr); -- -- /* IAPP-ADD.indication(MAC Address, Sequence Number) */ -- hostapd_logger(iapp->hapd, add->mac_addr, HOSTAPD_MODULE_IAPP, -- HOSTAPD_LEVEL_INFO, -- "Received IAPP ADD-notify (seq# %d) from %s:%d%s", -- be_to_host16(add->seq_num), -- inet_ntoa(from->sin_addr), ntohs(from->sin_port), -- sta ? "" : " (STA not found)"); -- -- if (!sta) -- return; -- -- /* TODO: could use seq_num to try to determine whether last association -- * to this AP is newer than the one advertised in IAPP-ADD. Although, -- * this is not really a reliable verification. */ -- -- hostapd_logger(iapp->hapd, add->mac_addr, HOSTAPD_MODULE_IAPP, -- HOSTAPD_LEVEL_DEBUG, -- "Removing STA due to IAPP ADD-notify"); -- ap_sta_disconnect(iapp->hapd, sta, NULL, 0); --} -- -- --/** -- * iapp_receive_udp - Process IAPP UDP frames -- * @sock: File descriptor for the socket -- * @eloop_ctx: IAPP data (struct iapp_data *) -- * @sock_ctx: Not used -- */ --static void iapp_receive_udp(int sock, void *eloop_ctx, void *sock_ctx) --{ -- struct iapp_data *iapp = eloop_ctx; -- int len, hlen; -- unsigned char buf[128]; -- struct sockaddr_in from; -- socklen_t fromlen; -- struct iapp_hdr *hdr; -- -- /* Handle incoming IAPP frames (over UDP/IP) */ -- -- fromlen = sizeof(from); -- len = recvfrom(iapp->udp_sock, buf, sizeof(buf), 0, -- (struct sockaddr *) &from, &fromlen); -- if (len < 0) { -- wpa_printf(MSG_INFO, "iapp_receive_udp - recvfrom: %s", -- strerror(errno)); -- return; -- } -- -- if (from.sin_addr.s_addr == iapp->own.s_addr) -- return; /* ignore own IAPP messages */ -- -- hostapd_logger(iapp->hapd, NULL, HOSTAPD_MODULE_IAPP, -- HOSTAPD_LEVEL_DEBUG, -- "Received %d byte IAPP frame from %s%s\n", -- len, inet_ntoa(from.sin_addr), -- len < (int) sizeof(*hdr) ? " (too short)" : ""); -- -- if (len < (int) sizeof(*hdr)) -- return; -- -- hdr = (struct iapp_hdr *) buf; -- hlen = be_to_host16(hdr->length); -- hostapd_logger(iapp->hapd, NULL, HOSTAPD_MODULE_IAPP, -- HOSTAPD_LEVEL_DEBUG, -- "RX: version=%d command=%d id=%d len=%d\n", -- hdr->version, hdr->command, -- be_to_host16(hdr->identifier), hlen); -- if (hdr->version != IAPP_VERSION) { -- wpa_printf(MSG_INFO, "Dropping IAPP frame with unknown version %d", -- hdr->version); -- return; -- } -- if (hlen > len) { -- wpa_printf(MSG_INFO, "Underflow IAPP frame (hlen=%d len=%d)", -- hlen, len); -- return; -- } -- if (hlen < len) { -- wpa_printf(MSG_INFO, "Ignoring %d extra bytes from IAPP frame", -- len - hlen); -- len = hlen; -- } -- -- switch (hdr->command) { -- case IAPP_CMD_ADD_notify: -- iapp_process_add_notify(iapp, &from, hdr, len - sizeof(*hdr)); -- break; -- case IAPP_CMD_MOVE_notify: -- /* TODO: MOVE is using TCP; so move this to TCP handler once it -- * is implemented.. */ -- /* IAPP-MOVE.indication(MAC Address, New BSSID, -- * Sequence Number, AP Address, Context Block) */ -- /* TODO: process */ -- break; -- default: -- wpa_printf(MSG_INFO, "Unknown IAPP command %d", hdr->command); -- break; -- } --} -- -- --struct iapp_data * iapp_init(struct hostapd_data *hapd, const char *iface) --{ -- struct ifreq ifr; -- struct sockaddr_ll addr; -- int ifindex; -- struct sockaddr_in *paddr, uaddr; -- struct iapp_data *iapp; -- struct ip_mreqn mreq; -- int reuseaddr = 1; -- -- iapp = os_zalloc(sizeof(*iapp)); -- if (iapp == NULL) -- return NULL; -- iapp->hapd = hapd; -- iapp->udp_sock = iapp->packet_sock = -1; -- -- /* TODO: -- * open socket for sending and receiving IAPP frames over TCP -- */ -- -- iapp->udp_sock = socket(PF_INET, SOCK_DGRAM, 0); -- if (iapp->udp_sock < 0) { -- wpa_printf(MSG_INFO, "iapp_init - socket[PF_INET,SOCK_DGRAM]: %s", -- strerror(errno)); -- iapp_deinit(iapp); -- return NULL; -- } -- -- os_memset(&ifr, 0, sizeof(ifr)); -- os_strlcpy(ifr.ifr_name, iface, sizeof(ifr.ifr_name)); -- if (ioctl(iapp->udp_sock, SIOCGIFINDEX, &ifr) != 0) { -- wpa_printf(MSG_INFO, "iapp_init - ioctl(SIOCGIFINDEX): %s", -- strerror(errno)); -- iapp_deinit(iapp); -- return NULL; -- } -- ifindex = ifr.ifr_ifindex; -- -- if (ioctl(iapp->udp_sock, SIOCGIFADDR, &ifr) != 0) { -- wpa_printf(MSG_INFO, "iapp_init - ioctl(SIOCGIFADDR): %s", -- strerror(errno)); -- iapp_deinit(iapp); -- return NULL; -- } -- paddr = (struct sockaddr_in *) &ifr.ifr_addr; -- if (paddr->sin_family != AF_INET) { -- wpa_printf(MSG_INFO, "IAPP: Invalid address family %i (SIOCGIFADDR)", -- paddr->sin_family); -- iapp_deinit(iapp); -- return NULL; -- } -- iapp->own.s_addr = paddr->sin_addr.s_addr; -- -- if (ioctl(iapp->udp_sock, SIOCGIFBRDADDR, &ifr) != 0) { -- wpa_printf(MSG_INFO, "iapp_init - ioctl(SIOCGIFBRDADDR): %s", -- strerror(errno)); -- iapp_deinit(iapp); -- return NULL; -- } -- paddr = (struct sockaddr_in *) &ifr.ifr_addr; -- if (paddr->sin_family != AF_INET) { -- wpa_printf(MSG_INFO, "Invalid address family %i (SIOCGIFBRDADDR)", -- paddr->sin_family); -- iapp_deinit(iapp); -- return NULL; -- } -- inet_aton(IAPP_MULTICAST, &iapp->multicast); -- -- os_memset(&uaddr, 0, sizeof(uaddr)); -- uaddr.sin_family = AF_INET; -- uaddr.sin_port = htons(IAPP_UDP_PORT); -- -- if (setsockopt(iapp->udp_sock, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, -- sizeof(reuseaddr)) < 0) { -- wpa_printf(MSG_INFO, -- "iapp_init - setsockopt[UDP,SO_REUSEADDR]: %s", -- strerror(errno)); -- /* -- * Ignore this and try to continue. This is fine for single -- * BSS cases, but may fail if multiple BSSes enable IAPP. -- */ -- } -- -- if (bind(iapp->udp_sock, (struct sockaddr *) &uaddr, -- sizeof(uaddr)) < 0) { -- wpa_printf(MSG_INFO, "iapp_init - bind[UDP]: %s", -- strerror(errno)); -- iapp_deinit(iapp); -- return NULL; -- } -- -- os_memset(&mreq, 0, sizeof(mreq)); -- mreq.imr_multiaddr = iapp->multicast; -- mreq.imr_address.s_addr = INADDR_ANY; -- mreq.imr_ifindex = 0; -- if (setsockopt(iapp->udp_sock, SOL_IP, IP_ADD_MEMBERSHIP, &mreq, -- sizeof(mreq)) < 0) { -- wpa_printf(MSG_INFO, "iapp_init - setsockopt[UDP,IP_ADD_MEMBERSHIP]: %s", -- strerror(errno)); -- iapp_deinit(iapp); -- return NULL; -- } -- -- iapp->packet_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); -- if (iapp->packet_sock < 0) { -- wpa_printf(MSG_INFO, "iapp_init - socket[PF_PACKET,SOCK_RAW]: %s", -- strerror(errno)); -- iapp_deinit(iapp); -- return NULL; -- } -- -- os_memset(&addr, 0, sizeof(addr)); -- addr.sll_family = AF_PACKET; -- addr.sll_ifindex = ifindex; -- if (bind(iapp->packet_sock, (struct sockaddr *) &addr, -- sizeof(addr)) < 0) { -- wpa_printf(MSG_INFO, "iapp_init - bind[PACKET]: %s", -- strerror(errno)); -- iapp_deinit(iapp); -- return NULL; -- } -- -- if (eloop_register_read_sock(iapp->udp_sock, iapp_receive_udp, -- iapp, NULL)) { -- wpa_printf(MSG_INFO, "Could not register read socket for IAPP"); -- iapp_deinit(iapp); -- return NULL; -- } -- -- wpa_printf(MSG_INFO, "IEEE 802.11F (IAPP) using interface %s", iface); -- -- /* TODO: For levels 2 and 3: send RADIUS Initiate-Request, receive -- * RADIUS Initiate-Accept or Initiate-Reject. IAPP port should actually -- * be openned only after receiving Initiate-Accept. If Initiate-Reject -- * is received, IAPP is not started. */ -- -- return iapp; --} -- -- --void iapp_deinit(struct iapp_data *iapp) --{ -- struct ip_mreqn mreq; -- -- if (iapp == NULL) -- return; -- -- if (iapp->udp_sock >= 0) { -- os_memset(&mreq, 0, sizeof(mreq)); -- mreq.imr_multiaddr = iapp->multicast; -- mreq.imr_address.s_addr = INADDR_ANY; -- mreq.imr_ifindex = 0; -- if (setsockopt(iapp->udp_sock, SOL_IP, IP_DROP_MEMBERSHIP, -- &mreq, sizeof(mreq)) < 0) { -- wpa_printf(MSG_INFO, "iapp_deinit - setsockopt[UDP,IP_DEL_MEMBERSHIP]: %s", -- strerror(errno)); -- } -- -- eloop_unregister_read_sock(iapp->udp_sock); -- close(iapp->udp_sock); -- } -- if (iapp->packet_sock >= 0) { -- eloop_unregister_read_sock(iapp->packet_sock); -- close(iapp->packet_sock); -- } -- os_free(iapp); --} -diff --git a/src/ap/iapp.h b/src/ap/iapp.h -deleted file mode 100644 -index c22118342..000000000 ---- a/src/ap/iapp.h -+++ /dev/null -@@ -1,39 +0,0 @@ --/* -- * hostapd / IEEE 802.11F-2003 Inter-Access Point Protocol (IAPP) -- * Copyright (c) 2002-2005, Jouni Malinen <j@w1.fi> -- * -- * This software may be distributed under the terms of the BSD license. -- * See README for more details. -- */ -- --#ifndef IAPP_H --#define IAPP_H -- --struct iapp_data; -- --#ifdef CONFIG_IAPP -- --void iapp_new_station(struct iapp_data *iapp, struct sta_info *sta); --struct iapp_data * iapp_init(struct hostapd_data *hapd, const char *iface); --void iapp_deinit(struct iapp_data *iapp); -- --#else /* CONFIG_IAPP */ -- --static inline void iapp_new_station(struct iapp_data *iapp, -- struct sta_info *sta) --{ --} -- --static inline struct iapp_data * iapp_init(struct hostapd_data *hapd, -- const char *iface) --{ -- return NULL; --} -- --static inline void iapp_deinit(struct iapp_data *iapp) --{ --} -- --#endif /* CONFIG_IAPP */ -- --#endif /* IAPP_H */ -diff --git a/src/utils/wpa_debug.h b/src/utils/wpa_debug.h -index 1fe0b7db7..c94c4391f 100644 ---- a/src/utils/wpa_debug.h -+++ b/src/utils/wpa_debug.h -@@ -305,7 +305,6 @@ void hostapd_logger_register_cb(hostapd_logger_cb_func func); - #define HOSTAPD_MODULE_RADIUS 0x00000004 - #define HOSTAPD_MODULE_WPA 0x00000008 - #define HOSTAPD_MODULE_DRIVER 0x00000010 --#define HOSTAPD_MODULE_IAPP 0x00000020 - #define HOSTAPD_MODULE_MLME 0x00000040 - - enum hostapd_logger_level { --- -2.17.1 - |