linux/include/net/cfg80211.h
<<
>>
Prefs
   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 */
  20struct 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
  41struct 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
  53extern int ieee80211_radiotap_iterator_init(
  54   struct ieee80211_radiotap_iterator *iterator,
  55   struct ieee80211_radiotap_header *radiotap_header,
  56   int max_length);
  57
  58extern 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 */
  74struct 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 */
  96struct 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 */
 114enum 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 */
 128enum 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 */
 147struct 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 */
 170enum 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 */
 192struct 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 */
 214enum 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 */
 236enum 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 */
 260struct 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 */
 273struct 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 */
 322struct 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 */
 376
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.