Thread (4 messages) 4 messages, 2 authors, 2013-07-31

Re: sendmsg() and vlan tags

From: Ani Sinha <hidden>
Date: 2013-07-31 21:01:56

On Tue, Jul 30, 2013 at 5:56 PM, Eric Dumazet [off-list ref] wrote:
On Tue, 2013-07-30 at 17:29 -0700, Ani Sinha wrote:
quoted
hello folks.

Can anyone please shed lights on this?

thanks,
ani


On Fri, Jul 26, 2013 at 2:30 PM, Ani Sinha [off-list ref] wrote:
quoted
Hi folks,

We know that (since Linux 3.0) on raw sockets, the recvmsg() api
returns the vlan tag information of the packet in the packet aux data.
I looked at the kernel code and it seems on the TX side, in sendmsg(),
we do not accept the vlan tag data from userland for a raw packet. So
if the userland sends a raw packet using sendmsg() with vlan tag
information in aux data, it will be discarded.

What is the vlan tag information value in aux data ?
It populates tp_vlan_tci field in the aux data (tpacket_auxdata
structure). Specifically, it gets the packet vlan tag ID and vlan
priority fields (PCP) from the skb.

In net/packet/af_packet.c :


a3bcc23e        (Ben Greear     2011-06-01 06:49:10 +0000       2822)
         if (vlan_tx_tag_present(skb)) {
a3bcc23e        (Ben Greear     2011-06-01 06:49:10 +0000       2823)
                 aux.tp_vlan_tci = vlan_tx_tag_get(skb);
a3bcc23e        (Ben Greear     2011-06-01 06:49:10 +0000       2824)
                 aux.tp_status |= TP_STATUS_VLAN_VALID;
a3bcc23e        (Ben Greear     2011-06-01 06:49:10 +0000       2825)
         } else {
a3bcc23e        (Ben Greear     2011-06-01 06:49:10 +0000       2826)
                 aux.tp_vlan_tci = 0;
a3bcc23e        (Ben Greear     2011-06-01 06:49:10 +0000       2827)
         }


The question is, on TX, can the user populate these values in the aux
data of a raw packet and do a sendmsg(). Will the kernel retain these
values. It looks like it does not.

-- 
Ani
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help