機頂盒 AP 根據VLAN進行資料分流 技術實現

2021-07-31 11:31:49 字數 3644 閱讀 7994

一、 linux對vlan資料的處理

(1)vlan初始化

static struct packet_type vlan_packet_type __read_mostly = ;

vlan_proto_init呼叫dev_add_pack(&vlan_packet_type)函式進行vlan的註冊,把eth_p_8021q 處理函式掛在ptype_base下,即資料接收的vlan的入口函式為vlan_skb_recv

(2)vlan資料處理

核心中的vlan模組就是工作在協議棧裡,通過註冊dev_add_pack註冊了8021q的協議型別,netif_receive_skb->__netif_receive_skb遍歷所有的協議型別時發現了它,於是進入了vlan的接收函式vlan_skb_recv(vlan_dev.c),這個函式裡剝離vlan層,重置乙太網層的proto,重新呼叫netif_rx進入真正的協議棧處理流程。

對於linux,無論什麼資料報通過網絡卡驅動後都會進入

__netif_receive_skb函式。該函式中對vlan的處理如下:

static int__netif_receive_skb(struct sk_buff *skb)

} … …

// bridge邏輯

/* handle special case of bridge or macvlan */

rx_handler = rcu_dereference(skb->dev->rx_handler);

if (rx_handler)

skb = rx_handler(skb);

if (!skb)

goto out; }

… …

//遍歷ptype_base

type = skb->protocol;  //如果是vlan,則這裡type被置為vlan協議,即0x8100(經過vlan處理後,protocol會被重置)

list_for_each_entry_rcu(ptype,

&ptype_base[ntohs(type) & ptype_hash_mask],list)

pt_prev = ptype; }

} … … }

二、 vlan_skb_recv函式解析

#define   mtc_stp_packet_vlan_id           4094

#define   mtc_wan_vlan_id                  2

#define   mtc_lan_vlan_id                  1

#define   mtc_wan_ifname                   "eth2.2"

#define   mtc_lan_ifname                   "eth2.1"

int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev,

struct packet_type *ptype, struct net_device*orig_dev)

#endif

/* if the vlan device isdefined, we use it.

* if not, and the vid is 0, it is a 802.1ppacket (not

* really a vlan), so we will just netif_rx itlater to the

* original inte***ce, but with the skb->protoset to the

*/ if (!vlan_dev)

else

} else

//以下為對從wan進來的包進行處理:從wan進來的包copy乙份同步發到lan端,傳送之前把把vlan_id設定為4096

#ifdef product_mt7628stpap_mtc

/*

if pkg from vlanmtc_wan_vlan_id, then forward one copy to mtc_lan_ifname(vlan_id ismtc_stp_packet_vlan_id)

add 4096vlan_tag-->vlan 4096-->send pkg from mtc_lan_ifname inte***ce>

must be called beforeskb_pull_rcsum() ,vlan_set_encap_proto() and vlan_check_reorder_header()

by wwk,20170426

*/

… … //

實現細節

#endif

//使用以下三個函式用來剝離vlan層和重置乙太網層的proto: skb_pull_rcsum、vlan_set_encap_proto、vlan_check_reorder_header

skb_pull_rcsum(skb,vlan_hlen);

vlan_set_encap_proto(skb,vhdr);

if (vlan_dev) }

#ifdef product_mt7628stpap_mtc

if(mtc_lan_vlan_id ==vlan_id_back)

//if pkg from vlanmtc_stp_packet_vlan_id, then forward to mtc_wan_ifname

if(mtc_stp_packet_vlan_id == vlan_id_back)

#endif

//netif_rx函式會讓資料報重新進入__netif_receive_skb函式處理

netif_rx(skb);

rcu_read_unlock();

return net_rx_success;

err_unlock:

rcu_read_unlock();

err_free:

kfree_skb(skb);

return net_rx_drop; }

資料報進來後先修改為對應的vlan_id,然後直接通過dev_queue_xmit函式把資料報發出去,僅對對應的vlan包進行**,其他資料報按照路由器的處理機制處理。

通過以上處理,實現vlan資料的分流。

關於機頂盒

數碼電視的特點和優勢 一 與模擬電視相比,數碼電視在技術上有以下特點和優勢 1 清晰度高 音訊效果好 抗干擾能力強。數字電視訊號的傳輸不像模擬訊號受在傳輸過程中雜訊積累的影響,且不受地理因素的限制,幾乎可以無限擴大覆蓋面,在接收端收看到的電檢視像及收聽到的聲音質量非常接近演播室水平。此外,數碼電視的...

互動機頂盒與普通機頂盒比較

隨著網際網路的發展,硬體晶元技術的突破,機頂盒也從原來的單純滿足看電視的普通機頂盒,發展到現在功能豐富的互動機頂盒。他們兩者有什麼區別呢?首先,普通的機頂盒應用的場景基本都是比較早以前的閉路電視時代,那個時候人們只能單純通過切換頻道來接收電視節目資訊,而且錯過了就無法再回看。如果從資訊傳遞方式的角度...

機頂盒高階安全

數字機頂盒晶元內建安全技術認證 硬體可信任架構 通過各種軟硬體來防止機頂盒內容被盜的方法很多,nagra採用了軟硬體相結合的方式。正如資訊保安專家bruce schneier所說,世界上沒有任何複製保護軟體是未被破解的。因此,裝置中包含硬體可信任架構顯得尤為重要。它可以保護並控制那些從未在安全硬體元...