Set default scan IEs to the driver (QCA vendor extension)
[mech_eap.git] / src / drivers / driver_nl80211.h
index 8af5027..d0ec48c 100644 (file)
@@ -25,6 +25,7 @@
 #endif /* CONFIG_LIBNL20 */
 
 struct nl80211_global {
+       void *ctx;
        struct dl_list interfaces;
        int if_add_ifindex;
        u64 if_add_wdevid;
@@ -53,6 +54,7 @@ struct i802_bss {
        struct wpa_driver_nl80211_data *drv;
        struct i802_bss *next;
        int ifindex;
+       int br_ifindex;
        u64 wdev_id;
        char ifname[IFNAMSIZ + 1];
        char brname[IFNAMSIZ];
@@ -83,6 +85,7 @@ struct wpa_driver_nl80211_data {
        struct dl_list list;
        struct dl_list wiphy_list;
        char phyname[32];
+       unsigned int wiphy_idx;
        u8 perm_addr[ETH_ALEN];
        void *ctx;
        int ifindex;
@@ -93,6 +96,13 @@ struct wpa_driver_nl80211_data {
        struct wpa_driver_capa capa;
        u8 *extended_capa, *extended_capa_mask;
        unsigned int extended_capa_len;
+       struct drv_nl80211_ext_capa {
+               enum nl80211_iftype iftype;
+               u8 *ext_capa, *ext_capa_mask;
+               unsigned int ext_capa_len;
+       } iface_ext_capa[NL80211_IFTYPE_MAX];
+       unsigned int num_iface_ext_capa;
+
        int has_capability;
 
        int operstate;
@@ -104,14 +114,12 @@ struct wpa_driver_nl80211_data {
                SCHED_SCAN_RESULTS
        } scan_state;
 
-       struct nl_cb *nl_cb;
-
        u8 auth_bssid[ETH_ALEN];
        u8 auth_attempt_bssid[ETH_ALEN];
        u8 bssid[ETH_ALEN];
        u8 prev_bssid[ETH_ALEN];
        int associated;
-       u8 ssid[32];
+       u8 ssid[SSID_MAX_LEN];
        size_t ssid_len;
        enum nl80211_iftype nlmode;
        enum nl80211_iftype ap_scan_as_station;
@@ -137,16 +145,28 @@ struct wpa_driver_nl80211_data {
        unsigned int start_iface_up:1;
        unsigned int test_use_roc_tx:1;
        unsigned int ignore_deauth_event:1;
+       unsigned int vendor_cmd_test_avail:1;
        unsigned int roaming_vendor_cmd_avail:1;
        unsigned int dfs_vendor_cmd_avail:1;
        unsigned int have_low_prio_scan:1;
        unsigned int force_connect_cmd:1;
        unsigned int addr_changed:1;
-       unsigned int key_mgmt_set_key_vendor_cmd_avail:1;
-       unsigned int roam_auth_vendor_event_avail:1;
-
+       unsigned int get_features_vendor_cmd_avail:1;
+       unsigned int set_rekey_offload:1;
+       unsigned int p2p_go_ctwindow_supported:1;
+       unsigned int setband_vendor_cmd_avail:1;
+       unsigned int get_pref_freq_list:1;
+       unsigned int set_prob_oper_freq:1;
+       unsigned int scan_vendor_cmd_avail:1;
+       unsigned int connect_reassoc:1;
+       unsigned int set_wifi_conf_vendor_cmd_avail:1;
+
+       u64 vendor_scan_cookie;
        u64 remain_on_chan_cookie;
        u64 send_action_cookie;
+#define MAX_SEND_ACTION_COOKIES 20
+       u64 send_action_cookies[MAX_SEND_ACTION_COOKIES];
+       unsigned int num_send_action_cookies;
 
        unsigned int last_mgmt_freq;
 
@@ -162,13 +182,16 @@ struct wpa_driver_nl80211_data {
        struct nl_handle *rtnl_sk; /* nl_sock for NETLINK_ROUTE */
 
        int default_if_indices[16];
+       /* the AP/AP_VLAN iface that is in this bridge */
+       int default_if_indices_reason[16];
        int *if_indices;
+       int *if_indices_reason;
        int num_if_indices;
 
        /* From failed authentication command */
        int auth_freq;
        u8 auth_bssid_[ETH_ALEN];
-       u8 auth_ssid[32];
+       u8 auth_ssid[SSID_MAX_LEN];
        size_t auth_ssid_len;
        int auth_alg;
        u8 *auth_ie;
@@ -178,13 +201,23 @@ struct wpa_driver_nl80211_data {
        int auth_wep_tx_keyidx;
        int auth_local_state_change;
        int auth_p2p;
+
+       /*
+        * Tells whether the last scan issued from wpa_supplicant was a normal
+        * scan (NL80211_CMD_TRIGGER_SCAN) or a vendor scan
+        * (NL80211_CMD_VENDOR). 0 if no pending scan request.
+        */
+       int last_scan_cmd;
 };
 
 struct nl_msg;
 
-int nl80211_set_iface_id(struct nl_msg *msg, struct i802_bss *bss);
 void * nl80211_cmd(struct wpa_driver_nl80211_data *drv,
                   struct nl_msg *msg, int flags, uint8_t cmd);
+struct nl_msg * nl80211_cmd_msg(struct i802_bss *bss, int flags, uint8_t cmd);
+struct nl_msg * nl80211_drv_msg(struct wpa_driver_nl80211_data *drv, int flags,
+                               uint8_t cmd);
+struct nl_msg * nl80211_bss_msg(struct i802_bss *bss, int flags, uint8_t cmd);
 int send_and_recv_msgs(struct wpa_driver_nl80211_data *drv, struct nl_msg *msg,
                       int (*valid_handler)(struct nl_msg *, void *),
                       void *valid_data);
@@ -200,6 +233,7 @@ void nl80211_mark_disconnected(struct wpa_driver_nl80211_data *drv);
 struct i802_bss * get_bss_ifindex(struct wpa_driver_nl80211_data *drv,
                                  int ifindex);
 int is_ap_interface(enum nl80211_iftype nlmode);
+int is_sta_interface(enum nl80211_iftype nlmode);
 int wpa_driver_nl80211_authenticate_retry(struct wpa_driver_nl80211_data *drv);
 int nl80211_get_link_signal(struct wpa_driver_nl80211_data *drv,
                            struct wpa_signal_info *sig);
@@ -208,11 +242,27 @@ int nl80211_get_link_noise(struct wpa_driver_nl80211_data *drv,
 int nl80211_get_wiphy_index(struct i802_bss *bss);
 int wpa_driver_nl80211_set_mode(struct i802_bss *bss,
                                enum nl80211_iftype nlmode);
-void wpa_driver_nl80211_scan_timeout(void *eloop_ctx, void *timeout_ctx);
+int wpa_driver_nl80211_mlme(struct wpa_driver_nl80211_data *drv,
+                           const u8 *addr, int cmd, u16 reason_code,
+                           int local_state_change);
+
+int nl80211_create_monitor_interface(struct wpa_driver_nl80211_data *drv);
+void nl80211_remove_monitor_interface(struct wpa_driver_nl80211_data *drv);
+int nl80211_send_monitor(struct wpa_driver_nl80211_data *drv,
+                        const void *data, size_t len,
+                        int encrypt, int noack);
+
+int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv);
+struct hostapd_hw_modes *
+nl80211_get_hw_feature_data(void *priv, u16 *num_modes, u16 *flags);
+
+int process_global_event(struct nl_msg *msg, void *arg);
+int process_bss_event(struct nl_msg *msg, void *arg);
+
+const char * nl80211_iftype_str(enum nl80211_iftype mode);
 
 #ifdef ANDROID
 int android_nl_socket_set_nonblocking(struct nl_handle *handle);
-int android_genl_ctrl_resolve(struct nl_handle *handle, const char *name);
 int android_pno_start(struct i802_bss *bss,
                      struct wpa_driver_scan_params *params);
 int android_pno_stop(struct i802_bss *bss);
@@ -229,4 +279,29 @@ int wpa_driver_set_ap_wps_p2p_ie(void *priv, const struct wpabuf *beacon,
 #endif /* ANDROID_P2P */
 #endif /* ANDROID */
 
+
+/* driver_nl80211_scan.c */
+
+struct nl80211_bss_info_arg {
+       struct wpa_driver_nl80211_data *drv;
+       struct wpa_scan_results *res;
+       unsigned int assoc_freq;
+       unsigned int ibss_freq;
+       u8 assoc_bssid[ETH_ALEN];
+};
+
+int bss_info_handler(struct nl_msg *msg, void *arg);
+void wpa_driver_nl80211_scan_timeout(void *eloop_ctx, void *timeout_ctx);
+int wpa_driver_nl80211_scan(struct i802_bss *bss,
+                           struct wpa_driver_scan_params *params);
+int wpa_driver_nl80211_sched_scan(void *priv,
+                                 struct wpa_driver_scan_params *params);
+int wpa_driver_nl80211_stop_sched_scan(void *priv);
+struct wpa_scan_results * wpa_driver_nl80211_get_scan_results(void *priv);
+void nl80211_dump_scan(struct wpa_driver_nl80211_data *drv);
+int wpa_driver_nl80211_abort_scan(void *priv);
+int wpa_driver_nl80211_vendor_scan(struct i802_bss *bss,
+                                  struct wpa_driver_scan_params *params);
+int nl80211_set_default_scan_ies(void *priv, const u8 *ies, size_t ies_len);
+
 #endif /* DRIVER_NL80211_H */