/* * FST module - FST group object definitions * Copyright (c) 2014, Qualcomm Atheros, Inc. * * This software may be distributed under the terms of the BSD license. * See README for more details. */ #ifndef FST_GROUP_H #define FST_GROUP_H struct fst_group { char group_id[IFNAMSIZ + 1]; struct dl_list ifaces; u8 dialog_token; u32 fsts_id; struct dl_list global_groups_lentry; }; struct session_transition_ie; #define foreach_fst_group_iface(g, i) \ dl_list_for_each((i), &(g)->ifaces, struct fst_iface, group_lentry) struct fst_group * fst_group_create(const char *group_id); void fst_group_attach_iface(struct fst_group *g, struct fst_iface *i); void fst_group_detach_iface(struct fst_group *g, struct fst_iface *i); void fst_group_delete(struct fst_group *g); void fst_group_update_ie(struct fst_group *g); static inline Boolean fst_group_has_ifaces(struct fst_group *g) { return !dl_list_empty(&g->ifaces); } static inline struct fst_iface * fst_group_first_iface(struct fst_group *g) { return dl_list_first(&g->ifaces, struct fst_iface, group_lentry); } static inline const char * fst_group_get_id(struct fst_group *g) { return g->group_id; } Boolean fst_group_delete_if_empty(struct fst_group *group); struct fst_iface * fst_group_get_iface_by_name(struct fst_group *g, const char *ifname); struct fst_iface * fst_group_find_new_iface_by_stie(struct fst_group *g, struct fst_iface *iface, const u8 *peer_addr, const struct session_transition_ie *stie, u8 *iface_peer_addr); struct fst_iface * fst_group_get_new_iface_by_stie_and_mbie( struct fst_group *g, const u8 *mb_ies_buff, size_t mb_ies_size, const struct session_transition_ie *stie, u8 *iface_peer_addr); u8 fst_group_assign_dialog_token(struct fst_group *g); u32 fst_group_assign_fsts_id(struct fst_group *g); extern struct dl_list fst_global_groups_list; #define foreach_fst_group(g) \ dl_list_for_each((g), &fst_global_groups_list, \ struct fst_group, global_groups_lentry) static inline struct fst_group * fst_first_group(void) { return dl_list_first(&fst_global_groups_list, struct fst_group, global_groups_lentry); } #endif /* FST_GROUP_H */