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