1/* 2 * FST module - FST interface 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 10#ifndef FST_IFACE_H 11#define FST_IFACE_H 12 13#include "utils/includes.h" 14#include "utils/common.h" 15#include "list.h" 16#include "fst.h" 17 18struct fst_iface { 19 struct fst_group *group; 20 struct fst_wpa_obj iface_obj; 21 u8 own_addr[ETH_ALEN]; 22 struct wpabuf *mb_ie; 23 char ifname[IFNAMSIZ + 1]; 24 struct fst_iface_cfg cfg; 25 struct dl_list group_lentry; 26}; 27 28struct fst_iface * fst_iface_create(struct fst_group *g, const char *ifname, 29 const u8 *own_addr, 30 const struct fst_wpa_obj *iface_obj, 31 const struct fst_iface_cfg *cfg); 32void fst_iface_delete(struct fst_iface *i); 33 34static inline struct fst_group * fst_iface_get_group(struct fst_iface *i) 35{ 36 return i->group; 37} 38 39static inline const char * fst_iface_get_name(struct fst_iface *i) 40{ 41 return i->ifname; 42} 43 44static inline const u8 * fst_iface_get_addr(struct fst_iface *i) 45{ 46 return i->own_addr; 47} 48 49static inline const char * fst_iface_get_group_id(struct fst_iface *i) 50{ 51 return i->cfg.group_id; 52} 53 54static inline u8 fst_iface_get_priority(struct fst_iface *i) 55{ 56 return i->cfg.priority; 57} 58 59static inline u32 fst_iface_get_llt(struct fst_iface *i) 60{ 61 return i->cfg.llt; 62} 63 64static inline const struct wpabuf * fst_iface_get_mbie(struct fst_iface *i) 65{ 66 return i->mb_ie; 67} 68 69static inline const u8 * fst_iface_get_bssid(struct fst_iface *i) 70{ 71 return i->iface_obj.get_bssid(i->iface_obj.ctx); 72} 73 74static inline void fst_iface_get_channel_info(struct fst_iface *i, 75 enum hostapd_hw_mode *hw_mode, 76 u8 *channel) 77{ 78 i->iface_obj.get_channel_info(i->iface_obj.ctx, hw_mode, channel); 79} 80 81static inline int fst_iface_get_hw_modes(struct fst_iface *i, 82 struct hostapd_hw_modes **modes) 83{ 84 return i->iface_obj.get_hw_modes(i->iface_obj.ctx, modes); 85} 86 87static inline void fst_iface_set_ies(struct fst_iface *i, 88 const struct wpabuf *fst_ies) 89{ 90 i->iface_obj.set_ies(i->iface_obj.ctx, fst_ies); 91} 92 93static inline int fst_iface_send_action(struct fst_iface *i, 94 const u8 *addr, struct wpabuf *data) 95{ 96 return i->iface_obj.send_action(i->iface_obj.ctx, addr, data); 97} 98 99static inline const struct wpabuf * 100fst_iface_get_peer_mb_ie(struct fst_iface *i, const u8 *addr) 101{ 102 return i->iface_obj.get_mb_ie(i->iface_obj.ctx, addr); 103} 104 105static inline void fst_iface_update_mb_ie(struct fst_iface *i, 106 const u8 *addr, 107 const u8 *buf, size_t size) 108{ 109 i->iface_obj.update_mb_ie(i->iface_obj.ctx, addr, buf, size); 110} 111 112static inline const u8 * fst_iface_get_peer_first(struct fst_iface *i, 113 struct fst_get_peer_ctx **ctx, 114 Boolean mb_only) 115{ 116 return i->iface_obj.get_peer_first(i->iface_obj.ctx, ctx, mb_only); 117} 118 119static inline const u8 * fst_iface_get_peer_next(struct fst_iface *i, 120 struct fst_get_peer_ctx **ctx, 121 Boolean mb_only) 122{ 123 return i->iface_obj.get_peer_next(i->iface_obj.ctx, ctx, mb_only); 124} 125 126Boolean fst_iface_is_connected(struct fst_iface *iface, const u8 *addr, 127 Boolean mb_only); 128void fst_iface_attach_mbie(struct fst_iface *i, struct wpabuf *mbie); 129enum mb_band_id fst_iface_get_band_id(struct fst_iface *i); 130 131static inline void * fst_iface_get_wpa_obj_ctx(struct fst_iface *i) 132{ 133 return i->iface_obj.ctx; 134} 135 136#endif /* FST_IFACE_H */ 137