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