mac80211: support runtime interface type changes
Add support to mac80211 for changing the interface type even when the interface is UP, if the driver supports it. To achieve this * add a new driver callback for switching, * split some of the interface up/down code out into new functions (do_open/do_stop), and * maintain an own __SDATA_RUNNING bit that will not be set during interface type, so that any other code doesn't use the interface. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
87490f6db3
commit
34d4bc4d41
@@ -472,6 +472,16 @@ enum ieee80211_sub_if_data_flags {
|
||||
IEEE80211_SDATA_DONT_BRIDGE_PACKETS = BIT(3),
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ieee80211_sdata_state_bits - virtual interface state bits
|
||||
* @SDATA_STATE_RUNNING: virtual interface is up & running; this
|
||||
* mirrors netif_running() but is separate for interface type
|
||||
* change handling while the interface is up
|
||||
*/
|
||||
enum ieee80211_sdata_state_bits {
|
||||
SDATA_STATE_RUNNING,
|
||||
};
|
||||
|
||||
struct ieee80211_sub_if_data {
|
||||
struct list_head list;
|
||||
|
||||
@@ -485,6 +495,8 @@ struct ieee80211_sub_if_data {
|
||||
|
||||
unsigned int flags;
|
||||
|
||||
unsigned long state;
|
||||
|
||||
int drop_unencrypted;
|
||||
|
||||
char name[IFNAMSIZ];
|
||||
@@ -1087,7 +1099,7 @@ void ieee80211_recalc_idle(struct ieee80211_local *local);
|
||||
|
||||
static inline bool ieee80211_sdata_running(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
return netif_running(sdata->dev);
|
||||
return test_bit(SDATA_STATE_RUNNING, &sdata->state);
|
||||
}
|
||||
|
||||
/* tx handling */
|
||||
|
Reference in New Issue
Block a user