2014-10-22 14:03:54 +02:00
|
|
|
/*
|
|
|
|
* 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;
|
|
|
|
|
2014-10-22 14:03:56 +02:00
|
|
|
#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
|
|
|
|
|
2014-10-22 14:03:54 +02:00
|
|
|
/**
|
|
|
|
* 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];
|
|
|
|
};
|
|
|
|
|
2014-10-22 14:03:56 +02:00
|
|
|
/**
|
|
|
|
* 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 {
|
|
|
|
/*
|
2016-09-30 12:06:36 +02:00
|
|
|
* dialog token - Used to link the received ADDTS response with this
|
2014-10-22 14:03:56 +02:00
|
|
|
* 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;
|
|
|
|
};
|
|
|
|
|
2014-10-22 14:03:54 +02:00
|
|
|
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);
|
2014-10-22 14:03:56 +02:00
|
|
|
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);
|
2014-10-22 14:03:57 +02:00
|
|
|
void wmm_ac_rx_action(struct wpa_supplicant *wpa_s, const u8 *da,
|
|
|
|
const u8 *sa, const u8 *data, size_t len);
|
2014-10-22 14:04:02 +02:00
|
|
|
int wpas_wmm_ac_status(struct wpa_supplicant *wpa_s, char *buf, size_t buflen);
|
2014-12-29 03:15:01 +01:00
|
|
|
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);
|
2014-10-22 14:03:54 +02:00
|
|
|
|
|
|
|
#endif /* WMM_AC_H */
|