📄 ieee80211_i.h
字号:
struct ieee80211_hw hw; const struct ieee80211_ops *ops; /* List of registered struct ieee80211_hw_mode */ struct list_head modes_list; struct net_device *mdev; /* wmaster# - "master" 802.11 device */ int open_count; int monitors; unsigned int filter_flags; /* FIF_* */ struct iw_statistics wstats; u8 wstats_flags; int tx_headroom; /* required headroom for hardware/radiotap */ enum { IEEE80211_DEV_UNINITIALIZED = 0, IEEE80211_DEV_REGISTERED, IEEE80211_DEV_UNREGISTERED, } reg_state; /* Tasklet and skb queue to process calls from IRQ mode. All frames * added to skb_queue will be processed, but frames in * skb_queue_unreliable may be dropped if the total length of these * queues increases over the limit. */#define IEEE80211_IRQSAFE_QUEUE_LIMIT 128 struct tasklet_struct tasklet; struct sk_buff_head skb_queue; struct sk_buff_head skb_queue_unreliable; /* Station data structures */ rwlock_t sta_lock; /* protects STA data structures */ int num_sta; /* number of stations in sta_list */ struct list_head sta_list; struct sta_info *sta_hash[STA_HASH_SIZE]; struct timer_list sta_cleanup; unsigned long state[NUM_TX_DATA_QUEUES]; struct ieee80211_tx_stored_packet pending_packet[NUM_TX_DATA_QUEUES]; struct tasklet_struct tx_pending_tasklet; /* number of interfaces with corresponding IFF_ flags */ atomic_t iff_allmultis, iff_promiscs; struct rate_control_ref *rate_ctrl; /* Supported and basic rate filters for different modes. These are * pointers to -1 terminated lists and rates in 100 kbps units. */ int *supp_rates[NUM_IEEE80211_MODES]; int *basic_rates[NUM_IEEE80211_MODES]; int rts_threshold; int fragmentation_threshold; int short_retry_limit; /* dot11ShortRetryLimit */ int long_retry_limit; /* dot11LongRetryLimit */ struct crypto_blkcipher *wep_tx_tfm; struct crypto_blkcipher *wep_rx_tfm; u32 wep_iv; int bridge_packets; /* bridge packets between associated stations and * deliver multicast frames both back to wireless * media and to the local net stack */ ieee80211_rx_handler *rx_pre_handlers; ieee80211_rx_handler *rx_handlers; ieee80211_tx_handler *tx_handlers; struct list_head interfaces; int sta_scanning; int scan_channel_idx; enum { SCAN_SET_CHANNEL, SCAN_SEND_PROBE } scan_state; unsigned long last_scan_completed; struct delayed_work scan_work; struct net_device *scan_dev; struct ieee80211_channel *oper_channel, *scan_channel; struct ieee80211_hw_mode *oper_hw_mode, *scan_hw_mode; u8 scan_ssid[IEEE80211_MAX_SSID_LEN]; size_t scan_ssid_len; struct list_head sta_bss_list; struct ieee80211_sta_bss *sta_bss_hash[STA_HASH_SIZE]; spinlock_t sta_bss_lock;#define IEEE80211_SCAN_MATCH_SSID BIT(0)#define IEEE80211_SCAN_WPA_ONLY BIT(1)#define IEEE80211_SCAN_EXTRA_INFO BIT(2) int scan_flags; /* SNMP counters */ /* dot11CountersTable */ u32 dot11TransmittedFragmentCount; u32 dot11MulticastTransmittedFrameCount; u32 dot11FailedCount; u32 dot11RetryCount; u32 dot11MultipleRetryCount; u32 dot11FrameDuplicateCount; u32 dot11ReceivedFragmentCount; u32 dot11MulticastReceivedFrameCount; u32 dot11TransmittedFrameCount; u32 dot11WEPUndecryptableCount;#ifdef CONFIG_MAC80211_LEDS int tx_led_counter, rx_led_counter; struct led_trigger *tx_led, *rx_led, *assoc_led; char tx_led_name[32], rx_led_name[32], assoc_led_name[32];#endif u32 channel_use; u32 channel_use_raw;#ifdef CONFIG_MAC80211_DEBUGFS struct work_struct sta_debugfs_add;#endif#ifdef CONFIG_MAC80211_DEBUG_COUNTERS /* TX/RX handler statistics */ unsigned int tx_handlers_drop; unsigned int tx_handlers_queued; unsigned int tx_handlers_drop_unencrypted; unsigned int tx_handlers_drop_fragment; unsigned int tx_handlers_drop_wep; unsigned int tx_handlers_drop_not_assoc; unsigned int tx_handlers_drop_unauth_port; unsigned int rx_handlers_drop; unsigned int rx_handlers_queued; unsigned int rx_handlers_drop_nullfunc; unsigned int rx_handlers_drop_defrag; unsigned int rx_handlers_drop_short; unsigned int rx_handlers_drop_passive_scan; unsigned int tx_expand_skb_head; unsigned int tx_expand_skb_head_cloned; unsigned int rx_expand_skb_head; unsigned int rx_expand_skb_head2; unsigned int rx_handlers_fragments; unsigned int tx_status_drop; unsigned int wme_rx_queue[NUM_RX_DATA_QUEUES]; unsigned int wme_tx_queue[NUM_RX_DATA_QUEUES];#define I802_DEBUG_INC(c) (c)++#else /* CONFIG_MAC80211_DEBUG_COUNTERS */#define I802_DEBUG_INC(c) do { } while (0)#endif /* CONFIG_MAC80211_DEBUG_COUNTERS */ int total_ps_buffered; /* total number of all buffered unicast and * multicast packets for power saving stations */ int wifi_wme_noack_test; unsigned int wmm_acm; /* bit field of ACM bits (BIT(802.1D tag)) */ unsigned int enabled_modes; /* bitfield of allowed modes; * (1 << MODE_*) */ unsigned int hw_modes; /* bitfield of supported hardware modes; * (1 << MODE_*) */#ifdef CONFIG_MAC80211_DEBUGFS struct local_debugfsdentries { struct dentry *channel; struct dentry *frequency; struct dentry *antenna_sel_tx; struct dentry *antenna_sel_rx; struct dentry *bridge_packets; struct dentry *rts_threshold; struct dentry *fragmentation_threshold; struct dentry *short_retry_limit; struct dentry *long_retry_limit; struct dentry *total_ps_buffered; struct dentry *mode; struct dentry *wep_iv; struct dentry *modes; struct dentry *statistics; struct local_debugfsdentries_statsdentries { struct dentry *transmitted_fragment_count; struct dentry *multicast_transmitted_frame_count; struct dentry *failed_count; struct dentry *retry_count; struct dentry *multiple_retry_count; struct dentry *frame_duplicate_count; struct dentry *received_fragment_count; struct dentry *multicast_received_frame_count; struct dentry *transmitted_frame_count; struct dentry *wep_undecryptable_count; struct dentry *num_scans;#ifdef CONFIG_MAC80211_DEBUG_COUNTERS struct dentry *tx_handlers_drop; struct dentry *tx_handlers_queued; struct dentry *tx_handlers_drop_unencrypted; struct dentry *tx_handlers_drop_fragment; struct dentry *tx_handlers_drop_wep; struct dentry *tx_handlers_drop_not_assoc; struct dentry *tx_handlers_drop_unauth_port; struct dentry *rx_handlers_drop; struct dentry *rx_handlers_queued; struct dentry *rx_handlers_drop_nullfunc; struct dentry *rx_handlers_drop_defrag; struct dentry *rx_handlers_drop_short; struct dentry *rx_handlers_drop_passive_scan; struct dentry *tx_expand_skb_head; struct dentry *tx_expand_skb_head_cloned; struct dentry *rx_expand_skb_head; struct dentry *rx_expand_skb_head2; struct dentry *rx_handlers_fragments; struct dentry *tx_status_drop; struct dentry *wme_tx_queue; struct dentry *wme_rx_queue;#endif struct dentry *dot11ACKFailureCount; struct dentry *dot11RTSFailureCount; struct dentry *dot11FCSErrorCount; struct dentry *dot11RTSSuccessCount; } stats; struct dentry *stations; struct dentry *keys; } debugfs;#endif};static inline struct ieee80211_local *hw_to_local( struct ieee80211_hw *hw){ return container_of(hw, struct ieee80211_local, hw);}static inline struct ieee80211_hw *local_to_hw( struct ieee80211_local *local){ return &local->hw;}enum ieee80211_link_state_t { IEEE80211_LINK_STATE_XOFF = 0, IEEE80211_LINK_STATE_PENDING,};struct sta_attribute { struct attribute attr; ssize_t (*show)(const struct sta_info *, char *buf); ssize_t (*store)(struct sta_info *, const char *buf, size_t count);};static inline void __bss_tim_set(struct ieee80211_if_ap *bss, u16 aid){ /* * This format has been mandated by the IEEE specifications, * so this line may not be changed to use the __set_bit() format. */ bss->tim[aid / 8] |= (1 << (aid % 8));}static inline void bss_tim_set(struct ieee80211_local *local, struct ieee80211_if_ap *bss, u16 aid){ read_lock_bh(&local->sta_lock); __bss_tim_set(bss, aid); read_unlock_bh(&local->sta_lock);}static inline void __bss_tim_clear(struct ieee80211_if_ap *bss, u16 aid){ /* * This format has been mandated by the IEEE specifications, * so this line may not be changed to use the __clear_bit() format. */ bss->tim[aid / 8] &= ~(1 << (aid % 8));}static inline void bss_tim_clear(struct ieee80211_local *local, struct ieee80211_if_ap *bss, u16 aid){ read_lock_bh(&local->sta_lock); __bss_tim_clear(bss, aid); read_unlock_bh(&local->sta_lock);}/** * ieee80211_is_erp_rate - Check if a rate is an ERP rate * @phymode: The PHY-mode for this rate (MODE_IEEE80211...) * @rate: Transmission rate to check, in 100 kbps * * Check if a given rate is an Extended Rate PHY (ERP) rate. */static inline int ieee80211_is_erp_rate(int phymode, int rate){ if (phymode == MODE_IEEE80211G) { if (rate != 10 && rate != 20 && rate != 55 && rate != 110) return 1; } return 0;}static inline int ieee80211_bssid_match(const u8 *raddr, const u8 *addr){ return compare_ether_addr(raddr, addr) == 0 || is_broadcast_ether_addr(raddr);}/* ieee80211.c */int ieee80211_hw_config(struct ieee80211_local *local);int ieee80211_if_config(struct net_device *dev);int ieee80211_if_config_beacon(struct net_device *dev);void ieee80211_prepare_rates(struct ieee80211_local *local, struct ieee80211_hw_mode *mode);void ieee80211_tx_set_iswep(struct ieee80211_txrx_data *tx);int ieee80211_if_update_wds(struct net_device *dev, u8 *remote_addr);void ieee80211_if_setup(struct net_device *dev);struct ieee80211_rate *ieee80211_get_rate(struct ieee80211_local *local, int phymode, int hwrate);/* ieee80211_ioctl.c */extern const struct iw_handler_def ieee80211_iw_handler_def;/* Least common multiple of the used rates (in 100 kbps). This is used to * calculate rate_inv values for each rate so that only integers are needed. */#define CHAN_UTIL_RATE_LCM 95040/* 1 usec is 1/8 * (95040/10) = 1188 */#define CHAN_UTIL_PER_USEC 1188/* Amount of bits to shift the result right to scale the total utilization * to values that will not wrap around 32-bit integers. */#define CHAN_UTIL_SHIFT 9/* Theoretical maximum of channel utilization counter in 10 ms (stat_time=1): * (CHAN_UTIL_PER_USEC * 10000) >> CHAN_UTIL_SHIFT = 23203. So dividing the * raw value with about 23 should give utilization in 10th of a percentage * (1/1000). However, utilization is only estimated and not all intervals * between frames etc. are calculated. 18 seems to give numbers that are closer * to the real maximum. */#define CHAN_UTIL_PER_10MS 18#define CHAN_UTIL_HDR_LONG (202 * CHAN_UTIL_PER_USEC)#define CHAN_UTIL_HDR_SHORT (40 * CHAN_UTIL_PER_USEC)/* ieee80211_ioctl.c */int ieee80211_set_compression(struct ieee80211_local *local, struct net_device *dev, struct sta_info *sta);int ieee80211_set_channel(struct ieee80211_local *local, int channel, int freq);/* ieee80211_sta.c */void ieee80211_sta_timer(unsigned long data);void ieee80211_sta_work(struct work_struct *work);void ieee80211_sta_scan_work(struct work_struct *work);void ieee80211_sta_rx_mgmt(struct net_device *dev, struct sk_buff *skb, struct ieee80211_rx_status *rx_status);int ieee80211_sta_set_ssid(struct net_device *dev, char *ssid, size_t len);int ieee80211_sta_get_ssid(struct net_device *dev, char *ssid, size_t *len);int ieee80211_sta_set_bssid(struct net_device *dev, u8 *bssid);int ieee80211_sta_req_scan(struct net_device *dev, u8 *ssid, size_t ssid_len);void ieee80211_sta_req_auth(struct net_device *dev, struct ieee80211_if_sta *ifsta);int ieee80211_sta_scan_results(struct net_device *dev, char *buf, size_t len);void ieee80211_sta_rx_scan(struct net_device *dev, struct sk_buff *skb, struct ieee80211_rx_status *rx_status);void ieee80211_rx_bss_list_init(struct net_device *dev);void ieee80211_rx_bss_list_deinit(struct net_device *dev);int ieee80211_sta_set_extra_ie(struct net_device *dev, char *ie, size_t len);struct sta_info * ieee80211_ibss_add_sta(struct net_device *dev, struct sk_buff *skb, u8 *bssid, u8 *addr);int ieee80211_sta_deauthenticate(struct net_device *dev, u16 reason);int ieee80211_sta_disassociate(struct net_device *dev, u16 reason);void ieee80211_erp_info_change_notify(struct net_device *dev, u8 changes);void ieee80211_reset_erp_info(struct net_device *dev);/* ieee80211_iface.c */int ieee80211_if_add(struct net_device *dev, const char *name, struct net_device **new_dev, int type);void ieee80211_if_set_type(struct net_device *dev, int type);void ieee80211_if_reinit(struct net_device *dev);void __ieee80211_if_del(struct ieee80211_local *local, struct ieee80211_sub_if_data *sdata);int ieee80211_if_remove(struct net_device *dev, const char *name, int id);void ieee80211_if_free(struct net_device *dev);void ieee80211_if_sdata_init(struct ieee80211_sub_if_data *sdata);/* regdomain.c */void ieee80211_regdomain_init(void);void ieee80211_set_default_regdomain(struct ieee80211_hw_mode *mode);/* rx handling */extern ieee80211_rx_handler ieee80211_rx_pre_handlers[];extern ieee80211_rx_handler ieee80211_rx_handlers[];/* tx handling */extern ieee80211_tx_handler ieee80211_tx_handlers[];void ieee80211_clear_tx_pending(struct ieee80211_local *local);void ieee80211_tx_pending(unsigned long data);int ieee80211_master_start_xmit(struct sk_buff *skb, struct net_device *dev);int ieee80211_monitor_start_xmit(struct sk_buff *skb, struct net_device *dev);int ieee80211_subif_start_xmit(struct sk_buff *skb, struct net_device *dev);/* utility functions/constants */extern void *mac80211_wiphy_privid; /* for wiphy privid */extern const unsigned char rfc1042_header[6];extern const unsigned char bridge_tunnel_header[6];u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len);int ieee80211_is_eapol(const struct sk_buff *skb);int ieee80211_frame_duration(struct ieee80211_local *local, size_t len, int rate, int erp, int short_preamble);void mac80211_ev_michael_mic_failure(struct net_device *dev, int keyidx, struct ieee80211_hdr *hdr);#endif /* IEEE80211_I_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -