2014-01-18 09:09:25

by Dani Camps

[permalink] [raw]
Subject: Read VLAN Tag in mac80211

Dear all,

I am having trouble reading a VLAN tag inside mac80211. I believe the tag is in the packet because I can see it in wireshark. This is a simple test code that I am using in tx.c:

#include <linux/if_vlan.h>

...
? ? ? ? unsigned short TCI;
? ? ? ? unsigned short id;
...

// Checking if VLAN tag is present
? ? ? ? if(vlan_tx_tag_present(skb)){
? ? ? ? ? ? ? ? TCI = vlan_tx_tag_get (skb);
? ? ? ? ? ? ? ? id = TCI & VLAN_VID_MASK;
? ? ? ? ? ? ? ? printk ("VLAN detection: ?Detected frame with VLAN ID = %x \n", id);
? ? ? ? }
? ? ? ? else{
? ? ? ? ? ? ? ? printk ("VLAN detection: ?No VLAN Tag detected but skb->vlan_tci is %x \n", skb->vlan_tci);
? ? ? ? }

The previous code always fails to enter the VLAN present case, and goes to the else condition printing a skb->vlan_tci value of zero, whereas I can see in wireshark a frame with a VLAN tag and VLAN ID=1.

Can anyone help me figure out what I am missing here?

Best Regards

Daniel