linux內(nèi)核分析 - 網(wǎng)絡(luò)[五]:網(wǎng)橋

linux內(nèi)核分析 - 網(wǎng)絡(luò)[五]:網(wǎng)橋

ID:15447766

大?。?57.50 KB

頁(yè)數(shù):8頁(yè)

時(shí)間:2018-08-03

linux內(nèi)核分析 - 網(wǎng)絡(luò)[五]:網(wǎng)橋_第1頁(yè)
linux內(nèi)核分析 - 網(wǎng)絡(luò)[五]:網(wǎng)橋_第2頁(yè)
linux內(nèi)核分析 - 網(wǎng)絡(luò)[五]:網(wǎng)橋_第3頁(yè)
linux內(nèi)核分析 - 網(wǎng)絡(luò)[五]:網(wǎng)橋_第4頁(yè)
linux內(nèi)核分析 - 網(wǎng)絡(luò)[五]:網(wǎng)橋_第5頁(yè)
資源描述:

《linux內(nèi)核分析 - 網(wǎng)絡(luò)[五]:網(wǎng)橋》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、看完了路由表,重新回到netif_receive_skb()函數(shù),在提交給上層協(xié)議處理前,會(huì)執(zhí)行下面一句,這就是網(wǎng)橋的相關(guān)操作,也是這篇要講解的內(nèi)容。viewplaincopytoclipboardprint?1.skb?=?handle_bridge(skb,?&pt_prev,?&ret,?orig_dev);??skb=handle_bridge(skb,&pt_prev,&ret,orig_dev);???????網(wǎng)橋可以簡(jiǎn)單理解為交換機(jī),以下圖為例,一臺(tái)linux機(jī)器可以看作網(wǎng)橋和路由的結(jié)合,網(wǎng)橋?qū)⑽锢砩系膬蓚€(gè)局域網(wǎng)LAN1、LAN2當(dāng)作一個(gè)局域網(wǎng)處理,路由連接了兩個(gè)子網(wǎng)1.0和

2、2.0。從eth0和eth1網(wǎng)卡收到的報(bào)文在Bridge模塊中會(huì)被處理成是由Bridge收到的,因此Bridge也相當(dāng)于一個(gè)虛擬網(wǎng)卡。?STP五種狀態(tài)???????DISABLED???????BLOCKING???????LISTENING???????LEARNING???????FORWARDING創(chuàng)建新的網(wǎng)橋br_add_bridge[netbridgebr_if.c]當(dāng)使用SIOCBRADDBR調(diào)用ioctl時(shí),會(huì)創(chuàng)建新的網(wǎng)橋br_add_bridge。???????首先是創(chuàng)建新的網(wǎng)橋:viewplaincopytoclipboardprint?1.dev?=?new_bri

3、dge_dev(net,?name);??dev=new_bridge_dev(net,name);???????然后設(shè)置dev->dev.type為br_type,而br_type是個(gè)全局變量,只初始化了一個(gè)名字變量viewplaincopytoclipboardprint?1.SET_NETDEV_DEVTYPE(dev,?&br_type);??2.static?struct?device_type?br_type?=?{??3.?.name?=?"bridge",??4.};??SET_NETDEV_DEVTYPE(dev,&br_type);staticstructdevice_

4、typebr_type={.name="bridge",};???????然后注冊(cè)新創(chuàng)建的設(shè)備dev,網(wǎng)橋就相當(dāng)一個(gè)虛擬網(wǎng)卡設(shè)備,注冊(cè)過(guò)的設(shè)備用ifconfig就可查看到:viewplaincopytoclipboardprint?1.ret?=?register_netdevice(dev);??ret=register_netdevice(dev);???????最后在sysfs文件系統(tǒng)中也創(chuàng)建相應(yīng)項(xiàng),便于查看和管理:viewplaincopytoclipboardprint?1.ret?=?br_sysfs_addbr(dev);??ret=br_sysfs_addbr(dev);將

5、端口加入網(wǎng)橋br_add_if()[netbridgebr_if.c]當(dāng)使用SIOCBRADDIF調(diào)用ioctl時(shí),會(huì)向網(wǎng)卡加入新的端口br_add_if。???????創(chuàng)建新的net_bridge_portp,會(huì)從br->port_list中分配一個(gè)未用的port_no,p->br會(huì)指向br,p->state設(shè)為BR_STATE_DISABLED。這里的p實(shí)際代表的就是網(wǎng)卡設(shè)備。viewplaincopytoclipboardprint?1.p?=?new_nbp(br,?dev);??p=new_nbp(br,dev);???????將新創(chuàng)建的p加入CAM表中,CAM表是用來(lái)記錄m

6、ac地址與物理端口的對(duì)應(yīng)關(guān)系;而剛剛創(chuàng)建了p,因此也要加入CAM表中,并且該表項(xiàng)應(yīng)是local的[關(guān)系如下圖],可以看到,CAM表在實(shí)現(xiàn)中作為net_bridge的hash表,以addr作為hash值,鏈入net_bridge_fdb_entry,再由它的dst指向net_bridge_port。viewplaincopytoclipboardprint?1.err?=?br_fdb_insert(br,?p,?dev->dev_addr);???err=br_fdb_insert(br,p,dev->dev_addr);????????設(shè)備的br_port指向p。這里要明白的是,net_

7、bridge可以看作全局量,是網(wǎng)橋,而net_bridge_port則是與網(wǎng)卡相對(duì)應(yīng)的端口,因此每個(gè)設(shè)備dev有個(gè)指針br_port指向該端口。viewplaincopytoclipboardprint?1.rcu_assign_pointer(dev->br_port,?p);??rcu_assign_pointer(dev->br_port,p);???????將新創(chuàng)建的net_bridge_port加入br的鏈表p

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。