SDN實驗報告 (1) (5)_第1頁
SDN實驗報告 (1) (5)_第2頁
SDN實驗報告 (1) (5)_第3頁
SDN實驗報告 (1) (5)_第4頁
SDN實驗報告 (1) (5)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

5、匹配域(match fields),計數(shù)器(counters)和指令(instructions)組成。匹配域定義待匹配的數(shù)據(jù)包特征,如數(shù)據(jù)包到達的交換機入端口、源以太網(wǎng)地址、目的以太網(wǎng)地址、源IP地址、目標IP地址、VLAN標簽。計數(shù)器用于對匹配流表的流量統(tǒng)計,更新進入OpenFlow與流匹配的數(shù)據(jù)包個數(shù)以及總字節(jié)數(shù)。指令用于修改匹配報文的動作集合,決定報文的轉發(fā)操作,通常的操作有輸出數(shù)據(jù)包到某端口、修改數(shù)據(jù)包首部信息等。控制器和OpenFlow交換機之間通過OpenFlow消息實現(xiàn)信息交互。 當一個數(shù)據(jù)包到達交換機時,如果與流表中的某一條流相匹配,便順序執(zhí)行該條流指令的操作。如果沒有匹配的流

6、,則把整個數(shù)據(jù)包緩存在交換機中,并為該數(shù)據(jù)包配一個Buffer ID,隨數(shù)據(jù)包一起作為Packet In消息發(fā)往控制器,控制器根據(jù)數(shù)據(jù)包的首部定義一條新的流決定該類數(shù)據(jù)包的處理策略,下發(fā)Flow Mod信息給交換機,F(xiàn)low Mod消息用于在交換機中添加或刪除流表條目,同時控制器以Packet Out消息作為載體將數(shù)據(jù)包返回交換機,Packet Out消息用于控制報文從指定端口發(fā)出,交換機依據(jù)隨包的Buffer ID取出數(shù)據(jù)包,再根據(jù)新定義的流進行交換處理。本實驗實現(xiàn)手動配置交換機轉發(fā)表。為后續(xù)的實驗準備實驗環(huán)境和交換機基本配置。3、 實驗器材1. 盛科V330 openflow交換機 2.

7、臺式電腦 (一臺)3. 普通交換機一臺4、 實驗內容1. 連接交換機的控制端口和計算機以太網(wǎng)卡。l 交換機的控制端口位于交換機右上角,交換機的控制端口的地址已經(jīng)初始化為192.168.1.233,一般不允許學生再進行修改。l 配置計算機的以太網(wǎng)卡的地址也要設為192.168.1.0 網(wǎng)段,如192.168.1.230。l 把交換機的控制端口和計算機都連接到一臺普通交換機如下圖所示內網(wǎng)交換機 192.168.1.1openflow交換機配置計算機192.168.1.230計算機終端 192.168.1.220控制端口192.168.1.233數(shù)據(jù)端口2. 登陸交換機并熟悉交換局配置環(huán)境l 在計算

8、機上面打開命令行終端,輸入telnet 192.168.1.233l 輸入?獲取交換機配置的幫助。如下圖所示,可以獲得交換機的各種命令的列表l 在命令的名字后面輸入?可以獲得這個命令的功能和使用說明。例如congfigure ?, 就會顯示這個命令是配置終端所用3. 常用交換機命令l Show命令顯示交換機的工作狀態(tài)。輸入以下命令: show interface status; show openflow controller status; show openflow ovsdb。觀察結果,并根據(jù)幫助對這些命令進行解釋l 配置控制器地址1. 輸入configure terminal, 進入配

9、置狀態(tài)。2. 輸入: openflow set controller tcp 192.168.1.230 6633。在交換機上面設置控制器的地址。這里假設控制器的地址為192.168.1.230,默認端口6633。后面的實驗中,需要按照控制器的實際地址在交換機上設置。3. 輸入end,推出配置狀態(tài)4. 手動配置流表。Ovs-ofctl 指令實現(xiàn)openflow交換機上流表的添加、刪除和查詢等動作。Ovs-ofctl指令集合的詳細介紹見附錄l 把測試計算機連接到openflow交換機的端口2,把openflow交換機的端口8連接到內網(wǎng)交換機。openflow交換機的端口號在交換機的面板上有數(shù)字標

10、明。內網(wǎng)交換機地址設為192.168.1.1。l telnet登陸交換機,執(zhí)行如下命令ovs-ofctl add-flow ovs-switch "in_port=2,actions=output:8" 這個命令把openflow 交換機第2個端口接收到的分組轉發(fā)到第8個端口。ovs-ofctl add-flow ovs-switch "in_port=8,actions=output:2" 這個命令把openflow 交換機第8個端口接收到的分組轉發(fā)到第2個端口。5. 驗證流表配置輸入如下命令觀察配置的流表:ovs-ofctl dump-flows b

11、r0在測試計算機終端上面運行如下命令: ping 192.168.1.1,觀察是否連通。上述命令的實際執(zhí)行過程如下圖所示其中,第一個“ovs-ofctl dump-flows br0”是在配置了流表,但是沒有連接測試計算機時候得到的結果。第二個顯示流表的命令是在連接了測試計算機以后觀察到結果??梢娏鞅泶_實實現(xiàn)了端口2和端口8之間的分組交換。測試計算機上也能觀察到ping確實有反映,如果把測試計算機連接到其它物理端口,這ping沒有響應。 (二)Openflow交換機和控制軟件的互聯(lián)及控制軟件加載1、 實驗目的l Controller控制器的軟件安裝l 控制器和Openflow交換機的互聯(lián)l 加

12、載控制軟件到Openflow交換機l 驗證交換機預期功能2、 實驗原理把RYU控制器連接到Openflow交換機,把一個控制器軟件加載到Openflow交換機,這個控制器軟件的原理是: 交換機接收到一個分組后,把這個分組報告給控制器終端,控制器終端顯示;交換機把分組的源地址和接收到分組的物理端口關聯(lián)起來;交換機查找目的地址對應的端口號,如果找到,把該分組轉發(fā)到目的端口,否則在交換機的所有端口廣播該分組??刂破鬈浖虞d到交換機以后,將實現(xiàn)一個普通交換機的功能,通過一個普通計算機終端驗證這個功能。. 3、 實驗器材1 盛科V330 openflow交換機一臺2 普通交換機一臺臺3 普通計算機2臺4

13、、 實驗內容和步驟1) 連接網(wǎng)絡拓撲網(wǎng)絡連接如下圖所示。Openflow交換機的控制端口的地址設為192.168.1.233,Openflow交換機控制端口和一個數(shù)據(jù)端口連接到內網(wǎng)交換機。RYU控制器連接到內網(wǎng)交換機。計算機終端連接到openflow交換機。通過控制器實現(xiàn)對openflow交換機的控制,使openflow交換機實現(xiàn)一個普通交換機功能。內網(wǎng)交換機 192.168.1.1openflow交換機 Ryu 控制器192.168.1.230計算機終端 192.168.1.220控制端口192.168.1.233數(shù)據(jù)端口數(shù)據(jù)端口2) 安裝控制器軟件Ryu控制器由一個普通計算機實現(xiàn)。由于目前

14、多數(shù)計算機采用windows操作系統(tǒng),而Ryu控制器是有一個linux鏡像實現(xiàn),因此采用虛擬機的方法實現(xiàn)linux操作系統(tǒng)。l 安裝Vmware軟件l 導入Ryu操作系統(tǒng)鏡像l 配置虛擬機的網(wǎng)絡為橋接模式,實現(xiàn)虛擬機直接訪問物理網(wǎng)絡l 驗證控制器與交換機控制端口的互通性:ping 192.168.1.2333) telnet 登陸交換機,配置模式控制器地址l 在命令行輸入 telnet 192.168.1.233, 登陸交換機控制臺l 獲取configure 幫助: configure ?l 進入配置終端狀態(tài):configure terminall 在交換機控制臺輸入:openflow set

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

16、收到的分組發(fā)送到控制器,在控制臺顯示出相關信息: 第一個數(shù)字是交換機編號,第二個數(shù)字是源mac地址,第三個數(shù)字是目的mac地址,第四個地址是交換機接收該分組的物理端口。l 改變內網(wǎng)連接到交換機的物理端口,觀察最后一個數(shù)據(jù)域26變?yōu)槠渌麛?shù)字l 檢查流表的學習情況。從控制器遠程登陸到交換機: telnet 192.168.1.233執(zhí)行命令: ovs-ofctl dump-flows br06) 驗證交換機功能使用一臺普通計算機發(fā)送命令: ping 192.168.1.1, 證明該交換機完成轉發(fā)功能最后另一臺交換機確實ping 通了。(三)Openflow交換機控制軟件的編寫1、 實驗目的l 編寫

17、一個廣播型二層交換機l 加載控制軟件到Openflow交換機并驗證預期功能2、 實驗原理本實驗由兩個不同的任務構成:編制程序,把openflow交換機接收到的分組廣播到所有的端口。3、 實驗器材l 盛科V330 openflow交換機一臺l 普通交換機一臺臺l 安裝有winshark的普通計算機3臺,一臺作為控制器,兩臺作為測試終端。4、 實驗內容和步驟1) 連接網(wǎng)絡拓撲網(wǎng)絡連接如下圖所示。Openflow交換機的控制端口的地址設為192.168.1.233,Openflow交換機控制端口和一個數(shù)據(jù)端口連接到內網(wǎng)交換機。RYU控制器連接到內網(wǎng)交換機。兩個安裝有winshark的計算機終端連接到

18、openflow交換機。驗證winshark能夠實現(xiàn)正確的分組偵聽。內網(wǎng)交換機 192.168.1.1openflow交換機 Ryu 控制器192.168.1.230計算機終端 192.168.1.220控制端口192.168.1.233數(shù)據(jù)端口計算機終端 192.168.1.221數(shù)據(jù)端口2) 編寫廣播程序使用文本編輯器,輸入如下程序,把這個文件保存為l2.py。/* 引入控制器提供的功能*/from ryu.base import app_managerfrom ryu.controller import ofp_eventfrom ryu.controller.handler impor

19、t MAIN_DISPATCHERfrom ryu.controller.handler import set_ev_cls/* 建立一個廣播交換機的類 */class L2Switch(app_manager.RyuApp): def _init_(self, *args, *kwargs): super(L2Switch, self)._init_(*args, *kwargs)set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)/* 交換機接收到一個分組的處理函數(shù) */ def packet_in_handler(self, ev

20、): 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_parser.OFPPacketOut( datapath=dp, buffer_id=msg.buffer_id, in_por

21、t=msg.in_port, actions=actions)/* 生成發(fā)往交換機的openflow消息 */ dp.send_msg(out)/* 把這個消息發(fā)往交換機 */3) 加載程序到控制器在控制器的終端,進入到保存l2.py的目錄,輸入如下命令: ryu-manager l2.py4) 驗證交換機功能l 使用一臺普通計算機發(fā)送命令: ping 192.168.1.1-t, l 另外一臺安裝有winshark的計算機啟動抓包,分析接收到的分組。l 改變端口,抓包分析由于沒有第三臺具有抓包軟件的計算機,所以只能大致的進行分析。 (四)Openflow控制器的接口函數(shù)的實驗1、 實驗目的l

22、 編寫程序,驗證控制器軟件的常見接口函數(shù),體驗軟件定義網(wǎng)絡的消息類型2、 實驗原理通過編程,向交換機下發(fā)一個流轉發(fā)表,刪除流轉發(fā)表,驗證轉發(fā)表的生存時間,關閉和啟動交換機的物理端口,獲取交換機各個顆粒度的統(tǒng)計值。3、 實驗器材l 盛科V330 openflow交換機一臺l 普通交換機一臺臺l 安裝有winshark的普通計算機3臺,一臺作為控制器,兩臺作為測試終端。4、 實驗內容和步驟1) 連接網(wǎng)絡拓撲,如實驗三所示2) 編寫接口函數(shù)的測試程序完整的測試程序如附錄所示,下面的測試步驟需要按照測試的需要對測試程序進行修改,刪除不相關的程序。下面介紹程序的框架結構class Tester(app_

23、manager.RyuApp): def _init_(self, *args, *kwargs): / 初始化函數(shù)def stats_reply_handler(self, ev):/統(tǒng)計信息處理函數(shù)set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)/注冊交換機特征處理消息def switch_features_handler(self, ev):/交換機特征消息的處理函數(shù) set_ev_cls(ofp_event.EventOFPPortStatsReply, MAIN_DISPATCHER)/注冊交換機物理端口處

24、理消息def port_stats_reply_handler(self, ev): self.stats_reply_handler(ev)/交換機物理端口消息的處理函數(shù)def run_test(): /測試1:流表的增加和刪除代碼def test_driver(): /測試程序的主程序 """Will be scheduled by gevent""" print 'Let' go !' global datapath while True: if datapath is None: gevent.slee

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

26、v1_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í)行的動作:轉發(fā)到輸出端口3,動

27、作可以是一個鏈表,這里只有一個動作。fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0, 0, 0, # table 0 ofproto_v1_3.OFPFC_ADD, 0, 0, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, 0, match, insts)openflow消息格式化datapath.send_msg(fm)發(fā)送這個消息4) 學生自選探索的部分l 獲取端口信息l 獲取流統(tǒng)計信息l 控制交換機發(fā)送分組附錄一 OVS Open vSwitch 基本操作命

28、令1. 顯示bridge的信息,連接到bridge上的interface,tap和端口號(port)ovs-ofctl show ovs-switch (注:在本實驗環(huán)境中,ovs-switch均由br0代替)2. 顯示flow entriesovs-ofctl dump-flows ovs-switch。3. 添加flowovs-ofctl add-flow ovs-switch "in_port=2,actions=output:8"。該命令有很多參數(shù), 一般來說actions之前都是流匹配條件的部分,常用的流匹配條件是 l in_port: switch的端

29、口l dl_src: 源mac地址l dl_dst:目的mac地址l dl_type:以太網(wǎng)協(xié)議類型, 0x0806是arp packet, 0x0800是ip packetl nw_src:源IPl nw_dst:目的ipl nw_proto:網(wǎng)絡層協(xié)議類型 ,注意和dl_type區(qū)分,同時也需要和dl_type一起使用,比如dl_type是ip(0x0800),nw_proto=1就表示icmp packetl tp_src: tcp udp源端口l tp_dst: tcp udp目的端口ipSame as dl_type=0x0800.icmpSame as dl_t

30、ype=0x0800,nw_proto=1.tcpSame as dl_type=0x0800,nw_proto=6.udpSame as dl_type=0x0800,nw_proto=17.arpSame as dl_type=0x0806.rarpSame as dl_type=0x8035.actions:滿足匹配條件的處理方法,有如下三種可能l 轉發(fā)到某個物理輸出端口:output:portl 轉發(fā)到控制器:controller(key=value)l 丟棄l 還可能包括如下動作:修改目的mac地址、源mac地址、目的ip地址、源ip地址、目的

31、端口號、源端口號等4. 刪除所有flowovs-ofctl del-flows ovs-switch附錄二 控制器接口函數(shù)實驗的完整代碼(實驗四的實驗)import loggingimport structimport geventfrom ryu.base import app_managerfrom ryu.controller import ofp_eventfrom ryu.controller.handler import MAIN_DISPATCHER, CONFIG_DISPATCHERfrom ryu.controller.handler import set_ev_clsfr

32、om ryu.ofproto import ofproto_v1_3from ryu.ofproto import ofproto_v1_3_parserfrom ryu.lib import mac#mac.haddr_to_binLOG = logging.getLogger('ryu.app.Tester')datapath = Nonetester = Noneclass Tester(app_manager.RyuApp): def _init_(self, *args, *kwargs): super(Tester, self)._init_(*args, *kwa

33、rgs) self.waiters = global tester tester = self def stats_reply_handler(self, ev): msg = ev.msg dp = msg.datapath if dp.id not in self.waiters: print 'dp id is not in the waiters, maybe the request is timeout' return if msg.xid not in self.waitersdp.id: print 'msg xid is not in the waite

34、rs, maybe the request is timeout' return lock, msgs = self.waitersdp.idmsg.xid msgs.append(msg) print 'stats_reply_handler:', msgs if msg.flags & dp.ofproto.OFPSF_REPLY_MORE: print 'more flag present, wait for the continued reply' return del self.waitersdp.idmsg.xid lock.set(

35、) set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) def switch_features_handler(self, ev): msg = ev.msg datapath = msg.datapath ev.msg.datapath.ev_q.set_dispatcher(MAIN_DISPATCHER) set_ev_cls(ofp_event.EventOFPPortStatsReply, MAIN_DISPATCHER) def port_stats_reply_handler(self, ev): sel

36、f.stats_reply_handler(ev) set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) def switch_features_handler(self, ev): msg = ev.msg global datapath datapath = msg.datapath staticmethod def run_test(): global datapath print 'Test begins.' print 'Test0: test switch config.' s

37、c = ofproto_v1_3_parser.OFPSetConfig(datapath, ofproto_v1_3.OFPC_FRAG_NORMAL, 1518) datapath.send_msg(sc) gcr = ofproto_v1_3_parser.OFPGetConfigRequest(datapath) datapath.send_msg(gcr) print 'Test1: test flow(in_port=1, instructions=apply_actions(actions=output 2) add/delete.' match = ofprot

38、o_v1_3_parser.OFPMatch() match.set_in_port(1) 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) fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0,

39、0, 0, # table 0 ofproto_v1_3.OFPFC_ADD, 0, 0, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, 0, match, insts) datapath.send_msg(fm) # delete the just-installed flow. # NB: match can' be reused because ryu add some class data dynamically. match = ofproto_v1_3_parser.OFPMatch() match.set_in_por

40、t(1) fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0, 0, 0, # table 0 ofproto_v1_3.OFPFC_DELETE, 0, 0, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, 0, match, insts) datapath.send_msg(fm) # reinstall the flow with timeout match = ofproto_v1_3_parser.OFPMatch() match.set_in_port(1) oas = oao = of

41、proto_v1_3_parser.OFPActionOutput(2, ofproto_v1_3.OFPCML_MAX) 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") oasf = ofproto_v1_3_parser.OFPActionSetField(mted) oas.append(oasf) inst = ofproto_v1_3_parser.OFPInstruction

42、Actions(ofproto_v1_3.OFPIT_APPLY_ACTIONS, oas) insts = insts.append(inst) fm = ofproto_v1_3_parser.OFPFlowMod(datapath, 0, 0, 0, # table 0 ofproto_v1_3.OFPFC_ADD, 3, 3, 0, 0xffffffff, ofproto_v1_3.OFPP_ANY, 0xffffffff, ofproto_v1_3.OFPFF_SEND_FLOW_REM, # send flow removal. match, insts) datapath.sen

43、d_msg(fm) print 'Test2: test port config.' 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) # restore the config. 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) print 'Test3: test multipart message.' dr = ofproto_v1_3_parser.OFPDescStatsRequest(datapath,

溫馨提示

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

評論

0/150

提交評論