int ioctl_sock; /* socket for ioctl() use */
struct netlink_data *netlink;
int we_version;
+ int fils_en; /* FILS enable/disable in driver */
u8 acct_mac[ETH_ALEN];
struct hostap_sta_driver_data acct_data;
}
+#ifdef CONFIG_FILS
+static int
+get80211param(struct atheros_driver_data *drv, int op, int *data)
+{
+ struct iwreq iwr;
+
+ os_memset(&iwr, 0, sizeof(iwr));
+ os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
+ iwr.u.mode = op;
+
+ if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_GETPARAM, &iwr) < 0)
+ return -1;
+
+ *data = iwr.u.mode;
+ return 0;
+}
+#endif /* CONFIG_FILS */
+
+
static int
set80211priv(struct atheros_driver_data *drv, int op, void *data, int len)
{
len - sizeof(struct l2_ethhdr));
}
+
+static void atheros_read_fils_cap(struct atheros_driver_data *drv)
+{
+ int fils = 0;
+
+#ifdef CONFIG_FILS
+ /* TODO: Would be better to have #ifdef on the IEEE80211_PARAM_* value
+ * to automatically check this against the driver header files. */
+ if (get80211param(drv, IEEE80211_PARAM_ENABLE_FILS, &fils) < 0) {
+ wpa_printf(MSG_DEBUG,
+ "%s: Failed to get FILS capability from driver",
+ __func__);
+ /* Assume driver does not support FILS */
+ fils = 0;
+ }
+#endif /* CONFIG_FILS */
+ drv->fils_en = fils;
+ wpa_printf(MSG_DEBUG, "atheros: fils_en=%d", drv->fils_en);
+}
+
+
static void *
atheros_init(struct hostapd_data *hapd, struct wpa_init_params *params)
{
if (atheros_wireless_event_init(drv))
goto bad;
+ /* Read FILS capability from the driver */
+ atheros_read_fils_cap(drv);
+
return drv;
bad:
atheros_reset_appfilter(drv);