Merged the hostap_2.6 updates, and the Leap of Faith work, from the hostap_update...
[mech_eap.git] / libeap / wpa_supplicant / wmm_ac.h
diff --git a/libeap/wpa_supplicant/wmm_ac.h b/libeap/wpa_supplicant/wmm_ac.h
new file mode 100644 (file)
index 0000000..0d15ad0
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Wi-Fi Multimedia Admission Control (WMM-AC)
+ * Copyright(c) 2014, Intel Mobile Communication GmbH.
+ * Copyright(c) 2014, Intel Corporation. All rights reserved.
+ *
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
+ */
+
+#ifndef WMM_AC_H
+#define WMM_AC_H
+
+#include "common/ieee802_11_defs.h"
+#include "drivers/driver.h"
+
+struct wpa_supplicant;
+
+#define WMM_AC_ACCESS_POLICY_EDCA 1
+#define WMM_AC_FIXED_MSDU_SIZE BIT(15)
+
+#define WMM_AC_MAX_TID 7
+#define WMM_AC_MAX_USER_PRIORITY 7
+#define WMM_AC_MIN_SBA_UNITY 0x2000
+#define WMM_AC_MAX_NOMINAL_MSDU 32767
+
+/**
+ * struct wmm_ac_assoc_data - WMM Admission Control Association Data
+ *
+ * This struct will store any relevant WMM association data needed by WMM AC.
+ * In case there is a valid WMM association, an instance of this struct will be
+ * created. In case there is no instance of this struct, the station is not
+ * associated to a valid WMM BSS and hence, WMM AC will not be used.
+ */
+struct wmm_ac_assoc_data {
+       struct {
+               /*
+                * acm - Admission Control Mandatory
+                * In case an access category is ACM, the traffic will have
+                * to be admitted by WMM-AC's admission mechanism before use.
+                */
+               unsigned int acm:1;
+
+               /*
+                * uapsd_queues - Unscheduled Automatic Power Save Delivery
+                *                queues.
+                * Indicates whether ACs are configured for U-APSD (or legacy
+                * PS). Storing this value is necessary in order to set the
+                * Power Save Bit (PSB) in ADDTS request Action frames (if not
+                * given).
+                */
+               unsigned int uapsd:1;
+       } ac_params[WMM_AC_NUM];
+};
+
+/**
+ * wmm_ac_dir - WMM Admission Control Direction
+ */
+enum wmm_ac_dir {
+       WMM_AC_DIR_UPLINK = 0,
+       WMM_AC_DIR_DOWNLINK = 1,
+       WMM_AC_DIR_BIDIRECTIONAL = 3
+};
+
+/**
+ * ts_dir_idx - indices of internally saved tspecs
+ *
+ * we can have multiple tspecs (downlink + uplink) per ac.
+ * save them in array, and use the enum to directly access
+ * the respective tspec slot (according to the direction).
+ */
+enum ts_dir_idx {
+       TS_DIR_IDX_UPLINK,
+       TS_DIR_IDX_DOWNLINK,
+       TS_DIR_IDX_BIDI,
+
+       TS_DIR_IDX_COUNT
+};
+#define TS_DIR_IDX_ALL (BIT(TS_DIR_IDX_COUNT) - 1)
+
+/**
+ * struct wmm_ac_addts_request - ADDTS Request Information
+ *
+ * The last sent ADDTS request(s) will be saved as element(s) of this struct in
+ * order to be compared with the received ADDTS response in ADDTS response
+ * action frame handling and should be stored until that point.
+ * In case a new traffic stream will be created/replaced/updated, only its
+ * relevant traffic stream information will be stored as a wmm_ac_ts struct.
+ */
+struct wmm_ac_addts_request {
+       /*
+        * dialog token - Used to link the received ADDTS response with this
+        * saved ADDTS request when ADDTS response is being handled
+        */
+       u8 dialog_token;
+
+       /*
+        * address - The alleged traffic stream's receiver/transmitter address
+        * Address and TID are used to identify the TS (TID is contained in
+        * TSPEC)
+        */
+       u8 address[ETH_ALEN];
+
+       /*
+        * tspec - Traffic Stream Specification, will be used to compare the
+        * sent TSPEC in ADDTS request to the received TSPEC in ADDTS response
+        * and act accordingly in ADDTS response handling
+        */
+       struct wmm_tspec_element tspec;
+};
+
+
+/**
+ * struct wmm_ac_ts_setup_params - TS setup parameters
+ *
+ * This struct holds parameters which should be provided
+ * to wmm_ac_ts_setup in order to setup a traffic stream
+ */
+struct wmm_ac_ts_setup_params {
+       /*
+        * tsid - Traffic ID
+        * TID and address are used to identify the TS
+        */
+       int tsid;
+
+       /*
+        * direction - Traffic Stream's direction
+        */
+       enum wmm_ac_dir direction;
+
+       /*
+        * user_priority - Traffic Stream's user priority
+        */
+       int user_priority;
+
+       /*
+        * nominal_msdu_size - Nominal MAC service data unit size
+        */
+       int nominal_msdu_size;
+
+       /*
+        * fixed_nominal_msdu - Whether the size is fixed
+        * 0 = Nominal MSDU size is not fixed
+        * 1 = Nominal MSDU size is fixed
+        */
+       int fixed_nominal_msdu;
+
+       /*
+        * surplus_bandwidth_allowance - Specifies excess time allocation
+        */
+       int mean_data_rate;
+
+       /*
+        * minimum_phy_rate - Specifies the minimum supported PHY rate in bps
+        */
+       int minimum_phy_rate;
+
+       /*
+        * surplus_bandwidth_allowance - Specifies excess time allocation
+        */
+       int surplus_bandwidth_allowance;
+};
+
+void wmm_ac_notify_assoc(struct wpa_supplicant *wpa_s, const u8 *ies,
+                        size_t ies_len, const struct wmm_params *wmm_params);
+void wmm_ac_notify_disassoc(struct wpa_supplicant *wpa_s);
+int wpas_wmm_ac_addts(struct wpa_supplicant *wpa_s,
+                     struct wmm_ac_ts_setup_params *params);
+int wpas_wmm_ac_delts(struct wpa_supplicant *wpa_s, u8 tsid);
+void wmm_ac_rx_action(struct wpa_supplicant *wpa_s, const u8 *da,
+                       const u8 *sa, const u8 *data, size_t len);
+int wpas_wmm_ac_status(struct wpa_supplicant *wpa_s, char *buf, size_t buflen);
+void wmm_ac_save_tspecs(struct wpa_supplicant *wpa_s);
+void wmm_ac_clear_saved_tspecs(struct wpa_supplicant *wpa_s);
+int wmm_ac_restore_tspecs(struct wpa_supplicant *wpa_s);
+
+#endif /* WMM_AC_H */