1e5b75505Sopenharmony_ci/*
2e5b75505Sopenharmony_ci * FST module - FST group object 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_GROUP_H
10e5b75505Sopenharmony_ci#define FST_GROUP_H
11e5b75505Sopenharmony_ci
12e5b75505Sopenharmony_cistruct fst_group {
13e5b75505Sopenharmony_ci	char group_id[IFNAMSIZ + 1];
14e5b75505Sopenharmony_ci	struct dl_list ifaces;
15e5b75505Sopenharmony_ci	u8 dialog_token;
16e5b75505Sopenharmony_ci	u32 fsts_id;
17e5b75505Sopenharmony_ci	struct dl_list global_groups_lentry;
18e5b75505Sopenharmony_ci};
19e5b75505Sopenharmony_ci
20e5b75505Sopenharmony_cistruct session_transition_ie;
21e5b75505Sopenharmony_ci
22e5b75505Sopenharmony_ci#define foreach_fst_group_iface(g, i) \
23e5b75505Sopenharmony_ci	dl_list_for_each((i), &(g)->ifaces, struct fst_iface, group_lentry)
24e5b75505Sopenharmony_ci
25e5b75505Sopenharmony_cistruct fst_group * fst_group_create(const char *group_id);
26e5b75505Sopenharmony_civoid fst_group_attach_iface(struct fst_group *g, struct fst_iface *i);
27e5b75505Sopenharmony_civoid fst_group_detach_iface(struct fst_group *g, struct fst_iface *i);
28e5b75505Sopenharmony_civoid fst_group_delete(struct fst_group *g);
29e5b75505Sopenharmony_ci
30e5b75505Sopenharmony_civoid fst_group_update_ie(struct fst_group *g);
31e5b75505Sopenharmony_ci
32e5b75505Sopenharmony_cistatic inline Boolean fst_group_has_ifaces(struct fst_group *g)
33e5b75505Sopenharmony_ci{
34e5b75505Sopenharmony_ci	return !dl_list_empty(&g->ifaces);
35e5b75505Sopenharmony_ci}
36e5b75505Sopenharmony_ci
37e5b75505Sopenharmony_cistatic inline struct fst_iface * fst_group_first_iface(struct fst_group *g)
38e5b75505Sopenharmony_ci{
39e5b75505Sopenharmony_ci	return dl_list_first(&g->ifaces, struct fst_iface, group_lentry);
40e5b75505Sopenharmony_ci}
41e5b75505Sopenharmony_ci
42e5b75505Sopenharmony_cistatic inline const char * fst_group_get_id(struct fst_group *g)
43e5b75505Sopenharmony_ci{
44e5b75505Sopenharmony_ci	return g->group_id;
45e5b75505Sopenharmony_ci}
46e5b75505Sopenharmony_ci
47e5b75505Sopenharmony_ciBoolean fst_group_delete_if_empty(struct fst_group *group);
48e5b75505Sopenharmony_cistruct fst_iface * fst_group_get_iface_by_name(struct fst_group *g,
49e5b75505Sopenharmony_ci					       const char *ifname);
50e5b75505Sopenharmony_cistruct fst_iface *
51e5b75505Sopenharmony_cifst_group_get_peer_other_connection(struct fst_iface *iface,
52e5b75505Sopenharmony_ci				    const u8 *peer_addr, u8 band_id,
53e5b75505Sopenharmony_ci				    u8 *other_peer_addr);
54e5b75505Sopenharmony_ciu8  fst_group_assign_dialog_token(struct fst_group *g);
55e5b75505Sopenharmony_ciu32 fst_group_assign_fsts_id(struct fst_group *g);
56e5b75505Sopenharmony_ci
57e5b75505Sopenharmony_ciextern struct dl_list fst_global_groups_list;
58e5b75505Sopenharmony_ci
59e5b75505Sopenharmony_ci#define foreach_fst_group(g) \
60e5b75505Sopenharmony_ci	dl_list_for_each((g), &fst_global_groups_list, \
61e5b75505Sopenharmony_ci			 struct fst_group, global_groups_lentry)
62e5b75505Sopenharmony_ci
63e5b75505Sopenharmony_cistatic inline struct fst_group * fst_first_group(void)
64e5b75505Sopenharmony_ci{
65e5b75505Sopenharmony_ci	return dl_list_first(&fst_global_groups_list, struct fst_group,
66e5b75505Sopenharmony_ci			     global_groups_lentry);
67e5b75505Sopenharmony_ci}
68e5b75505Sopenharmony_ci
69e5b75505Sopenharmony_ci#endif /* FST_GROUP_H */
70