mac80211: 802.11p OCB mode support
This patch adds 802.11p OCB (Outside the Context of a BSS) mode support. When communicating in OCB mode a mandatory wildcard BSSID (48 '1' bits) is used. The EDCA parameters handling function was changed to support 802.11p specific values. The insertion of a newly discovered STAs is done in the similar way as in the IBSS mode -- through the deferred insertion. The OCB mode uses a periodic 'housekeeping task' for expiration of disconnected STAs (in the similar manner as in the MESH mode). New Kconfig option for verbose OCB debugging outputs is added. Signed-off-by: Rostislav Lisovy <rostislav.lisovy@fel.cvut.cz> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:

committed by
Johannes Berg

parent
6e0bd6c35b
commit
239281f803
@@ -576,6 +576,25 @@ struct ieee80211_if_ibss {
|
||||
} state;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ieee80211_if_ocb - OCB mode state
|
||||
*
|
||||
* @housekeeping_timer: timer for periodic invocation of a housekeeping task
|
||||
* @wrkq_flags: OCB deferred task action
|
||||
* @incomplete_lock: delayed STA insertion lock
|
||||
* @incomplete_stations: list of STAs waiting for delayed insertion
|
||||
* @joined: indication if the interface is connected to an OCB network
|
||||
*/
|
||||
struct ieee80211_if_ocb {
|
||||
struct timer_list housekeeping_timer;
|
||||
unsigned long wrkq_flags;
|
||||
|
||||
spinlock_t incomplete_lock;
|
||||
struct list_head incomplete_stations;
|
||||
|
||||
bool joined;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ieee80211_mesh_sync_ops - Extensible synchronization framework interface
|
||||
*
|
||||
@@ -869,6 +888,7 @@ struct ieee80211_sub_if_data {
|
||||
struct ieee80211_if_managed mgd;
|
||||
struct ieee80211_if_ibss ibss;
|
||||
struct ieee80211_if_mesh mesh;
|
||||
struct ieee80211_if_ocb ocb;
|
||||
u32 mntr_flags;
|
||||
} u;
|
||||
|
||||
@@ -1505,6 +1525,15 @@ int ieee80211_ibss_csa_beacon(struct ieee80211_sub_if_data *sdata,
|
||||
int ieee80211_ibss_finish_csa(struct ieee80211_sub_if_data *sdata);
|
||||
void ieee80211_ibss_stop(struct ieee80211_sub_if_data *sdata);
|
||||
|
||||
/* OCB code */
|
||||
void ieee80211_ocb_work(struct ieee80211_sub_if_data *sdata);
|
||||
void ieee80211_ocb_rx_no_sta(struct ieee80211_sub_if_data *sdata,
|
||||
const u8 *bssid, const u8 *addr, u32 supp_rates);
|
||||
void ieee80211_ocb_setup_sdata(struct ieee80211_sub_if_data *sdata);
|
||||
int ieee80211_ocb_join(struct ieee80211_sub_if_data *sdata,
|
||||
struct ocb_setup *setup);
|
||||
int ieee80211_ocb_leave(struct ieee80211_sub_if_data *sdata);
|
||||
|
||||
/* mesh code */
|
||||
void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata);
|
||||
void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
|
||||
|
Reference in New Issue
Block a user