Re: 802.11 monitor mode changes coming

From: Sam Leffler <sam_at_errno.com>
Date: Mon, 25 May 2009 08:49:02 -0700
Paul B. Mahol wrote:
> On 5/25/09, Paul B. Mahol <onemda_at_gmail.com> wrote:
>   
>> On 5/18/09, Sam Leffler <sam_at_errno.com> wrote:
>>     
>>> The patch here:
>>>
>>> http://people.freebsd.org/~sam/monitor-20090518.patch
>>>
>>> has significant changes to monitor mode operation.  Most importantly it
>>> replaces DLT_IEEE802_11 support in net80211 by DLT_IEEE802_11_RADIO and
>>> removes the latter from the underlying device.  The upshot is that you
>>> can no longer do:
>>>
>>> tcpdump -i ath0
>>>
>>> instead you will now need a wlanX ifnet; e.g.
>>>
>>> ifconfig wlan create wlandev ath0 wlanmode monitor channel 6 up
>>> tcpdump -i wlan0 -y IEEE802_11_RADIO
>>>
>>> This addresses the longstanding issue that applications like kismet that
>>> want radiotap data needed to open two ifnets, one to receive data and
>>> one to do channel changes.  My main concern is whether losing
>>> DLT_IEEE802_11 support will affect any apps.  Those that depend on it
>>> should be easy to change; you just request a different DLT and strip the
>>> radiotap header from tap'd frames (or similar).
>>>
>>> In sweeping the drivers to do these changes I've made radiotap support
>>> more consistent and improved some drivers.  Drivers not tested so far:
>>> malo, ipw, wpi, and upgt.  I tested iwi and it appears broken in that no
>>> frames are rx'd but I'm not sure I'll look at it before 8.0.
>>>
>>> I plan to commit these changes by the end of the week.
>>>       
>> It makes ndisulator panic, following stupid patch fix it for me:
>>
>> --- /sys/net80211/ieee80211_radiotap.c  2009-05-25 12:14:29.000000000 +0000
>> +++ ieee80211_radiotap.c        2009-05-25 12:13:59.000000000 +0000
>> _at__at_ -102,6 +102,8 _at__at_
>>         struct ieee80211com *ic = vap->iv_ic;
>>         struct ieee80211_radiotap_header *th = ic->ic_th;
>>
>> +       if (th == NULL)
>> +               return;
>>         KASSERT(th != NULL, ("no radiotap setup"));
>>
>>         /* radiotap DLT for raw 802.11 frames */
>>     
>
> Unfortunately this one makes system panic on detach somewhere in bpf code,
> so correct way to fix this is to use radiotap code only and only if device
> have monitor cap.
>
>   

You haven't provided any information about what you're doing or what  
the crash looks like.  If the radiotap DLT is never setup then I would 
expect detach to never touch it.  The attached patch should hopefully do 
that; you need to verify both tx+rx header state are present as there 
are paths through the code that use each and checking only tx in 
ieee80211_radiotap_vattach is insufficient (right now at least).

    Sam



Index: ieee80211_radiotap.c
===================================================================
--- ieee80211_radiotap.c	(revision 192470)
+++ ieee80211_radiotap.c	(working copy)
_at__at_ -102,12 +102,12 _at__at_
 	struct ieee80211com *ic = vap->iv_ic;
 	struct ieee80211_radiotap_header *th = ic->ic_th;
 
-	KASSERT(th != NULL, ("no radiotap setup"));
-
-	/* radiotap DLT for raw 802.11 frames */
-	bpfattach2(vap->iv_ifp, DLT_IEEE802_11_RADIO,
-	    sizeof(struct ieee80211_frame) + le16toh(th->it_len),
-	    &vap->iv_rawbpf);
+	if (th != NULL && ic->ic_rh != NULL) {
+		/* radiotap DLT for raw 802.11 frames */
+		bpfattach2(vap->iv_ifp, DLT_IEEE802_11_RADIO,
+		    sizeof(struct ieee80211_frame) + le16toh(th->it_len),
+		    &vap->iv_rawbpf);
+	}
 }
 
 void
Received on Mon May 25 2009 - 13:49:03 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:48 UTC