hostapd/wpa_supplicant/wmm_ac.h
Eliad Peller 674f6c073f WMM AC: Add basic ADDTS/DELTS sending functions
Add basic implementation for ADDTS and DELTS sending
functions.

wpas_wmm_ac_addts() will send ADDTS request public action,
containing TSPEC (traffic stream specification) with
the given params.

wpas_wmm_ac_delts() will look for the saved tspec with
the given tid, and send DELTS public action for it.

(Handling of ADDTS response and actually configuring the admission
control params will be added in following patches.)

Signed-off-by: Moshe Benji <moshe.benji@intel.com>
Signed-off-by: Eliad Peller <eliad@wizery.com>
2014-11-16 21:03:56 +02:00

170 lines
4.5 KiB
C

/*
* 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 recived 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);
#endif /* WMM_AC_H */