Linux VLAN 筆記

Linux VLAN 筆記 

kernel 開啟802.1q功能後,便可以透過簡單指令,設定VLAN. 
brctl delif br0 ath0
brctl delif br0 eth0

vconfig add ath0 555
vconfig add eth0 555
ifconfig ath0.555 up
brctl addbr br555
brctl addif br555 ath0.555
brctl addif br555 eth0.555
ifconfig ath0.555 up
ifconfig eth0.555 up

ifconfig br555 10.0.0.11 up

Wireless AP mode運作正常,抓無線封包有看到帶了VLAN ID 555.
不幸的是,我的Wireless STA,不能成功ping到我的AP,只好下去看程式,這邊有幾個部份要看. 
1. Linux kernel 802.1q 
2.Wireless driver.(我手邊的是Atheros proprietary LSDK driver,所以這部份內容都不會放上來)
 3.hostapd跟wpa_supplicant.  
 Linux的net_dev是用一個list串起來,每個net_dev都有會呼叫ev_queue_xmit ->dev_hard_start_xmit ,去傳送封包至下一步。
 vlan.c::vlan_proto_init()時會invoke,dev_add_pack(&vlan_packet_type);
  •  static struct packet_type vlan_packet_type __read_mostly = {
  •         .type = cpu_to_be16(ETH_P_8021Q),
  •         .func = vlan_skb_recv, /* VLAN receive method */
  • };
vlan_packet_type()宣告了, type是8021q(0x8100)封包接收時是由它來使用vlan_skb_recv()處理。

 所有帶VLAN tag header的封包會經過vlan_dev.c::vlan_skb_recv()處理,去掉VLAN header,再處理接下來的header ex: ARP or IP。
 傳送時vlan_dev_hard_start_xmit()會invoke __vlan_put_tag()去加入VLAN header。
 整個流程是wifi_Dev_RX->vlan_skb_recv()->bridge->中間處理比方說ARP->送出ARP reply->dev_hard_start_xmit()->加入VLAN header後由實體網卡送出。
 參考資料:
 vconfig add ath0 555  will invoke ospriv_vlan_add_vid( ). 
 參考資料: 


留言

這個網誌中的熱門文章

C語言,大數運算,階層筆記

Raspberry Pi (ARMv6)上自幹一個微小作業系統