Hi,
I'm writing an application to inject traffic over a wireless interface.
This app
is working fine on an x86 machine. However if i compile the same app for
an arm platform, no frame are sent over the wireless interface (ath9k).
I'm guessing that this is because of some alignment issues but i cannot
track
the piece of code that is actually parsing the frame. I've found the
__ieee80211_parse_tx_radiotap in net/mac80211/tx.c function, but it is
not called when i try to inject some traffic, so the frame are dropped
before that.
Any hints?
Thanks
R.
Hi!
Are you sure it is not your injector that is having alignment issues?
AFAIK the radiotap parser explicitly uses endianness-aware function
everywhere.
On Fri, May 7, 2010 at 6:13 PM, Roberto Riggio
<[email protected]> wrote:
> Hi,
>
> I'm writing an application to inject traffic over a wireless interface. This
> app
> is working fine on an x86 machine. However if i compile the same app for
> an arm platform, no frame are sent over the wireless interface (ath9k).
>
> I'm guessing that this is because of some alignment issues but i cannot
> track
> the piece of code that is actually parsing the frame. I've found the
> __ieee80211_parse_tx_radiotap in net/mac80211/tx.c function, but it is
> not called when i try to inject some traffic, so the frame are dropped
> before that.
>
> Any hints?
>
> Thanks
> R.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>
--
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
On 05/09/2010 10:24 PM, G?bor Stefanik wrote:
>> u_int16_t it_len;
>> u_int32_t it_present;
>>
> AFAIK these 2 fields need to be little-endian even on big-endian
> machines. If your system is big-endian, this can cause problems.
>
Thanks, that was indeed the issue. I totally missed this info
in the radiotap website. Everything is working fine now.
R.
2010/5/7 Roberto Riggio <[email protected]>:
> Hi,
>
> well, that is what i wanted to understand. These are the struct
> that I'm using to compose the rediotap header:
>
> struct ieee80211_radiotap_header {
> ? ?u_int8_t ? ?it_version;
> ? ?u_int8_t ? ?it_pad;
> ? ?u_int16_t ? ? ? it_len;
> ? ?u_int32_t ? ? ? it_present;
AFAIK these 2 fields need to be little-endian even on big-endian
machines. If your system is big-endian, this can cause problems.
> } __attribute__((__packed__));
>
> struct click_radiotap_header {
> ? ?struct ieee80211_radiotap_header wt_ihdr;
> ? ?u_int8_t ? ?wt_rate;
> ? ?u_int8_t ? ?wt_txpower;
> ? ?u_int8_t ? ? ? ?wt_rts_retries;
> ? ?u_int8_t ? ? ? ?wt_data_retries;
> };
>
> The flags are set in order to take into account the fields that I
> specify. But i do not know at which point the frame are
> dropped.
>
> R.
>
> On 05/07/2010 06:35 PM, G?bor Stefanik wrote:
>>
>> Hi!
>> Are you sure it is not your injector that is having alignment issues?
>> AFAIK the radiotap parser explicitly uses endianness-aware function
>> everywhere.
>>
>> On Fri, May 7, 2010 at 6:13 PM, Roberto Riggio
>> <[email protected]> ?wrote:
>>
>>>
>>> Hi,
>>>
>>> I'm writing an application to inject traffic over a wireless interface.
>>> This
>>> app
>>> is working fine on an x86 machine. However if i compile the same app for
>>> an arm platform, no frame are sent over the wireless interface (ath9k).
>>>
>>> I'm guessing that this is because of some alignment issues but i cannot
>>> track
>>> the piece of code that is actually parsing the frame. I've found the
>>> __ieee80211_parse_tx_radiotap in net/mac80211/tx.c function, but it is
>>> not called when i try to inject some traffic, so the frame are dropped
>>> before that.
>>>
>>> Any hints?
>>>
>>> Thanks
>>> R.
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-wireless"
>>> in
>>> the body of a message to [email protected]
>>> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>>>
>>>
>>
>>
>>
>
>
--
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
On Wed, 2010-05-12 at 18:42 +0200, Roberto Riggio wrote:
> On 05/09/2010 10:24 PM, Gábor Stefanik wrote:
> >> u_int16_t it_len;
> >> u_int32_t it_present;
> >>
> > AFAIK these 2 fields need to be little-endian even on big-endian
> > machines. If your system is big-endian, this can cause problems.
> >
>
> Thanks, that was indeed the issue. I totally missed this info
> in the radiotap website. Everything is working fine now.
I'd make it more prominent, but ... this is what it says now:
Important Radiotap Characteristics
* Fields are strictly ordered; The developer can specify any
combination of fields, but the data must appear following the
radiotap header in the order they are specified in the
it_present bitmask (or more accurately, in the order the bit
numbers for the it_present bitmask are defined).
* Data is specified in little endian byte-order, all data fields
including the it_version, it_len and it_present fields in the
radiotap header are to be specified in little endian byte-order.
This wiki has adopted the Linux convention of using __le64,
__le32 and __le16 for 64-, 32- and 16-bit little endian
quantities.
johannes
Hi,
well, that is what i wanted to understand. These are the struct
that I'm using to compose the rediotap header:
struct ieee80211_radiotap_header {
u_int8_t it_version;
u_int8_t it_pad;
u_int16_t it_len;
u_int32_t it_present;
} __attribute__((__packed__));
struct click_radiotap_header {
struct ieee80211_radiotap_header wt_ihdr;
u_int8_t wt_rate;
u_int8_t wt_txpower;
u_int8_t wt_rts_retries;
u_int8_t wt_data_retries;
};
The flags are set in order to take into account the fields that I
specify. But i do not know at which point the frame are
dropped.
R.
On 05/07/2010 06:35 PM, G?bor Stefanik wrote:
> Hi!
> Are you sure it is not your injector that is having alignment issues?
> AFAIK the radiotap parser explicitly uses endianness-aware function
> everywhere.
>
> On Fri, May 7, 2010 at 6:13 PM, Roberto Riggio
> <[email protected]> wrote:
>
>> Hi,
>>
>> I'm writing an application to inject traffic over a wireless interface. This
>> app
>> is working fine on an x86 machine. However if i compile the same app for
>> an arm platform, no frame are sent over the wireless interface (ath9k).
>>
>> I'm guessing that this is because of some alignment issues but i cannot
>> track
>> the piece of code that is actually parsing the frame. I've found the
>> __ieee80211_parse_tx_radiotap in net/mac80211/tx.c function, but it is
>> not called when i try to inject some traffic, so the frame are dropped
>> before that.
>>
>> Any hints?
>>
>> Thanks
>> R.
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>>
>
>
>