Notes for driver authors looking to support Radiotap under Linux: * Currently we use ARPHRD 803 (defined in ieee80211_radiotap.h) as the linktype. This isn't official yet, but I don't see any reason it won't be. * Fields are little endian, so make sure your multibyte stuff like channels are set properly via cpu_to_leXX * Field lengths are given in the comments in ieee80211_radiotap.h Radiotap headers are asyncronously complex. It's much trickier to parse them in userland than it is to create them in kernel space. In kernel space, we know what fields we are providing and can define a struct mapped to the skb which provides exactly them. Filling in a radiotap header is extremely trivial if the data is already available (such as for an AVS header) A standard header block could look like: struct ipw_rt_hdr { struct ieee80211_radiotap_header rt_hdr; u8 rt_flags; /* radiotap packet flags */ u8 rt_rate; /* rate in 500kb/s */ u16 rt_channel; /* channel in mhz */ u16 rt_chbitmask; /* channel bitfield */ s8 rt_dbmsignal; /* signal in dbM, kluged to signed */ u8 rt_antenna; /* antenna number */ } *ipw_rt; The bitfield in the radiotap header would be set via: /* Big bitfield of all the fields we provide in radiotap */ ipw_rt->rt_hdr.it_present = ((1 << IEEE80211_RADIOTAP_FLAGS) | (1 << IEEE80211_RADIOTAP_RATE) | (1 << IEEE80211_RADIOTAP_CHANNEL) | (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | (1 << IEEE80211_RADIOTAP_ANTENNA)); Mike Kershaw dragorn@kismetwireless.net