1d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/* 2d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * FST module - interface definitions 3d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Copyright (c) 2014, Qualcomm Atheros, Inc. 4d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * 5d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * See README for more details. 7d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 8d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 9d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#ifndef FST_H 10d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#define FST_H 11d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 12d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#ifdef CONFIG_FST 13d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 14d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#include "common/defs.h" 15d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#include "fst/fst_ctrl_iface.h" 16d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 17d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/* FST module hostap integration API */ 18d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 19d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#define US_IN_MS 1000 20d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#define LLT_UNIT_US 32 /* See 10.32.2.2 Transitioning between states */ 21d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 22d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#define FST_LLT_MS_TO_VAL(m) (((u32) (m)) * US_IN_MS / LLT_UNIT_US) 23d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#define FST_LLT_VAL_TO_MS(v) (((u32) (v)) * LLT_UNIT_US / US_IN_MS) 24d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 25d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#define FST_MAX_LLT_MS FST_LLT_VAL_TO_MS(-1) 26d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#define FST_MAX_PRIO_VALUE ((u8) -1) 27d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#define FST_MAX_GROUP_ID_LEN IFNAMSIZ 28d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 29d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#define FST_DEFAULT_LLT_CFG_VALUE 50 30d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 31d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct hostapd_hw_modes; 32d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct ieee80211_mgmt; 33d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_iface; 34d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_group; 35d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_session; 36d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_get_peer_ctx; 37d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_ctrl_handle; 38d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 39d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_wpa_obj { 40d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt void *ctx; 41d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 42d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 43d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * get_bssid - Get BSSID of the interface 44d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ctx: User context %ctx 45d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: BSSID for success, %NULL for failure. 46d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * 47d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * NOTE: For AP it returns the own BSSID, while for STA - the BSSID of 48d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * the associated AP. 49d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 50d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt const u8 * (*get_bssid)(void *ctx); 51d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 52d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 53d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * get_channel_info - Get current channel info 54d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ctx: User context %ctx 55d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @hw_mode: OUT, current HW mode 56d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @channel: OUT, current channel 57d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 58d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt void (*get_channel_info)(void *ctx, enum hostapd_hw_mode *hw_mode, 59d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt u8 *channel); 60d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 61d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 62d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * get_hw_modes - Get hardware modes 63d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ctx: User context %ctx 64d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @modes: OUT, pointer on array of hw modes 65d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * 66d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: Number of hw modes available. 67d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 68d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt int (*get_hw_modes)(void *ctx, struct hostapd_hw_modes **modes); 69d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 70d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 71d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * set_ies - Set interface's MB IE 72d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ctx: User context %ctx 73d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @fst_ies: MB IE buffer (owned by FST module) 74d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 75d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt void (*set_ies)(void *ctx, const struct wpabuf *fst_ies); 76d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 77d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 78d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * send_action - Send FST Action frame via the interface 79d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ctx: User context %ctx 80d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @addr: Address of the destination STA 81d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @data: Action frame buffer 82d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: 0 for success, negative error code for failure. 83d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 84d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt int (*send_action)(void *ctx, const u8 *addr, struct wpabuf *data); 85d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 86d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 87d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * get_mb_ie - Get last MB IE received from STA 88d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ctx: User context %ctx 89d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @addr: Address of the STA 90d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: MB IE buffer, %NULL if no MB IE received from the STA 91d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 92d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt const struct wpabuf * (*get_mb_ie)(void *ctx, const u8 *addr); 93d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 94d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 95d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * update_mb_ie - Update last MB IE received from STA 96d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ctx: User context %ctx 97d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @addr: Address of the STA 98d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @buf: Buffer that contains the MB IEs data 99d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @size: Size of data in %buf 100d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 101d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt void (*update_mb_ie)(void *ctx, const u8 *addr, 102d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt const u8 *buf, size_t size); 103d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 104d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 105d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * get_peer_first - Get MAC address of the 1st connected STA 106d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ctx: User context %ctx 107d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @get_ctx: Context to be used for %get_peer_next call 108d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @mb_only: %TRUE if only multi-band capable peer should be reported 109d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: Address of the 1st connected STA, %NULL if no STAs connected 110d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 111d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt const u8 * (*get_peer_first)(void *ctx, 112d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt struct fst_get_peer_ctx **get_ctx, 113d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt Boolean mb_only); 114d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 115d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * get_peer_next - Get MAC address of the next connected STA 116d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ctx: User context %ctx 117d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @get_ctx: Context received from %get_peer_first or previous 118d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * %get_peer_next call 119d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @mb_only: %TRUE if only multi-band capable peer should be reported 120d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: Address of the next connected STA, %NULL if no more STAs 121d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * connected 122d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 123d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt const u8 * (*get_peer_next)(void *ctx, 124d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt struct fst_get_peer_ctx **get_ctx, 125d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt Boolean mb_only); 126d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt}; 127d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 128d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 129d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * fst_global_init - Global FST module initiator 130d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: 0 for success, negative error code for failure. 131d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Note: The purpose of this function is to allocate and initiate global 132d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * FST module data structures (linked lists, static data etc.) 133d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * This function should be called prior to the 1st %fst_attach call. 134d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 135d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtint fst_global_init(void); 136d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 137d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 138d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * fst_global_deinit - Global FST module de-initiator 139d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Note: The purpose of this function is to deallocate and de-initiate global 140d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * FST module data structures (linked lists, static data etc.) 141d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 142d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid fst_global_deinit(void); 143d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 144d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 145d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * struct fst_ctrl - Notification interface for FST module 146d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 147d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_ctrl { 148d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 149d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * init - Initialize the notification interface 150d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: 0 for success, negative error code for failure. 151d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 152d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt int (*init)(void); 153d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 154d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 155d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * deinit - Deinitialize the notification interface 156d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 157d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt void (*deinit)(void); 158d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 159d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 160d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * on_group_created - Notify about FST group creation 161d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: 0 for success, negative error code for failure. 162d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 163d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt int (*on_group_created)(struct fst_group *g); 164d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 165d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 166d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * on_group_deleted - Notify about FST group deletion 167d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 168d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt void (*on_group_deleted)(struct fst_group *g); 169d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 170d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 171d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * on_iface_added - Notify about interface addition 172d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: 0 for success, negative error code for failure. 173d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 174d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt int (*on_iface_added)(struct fst_iface *i); 175d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 176d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 177d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * on_iface_removed - Notify about interface removal 178d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 179d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt void (*on_iface_removed)(struct fst_iface *i); 180d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 181d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 182d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * on_session_added - Notify about FST session addition 183d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: 0 for success, negative error code for failure. 184d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 185d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt int (*on_session_added)(struct fst_session *s); 186d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 187d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 188d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * on_session_removed - Notify about FST session removal 189d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 190d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt void (*on_session_removed)(struct fst_session *s); 191d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 192d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt /** 193d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * on_event - Notify about FST event 194d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @event_type: Event type 195d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @i: Interface object that relates to the event or NULL 196d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @g: Group object that relates to the event or NULL 197d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @extra - Event specific data (see fst_ctrl_iface.h for more info) 198d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 199d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt void (*on_event)(enum fst_event_type event_type, struct fst_iface *i, 200d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt struct fst_session *s, 201d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt const union fst_event_extra *extra); 202d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt}; 203d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 204d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_ctrl_handle * fst_global_add_ctrl(const struct fst_ctrl *ctrl); 205d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid fst_global_del_ctrl(struct fst_ctrl_handle *h); 206d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 207d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 208d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * NOTE: These values have to be read from configuration file 209d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 210d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_iface_cfg { 211d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt char group_id[FST_MAX_GROUP_ID_LEN + 1]; 212d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt u8 priority; 213d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt u32 llt; 214d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt}; 215d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 216d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 217d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * fst_attach - Attach interface to an FST group according to configuration read 218d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @ifname: Interface name 219d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @own_addr: Own interface MAC address 220d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @iface_obj: Callbacks to be used by FST module to communicate with 221d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * hostapd/wpa_supplicant 222d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @cfg: FST-related interface configuration read from the configuration file 223d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: FST interface object for success, %NULL for failure. 224d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 225d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstruct fst_iface * fst_attach(const char *ifname, 226d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt const u8 *own_addr, 227d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt const struct fst_wpa_obj *iface_obj, 228d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt const struct fst_iface_cfg *cfg); 229d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 230d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 231d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * fst_detach - Detach an interface 232d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @iface: FST interface object 233d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 234d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid fst_detach(struct fst_iface *iface); 235d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 236d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/* FST module inputs */ 237d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 238d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * fst_rx_action - FST Action frames handler 239d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @iface: FST interface object 240d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @mgmt: Action frame arrived 241d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @len: Action frame length 242d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 243d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid fst_rx_action(struct fst_iface *iface, const struct ieee80211_mgmt *mgmt, 244d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt size_t len); 245d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 246d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 247d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * fst_notify_peer_connected - FST STA connect handler 248d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @iface: FST interface object 249d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @addr: Address of the connected STA 250d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 251d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid fst_notify_peer_connected(struct fst_iface *iface, const u8 *addr); 252d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 253d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 254d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * fst_notify_peer_disconnected - FST STA disconnect handler 255d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @iface: FST interface object 256d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @addr: Address of the disconnected STA 257d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 258d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid fst_notify_peer_disconnected(struct fst_iface *iface, const u8 *addr); 259d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 260d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/* FST module auxiliary routines */ 261d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 262d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt/** 263d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * fst_are_ifaces_aggregated - Determines whether 2 interfaces belong to the 264d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * same FST group 265d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @iface1: 1st FST interface object 266d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * @iface1: 2nd FST interface object 267d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * 268d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * Returns: %TRUE if the interfaces belong to the same FST group, 269d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt * %FALSE otherwise 270d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt */ 271d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry ShmidtBoolean fst_are_ifaces_aggregated(struct fst_iface *iface1, 272d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt struct fst_iface *iface2); 273d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 274d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#else /* CONFIG_FST */ 275d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 276d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstatic inline int fst_global_init(void) 277d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt{ 278d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt return 0; 279d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt} 280d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 281d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstatic inline int fst_global_start(void) 282d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt{ 283d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt return 0; 284d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt} 285d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 286d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstatic inline void fst_global_stop(void) 287d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt{ 288d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt} 289d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 290d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtstatic inline void fst_global_deinit(void) 291d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt{ 292d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt} 293d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 294d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#endif /* CONFIG_FST */ 295d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt 296d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#endif /* FST_H */ 297