1e5b75505Sopenharmony_ci/*
2e5b75505Sopenharmony_ci * FST module - FST Session related definitions
3e5b75505Sopenharmony_ci * Copyright (c) 2014, Qualcomm Atheros, Inc.
4e5b75505Sopenharmony_ci *
5e5b75505Sopenharmony_ci * This software may be distributed under the terms of the BSD license.
6e5b75505Sopenharmony_ci * See README for more details.
7e5b75505Sopenharmony_ci */
8e5b75505Sopenharmony_ci
9e5b75505Sopenharmony_ci#ifndef FST_SESSION_H
10e5b75505Sopenharmony_ci#define FST_SESSION_H
11e5b75505Sopenharmony_ci
12e5b75505Sopenharmony_ci#define FST_DEFAULT_SESSION_TIMEOUT_TU 255 /* u8 */
13e5b75505Sopenharmony_ci
14e5b75505Sopenharmony_cistruct fst_iface;
15e5b75505Sopenharmony_cistruct fst_group;
16e5b75505Sopenharmony_cistruct fst_session;
17e5b75505Sopenharmony_cienum fst_session_state;
18e5b75505Sopenharmony_ci
19e5b75505Sopenharmony_ciint  fst_session_global_init(void);
20e5b75505Sopenharmony_civoid fst_session_global_deinit(void);
21e5b75505Sopenharmony_civoid fst_session_global_on_iface_detached(struct fst_iface *iface);
22e5b75505Sopenharmony_cistruct fst_session *
23e5b75505Sopenharmony_cifst_session_global_get_first_by_group(struct fst_group *g);
24e5b75505Sopenharmony_ci
25e5b75505Sopenharmony_cistruct fst_session * fst_session_create(struct fst_group *g);
26e5b75505Sopenharmony_civoid fst_session_set_iface(struct fst_session *s, struct fst_iface *iface,
27e5b75505Sopenharmony_ci			   Boolean is_old);
28e5b75505Sopenharmony_civoid fst_session_set_llt(struct fst_session *s, u32 llt);
29e5b75505Sopenharmony_civoid fst_session_set_peer_addr(struct fst_session *s, const u8 *addr,
30e5b75505Sopenharmony_ci			       Boolean is_old);
31e5b75505Sopenharmony_ciint fst_session_initiate_setup(struct fst_session *s);
32e5b75505Sopenharmony_ciint fst_session_respond(struct fst_session *s, u8 status_code);
33e5b75505Sopenharmony_ciint fst_session_initiate_switch(struct fst_session *s);
34e5b75505Sopenharmony_civoid fst_session_handle_action(struct fst_session *s, struct fst_iface *iface,
35e5b75505Sopenharmony_ci			       const struct ieee80211_mgmt *mgmt,
36e5b75505Sopenharmony_ci			       size_t frame_len);
37e5b75505Sopenharmony_ciint fst_session_tear_down_setup(struct fst_session *s);
38e5b75505Sopenharmony_civoid fst_session_reset(struct fst_session *s);
39e5b75505Sopenharmony_civoid fst_session_delete(struct fst_session *s);
40e5b75505Sopenharmony_ci
41e5b75505Sopenharmony_cistruct fst_group * fst_session_get_group(struct fst_session *s);
42e5b75505Sopenharmony_cistruct fst_iface * fst_session_get_iface(struct fst_session *s, Boolean is_old);
43e5b75505Sopenharmony_ciconst u8 * fst_session_get_peer_addr(struct fst_session *s, Boolean is_old);
44e5b75505Sopenharmony_ciu32 fst_session_get_id(struct fst_session *s);
45e5b75505Sopenharmony_ciu32 fst_session_get_llt(struct fst_session *s);
46e5b75505Sopenharmony_cienum fst_session_state fst_session_get_state(struct fst_session *s);
47e5b75505Sopenharmony_ci
48e5b75505Sopenharmony_cistruct fst_session *fst_session_get_by_id(u32 id);
49e5b75505Sopenharmony_ci
50e5b75505Sopenharmony_citypedef void (*fst_session_enum_clb)(struct fst_group *g, struct fst_session *s,
51e5b75505Sopenharmony_ci				     void *ctx);
52e5b75505Sopenharmony_ci
53e5b75505Sopenharmony_civoid fst_session_enum(struct fst_group *g, fst_session_enum_clb clb, void *ctx);
54e5b75505Sopenharmony_ci
55e5b75505Sopenharmony_civoid fst_session_on_action_rx(struct fst_iface *iface,
56e5b75505Sopenharmony_ci			      const struct ieee80211_mgmt *mgmt, size_t len);
57e5b75505Sopenharmony_ci
58e5b75505Sopenharmony_ci
59e5b75505Sopenharmony_ciint fst_session_set_str_ifname(struct fst_session *s, const char *ifname,
60e5b75505Sopenharmony_ci			       Boolean is_old);
61e5b75505Sopenharmony_ciint fst_session_set_str_peer_addr(struct fst_session *s, const char *mac,
62e5b75505Sopenharmony_ci				  Boolean is_old);
63e5b75505Sopenharmony_ciint fst_session_set_str_llt(struct fst_session *s, const char *llt_str);
64e5b75505Sopenharmony_ci
65e5b75505Sopenharmony_ci#ifdef CONFIG_FST_TEST
66e5b75505Sopenharmony_ci
67e5b75505Sopenharmony_ci#define FST_FSTS_ID_NOT_FOUND ((u32) -1)
68e5b75505Sopenharmony_ci
69e5b75505Sopenharmony_ciint fst_test_req_send_fst_request(const char *params);
70e5b75505Sopenharmony_ciint fst_test_req_send_fst_response(const char *params);
71e5b75505Sopenharmony_ciint fst_test_req_send_ack_request(const char *params);
72e5b75505Sopenharmony_ciint fst_test_req_send_ack_response(const char *params);
73e5b75505Sopenharmony_ciint fst_test_req_send_tear_down(const char *params);
74e5b75505Sopenharmony_ciu32 fst_test_req_get_fsts_id(const char *params);
75e5b75505Sopenharmony_ciint fst_test_req_get_local_mbies(const char *request, char *buf,
76e5b75505Sopenharmony_ci				 size_t buflen);
77e5b75505Sopenharmony_ci
78e5b75505Sopenharmony_ci#endif /* CONFIG_FST_TEST */
79e5b75505Sopenharmony_ci
80e5b75505Sopenharmony_ci#endif /* FST_SESSION_H */
81