1289284Srpaulo/* 2289284Srpaulo * FST module - FST interface object definitions 3289284Srpaulo * Copyright (c) 2014, Qualcomm Atheros, Inc. 4289284Srpaulo * 5289284Srpaulo * This software may be distributed under the terms of the BSD license. 6289284Srpaulo * See README for more details. 7289284Srpaulo */ 8289284Srpaulo 9289284Srpaulo 10289284Srpaulo#ifndef FST_IFACE_H 11289284Srpaulo#define FST_IFACE_H 12289284Srpaulo 13289284Srpaulo#include "utils/includes.h" 14289284Srpaulo#include "utils/common.h" 15289284Srpaulo#include "list.h" 16289284Srpaulo#include "fst.h" 17289284Srpaulo 18289284Srpaulostruct fst_iface { 19289284Srpaulo struct fst_group *group; 20289284Srpaulo struct fst_wpa_obj iface_obj; 21289284Srpaulo u8 own_addr[ETH_ALEN]; 22289284Srpaulo struct wpabuf *mb_ie; 23289284Srpaulo char ifname[IFNAMSIZ + 1]; 24289284Srpaulo struct fst_iface_cfg cfg; 25289284Srpaulo struct dl_list group_lentry; 26289284Srpaulo}; 27289284Srpaulo 28289284Srpaulostruct fst_iface * fst_iface_create(struct fst_group *g, const char *ifname, 29289284Srpaulo const u8 *own_addr, 30289284Srpaulo const struct fst_wpa_obj *iface_obj, 31289284Srpaulo const struct fst_iface_cfg *cfg); 32289284Srpaulovoid fst_iface_delete(struct fst_iface *i); 33289284Srpaulo 34289284Srpaulostatic inline struct fst_group * fst_iface_get_group(struct fst_iface *i) 35289284Srpaulo{ 36289284Srpaulo return i->group; 37289284Srpaulo} 38289284Srpaulo 39289284Srpaulostatic inline const char * fst_iface_get_name(struct fst_iface *i) 40289284Srpaulo{ 41289284Srpaulo return i->ifname; 42289284Srpaulo} 43289284Srpaulo 44289284Srpaulostatic inline const u8 * fst_iface_get_addr(struct fst_iface *i) 45289284Srpaulo{ 46289284Srpaulo return i->own_addr; 47289284Srpaulo} 48289284Srpaulo 49289284Srpaulostatic inline const char * fst_iface_get_group_id(struct fst_iface *i) 50289284Srpaulo{ 51289284Srpaulo return i->cfg.group_id; 52289284Srpaulo} 53289284Srpaulo 54289284Srpaulostatic inline u8 fst_iface_get_priority(struct fst_iface *i) 55289284Srpaulo{ 56289284Srpaulo return i->cfg.priority; 57289284Srpaulo} 58289284Srpaulo 59289284Srpaulostatic inline u32 fst_iface_get_llt(struct fst_iface *i) 60289284Srpaulo{ 61289284Srpaulo return i->cfg.llt; 62289284Srpaulo} 63289284Srpaulo 64289284Srpaulostatic inline const struct wpabuf * fst_iface_get_mbie(struct fst_iface *i) 65289284Srpaulo{ 66289284Srpaulo return i->mb_ie; 67289284Srpaulo} 68289284Srpaulo 69289284Srpaulostatic inline const u8 * fst_iface_get_bssid(struct fst_iface *i) 70289284Srpaulo{ 71289284Srpaulo return i->iface_obj.get_bssid(i->iface_obj.ctx); 72289284Srpaulo} 73289284Srpaulo 74289284Srpaulostatic inline void fst_iface_get_channel_info(struct fst_iface *i, 75289284Srpaulo enum hostapd_hw_mode *hw_mode, 76289284Srpaulo u8 *channel) 77289284Srpaulo{ 78289284Srpaulo i->iface_obj.get_channel_info(i->iface_obj.ctx, hw_mode, channel); 79289284Srpaulo} 80289284Srpaulo 81289284Srpaulostatic inline int fst_iface_get_hw_modes(struct fst_iface *i, 82289284Srpaulo struct hostapd_hw_modes **modes) 83289284Srpaulo{ 84289284Srpaulo return i->iface_obj.get_hw_modes(i->iface_obj.ctx, modes); 85289284Srpaulo} 86289284Srpaulo 87289284Srpaulostatic inline void fst_iface_set_ies(struct fst_iface *i, 88289284Srpaulo const struct wpabuf *fst_ies) 89289284Srpaulo{ 90289284Srpaulo i->iface_obj.set_ies(i->iface_obj.ctx, fst_ies); 91289284Srpaulo} 92289284Srpaulo 93289284Srpaulostatic inline int fst_iface_send_action(struct fst_iface *i, 94289284Srpaulo const u8 *addr, struct wpabuf *data) 95289284Srpaulo{ 96289284Srpaulo return i->iface_obj.send_action(i->iface_obj.ctx, addr, data); 97289284Srpaulo} 98289284Srpaulo 99289284Srpaulostatic inline const struct wpabuf * 100289284Srpaulofst_iface_get_peer_mb_ie(struct fst_iface *i, const u8 *addr) 101289284Srpaulo{ 102289284Srpaulo return i->iface_obj.get_mb_ie(i->iface_obj.ctx, addr); 103289284Srpaulo} 104289284Srpaulo 105289284Srpaulostatic inline void fst_iface_update_mb_ie(struct fst_iface *i, 106289284Srpaulo const u8 *addr, 107289284Srpaulo const u8 *buf, size_t size) 108289284Srpaulo{ 109346981Scy i->iface_obj.update_mb_ie(i->iface_obj.ctx, addr, buf, size); 110289284Srpaulo} 111289284Srpaulo 112289284Srpaulostatic inline const u8 * fst_iface_get_peer_first(struct fst_iface *i, 113289284Srpaulo struct fst_get_peer_ctx **ctx, 114289284Srpaulo Boolean mb_only) 115289284Srpaulo{ 116289284Srpaulo return i->iface_obj.get_peer_first(i->iface_obj.ctx, ctx, mb_only); 117289284Srpaulo} 118289284Srpaulo 119289284Srpaulostatic inline const u8 * fst_iface_get_peer_next(struct fst_iface *i, 120289284Srpaulo struct fst_get_peer_ctx **ctx, 121289284Srpaulo Boolean mb_only) 122289284Srpaulo{ 123289284Srpaulo return i->iface_obj.get_peer_next(i->iface_obj.ctx, ctx, mb_only); 124289284Srpaulo} 125289284Srpaulo 126337817ScyBoolean fst_iface_is_connected(struct fst_iface *iface, const u8 *addr, 127337817Scy Boolean mb_only); 128289284Srpaulovoid fst_iface_attach_mbie(struct fst_iface *i, struct wpabuf *mbie); 129289284Srpauloenum mb_band_id fst_iface_get_band_id(struct fst_iface *i); 130289284Srpaulo 131289284Srpaulostatic inline void * fst_iface_get_wpa_obj_ctx(struct fst_iface *i) 132289284Srpaulo{ 133289284Srpaulo return i->iface_obj.ctx; 134289284Srpaulo} 135289284Srpaulo 136289284Srpaulo#endif /* FST_IFACE_H */ 137