2014-01-17 16:32:54

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? ? ? ??


2014-01-20 09:55:33

by Cedric VONCKEN

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

The VLAN tag is moved from frame to the field skb->vlan_tci by the
input netdev.

In your case, if vlan_tci is always equal to 0, I think your driver
do not support the VLAN, or you need to enable it.
You can have more information from netdev mailing list.

Cedric Voncken


> -----Message d'origine-----
> De?: [email protected] [mailto:linux-wireless-
> [email protected]] De la part de Dani Camps
> Envoy??: vendredi 17 janvier 2014 17:27
> ??: [email protected]
> Objet?: 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
> --
> 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