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