Subject: VLAN driver question

From: Jim Baxter <[email-masked]>
Date: Mon, 17 Jun 2013 20:12:01 +0100

I have a network card that has a single flag to indicate if a received
packet contains a vlan packet.

Can I use this to accelerate the kernels handling of the packet with
something like the following?

/* Handle received VLAN packets */
if ((ndev->features & NETIF_F_HW_VLAN_CTAG_RX) && ebdp &&
					(ebdp->cbd_esc &
					BD_ENET_RX_VLAN)) {
	/* Push and remove the vlan tag */
	struct vlan_hdr *vlan_header;
	u16 vlan_tag;
	vlan_header = (struct vlan_hdr *) skb->data;
	vlan_tag = ntohs(vlan_header->h_vlan_TCI);
	__vlan_hwaccel_put_tag(skb, vlan_tag);
	skb->len -= VLAN_HLEN;
	skb->data += VLAN_HLEN;
	vlan_set_encap_proto(skb, vlan_header);
}

napi_gro_receive(&fep->napi, skb);

Also I cannot find any documentation stating what the difference is
between NETIF_F_HW_VLAN_CTAG_RX and NETIF_F_HW_VLAN_CTAG_FILTER, can
anyone define it?
The FILTER word on NETIF_F_HW_VLAN_CTAG_FILTER suggests it may be
applicable to received packets.

Thank you for your help and comments.
Jim Baxter