Search Linux Wireless

Re: Skb and ieee80211 headers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is my hook: it gets called after I set dev to wlan0. I used a
guide for this and it seems to work for my notebook where I'm able to
find the 802.3 header but still no 802.11.

static int ptype_function(struct sk_buff *skb, struct net_device *dev,
struct packet_type *ptype, struct net_device *dev2);

static void throw_hook(struct net_device *dev){
   ptype.type = htons(ETH_P_ALL);
   ptype.func = &ptype_function;
   ptype.dev = dev;
   dev_add_pack(&ptype);
   printk(KERN_CRIT "Done setting up packet type");
}

All code can be found here:
android: https://github.com/mathieudevos/kernelmodules/blob/master/ethernet_test.c
notebook: https://github.com/mathieudevos/wifi_kernelmodules/blob/master/ethernet_test.c

Kind regards,
Mathieu Devos

On Wed, Jul 31, 2013 at 5:04 PM, Arend van Spriel <arend@xxxxxxxxxxxx> wrote:
> On 07/31/2013 03:45 PM, Mathieu Devos wrote:
>>
>> Alright,
>>
>> Seems like I have fixed some issues while added some others. Since I
>> assume that when my hook gets activated the data pointer should be at
>> the start of the 802.3 header I casted an ethhdr (8023) on top of that
>> and it seems that on my notebook this is handled correctly (I can
>> actually check on my own mac addr and see that these frames are
>> for/from me).
>
>
> How does your hook work? Are you intercepting packets?
>
> Regards,
> Arend
>
>
>> On Wed, Jul 31, 2013 at 2:55 PM, Arend van Spriel <arend@xxxxxxxxxxxx>
>> wrote:
>>>
>>> On 07/31/2013 02:39 PM, Mathieu Devos wrote:
>>>>
>>>>
>>>> Hi,
>>>>
>>>> The wireless chip is a Broadcast BCM4330 chip. After looking around a
>>>> bit I found that this is a fullMAC and links to the driver on
>>>> wireless.kernel: http://wireless.kernel.org/en/users/Drivers/brcm80211
>>>> and also links directly to android itself:
>>>> https://android.googlesource.com/platform/hardware/broadcom/wlan
>>>
>>>
>>>
>>> I suspected. The bcm4330 is indeed a fullmac device, which means the
>>> 802.11
>>> stack is running on the device. The driver on Android is located under:
>>>
>>>
>>> https://android.googlesource.com/kernel/samsung/+/android-samsung-3.0-ics-mr1/drivers/net/wireless/bcmdhd/
>>>
>>> Not sure which android version you have.
>>>
>>> The brcm80211 on wireless.kernel.org is the upstream linux driver.
>>>
>>> Gr. AvS
>>>
>>>
>>>> Still trying to learn a lot in this tightly packed world of protocol
>>>> stacks, wireless and all the other poisons. Seems like I still have a
>>>> long way to go. Thank you already for helping me out with these issues
>>>> and taking the time to explain these things to me.
>>>>
>>>> Kind regards,
>>>> Mathieu Devos
>>>>
>>>> On Wed, Jul 31, 2013 at 1:05 PM, Arend van Spriel <arend@xxxxxxxxxxxx>
>>>> wrote:
>>>>>
>>>>>
>>>>> On 07/31/2013 12:28 PM, Mathieu Devos wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> It's an android smartphone (I 9100 - Samsung galaxy S2) so it does not
>>>>>> have a normal ethernet 802.3 input even. I check before selecting the
>>>>>> device that it's wireless (through ieee80211_ptr) and this properly
>>>>>> returns the wlan0 device which should be on the 80211 standard.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> *sigh* Welcome in the world of protocol stacks, wireless, networking
>>>>> (choose
>>>>> your poison). Let me draw the picture.
>>>>>
>>>>>           o user-space
>>>>>           |
>>>>> ----------------------
>>>>>           | kernel
>>>>>     +-----------+
>>>>>     |    NET    | networking subsystem, ie. TCP/IP stack
>>>>>     +-----------+
>>>>>           | 802.3
>>>>> +----------------+
>>>>> |       | driver |
>>>>> | +------------+ |
>>>>> | |802.11 stack| |
>>>>> | +------------+ |
>>>>> |       | 802.11 |
>>>>> +----------------+
>>>>>           |
>>>>>           o RF
>>>>>
>>>>> The device hooks up to the networking subsystem as an ethernet device
>>>>> and
>>>>> as
>>>>> such it receives 802.3 packets. These are converted to 802.11 packets
>>>>> by
>>>>> the
>>>>> 802.11 stack. Now depending on your device that happens in the device
>>>>> driver
>>>>> or on the device itself. Another option is that this is done by
>>>>> mac80211
>>>>> (kernel provided 802.11 stack), but that is probably not the case, but
>>>>> to
>>>>> be
>>>>> sure I ask again: what wireless device do you have in your galaxy S2?
>>>>>
>>>>> Gr. AvS
>>>>>
>>>>>
>>>>>> My goal is to get the ieee80211_header properly on the skb with this
>>>>>> device, but some of the pointers and original data in the skb seem
>>>>>> totally off. This leaves me clueless as to where to put this
>>>>>> ieee80211_header.
>>>>>> I've tried putting it right on skb->head (wrong I know, but I was
>>>>>> getting desperate), on skb->mac_header (also wrong, no idea why
>>>>>> though), I went back from skb->tail with len and even added ETH_HLEN
>>>>>> to that as well because you can see that before my hook gets
>>>>>> activated: skb_pull_inline(skb, ETH_HLEN);
>>>>>> In the end I'm left with a header that is forced onto data but with a
>>>>>> wrong origin pointer thus basically leaving me with all wrong data in
>>>>>> the header.
>>>>>>
>>>>>> Kind regards,
>>>>>> Mathieu Devos
>>>>>>
>>>>>> On Wed, Jul 31, 2013 at 12:08 PM, Arend van Spriel
>>>>>> <arend@xxxxxxxxxxxx>
>>>>>> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 07/31/2013 11:39 AM, Mathieu Devos wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I hope this is the right place to ask for a little bit of help as
>>>>>>>> I'm
>>>>>>>> currently beyond stuck on a challenge I'm trying to accomplish. I'm
>>>>>>>> trying to write a "simple" LKM that properly uses a ieee80211 header
>>>>>>>> to print information about the mac addresses (addr1->addr4) and
>>>>>>>> later
>>>>>>>> down the road try to send my own data.
>>>>>>>>
>>>>>>>> I only need to get L2 working, no need for TCP/IP, just a proper
>>>>>>>> ieee80211 based on input from skb would be huge for me.
>>>>>>>>
>>>>>>>> So my issue: when placing the ieee80211 on my mac_header after I
>>>>>>>> hook
>>>>>>>> my skb from my wireless device (wlan0 on android - I9100)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Not sure what you goal is, but what wireless device is that? You may
>>>>>>> just
>>>>>>> get 802.3 packets from the device.
>>>>>>>
>>>>>>> Gr. AvS
>>>>>>>
>>>>>>>
>>>>>>>> I get a huge
>>>>>>>> amount of zero's and random(?) numbers when trying to print the
>>>>>>>> addresses. This leads me to the first conclusion that mac_header is
>>>>>>>> placed wrong when using 80211. After that I saw a lot of people just
>>>>>>>> using the skb->data pointer. Now this gives even weirder issues for
>>>>>>>> me
>>>>>>>> and actually totally crashes my kernel.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>
--
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




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux