Linux协议栈对vlan的处理

这篇博客探讨了Linux协议栈如何处理vlan报文。网卡驱动在接收到不带VLAN tag的报文后,通过rtl8169_rx_vlan_tag函数将剥离的vlan信息记录到SKB中,以便协议栈后续处理。最终,报文通过__vlan_hwaccel_rx调用netif_receive_skb进入常规接收流程。
摘要由CSDN通过智能技术生成
(基于linux-2.6.x)

从代码上看,Linux对VLAN的处理方式如下。


1. vlan的处理,主要是依靠网卡本身。
   有的网卡不支持vlan,如老的3com网卡3c501。
   intel的ixgb(PRO/10GbE)和e1000(PRO/1000)网卡是支持vlan的。
   其他的一些网卡驱动,从代码上来看,还未完整支持。
   例如,有个网卡驱动(源码文件:drivers\net\spider_net.c),
   vlan相关代码上的注释上说,/* further enhancement... yet to do */


2. 网卡对vlan的处理
   VLAN tag插入/移除 都是由网卡完成的。
   vlan报文的过滤也是由网卡完成的。
   Linux协议栈通过驱动中的接口,注册vlan相关信息。
   驱动再将这些信息写到芯片中。

   因此,网卡驱动从网卡接收队列中收到的报文,已经不带VLAN tag了。

下面是r8169.c网卡驱动收到报文后,做的部分处理。

由于驱动收到的报文,已经不带vlan tag,因此skb->protocol的值就是普通的以太网类型。

skb->protocol = eth_type_trans(skb, dev);

rtl8169_rx_vlan_tag(desc, skb);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值