#include "priv_netlink.h"
#include "netlink.h"
+#include "linux_ioctl.h"
#include "common/ieee802_11_defs.h"
sa = hdr->addr2;
os_memset(&event, 0, sizeof(event));
- event.rx_from_unknown.hdr = hdr;
+ event.rx_from_unknown.frame = buf;
event.rx_from_unknown.len = len;
wpa_supplicant_event(drv->hapd, EVENT_RX_FROM_UNKNOWN, &event);
left -= 2;
switch (ethertype) {
case ETH_P_PAE:
- hostapd_eapol_receive(drv->hapd, sa, pos, left);
+ drv_event_eapol_rx(drv->hapd, sa, pos, left);
break;
default:
return -1;
}
- memset(&ifr, 0, sizeof(ifr));
- os_strlcpy(ifr.ifr_name, drv->iface, sizeof(ifr.ifr_name));
- if (ioctl(drv->sock, SIOCGIFHWADDR, &ifr) != 0) {
- perror("ioctl(SIOCGIFHWADDR)");
- return -1;
- }
-
- if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
- printf("Invalid HW-addr family 0x%04x\n",
- ifr.ifr_hwaddr.sa_family);
- return -1;
- }
- os_memcpy(own_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
-
- return 0;
+ return linux_get_ifhwaddr(drv->sock, drv->iface, own_addr);
}
{
struct hostap_driver_data *drv = priv;
struct ifreq ifr;
+ char ifname[IFNAMSIZ];
- if (drv->ioctl_sock < 0)
- return -1;
-
- memset(&ifr, 0, sizeof(ifr));
- snprintf(ifr.ifr_name, IFNAMSIZ, "%sap", drv->iface);
-
- if (ioctl(drv->ioctl_sock, SIOCGIFFLAGS, &ifr) != 0) {
- perror("ioctl[SIOCGIFFLAGS]");
+ os_snprintf(ifname, IFNAMSIZ, "%sap", drv->iface);
+ if (linux_set_iface_flags(drv->ioctl_sock, ifname, dev_up) < 0)
return -1;
- }
-
- if (dev_up)
- ifr.ifr_flags |= IFF_UP;
- else
- ifr.ifr_flags &= ~IFF_UP;
-
- if (ioctl(drv->ioctl_sock, SIOCSIFFLAGS, &ifr) != 0) {
- perror("ioctl[SIOCSIFFLAGS]");
- return -1;
- }
if (dev_up) {
memset(&ifr, 0, sizeof(ifr));
- snprintf(ifr.ifr_name, IFNAMSIZ, "%sap", drv->iface);
+ os_strlcpy(ifr.ifr_name, ifname, IFNAMSIZ);
ifr.ifr_mtu = HOSTAPD_MTU;
if (ioctl(drv->ioctl_sock, SIOCSIFMTU, &ifr) != 0) {
perror("ioctl[SIOCSIFMTU]");
static int wpa_driver_hostap_set_key(const char *ifname, void *priv,
- wpa_alg alg, const u8 *addr, int key_idx,
- int set_tx, const u8 *seq, size_t seq_len,
+ enum wpa_alg alg, const u8 *addr,
+ int key_idx, int set_tx,
+ const u8 *seq, size_t seq_len,
const u8 *key, size_t key_len)
{
struct hostap_driver_data *drv = priv;
}
-static int hostap_set_wps_beacon_ie(const char *ifname, void *priv,
- const u8 *ie, size_t len)
-{
- /* Host AP driver supports only one set of extra IEs, so we need to
- * use the ProbeResp IEs also for Beacon frames since they include more
- * information. */
- return 0;
-}
-
-
-static int hostap_set_wps_probe_resp_ie(const char *ifname, void *priv,
- const u8 *ie, size_t len)
+static int hostap_set_ap_wps_ie(const char *ifname, void *priv,
+ const struct wpabuf *beacon,
+ const struct wpabuf *proberesp)
{
struct hostap_driver_data *drv = priv;
+ /*
+ * Host AP driver supports only one set of extra IEs, so we need to
+ * use the Probe Response IEs also for Beacon frames since they include
+ * more information.
+ */
+
os_free(drv->wps_ie);
drv->wps_ie = NULL;
drv->wps_ie_len = 0;
- if (ie) {
- drv->wps_ie = os_malloc(len);
+ if (proberesp) {
+ drv->wps_ie = os_malloc(wpabuf_len(proberesp));
if (drv->wps_ie == NULL)
return -1;
- os_memcpy(drv->wps_ie, ie, len);
- drv->wps_ie_len = len;
+ os_memcpy(drv->wps_ie, wpabuf_head(proberesp),
+ wpabuf_len(proberesp));
+ drv->wps_ie_len = wpabuf_len(proberesp);
}
return hostapd_ioctl_set_generic_elem(drv);
static int wpa_driver_hostap_set_key(const char *ifname, void *priv,
- wpa_alg alg, const u8 *addr, int key_idx,
- int set_tx, const u8 *seq, size_t seq_len,
+ enum wpa_alg alg, const u8 *addr,
+ int key_idx, int set_tx,
+ const u8 *seq, size_t seq_len,
const u8 *key, size_t key_len)
{
struct wpa_driver_hostap_data *drv = priv;
struct wpa_driver_hostap_data *drv = priv;
int algs = 0;
- if (auth_alg & AUTH_ALG_OPEN_SYSTEM)
+ if (auth_alg & WPA_AUTH_ALG_OPEN)
algs |= 1;
- if (auth_alg & AUTH_ALG_SHARED_KEY)
+ if (auth_alg & WPA_AUTH_ALG_SHARED)
algs |= 2;
- if (auth_alg & AUTH_ALG_LEAP)
+ if (auth_alg & WPA_AUTH_ALG_LEAP)
algs |= 4;
if (algs == 0)
algs = 1; /* at least one algorithm should be set */
.get_inact_sec = hostap_get_inact_sec,
.sta_clear_stats = hostap_sta_clear_stats,
.get_hw_feature_data = hostap_get_hw_feature_data,
- .set_wps_beacon_ie = hostap_set_wps_beacon_ie,
- .set_wps_probe_resp_ie = hostap_set_wps_probe_resp_ie,
+ .set_ap_wps_ie = hostap_set_ap_wps_ie,
#else /* HOSTAPD */
.get_bssid = wpa_driver_hostap_get_bssid,
.get_ssid = wpa_driver_hostap_get_ssid,