Commit d8212184 authored by Aviya Erenfeld's avatar Aviya Erenfeld Committed by Johannes Berg

mac80211: refactor monitor representation in sdata

Insert the u32 monitor flags variable in a new structure
that represents a monitor interface.
This will allow to add more configuration variables to
that structure which will happen in an upcoming change.
Signed-off-by: default avatarAviya Erenfeld <aviya.erenfeld@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 5a1f044b
...@@ -39,7 +39,7 @@ static struct wireless_dev *ieee80211_add_iface(struct wiphy *wiphy, ...@@ -39,7 +39,7 @@ static struct wireless_dev *ieee80211_add_iface(struct wiphy *wiphy,
if (type == NL80211_IFTYPE_MONITOR && flags) { if (type == NL80211_IFTYPE_MONITOR && flags) {
sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
sdata->u.mntr_flags = *flags; sdata->u.mntr.flags = *flags;
} }
return wdev; return wdev;
...@@ -89,11 +89,11 @@ static int ieee80211_change_iface(struct wiphy *wiphy, ...@@ -89,11 +89,11 @@ static int ieee80211_change_iface(struct wiphy *wiphy,
* cooked_mntrs, monitor and all fif_* counters * cooked_mntrs, monitor and all fif_* counters
* reconfigure hardware * reconfigure hardware
*/ */
if ((*flags & mask) != (sdata->u.mntr_flags & mask)) if ((*flags & mask) != (sdata->u.mntr.flags & mask))
return -EBUSY; return -EBUSY;
ieee80211_adjust_monitor_flags(sdata, -1); ieee80211_adjust_monitor_flags(sdata, -1);
sdata->u.mntr_flags = *flags; sdata->u.mntr.flags = *flags;
ieee80211_adjust_monitor_flags(sdata, 1); ieee80211_adjust_monitor_flags(sdata, 1);
ieee80211_configure_filter(local); ieee80211_configure_filter(local);
...@@ -103,7 +103,7 @@ static int ieee80211_change_iface(struct wiphy *wiphy, ...@@ -103,7 +103,7 @@ static int ieee80211_change_iface(struct wiphy *wiphy,
* and ieee80211_do_open take care of "everything" * and ieee80211_do_open take care of "everything"
* mentioned in the comment above. * mentioned in the comment above.
*/ */
sdata->u.mntr_flags = *flags; sdata->u.mntr.flags = *flags;
} }
} }
......
...@@ -62,7 +62,7 @@ int drv_add_interface(struct ieee80211_local *local, ...@@ -62,7 +62,7 @@ int drv_add_interface(struct ieee80211_local *local,
if (WARN_ON(sdata->vif.type == NL80211_IFTYPE_AP_VLAN || if (WARN_ON(sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
(sdata->vif.type == NL80211_IFTYPE_MONITOR && (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) && !ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF) &&
!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE)))) !(sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE))))
return -EINVAL; return -EINVAL;
trace_drv_add_interface(local, sdata); trace_drv_add_interface(local, sdata);
......
...@@ -824,6 +824,10 @@ struct txq_info { ...@@ -824,6 +824,10 @@ struct txq_info {
struct ieee80211_txq txq; struct ieee80211_txq txq;
}; };
struct ieee80211_if_mntr {
u32 flags;
};
struct ieee80211_sub_if_data { struct ieee80211_sub_if_data {
struct list_head list; struct list_head list;
...@@ -922,7 +926,7 @@ struct ieee80211_sub_if_data { ...@@ -922,7 +926,7 @@ struct ieee80211_sub_if_data {
struct ieee80211_if_ibss ibss; struct ieee80211_if_ibss ibss;
struct ieee80211_if_mesh mesh; struct ieee80211_if_mesh mesh;
struct ieee80211_if_ocb ocb; struct ieee80211_if_ocb ocb;
u32 mntr_flags; struct ieee80211_if_mntr mntr;
} u; } u;
#ifdef CONFIG_MAC80211_DEBUGFS #ifdef CONFIG_MAC80211_DEBUGFS
......
...@@ -188,7 +188,7 @@ static int ieee80211_verify_mac(struct ieee80211_sub_if_data *sdata, u8 *addr, ...@@ -188,7 +188,7 @@ static int ieee80211_verify_mac(struct ieee80211_sub_if_data *sdata, u8 *addr,
continue; continue;
if (iter->vif.type == NL80211_IFTYPE_MONITOR && if (iter->vif.type == NL80211_IFTYPE_MONITOR &&
!(iter->u.mntr_flags & MONITOR_FLAG_ACTIVE)) !(iter->u.mntr.flags & MONITOR_FLAG_ACTIVE))
continue; continue;
m = iter->vif.addr; m = iter->vif.addr;
...@@ -217,7 +217,7 @@ static int ieee80211_change_mac(struct net_device *dev, void *addr) ...@@ -217,7 +217,7 @@ static int ieee80211_change_mac(struct net_device *dev, void *addr)
return -EBUSY; return -EBUSY;
if (sdata->vif.type == NL80211_IFTYPE_MONITOR && if (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE)) !(sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE))
check_dup = false; check_dup = false;
ret = ieee80211_verify_mac(sdata, sa->sa_data, check_dup); ret = ieee80211_verify_mac(sdata, sa->sa_data, check_dup);
...@@ -357,7 +357,7 @@ void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata, ...@@ -357,7 +357,7 @@ void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata,
const int offset) const int offset)
{ {
struct ieee80211_local *local = sdata->local; struct ieee80211_local *local = sdata->local;
u32 flags = sdata->u.mntr_flags; u32 flags = sdata->u.mntr.flags;
#define ADJUST(_f, _s) do { \ #define ADJUST(_f, _s) do { \
if (flags & MONITOR_FLAG_##_f) \ if (flags & MONITOR_FLAG_##_f) \
...@@ -589,12 +589,12 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) ...@@ -589,12 +589,12 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
} }
break; break;
case NL80211_IFTYPE_MONITOR: case NL80211_IFTYPE_MONITOR:
if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) { if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES) {
local->cooked_mntrs++; local->cooked_mntrs++;
break; break;
} }
if (sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE) { if (sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE) {
res = drv_add_interface(local, sdata); res = drv_add_interface(local, sdata);
if (res) if (res)
goto err_stop; goto err_stop;
...@@ -926,7 +926,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, ...@@ -926,7 +926,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
/* no need to tell driver */ /* no need to tell driver */
break; break;
case NL80211_IFTYPE_MONITOR: case NL80211_IFTYPE_MONITOR:
if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) { if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES) {
local->cooked_mntrs--; local->cooked_mntrs--;
break; break;
} }
...@@ -1012,7 +1012,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, ...@@ -1012,7 +1012,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
ieee80211_recalc_idle(local); ieee80211_recalc_idle(local);
mutex_unlock(&local->mtx); mutex_unlock(&local->mtx);
if (!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE)) if (!(sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE))
break; break;
/* fall through */ /* fall through */
...@@ -1444,7 +1444,7 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, ...@@ -1444,7 +1444,7 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
case NL80211_IFTYPE_MONITOR: case NL80211_IFTYPE_MONITOR:
sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP; sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP;
sdata->dev->netdev_ops = &ieee80211_monitorif_ops; sdata->dev->netdev_ops = &ieee80211_monitorif_ops;
sdata->u.mntr_flags = MONITOR_FLAG_CONTROL | sdata->u.mntr.flags = MONITOR_FLAG_CONTROL |
MONITOR_FLAG_OTHER_BSS; MONITOR_FLAG_OTHER_BSS;
break; break;
case NL80211_IFTYPE_WDS: case NL80211_IFTYPE_WDS:
......
...@@ -567,7 +567,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb, ...@@ -567,7 +567,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
if (sdata->vif.type != NL80211_IFTYPE_MONITOR) if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
continue; continue;
if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES)
continue; continue;
if (!ieee80211_sdata_running(sdata)) if (!ieee80211_sdata_running(sdata))
...@@ -3147,7 +3147,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx, ...@@ -3147,7 +3147,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
continue; continue;
if (sdata->vif.type != NL80211_IFTYPE_MONITOR || if (sdata->vif.type != NL80211_IFTYPE_MONITOR ||
!(sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES)) !(sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES))
continue; continue;
if (prev_dev) { if (prev_dev) {
......
...@@ -709,7 +709,7 @@ void ieee80211_tx_monitor(struct ieee80211_local *local, struct sk_buff *skb, ...@@ -709,7 +709,7 @@ void ieee80211_tx_monitor(struct ieee80211_local *local, struct sk_buff *skb,
if (!ieee80211_sdata_running(sdata)) if (!ieee80211_sdata_running(sdata))
continue; continue;
if ((sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) && if ((sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES) &&
!send_to_cooked) !send_to_cooked)
continue; continue;
......
...@@ -1643,7 +1643,7 @@ static bool __ieee80211_tx(struct ieee80211_local *local, ...@@ -1643,7 +1643,7 @@ static bool __ieee80211_tx(struct ieee80211_local *local,
switch (sdata->vif.type) { switch (sdata->vif.type) {
case NL80211_IFTYPE_MONITOR: case NL80211_IFTYPE_MONITOR:
if (sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE) { if (sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE) {
vif = &sdata->vif; vif = &sdata->vif;
break; break;
} }
......
...@@ -598,7 +598,7 @@ static void __iterate_interfaces(struct ieee80211_local *local, ...@@ -598,7 +598,7 @@ static void __iterate_interfaces(struct ieee80211_local *local,
list_for_each_entry_rcu(sdata, &local->interfaces, list) { list_for_each_entry_rcu(sdata, &local->interfaces, list) {
switch (sdata->vif.type) { switch (sdata->vif.type) {
case NL80211_IFTYPE_MONITOR: case NL80211_IFTYPE_MONITOR:
if (!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE)) if (!(sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE))
continue; continue;
break; break;
case NL80211_IFTYPE_AP_VLAN: case NL80211_IFTYPE_AP_VLAN:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment