Merge branch 'for-jeff' of git://git.kernel.org/pub/scm/linux/kernel/git/chris/linux...
[linux-2.6] / include / net / cfg80211.h
1 #ifndef __NET_CFG80211_H
2 #define __NET_CFG80211_H
3
4 #include <linux/netlink.h>
5 #include <linux/skbuff.h>
6 #include <linux/nl80211.h>
7 #include <net/genetlink.h>
8
9 /*
10  * 802.11 configuration in-kernel interface
11  *
12  * Copyright 2006, 2007 Johannes Berg <johannes@sipsolutions.net>
13  */
14
15 /**
16  * struct vif_params - describes virtual interface parameters
17  * @mesh_id: mesh ID to use
18  * @mesh_id_len: length of the mesh ID
19  */
20 struct vif_params {
21        u8 *mesh_id;
22        int mesh_id_len;
23 };
24
25 /* Radiotap header iteration
26  *   implemented in net/wireless/radiotap.c
27  *   docs in Documentation/networking/radiotap-headers.txt
28  */
29 /**
30  * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args
31  * @rtheader: pointer to the radiotap header we are walking through
32  * @max_length: length of radiotap header in cpu byte ordering
33  * @this_arg_index: IEEE80211_RADIOTAP_... index of current arg
34  * @this_arg: pointer to current radiotap arg
35  * @arg_index: internal next argument index
36  * @arg: internal next argument pointer
37  * @next_bitmap: internal pointer to next present u32
38  * @bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present
39  */
40
41 struct ieee80211_radiotap_iterator {
42         struct ieee80211_radiotap_header *rtheader;
43         int max_length;
44         int this_arg_index;
45         u8 *this_arg;
46
47         int arg_index;
48         u8 *arg;
49         __le32 *next_bitmap;
50         u32 bitmap_shifter;
51 };
52
53 extern int ieee80211_radiotap_iterator_init(
54    struct ieee80211_radiotap_iterator *iterator,
55    struct ieee80211_radiotap_header *radiotap_header,
56    int max_length);
57
58 extern int ieee80211_radiotap_iterator_next(
59    struct ieee80211_radiotap_iterator *iterator);
60
61
62  /**
63  * struct key_params - key information
64  *
65  * Information about a key
66  *
67  * @key: key material
68  * @key_len: length of key material
69  * @cipher: cipher suite selector
70  * @seq: sequence counter (IV/PN) for TKIP and CCMP keys, only used
71  *      with the get_key() callback, must be in little endian,
72  *      length given by @seq_len.
73  */
74 struct key_params {
75         u8 *key;
76         u8 *seq;
77         int key_len;
78         int seq_len;
79         u32 cipher;
80 };
81
82 /**
83  * struct beacon_parameters - beacon parameters
84  *
85  * Used to configure the beacon for an interface.
86  *
87  * @head: head portion of beacon (before TIM IE)
88  *     or %NULL if not changed
89  * @tail: tail portion of beacon (after TIM IE)
90  *     or %NULL if not changed
91  * @interval: beacon interval or zero if not changed
92  * @dtim_period: DTIM period or zero if not changed
93  * @head_len: length of @head
94  * @tail_len: length of @tail
95  */
96 struct beacon_parameters {
97         u8 *head, *tail;
98         int interval, dtim_period;
99         int head_len, tail_len;
100 };
101
102 /**
103  * enum station_flags - station flags
104  *
105  * Station capability flags. Note that these must be the bits
106  * according to the nl80211 flags.
107  *
108  * @STATION_FLAG_CHANGED: station flags were changed
109  * @STATION_FLAG_AUTHORIZED: station is authorized to send frames (802.1X)
110  * @STATION_FLAG_SHORT_PREAMBLE: station is capable of receiving frames
111  *      with short preambles
112  * @STATION_FLAG_WME: station is WME/QoS capable
113  */
114 enum station_flags {
115         STATION_FLAG_CHANGED            = 1<<0,
116         STATION_FLAG_AUTHORIZED         = 1<<NL80211_STA_FLAG_AUTHORIZED,
117         STATION_FLAG_SHORT_PREAMBLE     = 1<<NL80211_STA_FLAG_SHORT_PREAMBLE,
118         STATION_FLAG_WME                = 1<<NL80211_STA_FLAG_WME,
119 };
120
121 /**
122  * enum plink_action - actions to perform in mesh peers
123  *
124  * @PLINK_ACTION_INVALID: action 0 is reserved
125  * @PLINK_ACTION_OPEN: start mesh peer link establishment
126  * @PLINK_ACTION_BLOCL: block traffic from this mesh peer
127  */
128 enum plink_actions {
129         PLINK_ACTION_INVALID,
130         PLINK_ACTION_OPEN,
131         PLINK_ACTION_BLOCK,
132 };
133
134 /**
135  * struct station_parameters - station parameters
136  *
137  * Used to change and create a new station.
138  *
139  * @vlan: vlan interface station should belong to
140  * @supported_rates: supported rates in IEEE 802.11 format
141  *      (or NULL for no change)
142  * @supported_rates_len: number of supported rates
143  * @station_flags: station flags (see &enum station_flags)
144  * @listen_interval: listen interval or -1 for no change
145  * @aid: AID or zero for no change
146  */
147 struct station_parameters {
148         u8 *supported_rates;
149         struct net_device *vlan;
150         u32 station_flags;
151         int listen_interval;
152         u16 aid;
153         u8 supported_rates_len;
154         u8 plink_action;
155 };
156
157 /**
158  * enum station_info_flags - station information flags
159  *
160  * Used by the driver to indicate which info in &struct station_info
161  * it has filled in during get_station() or dump_station().
162  *
163  * @STATION_INFO_INACTIVE_TIME: @inactive_time filled
164  * @STATION_INFO_RX_BYTES: @rx_bytes filled
165  * @STATION_INFO_TX_BYTES: @tx_bytes filled
166  * @STATION_INFO_LLID: @llid filled
167  * @STATION_INFO_PLID: @plid filled
168  * @STATION_INFO_PLINK_STATE: @plink_state filled
169  */
170 enum station_info_flags {
171         STATION_INFO_INACTIVE_TIME      = 1<<0,
172         STATION_INFO_RX_BYTES           = 1<<1,
173         STATION_INFO_TX_BYTES           = 1<<2,
174         STATION_INFO_LLID               = 1<<3,
175         STATION_INFO_PLID               = 1<<4,
176         STATION_INFO_PLINK_STATE        = 1<<5,
177 };
178
179 /**
180  * struct station_info - station information
181  *
182  * Station information filled by driver for get_station() and dump_station.
183  *
184  * @filled: bitflag of flags from &enum station_info_flags
185  * @inactive_time: time since last station activity (tx/rx) in milliseconds
186  * @rx_bytes: bytes received from this station
187  * @tx_bytes: bytes transmitted to this station
188  * @llid: mesh local link id
189  * @plid: mesh peer link id
190  * @plink_state: mesh peer link state
191  */
192 struct station_info {
193         u32 filled;
194         u32 inactive_time;
195         u32 rx_bytes;
196         u32 tx_bytes;
197         u16 llid;
198         u16 plid;
199         u8 plink_state;
200 };
201
202 /**
203  * enum monitor_flags - monitor flags
204  *
205  * Monitor interface configuration flags. Note that these must be the bits
206  * according to the nl80211 flags.
207  *
208  * @MONITOR_FLAG_FCSFAIL: pass frames with bad FCS
209  * @MONITOR_FLAG_PLCPFAIL: pass frames with bad PLCP
210  * @MONITOR_FLAG_CONTROL: pass control frames
211  * @MONITOR_FLAG_OTHER_BSS: disable BSSID filtering
212  * @MONITOR_FLAG_COOK_FRAMES: report frames after processing
213  */
214 enum monitor_flags {
215         MONITOR_FLAG_FCSFAIL            = 1<<NL80211_MNTR_FLAG_FCSFAIL,
216         MONITOR_FLAG_PLCPFAIL           = 1<<NL80211_MNTR_FLAG_PLCPFAIL,
217         MONITOR_FLAG_CONTROL            = 1<<NL80211_MNTR_FLAG_CONTROL,
218         MONITOR_FLAG_OTHER_BSS          = 1<<NL80211_MNTR_FLAG_OTHER_BSS,
219         MONITOR_FLAG_COOK_FRAMES        = 1<<NL80211_MNTR_FLAG_COOK_FRAMES,
220 };
221
222 /**
223  * enum mpath_info_flags -  mesh path information flags
224  *
225  * Used by the driver to indicate which info in &struct mpath_info it has filled
226  * in during get_station() or dump_station().
227  *
228  * MPATH_INFO_FRAME_QLEN: @frame_qlen filled
229  * MPATH_INFO_DSN: @dsn filled
230  * MPATH_INFO_METRIC: @metric filled
231  * MPATH_INFO_EXPTIME: @exptime filled
232  * MPATH_INFO_DISCOVERY_TIMEOUT: @discovery_timeout filled
233  * MPATH_INFO_DISCOVERY_RETRIES: @discovery_retries filled
234  * MPATH_INFO_FLAGS: @flags filled
235  */
236 enum mpath_info_flags {
237         MPATH_INFO_FRAME_QLEN           = BIT(0),
238         MPATH_INFO_DSN                  = BIT(1),
239         MPATH_INFO_METRIC               = BIT(2),
240         MPATH_INFO_EXPTIME              = BIT(3),
241         MPATH_INFO_DISCOVERY_TIMEOUT    = BIT(4),
242         MPATH_INFO_DISCOVERY_RETRIES    = BIT(5),
243         MPATH_INFO_FLAGS                = BIT(6),
244 };
245
246 /**
247  * struct mpath_info - mesh path information
248  *
249  * Mesh path information filled by driver for get_mpath() and dump_mpath().
250  *
251  * @filled: bitfield of flags from &enum mpath_info_flags
252  * @frame_qlen: number of queued frames for this destination
253  * @dsn: destination sequence number
254  * @metric: metric (cost) of this mesh path
255  * @exptime: expiration time for the mesh path from now, in msecs
256  * @flags: mesh path flags
257  * @discovery_timeout: total mesh path discovery timeout, in msecs
258  * @discovery_retries: mesh path discovery retries
259  */
260 struct mpath_info {
261         u32 filled;
262         u32 frame_qlen;
263         u32 dsn;
264         u32 metric;
265         u32 exptime;
266         u32 discovery_timeout;
267         u8 discovery_retries;
268         u8 flags;
269 };
270
271
272 /* from net/wireless.h */
273 struct wiphy;
274
275 /**
276  * struct cfg80211_ops - backend description for wireless configuration
277  *
278  * This struct is registered by fullmac card drivers and/or wireless stacks
279  * in order to handle configuration requests on their interfaces.
280  *
281  * All callbacks except where otherwise noted should return 0
282  * on success or a negative error code.
283  *
284  * All operations are currently invoked under rtnl for consistency with the
285  * wireless extensions but this is subject to reevaluation as soon as this
286  * code is used more widely and we have a first user without wext.
287  *
288  * @add_virtual_intf: create a new virtual interface with the given name
289  *
290  * @del_virtual_intf: remove the virtual interface determined by ifindex.
291  *
292  * @change_virtual_intf: change type of virtual interface
293  *
294  * @add_key: add a key with the given parameters. @mac_addr will be %NULL
295  *      when adding a group key.
296  *
297  * @get_key: get information about the key with the given parameters.
298  *      @mac_addr will be %NULL when requesting information for a group
299  *      key. All pointers given to the @callback function need not be valid
300  *      after it returns.
301  *
302  * @del_key: remove a key given the @mac_addr (%NULL for a group key)
303  *      and @key_index
304  *
305  * @set_default_key: set the default key on an interface
306  *
307  * @add_beacon: Add a beacon with given parameters, @head, @interval
308  *      and @dtim_period will be valid, @tail is optional.
309  * @set_beacon: Change the beacon parameters for an access point mode
310  *      interface. This should reject the call when no beacon has been
311  *      configured.
312  * @del_beacon: Remove beacon configuration and stop sending the beacon.
313  *
314  * @add_station: Add a new station.
315  *
316  * @del_station: Remove a station; @mac may be NULL to remove all stations.
317  *
318  * @change_station: Modify a given station.
319  *
320  * @set_mesh_cfg: set mesh parameters (by now, just mesh id)
321  */
322 struct cfg80211_ops {
323         int     (*add_virtual_intf)(struct wiphy *wiphy, char *name,
324                                     enum nl80211_iftype type, u32 *flags,
325                                     struct vif_params *params);
326         int     (*del_virtual_intf)(struct wiphy *wiphy, int ifindex);
327         int     (*change_virtual_intf)(struct wiphy *wiphy, int ifindex,
328                                        enum nl80211_iftype type, u32 *flags,
329                                        struct vif_params *params);
330
331         int     (*add_key)(struct wiphy *wiphy, struct net_device *netdev,
332                            u8 key_index, u8 *mac_addr,
333                            struct key_params *params);
334         int     (*get_key)(struct wiphy *wiphy, struct net_device *netdev,
335                            u8 key_index, u8 *mac_addr, void *cookie,
336                            void (*callback)(void *cookie, struct key_params*));
337         int     (*del_key)(struct wiphy *wiphy, struct net_device *netdev,
338                            u8 key_index, u8 *mac_addr);
339         int     (*set_default_key)(struct wiphy *wiphy,
340                                    struct net_device *netdev,
341                                    u8 key_index);
342
343         int     (*add_beacon)(struct wiphy *wiphy, struct net_device *dev,
344                               struct beacon_parameters *info);
345         int     (*set_beacon)(struct wiphy *wiphy, struct net_device *dev,
346                               struct beacon_parameters *info);
347         int     (*del_beacon)(struct wiphy *wiphy, struct net_device *dev);
348
349
350         int     (*add_station)(struct wiphy *wiphy, struct net_device *dev,
351                                u8 *mac, struct station_parameters *params);
352         int     (*del_station)(struct wiphy *wiphy, struct net_device *dev,
353                                u8 *mac);
354         int     (*change_station)(struct wiphy *wiphy, struct net_device *dev,
355                                   u8 *mac, struct station_parameters *params);
356         int     (*get_station)(struct wiphy *wiphy, struct net_device *dev,
357                                u8 *mac, struct station_info *sinfo);
358         int     (*dump_station)(struct wiphy *wiphy, struct net_device *dev,
359                                int idx, u8 *mac, struct station_info *sinfo);
360
361         int     (*add_mpath)(struct wiphy *wiphy, struct net_device *dev,
362                                u8 *dst, u8 *next_hop);
363         int     (*del_mpath)(struct wiphy *wiphy, struct net_device *dev,
364                                u8 *dst);
365         int     (*change_mpath)(struct wiphy *wiphy, struct net_device *dev,
366                                   u8 *dst, u8 *next_hop);
367         int     (*get_mpath)(struct wiphy *wiphy, struct net_device *dev,
368                                u8 *dst, u8 *next_hop,
369                                struct mpath_info *pinfo);
370         int     (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev,
371                                int idx, u8 *dst, u8 *next_hop,
372                                struct mpath_info *pinfo);
373 };
374
375 #endif /* __NET_CFG80211_H */