blob: 3a87c0bc91c91720ceebacfd826d237d43efa97a [file] [log] [blame]
Dmitry Shmidtd80a4012015-11-05 16:35:40 -08001/*
2 * FST module - FST group object 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_GROUP_H
10#define FST_GROUP_H
11
12struct fst_group {
13 char group_id[IFNAMSIZ + 1];
14 struct dl_list ifaces;
15 u8 dialog_token;
16 u32 fsts_id;
17 struct dl_list global_groups_lentry;
18};
19
20struct session_transition_ie;
21
22#define foreach_fst_group_iface(g, i) \
23 dl_list_for_each((i), &(g)->ifaces, struct fst_iface, group_lentry)
24
25struct fst_group * fst_group_create(const char *group_id);
26void fst_group_attach_iface(struct fst_group *g, struct fst_iface *i);
27void fst_group_detach_iface(struct fst_group *g, struct fst_iface *i);
28void fst_group_delete(struct fst_group *g);
29
30void fst_group_update_ie(struct fst_group *g);
31
32static inline Boolean fst_group_has_ifaces(struct fst_group *g)
33{
34 return !dl_list_empty(&g->ifaces);
35}
36
37static inline struct fst_iface * fst_group_first_iface(struct fst_group *g)
38{
39 return dl_list_first(&g->ifaces, struct fst_iface, group_lentry);
40}
41
42static inline const char * fst_group_get_id(struct fst_group *g)
43{
44 return g->group_id;
45}
46
47Boolean fst_group_delete_if_empty(struct fst_group *group);
48struct fst_iface * fst_group_get_iface_by_name(struct fst_group *g,
49 const char *ifname);
50struct fst_iface *
51fst_group_find_new_iface_by_stie(struct fst_group *g,
52 struct fst_iface *iface,
53 const u8 *peer_addr,
54 const struct session_transition_ie *stie,
55 u8 *iface_peer_addr);
56struct fst_iface *
57fst_group_get_new_iface_by_stie_and_mbie(
58 struct fst_group *g, const u8 *mb_ies_buff, size_t mb_ies_size,
59 const struct session_transition_ie *stie, u8 *iface_peer_addr);
60u8 fst_group_assign_dialog_token(struct fst_group *g);
61u32 fst_group_assign_fsts_id(struct fst_group *g);
62
63extern struct dl_list fst_global_groups_list;
64
65#define foreach_fst_group(g) \
66 dl_list_for_each((g), &fst_global_groups_list, \
67 struct fst_group, global_groups_lentry)
68
69static inline struct fst_group * fst_first_group(void)
70{
71 return dl_list_first(&fst_global_groups_list, struct fst_group,
72 global_groups_lentry);
73}
74
75#endif /* FST_GROUP_H */