| /* |
| * FST module - FST interface 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_IFACE_H |
| #define FST_IFACE_H |
| |
| #include "utils/includes.h" |
| #include "utils/common.h" |
| #include "list.h" |
| #include "fst.h" |
| |
| struct fst_iface { |
| struct fst_group *group; |
| struct fst_wpa_obj iface_obj; |
| u8 own_addr[ETH_ALEN]; |
| struct wpabuf *mb_ie; |
| char ifname[IFNAMSIZ + 1]; |
| struct fst_iface_cfg cfg; |
| struct dl_list group_lentry; |
| }; |
| |
| struct fst_iface * fst_iface_create(struct fst_group *g, const char *ifname, |
| const u8 *own_addr, |
| const struct fst_wpa_obj *iface_obj, |
| const struct fst_iface_cfg *cfg); |
| void fst_iface_delete(struct fst_iface *i); |
| |
| static inline struct fst_group * fst_iface_get_group(struct fst_iface *i) |
| { |
| return i->group; |
| } |
| |
| static inline const char * fst_iface_get_name(struct fst_iface *i) |
| { |
| return i->ifname; |
| } |
| |
| static inline const u8 * fst_iface_get_addr(struct fst_iface *i) |
| { |
| return i->own_addr; |
| } |
| |
| static inline const char * fst_iface_get_group_id(struct fst_iface *i) |
| { |
| return i->cfg.group_id; |
| } |
| |
| static inline u8 fst_iface_get_priority(struct fst_iface *i) |
| { |
| return i->cfg.priority; |
| } |
| |
| static inline u32 fst_iface_get_llt(struct fst_iface *i) |
| { |
| return i->cfg.llt; |
| } |
| |
| static inline const struct wpabuf * fst_iface_get_mbie(struct fst_iface *i) |
| { |
| return i->mb_ie; |
| } |
| |
| static inline const u8 * fst_iface_get_bssid(struct fst_iface *i) |
| { |
| return i->iface_obj.get_bssid(i->iface_obj.ctx); |
| } |
| |
| static inline void fst_iface_get_channel_info(struct fst_iface *i, |
| enum hostapd_hw_mode *hw_mode, |
| u8 *channel) |
| { |
| i->iface_obj.get_channel_info(i->iface_obj.ctx, hw_mode, channel); |
| } |
| |
| static inline int fst_iface_get_hw_modes(struct fst_iface *i, |
| struct hostapd_hw_modes **modes) |
| { |
| return i->iface_obj.get_hw_modes(i->iface_obj.ctx, modes); |
| } |
| |
| static inline void fst_iface_set_ies(struct fst_iface *i, |
| const struct wpabuf *fst_ies) |
| { |
| i->iface_obj.set_ies(i->iface_obj.ctx, fst_ies); |
| } |
| |
| static inline int fst_iface_send_action(struct fst_iface *i, |
| const u8 *addr, struct wpabuf *data) |
| { |
| return i->iface_obj.send_action(i->iface_obj.ctx, addr, data); |
| } |
| |
| static inline const struct wpabuf * |
| fst_iface_get_peer_mb_ie(struct fst_iface *i, const u8 *addr) |
| { |
| return i->iface_obj.get_mb_ie(i->iface_obj.ctx, addr); |
| } |
| |
| static inline void fst_iface_update_mb_ie(struct fst_iface *i, |
| const u8 *addr, |
| const u8 *buf, size_t size) |
| { |
| i->iface_obj.update_mb_ie(i->iface_obj.ctx, addr, buf, size); |
| } |
| |
| static inline const u8 * fst_iface_get_peer_first(struct fst_iface *i, |
| struct fst_get_peer_ctx **ctx, |
| bool mb_only) |
| { |
| return i->iface_obj.get_peer_first(i->iface_obj.ctx, ctx, mb_only); |
| } |
| |
| static inline const u8 * fst_iface_get_peer_next(struct fst_iface *i, |
| struct fst_get_peer_ctx **ctx, |
| bool mb_only) |
| { |
| return i->iface_obj.get_peer_next(i->iface_obj.ctx, ctx, mb_only); |
| } |
| |
| bool fst_iface_is_connected(struct fst_iface *iface, const u8 *addr, |
| bool mb_only); |
| void fst_iface_attach_mbie(struct fst_iface *i, struct wpabuf *mbie); |
| enum mb_band_id fst_iface_get_band_id(struct fst_iface *i); |
| |
| static inline void * fst_iface_get_wpa_obj_ctx(struct fst_iface *i) |
| { |
| return i->iface_obj.ctx; |
| } |
| |
| #endif /* FST_IFACE_H */ |