IHi , I found a problem using vlan_hwaccel_rx function to pass skb to the stack. vlan_hwaccel_rx sets skb->dev to the vlan device accordingly to the vlan id. After checking pkt_type netif_rx is called in non polling mode . vlan_skb_recv is called with a wrong skb->dev setting as the receive function is still expecting the real device .... , the problem also exists in 2.4 vlan code ... Frank Kernel 2.6: Index: include/linux/if_vlan.h =================================================================== RCS file: /home/cvs/linux-2.5/include/linux/if_vlan.h,v retrieving revision 1.10 diff -B -u -b -r1.10 if_vlan.h --- include/linux/if_vlan.h 17 Aug 2004 11:50:08 -0000 1.10 +++ include/linux/if_vlan.h 14 Oct 2004 13:43:58 -0000 @@ -184,7 +184,7 @@ skb->pkt_type = PACKET_HOST; break; }; - + skb->dev = skb->real_dev; return (polling ? netif_receive_skb(skb) : netif_rx(skb)); } KERNEL > 2.4.21: Index: include/linux/if_vlan.h =================================================================== RCS file: /home/cvs/linux-2.3/include/linux/if_vlan.h,v retrieving revision 1.6 diff -B -u -b -r1.6 if_vlan.h --- include/linux/if_vlan.h 17 Feb 2003 10:36:43 -0000 1.6 +++ include/linux/if_vlan.h 14 Oct 2004 13:45:39 -0000 @@ -147,6 +147,7 @@ unsigned short vlan_tag, int polling) { struct net_device_stats *stats; + struct net_device *real_dev = skb->dev; skb->dev = grp->vlan_devices[vlan_tag & VLAN_VID_MASK]; if (skb->dev == NULL) { @@ -182,7 +183,7 @@ skb->pkt_type = PACKET_HOST; break; }; - + skb->dev = real_dev; return (polling ? netif_receive_skb(skb) : netif_rx(skb)); }