1. 程式人生 > >Linux 網路協議棧開發程式碼分析篇之VLAN(三)—— VLAN收發處理

Linux 網路協議棧開發程式碼分析篇之VLAN(三)—— VLAN收發處理

        以一個例子來說明,當主機收到報文,交由vlan協議模組處理後(vlan_rcv),此時需要更換skb->dev所指向的裝置,以使上層協議認為報文是來自於虛擬網絡卡(比如eth1.1),而不知道網絡卡eth1的存在。更換裝置就需要知道skb->dev更換的目標。這由兩個因素決定:skb->devvlan_idskb->dev即報文來自主機的哪個網絡卡,如來自eth1,則skb->dev->name=eth1”;vlan_idvlan號,這在報文中的vlan報文中可以提取出。有了這兩個資訊,從vlan_group_hash出發,首先根據skb->dev->ifindex
查詢vlan_group_hash的相應項(eth1),取出vlan_group;然後,根據vlan_id,在vlan_devices_array中查詢到虛擬網絡卡裝置(eth1.1)