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