SDN試驗報告精編_第1頁
SDN試驗報告精編_第2頁
SDN試驗報告精編_第3頁
SDN試驗報告精編_第4頁
SDN試驗報告精編_第5頁
免費預(yù)覽已結(jié)束,剩余13頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、信息網(wǎng)絡(luò)基礎(chǔ)研討專題實驗(SDN網(wǎng)絡(luò)部分)姓名:單赟吉學(xué)號:班級:通信 1109 班 指導(dǎo)教師:趙永祥 實驗時間:第十周周二(一 )openflow 交換機(jī)的手動配置1 、 實驗?zāi)康?. 數(shù)據(jù) openflow 交換機(jī)的手動配置環(huán)境2. 配置 openflow 交換機(jī)初始信息3. 手動配置轉(zhuǎn)發(fā)表,實現(xiàn)主機(jī)之間通信2 、 實驗原理關(guān)于 openflow 交換機(jī)的實驗系列由五個實驗構(gòu)成,這前四個實驗須按順序進(jìn)行,因 為后面的實驗需要應(yīng)用前面實驗搭建的軟件和硬件環(huán)境。第一個實驗“ openflow 交換機(jī)的 手動配置”熟悉交換機(jī)的手工配置環(huán)境,實現(xiàn)轉(zhuǎn)發(fā)表的手工配置,配置交換機(jī)控制端口的 地址;第二個

2、實驗搭建控制器的軟件環(huán)境,實現(xiàn)控制器和交換機(jī)的互聯(lián),運行控制器應(yīng)用 程序,把 openflow 交換機(jī)的功能通過程序?qū)崿F(xiàn)為一個二層交換機(jī); 第三個實驗編寫一個簡 單的控制器軟件,實現(xiàn)一個簡單的廣播交換機(jī)功能;第四個實驗編寫一個控制器軟件,實 現(xiàn)流表的下發(fā)和刪除,通過這個實驗測試控制器提供的編程接口。第五個實驗研究在仿真軟件中測試控制器程序和功能,同學(xué)們可以在自己計算機(jī)上 調(diào)試好程序以后,再到真實的物理機(jī)器上實驗,以提高實驗設(shè)備的使用效率。分組交換機(jī)按照轉(zhuǎn)發(fā)表把某一個輸入端口的分組搬移到另外一個輸出端口上輸出。 轉(zhuǎn)發(fā)表實現(xiàn)分組目的地址和交換機(jī)輸出端口之間的映射。轉(zhuǎn)發(fā)表決定了交換機(jī)的行為。傳統(tǒng)的交

3、換機(jī)根據(jù)標(biāo)準(zhǔn)協(xié)議形成轉(zhuǎn)發(fā)表,這部分代碼封裝在交換機(jī)的操作系統(tǒng)中, 交換機(jī)的運營者不能對轉(zhuǎn)發(fā)表的形成繼續(xù)修改,這樣做的好處是保證了交換機(jī)的速率和可 靠性。但是,運營者不能根據(jù)網(wǎng)絡(luò)的具體特點和業(yè)務(wù)特性對交換機(jī)的轉(zhuǎn)發(fā)行為進(jìn)行專門的 定制和設(shè)計,影響新業(yè)務(wù)的提供和增加網(wǎng)絡(luò)運營成本。Ope nFlow交換機(jī)把控制層面和轉(zhuǎn)發(fā)層面分離,交換機(jī)的轉(zhuǎn)發(fā)表可以由運營者手工本 地配置,或者通過控制器遠(yuǎn)程修改和控制。在實際使用環(huán)境中,通過控制器遠(yuǎn)程修改和控 制交換機(jī)流表。一個控制器就可以控制全網(wǎng)的交換機(jī),控制器可以從全網(wǎng)的角度對每一個 交換機(jī)的流表進(jìn)行配置,從而實現(xiàn)全局優(yōu)化和快速提供新的業(yè)務(wù),極大降低了人工運營成 本

4、。國家標(biāo)準(zhǔn)化組織已經(jīng)制定了交換機(jī)和控制器之間的消息格式和交互過程,基于Ope nF low交換機(jī)的網(wǎng)絡(luò)又稱為軟件定義網(wǎng)絡(luò),在大的數(shù)據(jù)中心已經(jīng)實用。在OpenFlow網(wǎng)絡(luò)中,所有的轉(zhuǎn)發(fā)決策從各個交換機(jī)轉(zhuǎn)移到控制器上,由控制器集中 管理數(shù)據(jù)包的轉(zhuǎn)發(fā)策略,通過 Ope nFlow協(xié)議負(fù)責(zé)與所有網(wǎng)絡(luò)交換機(jī)進(jìn)行交互,配置數(shù)據(jù) 轉(zhuǎn)發(fā)路徑。Ope nF low網(wǎng)絡(luò)示意圖如上圖所示,所有的數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸路徑由控制器(Co ntroller )統(tǒng)一控制決定,Ope nFlow交換機(jī)只負(fù)責(zé)轉(zhuǎn)發(fā)數(shù)據(jù)包??刂破魍ㄟ^對交換機(jī)下發(fā)流(flow)來實現(xiàn)上述控制流程。一個 Ope nFlow交換機(jī)通 常包含多個流表,每

5、個流表含有多條流表條目(flowentries),每條條目由匹配域(matchfields),計數(shù)器(counters)和指令(instructions)組成。匹配域定義待匹配的數(shù) 據(jù)包特征,如數(shù)據(jù)包到達(dá)的交換機(jī)入端口、源以太網(wǎng)地址、目的以太網(wǎng)地址、源IP地址、目標(biāo)IP地址、VLAN標(biāo)簽。計數(shù)器用于對匹配流表的流量統(tǒng)計, 更新進(jìn)入OpenFlow與流匹 配的數(shù)據(jù)包個數(shù)以及總字節(jié)數(shù)。 指令用于修改匹配報文的動作集合, 決定報文的轉(zhuǎn)發(fā)操作, 通常的操作有輸出數(shù)據(jù)包到某端口、修改數(shù)據(jù)包首部信息等??刂破骱蚈pe nF low交換機(jī)之間通過Ope nFlow消息實現(xiàn)信息交互。當(dāng)一個數(shù)據(jù)包到達(dá) 交換機(jī)時

6、,如果與流表中的某一條流相匹配,便順序執(zhí)行該條流指令的操作。如果沒有匹 配的流,則把整個數(shù)據(jù)包緩存在交換機(jī)中,并為該數(shù)據(jù)包配一個BufferlD,隨數(shù)據(jù)包一起作為Packet In消息發(fā)往控制器,控制器根據(jù)數(shù)據(jù)包的首部定義一條新的流決定該類數(shù)據(jù)包 的處理策略, 下發(fā) FlowMod 信息給交換機(jī), FlowMod 消息用于在交換機(jī)中添加或刪除流表 條目,同時控制器以PacketOut消息作為載體將數(shù)據(jù)包返回交換機(jī),PacketOut消息用于控 制報文從指定端口發(fā)出,交換機(jī)依據(jù)隨包的 BufferID取出數(shù)據(jù)包,再根據(jù)新定義的流進(jìn)行 交換處理。本實驗實現(xiàn)手動配置交換機(jī)轉(zhuǎn)發(fā)表。為后續(xù)的實驗準(zhǔn)備實驗

7、環(huán)境和交換機(jī)基本配置。3、實驗器材1. 盛科V330openflow交換機(jī)2. 臺式電腦(一臺)3. 普通交換機(jī)一臺4、 實驗內(nèi)容1. 連接交換機(jī)的控制端口和計算機(jī)以太網(wǎng)卡。交換機(jī)的控制端口位于交換機(jī)右上角,交換機(jī)的控制端口的地址已經(jīng)初始化為,一般不允許學(xué)生再進(jìn)行修改。配置計算機(jī)的以太網(wǎng)卡的地址也要設(shè)為網(wǎng)段,如 230。把交換機(jī)的控制端口和計算機(jī)都連接到一臺普通交換機(jī)如下圖所示內(nèi)網(wǎng)交換機(jī)2. 登陸交換機(jī)并熟悉交換局配置環(huán)境控制端口ijserijer : Suse:use1 ruser : $ u各呂廠廣:$ user©user:t Trying 19 2. 1<5S數(shù)據(jù)端口23

8、3r 1-gt t a f y u e 0 e n pb I r odLooeet bcccedddreSpeci-f y boot paramet e rChange dl'Lrecto ryCTea r s to ti_s t iL<zsEnter confi_guratl-on modeSystem ciomnand ciopyDbuggi.ngi functionsDelete f±TesLi_s 七 diLFiecztory czont en t sExit from the EXECDescriLptxoni oT the 十口七 eract i. ve h

9、eTp system在命令的名字后面輸入?可以獲得這個命令的功能和使用說明。例如con gfigure,就會顯示這個命令是配置終端所用3. 常用交換機(jī)命令Show命令顯示交換機(jī)的工作狀態(tài)。輸入以下命令:showi nterfacestatus;showope nflowco ntrollerstatus;showope nflowovsdb。觀察結(jié) 果,并根據(jù)幫助對這些命令進(jìn)行解釋配置控制器地址1. 輸入 configureterminal, 進(jìn)入配置狀態(tài)。2. 輸入 :openflowsetcontrollertcp6633 。在交換機(jī)上面設(shè)置控制器的地址。這 里假設(shè)控制器的地址為,默認(rèn)端口

10、 6633。后面的實驗中,需要按照控制器 的實際地址在交換機(jī)上設(shè)置。3.輸入end,推出配置狀態(tài)4. 手動配置流表。Ovs-ofctl指令實現(xiàn)openflow交換機(jī)上流表的添加、刪除和查詢等動 作。Ovs-ofct指令集合的詳細(xì)介紹見附錄把測試計算機(jī)連接到openflow交換機(jī)的端口 2,把openflow交換機(jī)的端口 8連接 到內(nèi)網(wǎng)交換機(jī)。ope nflow交換機(jī)的端口號在交換機(jī)的面板上有數(shù)字標(biāo)明。內(nèi)網(wǎng) 交換機(jī)地址設(shè)為。tel net登陸交換機(jī),執(zhí)行如下命令ovs-ofctladd-flowovs-switch"in_port=2,actions=output:8"這個命

11、令把openflow 交換機(jī)第 2 個端口接收到的分組轉(zhuǎn)發(fā)到第 8 個端口。ovs-ofctladd-flowovs-switch"in_port=8,actions=output:2"這個命令把openflow 交換機(jī)第 8 個端口接收到的分組轉(zhuǎn)發(fā)到第 2 個端口。5. 驗證流表配置輸入如下命令觀察配置的流表:ovs-ofctldump-flowsbr0在測試計算機(jī)終端上面運行如下命令:ping,觀察是否連通。上述命令的實際執(zhí)行過程如下圖所示其中,第一個“ ovs-ofctldump-flowsbr0”是在配置了流表,但是沒有連接測試計算機(jī)時候得到的結(jié)果。 第二個顯示流表

12、的命令是在連接了測試計算機(jī)以后觀察到結(jié)果。 可見流表確實實現(xiàn)了端口 2 和端口 8 之間的分組交換。測試計算機(jī)上也能觀察到 ping 確實有反映,如果把測試計算機(jī)連接到其它物理端口,這ping 沒有響應(yīng)。( 二 ) Openflow 交換機(jī)和控制軟件的互聯(lián)及控制軟件加載1 、 實驗?zāi)康腃on troller控制器的軟件安裝 控制器和Openflow交換機(jī)的互聯(lián)加載控制軟件到Openflow交換機(jī)驗證交換機(jī)預(yù)期功能2、實驗原理把RY控制器連接到Openflow交換機(jī),把一個控制器軟件加載到 Openflow交換機(jī),這個 控制器軟件的原理是:交換機(jī)接收到一個分組后,把這個分組報告給控制器終端,控制

13、器 終端顯示;交換機(jī)把分組的源地址和接收到分組的物理端口關(guān)聯(lián)起來;交換機(jī)查找目的地 址對應(yīng)的端口號,如果找到,把該分組轉(zhuǎn)發(fā)到目的端口,否則在交換機(jī)的所有端口廣播該 分組。控制器軟件加載到交換機(jī)以后,將實現(xiàn)一個普通交換機(jī)的功能,通過一個普通計算機(jī)終端 驗證這個功能。3、實驗器材1 盛科V330ope nflow 交換機(jī)一臺2普通交換機(jī)一臺臺3普通計算機(jī)2臺4、實驗內(nèi)容和步驟1) 連接網(wǎng)絡(luò)拓?fù)渚W(wǎng)絡(luò)連接如下圖所示。Openflow交換機(jī)的控制端口的地址設(shè)為,Openflow交換機(jī)控制端口和一個數(shù)據(jù)端口連接到內(nèi)網(wǎng)交換機(jī)。RYU控制器連接到內(nèi)網(wǎng)交換機(jī)。計算機(jī)終端連接到openflow 交換機(jī)。通過控制器

14、實現(xiàn)對openflow 交換機(jī)的控制,使openflow 交換機(jī)實現(xiàn)一個普通交換機(jī)功2) 安裝控制器軟件Ryu 控制器由一個普通計算機(jī)實現(xiàn)。由于目前多數(shù)計算機(jī)采用windows 操作系統(tǒng),而 Ryu控制器是有一個 linux 鏡像實現(xiàn),因此采用虛擬機(jī)的方法實現(xiàn) linux 操作系統(tǒng)。安裝Vmware軟件導(dǎo)入Ryu操作系統(tǒng)鏡像配置虛擬機(jī)的網(wǎng)絡(luò)為橋接模式,實現(xiàn)虛擬機(jī)直接訪問物理網(wǎng)絡(luò) 驗證控制器與交換機(jī)控制端口的互通性: ping3) telnet 登陸交換機(jī),配置模式控制器地址在命令行輸入 telnet ,登陸交換機(jī)控制臺獲取 con figure幫助:con figure進(jìn)入配置終端狀態(tài): co

15、nfigureterminal在交換機(jī)控制臺輸入: openflowsetcontrollertcp6633退出配置狀態(tài):輸入 end 命令4) 驗證已經(jīng)在交換機(jī)上面配置好控制器地址5) 加載控制器應(yīng)用軟件,通過控制器實現(xiàn)對交換機(jī)的控制。Simple_switch.py控制器軟件采用反向路徑學(xué)習(xí)的方法實現(xiàn)mac地址的學(xué)習(xí),在控制器上面實現(xiàn)簡單交換機(jī)的功能。該軟件在 ryu/app 路徑下面把交換機(jī)的一個數(shù)據(jù)端口接入到一個內(nèi)網(wǎng)或者校園網(wǎng)(下面的實驗假設(shè)交換機(jī)數(shù)據(jù)端 口連接到的交換機(jī)在控制器的命令行終端執(zhí)行如下命令: ryu-managersimple_switch.py 控制臺出現(xiàn)如下結(jié)果:交換

16、機(jī)把接收到的分組發(fā)送到控制器,在控制臺顯示出相關(guān)信息:第一個數(shù)字是交換機(jī)編號,第二個數(shù)字是源mac地址,第三個數(shù)字是目的mac地址,第四個地址 是交換機(jī)接收該分組的物理端口。改變內(nèi)網(wǎng)連接到交換機(jī)的物理端口,觀察最后一個數(shù)據(jù)域26變?yōu)槠渌麛?shù)字檢查流表的學(xué)習(xí)情況 從控制器遠(yuǎn)程登陸到交換機(jī):tel net執(zhí)行命令:ovs-ofctldump-flowsbrO6) 驗證交換機(jī)功能使用一臺普通計算機(jī)發(fā)送命令:ping,證明該交換機(jī)完成轉(zhuǎn)發(fā)功能最后另一臺交換機(jī)確實ping通了。(三)Openflow交換機(jī)控制軟件的編寫1、實驗?zāi)康木帉懸粋€廣播型二層交換機(jī)加載控制軟件到Openflow交換機(jī)并驗證預(yù)期功能2

17、、實驗原理本實驗由兩個不同的任務(wù)構(gòu)成:編制程序,把ope nflow交換機(jī)接收到的分組廣播到所有的端口。3、實驗器材盛科V330ope nflow 交換機(jī)一臺普通交換機(jī)一臺臺安裝有win shark的普通計算機(jī)3臺,一臺作為控制器,兩臺作為測試終端。4、實驗內(nèi)容和步驟1) 連接網(wǎng)絡(luò)拓?fù)渚W(wǎng)絡(luò)連接如下圖所示。Openflow交換機(jī)的控制端口的地址設(shè)為,Openflow交換機(jī)控制端口和一個數(shù)據(jù)端口連接到內(nèi)網(wǎng)交換機(jī)。RYU控制器連接到內(nèi)網(wǎng)交換機(jī)。兩個安裝有winshark 的計算機(jī)終端連接到openflow交換機(jī)。驗證wi nshark 能夠?qū)崿F(xiàn)正確的分組偵聽。2 ) 編寫廣播程序使用文本編輯器,輸入

18、如下程序,把這個文件保存為 l2.py /* 引入控制器提供的功能 */ fromryu.baseimportapp_manager fromryu.controllerimportofp_event fromimportMAIN_DISPATCHER fromimportset_ev_cls/* 建立一個廣播交換機(jī)的類 */ classL2Switch(app_manager.RyuApp): def_init_(self,*args,*kwargs): super(L2Switch,self)._init_(*args,*kwargs)set_ev_cls(ofp_event.EventO

19、FPPacketIn,MAIN_DISPATCHER) /* 交換機(jī)接收到一個分組的處理函數(shù) */ defpacket_in_handler(self,ev): msg=ev.msg/* 獲取接收的分組 */ dp=msg.datapath/* 獲取接收的分組的數(shù)據(jù)通路 */ ofp=dp.ofproto/* 獲取接收到的分組的協(xié)議 */ ofp_parser=dp.ofproto_parser/* 解析接收的分組的協(xié)議 */ actions=ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD) /* 定義接收的分組的處理動作為廣播 */ out=ofp_par

20、ser.OFPPacketOut( datapath=dp,buffer_id=msg.buffer_id,in_port=msg.in_port, actions=actions)/* 生成發(fā)往交換機(jī)的 openflow 消息 */ dp.send_msg(out)/* 把這個消息發(fā)往交換機(jī) */3) 加載程序到控制器在控制器的終端,進(jìn)入到保存 l2.py 的目錄,輸入如下命令: ryu-managerl2.py4) 驗證交換機(jī)功能 使用一臺普通計算機(jī)發(fā)送命令: ping-t , 另外一臺安裝有 winshark 的計算機(jī)啟動抓包,分析接收到的分組。 改變端口,抓包分析由于沒有第三臺具有抓包

21、軟件的計算機(jī),所以只能大致的進(jìn)行分析。( 四 )Openflow 控制器的接口函數(shù)的實驗1 、 實驗?zāi)康木帉懗绦颍炞C控制器軟件的常見接口函數(shù),體驗軟件定義網(wǎng)絡(luò)的消息類型2 、 實驗原理 通過編程,向交換機(jī)下發(fā)一個流轉(zhuǎn)發(fā)表,刪除流轉(zhuǎn)發(fā)表,驗證轉(zhuǎn)發(fā)表的生存時間,關(guān)閉和 啟動交換機(jī)的物理端口,獲取交換機(jī)各個顆粒度的統(tǒng)計值。3 、 實驗器材盛科 V330openflow 交換機(jī)一臺普通交換機(jī)一臺臺安裝有 winshark 的普通計算機(jī) 3 臺,一臺作為控制器,兩臺作為測試終端。4 、 實驗內(nèi)容和步驟1) 連接網(wǎng)絡(luò)拓?fù)洌鐚嶒炄?) 編寫接口函數(shù)的測試程序 完整的測試程序如附錄所示,下面的測試步驟

22、需要按照測試的需要對測試程序進(jìn)行修 改,刪除不相關(guān)的程序。下面介紹程序的框架結(jié)構(gòu)classTester(app_manager.RyuApp):def_init_(self,*args,*kwargs):/ 初始化函數(shù) defstats_reply_handler(self,ev):/ 統(tǒng)計信息處理函數(shù)set_ev_cls(ofp_event.EventOFPSwitchFeatures,CONFIG_DISPATCHER)/ 注冊交換機(jī)特征處理消息 defswitch_features_handler(self,ev):/ 交換機(jī)特征消息的處理函數(shù)set_ev_cls(ofp_event.E

23、ventOFPPortStatsReply,MAIN_DISPATCHER)/ 注冊交換機(jī)物理端口處理消息defport_stats_reply_handler(self,ev):self.stats_reply_handler(ev)/ 交換機(jī)物理端口消息的處理函數(shù)defrun_test():/ 測試 1:流表的增加和刪除代碼deftest_driver():/ 測試程序的主程序"""Willbescheduledbygevent"""print'Let'go!'globaldatapathwhileTrue

24、:ifdatapathisNone:gevent.sleep(1)else:Tester.run_test()break;3) 流表的下發(fā)和刪除在上述程序的測試 1 部分加入如下代碼,實現(xiàn)流表的下發(fā)和刪除下面給出了下發(fā)一個流表到交換機(jī)的程序,這個流表把端口2 的分組轉(zhuǎn)發(fā)到端口三學(xué)生自行添加代碼,實現(xiàn)把端口三的分組轉(zhuǎn)發(fā)到端口 2把測試計算機(jī)連接到openflow 交換機(jī)的端口 2,把openflow 交換機(jī)的端口 3連接到內(nèi)網(wǎng)交換機(jī)從測試計算機(jī)上檢測到內(nèi)網(wǎng)交換機(jī)的連通性。 Ping采用類似下面的代碼,實現(xiàn)交換機(jī)流表的刪除,并進(jìn)行驗證設(shè)置轉(zhuǎn)發(fā)表的生存時間,并進(jìn)行驗證match=ofproto_v1

25、_3_parser.OFPMatch()/ 獲取一個匹配對象match.set_in_port(1)/ 規(guī)定從端口 1 輸入的分組滿足匹配規(guī)則oa=ofproto_v1_3_parser.OFPActionOutput(2,ofproto_v1_3.OFPCML_MAX)oas=oas.append(oa)inst=ofproto_v1_3_parser.OFPInstructionActions(ofproto_v1_3.OFPIT_APPLY_ACTIONS,oas)insts=insts.append(inst)定義對滿足匹配規(guī)則的分組需要執(zhí)行的動作:轉(zhuǎn)發(fā)到輸出端口 3 ,動作可以是一個

26、鏈表, 這里只有一個動作。fm=ofproto_v1_3_parser.OFPFlowMod(datapath,0,0,0,#table0ofproto_v1_3.OFPFC_ADD,0,0,0,0xffffffff,ofproto_v1_3.OFPP_ANY,0xffffffff,0,match,insts)openflow 消息格式化datapath.send_msg(fm)發(fā)送這個消息4) 學(xué)生自選探索的部分獲取端口信息獲取流統(tǒng)計信息控制交換機(jī)發(fā)送分組附錄一 OVS?Open?vSwitch? 基本操作命令1. 顯示bridge 的信息,連接到bridge 上的interface,tap

27、和端口號(port)2. ovs-ofctlshowovs-switch?( 注:在本實驗環(huán)境中, ovs-switch均由 br0 代替 )3. 顯示 flowentries4. ovs-ofctldump-flowsovs-switch。5. 添加 flow6. ovs-ofctladd-flowovs-switch"in_port=2,actions=output:8"。該命令有很多參數(shù) , 一般來說 actions 之前都是流匹配條件的部分,常用的流匹配條件是in_port:switch 的端口dl_src:源 mac 地址dl_dst:目的mac地址dl_type

28、:以太網(wǎng)協(xié)議類型,0x0806 是arppacket , 0x0800 是 ippacketn w_src:源 IPnw_dst: 目的 ipnw_proto:網(wǎng)絡(luò)層協(xié)議類型,注意和 dl_type 區(qū)分,同時也需要和 dl_type 一起使用,比如 dl_type 是ip(0x0800),nw_proto=1就表示 icmppackettp_src:tcpudp 源端口tp_dst:tcpudp 目的端口ipSameas?dl_type=0x0800.icmpSameas?dl_type=0x0800, nw_proto=1.tcpSameas?dl_type=0x0800, nw_prot

29、o=6.udpSameas?dl_type=0x0800, nw_proto=17.arpSameas?dl_type=0x0806.rarpSameas?dl_type=0x8035.actio ns:滿足匹配條件的處理方法,有如下三種可能轉(zhuǎn)發(fā)到某個物理輸出端口:output:port轉(zhuǎn)發(fā)到控制器:con troller( key=value )丟棄還可能包括如下動作:修改目的mac地址、源mac地址、目的ip地址、源ip地址、目的端口號、源端口號等7.刪除所有flow ovs-ofctldel-flowsovs-switch附錄二控制器接口函數(shù)實驗的完整代碼(實驗四的實驗)importlo

30、gg ingimportstructimportgeve ntfromryu.baseimportapp_ma nagerfromryu.c on trollerimportofp_eve ntfromimportMAIN_DISPATCHER,CONFIG_DISPATCHER fromimportset_ev_clsfromryu.ofprotoimportofproto_v1_3 fromryu.ofprotoimportofproto_v1_3_parser fromryu.libimportmac#mac.haddr_to_bi nLOG=loggi ng.getLogger(”)d

31、atapath=Nonetester=None classTester(app_manager.RyuApp): def_init_(self,*args,*kwargs): super(Tester,self)._init_(*args,*kwargs) self.waiters=globaltester tester=self defstats_reply_handler(self,ev): msg=ev.msgdp=msg.datapath print'dpidisnotinthewaiters,maybetherequestistimeout' returnprint&

32、#39;msgxidisnotinthewaiters,maybetherequestistimeout'return lock,msgs=self.waitersdp.idmsg.xid msgs.append(msg) print'stats_reply_handler:',msgs ifmsg.flags&:print'moreflagpresent,waitforthecontinuedreply' returndelself.waitersdp.idmsg.xidlock.set()set_ev_cls(ofp_event.EventO

33、FPSwitchFeatures,CONFIG_DISPATCHER) defswitch_features_handler(self,ev):msg=ev.msg datapath=msg.datapath dispatcher(MAIN_DISPATCHER) set_ev_cls(ofp_event.EventOFPPortStatsReply,MAIN_DISPATCHER) defport_stats_reply_handler(self,ev):self.stats_reply_handler(ev)set_ev_cls(ofp_event.EventOFPSwitchFeatur

34、es,CONFIG_DISPATCHER) defswitch_features_handler(self,ev):msg=ev.msgglobaldatapathdatapath=msg.datapathstaticmethod defrun_test(): globaldatapath print'Testbegins.' print'Test0:testswitchconfig.' sc=ofproto_v1_3_parser.OFPSetConfig(datapath,ofproto_v1_3.OFPC_F RAG_NORMAL,1518)datapat

35、h.send_msg(sc) gcr=ofproto_v1_3_parser.OFPGetConfigRequest(datapath) datapath.send_msg(gcr) print'Test1:testflow(in_port=1,instructions=apply_actions(action s=output2)add/delete.'match=ofproto_v1_3_parser.OFPMatch()match.set_in_port(1)oa=ofproto_v1_3_parser.OFPActionOutput(2,ofproto_v1_3.OFP

36、CML_MAX )oas=oas.append(oa)inst=ofproto_v1_3_parser.OFPInstructionActions(ofproto_v1_3.OFPIT_APPLY_ACTIONS,oas)insts=insts.append(inst)fm=ofproto_v1_3_parser.OFPFlowMod(datapath,0,0,0,#table0ofproto_v1_3.OFPFC_ADD,0,0,0,0xffffffff,ofproto_v1_3.OFPP_ANY,0xffffffff,0,match,insts)datapath.send_msg(fm)#

37、deletethejust-installedflow.#NB:matchcan'bereusedbecauseryuaddsomeclassdatadynamically. match=ofproto_v1_3_parser.OFPMatch()match.set_in_port(1)fm=ofproto_v1_3_parser.OFPFlowMod(datapath,0,0,0,#table0ofproto_v1_3.OFPFC_DELETE,0,0,0,0xffffffff,ofproto_v1_3.OFPP_ANY,0xffffffff,0,match,insts)datapa

38、th.send_msg(fm)#reinstalltheflowwithtimeout match=ofproto_v1_3_parser.OFPMatch() match.set_in_port(1)oas=oao=ofproto_v1_3_parser.OFPActionOutput(2,ofproto_v1_3.OFPCML_MA X)oas.append(oao)mted=ofproto_v1_3_parser.MTEthDst(ofproto_v1_3.OXM_OF_ETH_DST, mac.haddr_to_bin("01:00:00:00:D4:8F")oas

39、f=ofproto_v1_3_parser.OFPActionSetField(mted) oas.append(oasf)inst=ofproto_v1_3_parser.OFPInstructionActions(ofproto_v1_3.OFPI T_APPLY_ACTIONS,oas)insts=insts.append(inst)fm=ofproto_v1_3_parser.OFPFlowMod(datapath,0,0,0,#table0ofproto_v1_3.OFPFC_ADD,3,3,0,0xffffffff,ofproto_v1_3.OFPP_ANY,0xffffffff,

40、ofproto_v1_3.OFPFF_SEND_FLOW_REM,#sendflowremoval. match,insts)datapath.send_msg(fm)print'Test2:testportconfig.'pm=ofproto_v1_3_parser.OFPPortMod(datapath,1,mac.haddr_to_bin("01:00:00:00:D4:8F"), ofproto_v1_3.OFPPC_NO_RECV,ofproto_v1_3.OFPPC_NO_RECV,0)datapath.send_msg(pm)#restoretheconfig. pm=ofproto_v1_3_parser.OFPPortMod(datapath,1,mac.haddr_to_bin("01:00:00:00:D4:8F"),0,ofproto_v1_3.OFPPC_NO_RECV,0)datapath.send_msg(pm)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論