FST: Add the Fast Session Transfer (FST) module
Fast Session Transfer (FST) is the transfer of a session from a channel
to another channel in a different frequency band. The term "session"
refers to non-physical layer state information kept by a pair of
stations (STAs) that communicate directly (i.e., excludes forwarding).
The FST is implemented in accordance with IEEE Std 802.11ad-2012.
Definitions
* FST interface - an interface for which FST functionality is enabled
* FST group - a bunch of FST interfaces representing single
multi-band STA
* FST peer - a multi-band capable STA connected
* FST module - multi-band operation functionality implemented in
accordance with IEEE Std 802.11ad-2012 (see 10.32
Multi-band operation) as a part of hostapd/wpa_supplicant
* FST manager - an external application that implements custom FST
related logic, using the FST module's interfaces
accessible via CLI or D-Bus
This commit introduces only the FST module. Integration of the FST
module into the hostapd/wpa_supplicant and corresponding CLI/D-Bus
interfaces and FST related tests are covered in separate commits.
FST manager application is out of scope of these commits.
As FST aggregates a few interfaces into FST group, the FST module uses
global CLI for both commands and notifications. It also exposes
alternative non-interface based D-Bus subtree for this purposes.
Configuration and Initialization
* FST functionality can enabled by compilation flag (CONFIG_FST)
* hostapd/wpa_supplicant controlling multiple interfaces are used for
FST
* once enabled by compilation, the FST can be enabled for specific
interfaces in the configuration files
* FST interfaces are aggregated in FST groups (fst_group_id config file
entry), where each FST group:
- represents one multi-band device
- should have two or more FST interfaces in it
* priority (fst_priority config file entry) must be configured for each
FST interface. FST interface with higher priority is the interface FST
will always try to switch to. Thus, for example, for the maximal
throughput, it should be the fastest FST interface in the FST setup.
* default Link Loss Timeout (LLT) value can be configured for each FST
interface (fst_llt config file entry). It represents LLT to be used
by FST when this interface is active.
* FST interfaces advertise the Multi-band capability by including the
Multi-band element in the corresponding frames
FST CLI commands:
* fst list_groups - list FST groups configured.
* fst list_ifaces - list FST interfaces which belong to specific group
* fst iface_peers - list Multi-Band STAs connected to specific interface
* fst list_sessions - list existing FST sessions
* fst session_get - get FST session info
* fst session_add - create FST session object
* fst session_set - set FST session parameters (old_iface, new_iface,
peer_addr, llt)
* fst session_initiate - initiate FST setup
* fst session_respond - respond to FST setup establishemnt attempt by
counterpart
* fst session_transfer - initiate FST switch
* fst session_teardown - tear down FST Setup but leave the session object
for reuse
* fst session_remove - remove FST session object
FST CLI notifications:
* FST-EVENT-PEER - peer state changed (CONNECT/DISCONNECT)
* FST-EVENT-SESSION - FST session level notification with following
sub-events:
- EVENT_FST_SESSION_STATE - FST session state changed
- EVENT_FST_ESTABLISHED - previously initiated FST session became
established
- EVENT_FST_SETUP - new FST session object created due to FST session
negotiation attempt by counterpart
All the FST CLI commands and notifications are also implemented on D-Bus
for wpa_supplicant.
IEEE 802.11 standard compliance
FST module implements FST setup statemachine in compliance with IEEE
802.11ad (P802.11-REVmc/D3.3), as it described in 10.32 Multi-band
operation (see also Figure 10-34 - States of the FST setup protocol).
Thus, for example, the FST module initiates FST switch automatically
when FST setup becomes established with LLT=0 in accordance with
10.32.2.2 Transitioning between states.
At the moment, FST module only supports non-transparent STA-based FST
(see 10.32.1 General).
Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
2015-02-18 15:59:21 +01:00
|
|
|
/*
|
|
|
|
* FST module - shared Control interface definitions
|
|
|
|
* Copyright (c) 2014, Qualcomm Atheros, Inc.
|
|
|
|
*
|
|
|
|
* This software may be distributed under the terms of the BSD license.
|
|
|
|
* See README for more details.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef FST_CTRL_DEFS_H
|
|
|
|
#define FST_CTRL_DEFS_H
|
|
|
|
|
|
|
|
/* Undefined value */
|
|
|
|
#define FST_CTRL_PVAL_NONE "NONE"
|
|
|
|
|
|
|
|
/* FST-ATTACH parameters */
|
|
|
|
#define FST_ATTACH_CMD_PNAME_LLT "llt" /* pval = desired LLT */
|
|
|
|
#define FST_ATTACH_CMD_PNAME_PRIORITY "priority" /* pval = desired priority */
|
|
|
|
|
|
|
|
/* FST-MANAGER parameters */
|
|
|
|
/* FST Session states */
|
|
|
|
#define FST_CS_PVAL_STATE_INITIAL "INITIAL"
|
|
|
|
#define FST_CS_PVAL_STATE_SETUP_COMPLETION "SETUP_COMPLETION"
|
|
|
|
#define FST_CS_PVAL_STATE_TRANSITION_DONE "TRANSITION_DONE"
|
|
|
|
#define FST_CS_PVAL_STATE_TRANSITION_CONFIRMED "TRANSITION_CONFIRMED"
|
|
|
|
|
|
|
|
/* FST Session reset reasons */
|
|
|
|
#define FST_CS_PVAL_REASON_TEARDOWN "REASON_TEARDOWN"
|
|
|
|
#define FST_CS_PVAL_REASON_SETUP "REASON_SETUP"
|
|
|
|
#define FST_CS_PVAL_REASON_SWITCH "REASON_SWITCH"
|
|
|
|
#define FST_CS_PVAL_REASON_STT "REASON_STT"
|
|
|
|
#define FST_CS_PVAL_REASON_REJECT "REASON_REJECT"
|
|
|
|
#define FST_CS_PVAL_REASON_ERROR_PARAMS "REASON_ERROR_PARAMS"
|
|
|
|
#define FST_CS_PVAL_REASON_RESET "REASON_RESET"
|
|
|
|
#define FST_CS_PVAL_REASON_DETACH_IFACE "REASON_DETACH_IFACE"
|
|
|
|
|
|
|
|
/* FST Session responses */
|
|
|
|
#define FST_CS_PVAL_RESPONSE_ACCEPT "ACCEPT"
|
|
|
|
#define FST_CS_PVAL_RESPONSE_REJECT "REJECT"
|
|
|
|
|
|
|
|
/* FST Session action initiator */
|
|
|
|
#define FST_CS_PVAL_INITIATOR_LOCAL "LOCAL"
|
|
|
|
#define FST_CS_PVAL_INITIATOR_REMOTE "REMOTE"
|
|
|
|
|
|
|
|
/* FST-CLI subcommands and parameter names */
|
|
|
|
#define FST_CMD_LIST_GROUPS "list_groups"
|
|
|
|
#define FST_CMD_LIST_IFACES "list_ifaces"
|
|
|
|
#define FST_CMD_IFACE_PEERS "iface_peers"
|
|
|
|
#define FST_CMD_GET_PEER_MBIES "get_peer_mbies"
|
|
|
|
#define FST_CMD_LIST_SESSIONS "list_sessions"
|
|
|
|
#define FST_CMD_SESSION_ADD "session_add"
|
|
|
|
#define FST_CMD_SESSION_REMOVE "session_remove"
|
|
|
|
#define FST_CMD_SESSION_GET "session_get"
|
|
|
|
#define FST_CSG_PNAME_OLD_PEER_ADDR "old_peer_addr" /* pval = address string */
|
|
|
|
#define FST_CSG_PNAME_NEW_PEER_ADDR "new_peer_addr" /* pval = address string */
|
|
|
|
#define FST_CSG_PNAME_OLD_IFNAME "old_ifname" /* pval = ifname */
|
|
|
|
#define FST_CSG_PNAME_NEW_IFNAME "new_ifname" /* pval = ifname */
|
|
|
|
#define FST_CSG_PNAME_LLT "llt" /* pval = numeric llt value */
|
|
|
|
#define FST_CSG_PNAME_STATE "state" /* pval = FST_CS_PVAL_STATE_... */
|
|
|
|
#define FST_CMD_SESSION_SET "session_set"
|
|
|
|
#define FST_CSS_PNAME_OLD_PEER_ADDR FST_CSG_PNAME_OLD_PEER_ADDR
|
|
|
|
#define FST_CSS_PNAME_NEW_PEER_ADDR FST_CSG_PNAME_NEW_PEER_ADDR
|
|
|
|
#define FST_CSS_PNAME_OLD_IFNAME FST_CSG_PNAME_OLD_IFNAME
|
|
|
|
#define FST_CSS_PNAME_NEW_IFNAME FST_CSG_PNAME_NEW_IFNAME
|
|
|
|
#define FST_CSS_PNAME_LLT FST_CSG_PNAME_LLT
|
|
|
|
#define FST_CMD_SESSION_INITIATE "session_initiate"
|
|
|
|
#define FST_CMD_SESSION_RESPOND "session_respond"
|
|
|
|
#define FST_CMD_SESSION_TRANSFER "session_transfer"
|
|
|
|
#define FST_CMD_SESSION_TEARDOWN "session_teardown"
|
|
|
|
|
2014-12-04 18:20:56 +01:00
|
|
|
#ifdef CONFIG_FST_TEST
|
|
|
|
#define FST_CTR_PVAL_BAD_NEW_BAND "bad_new_band"
|
|
|
|
|
|
|
|
#define FST_CMD_TEST_REQUEST "test_request"
|
|
|
|
#define FST_CTR_IS_SUPPORTED "is_supported"
|
|
|
|
#define FST_CTR_SEND_SETUP_REQUEST "send_setup_request"
|
|
|
|
#define FST_CTR_SEND_SETUP_RESPONSE "send_setup_response"
|
|
|
|
#define FST_CTR_SEND_ACK_REQUEST "send_ack_request"
|
|
|
|
#define FST_CTR_SEND_ACK_RESPONSE "send_ack_response"
|
|
|
|
#define FST_CTR_SEND_TEAR_DOWN "send_tear_down"
|
|
|
|
#define FST_CTR_GET_FSTS_ID "get_fsts_id"
|
|
|
|
#define FST_CTR_GET_LOCAL_MBIES "get_local_mbies"
|
|
|
|
#endif /* CONFIG_FST_TEST */
|
|
|
|
|
FST: Add the Fast Session Transfer (FST) module
Fast Session Transfer (FST) is the transfer of a session from a channel
to another channel in a different frequency band. The term "session"
refers to non-physical layer state information kept by a pair of
stations (STAs) that communicate directly (i.e., excludes forwarding).
The FST is implemented in accordance with IEEE Std 802.11ad-2012.
Definitions
* FST interface - an interface for which FST functionality is enabled
* FST group - a bunch of FST interfaces representing single
multi-band STA
* FST peer - a multi-band capable STA connected
* FST module - multi-band operation functionality implemented in
accordance with IEEE Std 802.11ad-2012 (see 10.32
Multi-band operation) as a part of hostapd/wpa_supplicant
* FST manager - an external application that implements custom FST
related logic, using the FST module's interfaces
accessible via CLI or D-Bus
This commit introduces only the FST module. Integration of the FST
module into the hostapd/wpa_supplicant and corresponding CLI/D-Bus
interfaces and FST related tests are covered in separate commits.
FST manager application is out of scope of these commits.
As FST aggregates a few interfaces into FST group, the FST module uses
global CLI for both commands and notifications. It also exposes
alternative non-interface based D-Bus subtree for this purposes.
Configuration and Initialization
* FST functionality can enabled by compilation flag (CONFIG_FST)
* hostapd/wpa_supplicant controlling multiple interfaces are used for
FST
* once enabled by compilation, the FST can be enabled for specific
interfaces in the configuration files
* FST interfaces are aggregated in FST groups (fst_group_id config file
entry), where each FST group:
- represents one multi-band device
- should have two or more FST interfaces in it
* priority (fst_priority config file entry) must be configured for each
FST interface. FST interface with higher priority is the interface FST
will always try to switch to. Thus, for example, for the maximal
throughput, it should be the fastest FST interface in the FST setup.
* default Link Loss Timeout (LLT) value can be configured for each FST
interface (fst_llt config file entry). It represents LLT to be used
by FST when this interface is active.
* FST interfaces advertise the Multi-band capability by including the
Multi-band element in the corresponding frames
FST CLI commands:
* fst list_groups - list FST groups configured.
* fst list_ifaces - list FST interfaces which belong to specific group
* fst iface_peers - list Multi-Band STAs connected to specific interface
* fst list_sessions - list existing FST sessions
* fst session_get - get FST session info
* fst session_add - create FST session object
* fst session_set - set FST session parameters (old_iface, new_iface,
peer_addr, llt)
* fst session_initiate - initiate FST setup
* fst session_respond - respond to FST setup establishemnt attempt by
counterpart
* fst session_transfer - initiate FST switch
* fst session_teardown - tear down FST Setup but leave the session object
for reuse
* fst session_remove - remove FST session object
FST CLI notifications:
* FST-EVENT-PEER - peer state changed (CONNECT/DISCONNECT)
* FST-EVENT-SESSION - FST session level notification with following
sub-events:
- EVENT_FST_SESSION_STATE - FST session state changed
- EVENT_FST_ESTABLISHED - previously initiated FST session became
established
- EVENT_FST_SETUP - new FST session object created due to FST session
negotiation attempt by counterpart
All the FST CLI commands and notifications are also implemented on D-Bus
for wpa_supplicant.
IEEE 802.11 standard compliance
FST module implements FST setup statemachine in compliance with IEEE
802.11ad (P802.11-REVmc/D3.3), as it described in 10.32 Multi-band
operation (see also Figure 10-34 - States of the FST setup protocol).
Thus, for example, the FST module initiates FST switch automatically
when FST setup becomes established with LLT=0 in accordance with
10.32.2.2 Transitioning between states.
At the moment, FST module only supports non-transparent STA-based FST
(see 10.32.1 General).
Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
2015-02-18 15:59:21 +01:00
|
|
|
/* Events */
|
|
|
|
#define FST_CTRL_EVENT_IFACE "FST-EVENT-IFACE"
|
|
|
|
#define FST_CEI_PNAME_IFNAME "ifname"
|
|
|
|
#define FST_CEI_PNAME_GROUP "group"
|
|
|
|
#define FST_CEI_PNAME_ATTACHED "attached"
|
|
|
|
#define FST_CEI_PNAME_DETACHED "detached"
|
|
|
|
#define FST_CTRL_EVENT_PEER "FST-EVENT-PEER"
|
|
|
|
#define FST_CEP_PNAME_IFNAME "ifname"
|
|
|
|
#define FST_CEP_PNAME_ADDR "peer_addr"
|
|
|
|
#define FST_CEP_PNAME_CONNECTED "connected"
|
|
|
|
#define FST_CEP_PNAME_DISCONNECTED "disconnected"
|
|
|
|
#define FST_CTRL_EVENT_SESSION "FST-EVENT-SESSION"
|
|
|
|
#define FST_CES_PNAME_SESSION_ID "session_id"
|
|
|
|
#define FST_CES_PNAME_EVT_TYPE "event_type"
|
|
|
|
#define FST_PVAL_EVT_TYPE_SESSION_STATE "EVENT_FST_SESSION_STATE"
|
|
|
|
/* old_state/new_state: pval = FST_CS_PVAL_STATE_... */
|
|
|
|
#define FST_CES_PNAME_OLD_STATE "old_state"
|
|
|
|
#define FST_CES_PNAME_NEW_STATE "new_state"
|
|
|
|
#define FST_CES_PNAME_REASON "reason" /* pval = FST_CS_PVAL_REASON_... */
|
|
|
|
#define FST_CES_PNAME_REJECT_CODE "reject_code" /* pval = u8 code */
|
|
|
|
/* pval = FST_CS_PVAL_INITIATOR_... */
|
|
|
|
#define FST_CES_PNAME_INITIATOR "initiator"
|
|
|
|
#define FST_PVAL_EVT_TYPE_ESTABLISHED "EVENT_FST_ESTABLISHED"
|
|
|
|
#define FST_PVAL_EVT_TYPE_SETUP "EVENT_FST_SETUP"
|
|
|
|
|
|
|
|
#endif /* FST_CTRL_DEFS_H */
|