Take a look at how monitor mode is used by other bits of software, eg I think hostapd in Linux uses a monitor mode interface. If I understand the Linux wifi stack use of monitor mode correctly, it's not designed like the "classic" monitor mode from days gone by (eg madwifi) (And this is what BSD still does..); it's a slave device to a currently configured, non-monitor interface. The normal interface gets the 'normal' traffic; the slave monitor mode interface sees the management traffic so hostapd can do MLME, etc. So you likely need to look at what hostapd does and create/use a monitor mode interface in the same way. Ie, as a slave to a normal interface, rather than a stand-alone interface. Adrian On 29 June 2011 00:12, Nicholas Hockey <nhockey@xxxxxxxxx> wrote: > If this has been discussed before, could you please point me to a > resource? if this solution is not correct, then id like to read why > its not correct, and formulate another solution for the problem. i am > an amateur radio tech and i have to apply this patch every single > build in order to use some custom software i have developed over the > years. > > On Sat, Jun 25, 2011 at 9:38 AM, Johannes Berg > <johannes@xxxxxxxxxxxxxxxx> wrote: >> On Thu, 2011-06-23 at 16:49 -0400, Nicholas Hockey wrote: >>> (sorry if this is not right, its been nearly 10 years since i >>> submitted a kernel patch) >> >> Listing cfg80211 isntead of "chan.c" would have been useful :-) >> >>> Fixes: When monitoring a fixed channel, chan.c does not report what >>> channel it is on. >>> >>> Signed-off-by: Nicholas Hockey <nhockey@xxxxxxxxx> >>> --- >>> diff --git a/net/wireless/chan.c b/net/wireless/chan.c >>> index 17cd0c0..261ee32 100644 >>> --- a/net/wireless/chan.c >>> +++ b/net/wireless/chan.c >>> @@ -82,10 +82,12 @@ int cfg80211_set_freq(struct >>> cfg80211_registered_device *rdev, >>> { >>> struct ieee80211_channel *chan; >>> int result; >>> + struct wireless_dev *mon_dev = NULL; >>> >>> - if (wdev && wdev->iftype == NL80211_IFTYPE_MONITOR) >>> + if (wdev && wdev->iftype == NL80211_IFTYPE_MONITOR) { >>> + mon_dev = wdev; >>> wdev = NULL; >>> - >>> + } >>> if (wdev) { >>> ASSERT_WDEV_LOCK(wdev); >>> >>> @@ -131,5 +133,8 @@ int cfg80211_set_freq(struct >>> cfg80211_registered_device *rdev, >>> if (wdev) >>> wdev->channel = chan; >>> >>> + if (mon_dev) >>> + mon_dev->channel = chan; >>> + >> >> This has been discussed numerous times, this change still isn't right >> because monitors are slaved to others. >> >> johannes >> >> > > > > -- > Nicholas (Tilt) Hockey > -- > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html