Floodlight開發(fā)者文檔(譯文).doc_第1頁(yè)
Floodlight開發(fā)者文檔(譯文).doc_第2頁(yè)
Floodlight開發(fā)者文檔(譯文).doc_第3頁(yè)
Floodlight開發(fā)者文檔(譯文).doc_第4頁(yè)
Floodlight開發(fā)者文檔(譯文).doc_第5頁(yè)
已閱讀5頁(yè),還剩85頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

目錄架構(gòu)3開始3安裝指導(dǎo)3概述3準(zhǔn)備工作3下載編譯3運(yùn)行Floodlight4Eclipse設(shè)置4虛擬一個(gè)網(wǎng)絡(luò)4下一步5可兼容交換機(jī)5虛擬交換機(jī)5硬件交換機(jī)5可支持的拓?fù)浣Y(jié)構(gòu)6發(fā)布版8發(fā)行說明8Floodlight v0.9發(fā)行說明8概述8新添加的東西8應(yīng)用9用戶文檔9控制器9Configuration HOWTO9監(jiān)聽地址和端口配置10Floodlight REST API11應(yīng)用18開發(fā)者文檔28模塊描述及javadoc28控制器模塊28FloodLight目前已經(jīng)實(shí)現(xiàn)的控制器模塊28FloodlightProvider28DeviceManagerImpl30LinkDiscoveryManager (Dev)32TopologyService33RestApiServer34ThreadPool35MemoryStorageSource36Flow Cache36Packet Streamer37應(yīng)用模塊41虛擬網(wǎng)絡(luò)過濾器(Quantum插件)41轉(zhuǎn)發(fā)43防火墻44Port Down Reconciliation49模塊加載系統(tǒng)50Javadoc entry55添加模塊57創(chuàng)建一個(gè)監(jiān)聽模塊57Mininet虛擬網(wǎng)絡(luò)連接floodlight63添加模塊服務(wù)63創(chuàng)建類65添加rest API70Floodlight rest API開發(fā)76Floodlight-Test77Unit測(cè)試85控制器基準(zhǔn)配置86基準(zhǔn)配置86Cbench (New)87怎樣用floodlight滿足服務(wù)質(zhì)量8890架構(gòu)Floodlight不僅僅是一個(gè)支持OpenFLow協(xié)議的控制器(FloodlightCOntroller),也是一個(gè)基于Floodlight控制器的應(yīng)用集。當(dāng)用戶在OpenFLow網(wǎng)絡(luò)上運(yùn)行各種應(yīng)用程序的時(shí)候,F(xiàn)loodlight控制器實(shí)現(xiàn)了對(duì)OpenFLow網(wǎng)絡(luò)的監(jiān)控和查詢功能。圖0.0顯示了Floodlight不同模塊之間的關(guān)系,這些應(yīng)用程序構(gòu)建成java模塊,和Floodlight一起編譯。同時(shí)這些應(yīng)用程序都是基于REST API的。開始安裝指導(dǎo)概述基于Java的Floodlight可以用標(biāo)準(zhǔn)jak工具或ant編譯運(yùn)行,當(dāng)然也可以有選擇性的在Eclipse上運(yùn)行。準(zhǔn)備工作Linux:l Ubuntu 10.04(Natty)及以上版本(運(yùn)行Ant1.8.1及以下版本)l 安裝JDK,Ant。(可在eclipse上安裝)$sudo apt-get install build-essential default ant python-dev eclipseMacl Mac系統(tǒng)x10.6及以上版本(低版本未測(cè)試)l Cxode4.1或Xcode4.0.2l JDK:只需要在終端輸入命令:javac便可安裝l Eclipse(非必須 )下載編譯從Github下載并比編譯Floodlight$git clone git://floodlight/floodlight.git$cd floodlight$ant運(yùn)行Floodlight如果java運(yùn)行環(huán)境已經(jīng)安裝成功,就可以直接運(yùn)行:$java -jar target/floodlight.jarFloodlight就會(huì)開始運(yùn)行,并在控制臺(tái)打印debug信息Eclipse設(shè)置通過Eclipse運(yùn)行、開發(fā)、配置Floodlight:$ant eclipse上述命令將創(chuàng)建多個(gè)文件:Floodlight.launch,Floodlight_junit.launch,classpath和.project。通過這些設(shè)置eclipse工程l 打開eclipse創(chuàng)建一個(gè)新的工程l 文件-導(dǎo)入-常規(guī)-現(xiàn)有項(xiàng)目到工程中-下一步l 點(diǎn)擊“選擇根目錄”,點(diǎn)擊“瀏覽”。選擇之前放置Floodlight的父路徑l 點(diǎn)擊Floodlightl 點(diǎn)擊“完成”現(xiàn)在就產(chǎn)生了一個(gè)Floodlight的Eclipse工程。由于我們是使用靜態(tài)模塊加載系統(tǒng)運(yùn)行Floodlight,我們必須配置eclipse來正確的運(yùn)行Floodlight。創(chuàng)建Floodlight目標(biāo)文件:l 點(diǎn)擊運(yùn)行-運(yùn)行配置l 右擊java 應(yīng)用-新建l “Name”使用“FloodlightLaunch”l “Project”使用“Floodlight”l “Main”使用“net.floodlightcontroller.core.Main”l 點(diǎn)擊“應(yīng)用”虛擬一個(gè)網(wǎng)絡(luò)啟動(dòng)了Floodlight之后,就需要鏈接到一個(gè)OpenFlow的網(wǎng)絡(luò)。Mininet是最好的網(wǎng)絡(luò)虛擬工具之一。l 下載Floodlight-vm機(jī)自啟動(dòng)并內(nèi)嵌Mininet工具。l 使用Vmware或者virtualbox打開Floodlight-vm,在啟動(dòng)之前,點(diǎn)擊網(wǎng)絡(luò)選項(xiàng)不要從導(dǎo)入虛擬機(jī)后的安裝目錄中運(yùn)行腳本啟動(dòng)l 登錄(用戶名是:floodlight沒有密碼)l 既可以在使用Floodlight-vm開機(jī)自啟動(dòng)的Floodlight控制器也可以通過命令指定到遠(yuǎn)程的控制器,輸入:$sudo mn -controller=remote,ip=,port=可以通過ssh遠(yuǎn)程登陸到floodlight-vm虛擬機(jī)運(yùn)行wireshark,監(jiān)聽eth0端口并用“of”協(xié)議過濾器過濾。$ssh -X floodlight$sudo wireshark下一步閱讀完getstart文檔之后,可以參閱floodlight開發(fā)文檔,里面有很多實(shí)例和代碼。可兼容交換機(jī)下面列出了可以和Floodlight控制器兼容的交換機(jī)虛擬交換機(jī)l Open vSwitch(OVS)硬件交換機(jī) Arista 7050 Brocade MLXe Brocade CER Brocade CES Dell S4810 Dell Z9000 Extreme Summit x440, x460, x670 HP 3500, 3500yl, 5400zl, 6200yl, 6600, and 8200zl (the old-style L3 hardware match platform) HP V2 line cards in the 5400zl and 8200zl (the newer L2 hardware match platform) Huawei openflow-capable router platforms IBM 8264 Juniper (MX, EX) NEC IP8800 NEC PF5240 NEC PF5820 NetGear 7328SO NetGear 7352SO Pronto (3290, 3295, 3780) - runs the shipping pica8 software可支持的拓?fù)浣Y(jié)構(gòu)Floodlight現(xiàn)在在支持梁中鋒不同的包轉(zhuǎn)發(fā)應(yīng)用,這兩種應(yīng)用具有不同的行為,并且向下圖的拓?fù)浣Y(jié)構(gòu)一樣運(yùn)行:l 在轉(zhuǎn)發(fā)方面:在網(wǎng)絡(luò)中的任意兩個(gè)終端設(shè)備之間進(jìn)行端到端的數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)含OpenFLow網(wǎng)絡(luò)孤島(OpenFlow island):到同一OpenFlow網(wǎng)絡(luò)孤島中的任意一設(shè)備A發(fā)送數(shù)據(jù)包到設(shè)備B,轉(zhuǎn)發(fā)模塊會(huì)計(jì)算出A到B之間的最短路徑。內(nèi)含非OpenFlow網(wǎng)絡(luò)孤島(non-OpenFlow island)的OpenFLow網(wǎng)絡(luò)孤島:每一個(gè)OpenFlow網(wǎng)絡(luò)孤島都可能有一個(gè)連接到非OpenFlow孤島的鏈接。另外,如圖3所示,OpenFlow和非OpenFlow網(wǎng)絡(luò)孤島之間不能構(gòu)成環(huán)網(wǎng)圖1:Floodlight接入OpenFlow網(wǎng)絡(luò)的例網(wǎng)拓?fù)鋱D2:Floodlight未接入OpenFlow網(wǎng)絡(luò)的例網(wǎng)拓?fù)?,OpenFlow網(wǎng)絡(luò)孤島1有兩個(gè)到非OpenFlow網(wǎng)絡(luò)孤島的鏈接圖3:Floodlight未接入OpenFlow網(wǎng)絡(luò)的例網(wǎng)拓?fù)洌琌penFlow孤島和非OpenFlow孤島形成了一個(gè)環(huán)網(wǎng),甚至每一個(gè)OpenFlow孤島都有唯一一個(gè)連接到非OpenFlow孤島的鏈接l 當(dāng)轉(zhuǎn)發(fā)路徑中超過指定的時(shí)間間隔(默認(rèn)5秒),通過轉(zhuǎn)發(fā)超時(shí)安裝路徑。l 自我學(xué)習(xí)的交換機(jī):一個(gè)簡(jiǎn)單的二層自我學(xué)習(xí)交換機(jī):1 在任何數(shù)量的OpenFlow網(wǎng)絡(luò)孤島中使用,甚至在非OpenFlow的2層網(wǎng)絡(luò)孤島中。2 不能在環(huán)路網(wǎng)路中的網(wǎng)絡(luò)孤島中工作,也不能在孤島形成的環(huán)網(wǎng)中工作3 數(shù)據(jù)轉(zhuǎn)發(fā)效率遠(yuǎn)高于其他方法l 另外,F(xiàn)loodlight也提供一個(gè)Static Flow Entry Pusher應(yīng)用和一個(gè)Circuit Pusher應(yīng)用,允許用戶主動(dòng)安裝轉(zhuǎn)發(fā)路徑(proactively install forwarding paths)的行為1 Static Flow Entry Pusher允許修改交換機(jī)流表項(xiàng),從而創(chuàng)造由用戶根據(jù)交換機(jī)端口明確選擇的轉(zhuǎn)發(fā)路徑2 CircuitPusher是基于Static Flow Entry Pusher,Device Manager,Routing services的RestAPI,在單個(gè)OpenFlow孤島中建立一個(gè)最短路徑流*術(shù)語“孤島”和“集群”是可以互換使用的。一個(gè)OpenFlow孤島/集群就是OpenFlow交換機(jī)連接到其中任何設(shè)備的集合。類似的,非OpenFlow的孤島/集群就是任何連接到非OpenFlow交換機(jī)的設(shè)備。發(fā)布版發(fā)行說明Floodlight v0.9發(fā)行說明發(fā)布日期:2012年10月概述Floodlighr v0.9包含了控制器新的RestAPI,新的應(yīng)用,漏洞修復(fù),新框架測(cè)試等新添加的東西REST APIs顯示如何進(jìn)行外部連接,通過BDDP發(fā)現(xiàn)多跳鏈路而不是LLDP由于處理錯(cuò)誤的API并不在發(fā)布包中,但是可以通過純凈版的Floodlight下載頁(yè)面或者在github上的Floodlight-master下載獲得。 /wm/topology/external-links/json顯示在LLDP數(shù)據(jù)包中發(fā)現(xiàn)的直連(DIRECT)和隧道鏈接(TUNNEL) /wm/topology/links/json給OpenStack/quantum插件的虛擬網(wǎng)絡(luò)過濾器添加新的API,以顯示所有的創(chuàng)建的虛擬網(wǎng)絡(luò)名,Guid,網(wǎng)關(guān)和主機(jī) /quantum/v1.0/tenants/networks應(yīng)用l Circuit Pusher,一個(gè)基于Python的REST應(yīng)用接口,使用RESTAPI來設(shè)置兩臺(tái)IP主機(jī)的流。包括新的REST APIsl Firewall,一個(gè)java應(yīng)用模塊,提供基于控制器的無狀態(tài)ACL支持用戶文檔控制器Floodlight不僅僅是一個(gè)支持OpenFLow協(xié)議的控制器(FloodlightCOntroller),也是一個(gè)基于Floodlight控制器的應(yīng)用集。當(dāng)用戶在OpenFLow網(wǎng)絡(luò)上運(yùn)行各種應(yīng)用程序的時(shí)候,F(xiàn)loodlight控制器實(shí)現(xiàn)了對(duì)OpenFLow網(wǎng)絡(luò)的監(jiān)控和查詢功能。圖0.0顯示了Floodlight不同模塊之間的關(guān)系,這些應(yīng)用程序構(gòu)建成java模塊,和Floodlight一起編譯。同時(shí)這些應(yīng)用程序都是基于REST API的。當(dāng)運(yùn)行floodlight時(shí),控制器和一組java應(yīng)用模塊(這些會(huì)在floodlight屬性文件中載入)開始運(yùn)行。REST API通過REST端口(默認(rèn)8080)對(duì)所有的運(yùn)行中的模塊開放。Configuration HOWTO選擇加載模塊Floodlight可以配置載入不同的模塊以適應(yīng)不停地應(yīng)用。配置不同的載入模塊之后必須重啟生效。目前對(duì)于Floodlight模塊的配置都是通過需在啟動(dòng)時(shí)加載的一個(gè)配置文件的修改實(shí)現(xiàn)的。簡(jiǎn)單的說,用戶可以通過以下步驟,找到或控制Floodlight當(dāng)前的配置:l 打開 src/main/resources/META-INF/services/net.floodlightcontroller.core.module.IFloodlightModule文件,就可以查看所有在floodlight.jar二進(jìn)制編譯中的模塊編譯。l 打開src/main/resources/perties文件或者其他自定義屬性文件,查看文件中選擇加載/運(yùn)行模塊。這些文件時(shí)是配置某些啟動(dòng)時(shí)參數(shù)的地方,例如:REST API服務(wù)和WEB UI端口(8080)、交換機(jī)連接OpenFlow端口(6633)、默認(rèn)的超時(shí)值等。n 如果在Eclipse或命令行(java -jar floodlight.jar)運(yùn)行Floodlight,默認(rèn)情況下加載默認(rèn)屬性文件。詳細(xì)情況可以查看程序參數(shù)包括 -cf some_properties_file文件。n 如果在Floodlight-vm上運(yùn)行的Floodlight,floodlight.jar是按照 /opt/floodlight/floodlight/configuration/perties instead of perties文件,作為服務(wù)載入n 如果需要修改默認(rèn)值,停止Floodlight,更新以上所說的屬性文件并重啟。l 如果自定義新的模塊更新上述的兩個(gè)文件并重啟生效。雖然大多數(shù)的應(yīng)用都是按照默認(rèn)屬性配置運(yùn)行,但是下面的應(yīng)用程序需要一組特定的模塊,因此需要一個(gè)特定的配置文件(由于某些模塊之間不兼容)來運(yùn)行。l OpenStack Quantum plugin:需要和src/main/resources/perties文件一起運(yùn)行l(wèi) Forwarding和StaticFlowEntryPusher:這兩個(gè)模塊都是默認(rèn)加載的,但有時(shí)你只需要加載其中的一個(gè)來實(shí)現(xiàn)應(yīng)用程序的功能。例如,你想要一個(gè)完全自動(dòng)配置的網(wǎng)絡(luò)并且不會(huì)有轉(zhuǎn)發(fā)反應(yīng),因此只需要StaticFlowEntryPusher模塊而禁止Forwarding模塊??刂迫罩炯?jí)別在控制臺(tái)顯示的調(diào)試信息有時(shí)是很有幫助的,但有時(shí)又會(huì)顯得十分繁雜。Floodlight使用org.slf4j.Logger模塊,將日志信息劃分不同的等級(jí)。同時(shí),日志等級(jí)是可控的。在默認(rèn)情況下,F(xiàn)loodlight顯示了所有的日志等級(jí)。為了控制日志等級(jí),可以向JVM傳遞以下參數(shù):java -Dlogback.configurationFile=logback.xml -jar floodlight.jar如果實(shí)在Eclipse下運(yùn)行的Floodlight,點(diǎn)擊運(yùn)行-運(yùn)行/調(diào)試配置-參數(shù)-VM參數(shù),在這里添加 -Dlogback.configurationFile=logback.xmlXml文件已經(jīng)包含在Floodlight根目錄中。 %level %logger:%thread %msg%n 在這個(gè)例子中,net,floodlightcontroller包含了所有的floodlight模塊,并且具有日志記錄級(jí)別的信息,因此調(diào)試信息并不會(huì)出現(xiàn)在控制臺(tái)中。你可以在logxml文件中指定INFO,WARN和DEBUG的級(jí)別。監(jiān)聽地址和端口配置為了改變主機(jī)地址或監(jiān)聽特定服務(wù)的端口號(hào),可以在屬性配置文件中使用以下的配置參數(shù):net.floodlightcontroller.restserver.RestApiServer.hostnet.floodlightcontroller.restserver.RestApiSernal.FloodlightPernal.FloodlightProvider.openflowportnet.floodlightcontroller.jython.JythonDebugInterface.hostnet.floodlightcontroller.jython.JythonDebugInterface.port默認(rèn)的屬性配置文件(例如:perties)Floodlight REST API虛擬網(wǎng)絡(luò)過濾器的REST APIURI方法URI 參數(shù)數(shù)據(jù)數(shù)據(jù)作用域描述/networkService/v1.1/tenants/tenant/networks/networkPUT/POST/DELETETenant:暫時(shí)忽略Network:網(wǎng)絡(luò)ID(非網(wǎng)絡(luò)名)network: gateway: , name: IP:點(diǎn)分十進(jìn)制的網(wǎng)關(guān)IP,可以為空 Name:字符串形式的網(wǎng)絡(luò)名創(chuàng)建一個(gè)新的虛擬網(wǎng)絡(luò),ID和name是必須的但是網(wǎng)關(guān)是可選的。/networkService/v1.1/tenants/tenant/networks/network/ports/port/attachmentPUT/DELETETenant: Currently ignored Network: The ID (not name) of the networkPort: Logical port nameattachment: id: , mac: Network ID: 字符串形式的剛剛創(chuàng)建的網(wǎng)絡(luò)的ID MAC:點(diǎn)分十進(jìn)制的MAC地址給虛擬網(wǎng)絡(luò)添加主機(jī)/networkService/v1.1/tenants/tenant/networks GETTenant: Currently ignoredNoneNone以json形式顯示所有的網(wǎng)絡(luò)的網(wǎng)絡(luò)名、ID、網(wǎng)關(guān),所有主機(jī)的MAC地址Curl使用樣例創(chuàng)建一個(gè)名字是“VirtualNetwork1”的虛擬網(wǎng)絡(luò),ID是“Networkid1”,網(wǎng)關(guān)是“”,tenant是“默認(rèn)”(目前是忽略的):curl -X PUT -d network: gateway: , name: virtualNetwork1 http:/localhost:8080/networkService/v1.1/tenants/default/networks/NetworkId1添加一個(gè)主機(jī)到VirtualNetwork1,MAC地址為“00:00:00:00:00:08”端口為“port1”curl -X PUT -d attachment: id: NetworkId1, mac: 00:00:00:00:00:08 http:/localhost:8080/networkService/v1.1/tenants/default/networks/NetworkId1/ports/port1/attachmentStaticFlow Pusher API(新)什么是Static Flow Pusher?Static Flow Pusher是Floodlight的一個(gè)模塊,通過REST API形式向外曝露,這個(gè)接口允許用戶手動(dòng)向OpenFlow網(wǎng)絡(luò)中插入流表。主動(dòng)和被動(dòng)流插入OpenFlow支持兩種流插入方式:主動(dòng)式和被動(dòng)式。當(dāng)數(shù)據(jù)包到達(dá)OpenFlow交換機(jī)但未成功匹配流表時(shí)發(fā)生被動(dòng)式流表插入。這個(gè)數(shù)據(jù)包將會(huì)被發(fā)送到控制器,控制器對(duì)數(shù)據(jù)包進(jìn)行分析評(píng)估,添加相應(yīng)的流表并允許交換機(jī)繼續(xù)該數(shù)據(jù)包的轉(zhuǎn)發(fā)。另外,也可以在數(shù)據(jù)包到達(dá)交換機(jī)之前,控制器可以主動(dòng)地插入相應(yīng)流表。Floodlight支持這兩種的流表插入方式。Static Flow Pusher對(duì)于主動(dòng)插入流表的方式很有幫助。注意,在默認(rèn)情況下,F(xiàn)loodlight載入的轉(zhuǎn)發(fā)模塊是被動(dòng)插入流表模式的。如果只使用靜態(tài)流表,就必須將Forwarding模塊從perties文件中刪除。使用方法API總結(jié)URI Description Arguments /wm/staticflowentrypusher/jsonAdd/Delete static flowHTTP POST data (add flow), HTTP DELETE (for deletion)/wm/staticflowentrypusher/list/jsonList static flows for a switch or all switchesswitch: Valid Switch DPID (XX:XX:XX:XX:XX:XX:XX:XX) or all/wm/staticflowentrypusher/clear/jsonClear static flows for a switch or all switchesswitch: Valid Switch DPID (XX:XX:XX:XX:XX:XX:XX:XX) or all添加一個(gè)靜態(tài)流表Static Flow Pusher是通過REST API方式接入,所以有很多訪問方式。例如:要在switch1中插入一個(gè)流表,使得port1進(jìn)入的數(shù)據(jù)包從port2轉(zhuǎn)發(fā)出去。這一操作可以通過使用簡(jiǎn)單的curl命令實(shí)現(xiàn)。第二個(gè)命令將顯示流表設(shè)置。curl -d switch: 00:00:00:00:00:00:00:01, name:flow-mod-1, priority:32768, ingress-port:1,active:true,actions:output=2 http:/:8080/wm/staticflowentrypusher/jsoncurl http:/:8080/wm/core/switch/1/flow/json;刪除靜態(tài)流表通過發(fā)送包含流表名稱的HTTP DELETE來刪除靜態(tài)流表curl -X DELETE -d name:flow-mod-1 http:/:8080/wm/staticflowentrypusher/json流表項(xiàng)屬性Key Value Notes switchID of the switch (data path) that this rule should be added to xx:xx:xx:xx:xx:xx:xx:xxnameName of the flow entry, this is the primary key, it MUST be uniqueactions=See table of actions below Specify multiple actions using a comma-separated list Specifying no actions will cause the packets to be droppedpriorityD默認(rèn)值為 32767 最大值為 32767active wildcards ingress-portswitch port on which the packet is received Can be hexadecimal (with leading 0x) or decimalsrc-macxx:xx:xx:xx:xx:xxdst-macxx:xx:xx:xx:xx:xxvlan-id可以使16進(jìn)制(以0X開頭)或者是10進(jìn)制vlan-priority可以使16進(jìn)制(以0X開頭)或者是10進(jìn)制ether-type可以使16進(jìn)制(以0X開頭)或者是10進(jìn)制tos-bits可以使16進(jìn)制(以0X開頭)或者是10進(jìn)制protocol可以使16進(jìn)制(以0X開頭)或者是10進(jìn)制src-ipxx.xx.xx.xxdst-ipxx.xx.xx.xxsrc-port可以使16進(jìn)制(以0X開頭)或者是10進(jìn)制dst-port可以使16進(jìn)制(以0X開頭)或者是10進(jìn)制操作域的操作選項(xiàng)Key ValueNotesoutput all controller local ingress-port normal flood沒有丟棄選項(xiàng)(但可以不指定操作從而丟棄數(shù)據(jù)包) enqueue:第一個(gè)數(shù)字是端口號(hào),第二個(gè)是隊(duì)列ID可以是16進(jìn)制(0x開頭)或者10進(jìn)制strip-vlan set-vlan-id可以是16進(jìn)制(0x開頭)或者10進(jìn)制set-vlan-priority可以是16進(jìn)制(0x開頭)或者10進(jìn)制set-src-macxx:xx:xx:xx:xx:xxset-dst-macxx:xx:xx:xx:xx:xxset-tos-bits set-src-ipxx.xx.xx.xxset-dst-ipxx.xx.xx.xxset-src-port可以是16進(jìn)制(0x開頭)或者10進(jìn)制set-dst-port可以是16進(jìn)制(0x開頭)或者10進(jìn)制在主動(dòng)插入方式中使用Static Flow PusherStatic Flow Pusher可以通過編寫簡(jiǎn)單的python代碼腳本來控制。例如,在運(yùn)行floodlight之后配置mininet虛擬機(jī)。默認(rèn)的拓?fù)浣Y(jié)構(gòu)式一個(gè)交換機(jī)(s1)和兩個(gè)連接到交換機(jī)的主機(jī)(h2,h3)。sudo mn -controller=remote -ip= -port=6633以下代碼是插入從h2發(fā)送到h3和h3發(fā)送到h2的流表import httplibimport jsonclass StaticFlowPusher(object): def _init_(self, server): self.server = server def get(self, data): ret = self.rest_call(, GET) return json.loads(ret2) def set(self, data): ret = self.rest_call(data, POST) return ret0 = 200 def remove(self, objtype, data): ret = self.rest_call(data, DELETE) return ret0 = 200 def rest_call(self, data, action): path = /wm/staticflowentrypusher/json headers = Content-type: application/json, Accept: application/json, body = json.dumps(data) conn = httplib.HTTPConnection(self.server, 8080) conn.request(action, path, body, headers) response = conn.getresponse() ret = (response.status, response.reason, response.read() print ret conn.close() return retpusher = StaticFlowPusher( h2 ping h3Firewall REST APIFirewall REST接口防火墻模塊提供REST接口服務(wù),該接口實(shí)現(xiàn)了采用REST API服務(wù)形式的RestletRoutable接口。以下是REST方法的列表:URIMethodURI ArgumentsDataData FieldsDescription/wm/firewall/module/jsonGET選項(xiàng):status,enable,disable存儲(chǔ)規(guī)則,子網(wǎng)掩碼NoneNone查詢防火墻狀態(tài),啟用、停止防火墻/wm/firewall/rules/json GETNoneNoneNone以json格式理出所有的規(guī)則 POSTNone:, :, .field:value 所有的序列組合: switchid:, src-inport:, src-mac: , dst-mac: , dl-type: , src-ip: , dst-ip: , nw-proto: , tp-src: , tp-dst: , priority: , action: Note: specifying src-ip/dst-ip without specifying dl-type as ARP, or specifying any IP-based nw-proto will automatically set dl-type to match IPv4. 創(chuàng)建新的防火墻規(guī)則 DELETENone:ruleid: 注意:rule id是成功創(chuàng)建規(guī)則是以json形式生成并返回的隨機(jī)數(shù)根據(jù)rule id刪除規(guī)則Curl使用樣例假設(shè)控制器在本機(jī)上運(yùn)行,顯示防火墻運(yùn)行還是禁用curl http:/localhost:8080/wm/firewall/module/status/json啟用防火墻。默認(rèn)情況下防火墻禁用所有的流量除非創(chuàng)建新的明確允許的規(guī)則curl http:/localhost:8080/wm/firewall/module/enable/json添加了允許所有流通過交換機(jī)00:00:00:00:00:00:00:01的規(guī)則curl -X POST -d switchid: 00:00:00:00:00:00:00:01 http:/localhost:8080/wm/firewall/rules/json添加允許所有IP為的主機(jī)到IP為的主機(jī)的流的規(guī)則。不指定動(dòng)作就是允許的規(guī)則curl -X POST -d src-ip: /32, dst-ip: /32 http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d src-ip: /32, dst-ip: /32 http:/localhost:8080/wm/firewall/rules/json添加允許所有MAC地址為00:00:00:00:00:00:00:0b的主機(jī)到MAC地址為00:00:00:00:00:00:00:0c的主機(jī)的流的規(guī)則curl -X POST -d src-mac: 00:00:00:00:00:0a, dst-mac: 00:00:00:00:00:0a http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d src-mac: 00:00:00:00:00:0b, dst-mac: 00:00:00:00:00:0b http:/localhost:8080/wm/firewall/rules/json添加允許IP為的主機(jī)到IP為的主機(jī)ping測(cè)試的規(guī)則。curl -X POST -d src-ip: /32, dst-ip: /32, dl-type:ARP http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d src-ip: /32, dst-ip: /32, dl-type:ARP http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d src-ip: /32, dst-ip: /32, nw-proto:ICMP http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d dst-ip: /32, dst-ip: /32, nw-proto:ICMP http:/localhost:8080/wm/firewall/rules/json添加允許IP為難到IP為0主機(jī)的UDP轉(zhuǎn)發(fā)(如iperf)規(guī)則,并禁止5010端口。curl -X POST -d src-ip: /32, dst-ip: 0/32, dl-type:ARP http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d dst-ip: 0/32, dst-ip: /32, dl-type:ARP http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d src-ip: /32, dst-ip: 0/32, nw-proto:UDP http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d src-ip: 0/32, dst-ip: /32, nw-proto:UDP http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d src-ip: /32, dst-ip: 0/32, nw-proto:UDP, tp-src:5010, action:DENY http:/localhost:8080/wm/firewall/rules/jsoncurl -X POST -d src-ip: 0/32, dst-ip: /32, nw-proto:UDP, tp-src:5010, actio應(yīng)用REST應(yīng)用Circuit PusherCircuit Pusher采用floodlight REST API在所有交換機(jī)上創(chuàng)建基于IP地址與指定的優(yōu)先級(jí)兩個(gè)設(shè)備之間路由的一個(gè)雙向電路即永久性的流表項(xiàng)。注意1. Circuit Pusher 現(xiàn)在只能創(chuàng)建兩個(gè)IP主機(jī)之間的,雖然只是簡(jiǎn)單的擴(kuò)展以創(chuàng)建基于CIDR格式的IP前綴(例如:/16)電路,但是支持Static Flow Pusher。2. 在向Circuit Pusher發(fā)送restAPIRequest之前,控制器必須已經(jīng)檢測(cè)到終端設(shè)備的存在(即終端設(shè)備已經(jīng)在網(wǎng)絡(luò)中發(fā)送過數(shù)據(jù),最簡(jiǎn)單的辦法就是用網(wǎng)絡(luò)中任意兩臺(tái)主機(jī)ping一下),只有這樣控制器才知道這些網(wǎng)絡(luò)終端設(shè)備的接入點(diǎn)從而計(jì)算他們的路由。3.當(dāng)前支持的命令格式語法為:a) circuitpusher.py -controller=IP:rest port -type ip -src IP -dst IP -add -name circuit-name在目前IP鏈路允許的情況之下在目的和源設(shè)備之間新建一個(gè)鏈路。ARP自動(dòng)支持。目前,由工作目錄中的一個(gè)文本文件circuits.json提供一個(gè)簡(jiǎn)單的鏈路記錄存儲(chǔ)。這個(gè)文件沒有設(shè)置任何保護(hù),并且在控制器重啟時(shí)也不會(huì)重置。這個(gè)文件需要正確的操作。用戶也應(yīng)該確保當(dāng)floodlight控制器重啟時(shí)刪除該文件。b) circuitpusher.py -controller=IP:rest port -delete -name circuit-name通過之前創(chuàng)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論