ONOS基礎教程(QuickStart with a VM)



  本文為博主原創文章,未經博主允許不得轉載!

 

ONOS基礎教程——QuickStark with a VM

本文檔由http://sdnhub.cn譯自:

https://wiki.onosproject.org/display/ONOS/Basic+ONOS+Tutorial

如果你想更方便的離線閱讀,請下載PDF版本:QuickStart with a VM中文版,另,PDF版已經自帶書簽 :)。

在本教程中,你將完成專門設計的用於解釋ONOS的主要概念的一系列練習,理解如何使用ONOS的基本特性。

1 介紹

1.1 前提條件

  1. 計算機:2G內存和5G自由空間,快速的處理器可以加速虛擬機的運行性能。
  2. 能運行VirtualBox的操作系統。
  3. 安裝VirtualBox,需要管理員權限。
  4. SDN,OpenFlow和Mininet的基本概念。請事先完成OpenFlow tutorialMininet workthrough
  5. 並非必須,但是強烈建議完成FlowVisor tutorial。熟悉Apache Karaf將會很有幫助。

1.2 卡住了?返現了bug? 有問題?

Email:onos-discuss@googlegroups.com
高效的提交bug報告:https://wiki.onosproject.org/display/ONOS/ONOS+Mailing+Lists

2 環境設置

2.1 安裝需要的軟件

下載並安裝VirtualBox最新版,下載Tutorial VM:http://downloads.onosproject.org/vm/onos-tutorial-1.0.0r161-ovf.zip

2.2 創建虛擬機

解壓縮下載的Tutorial VM,雙擊OVF文件將自動啟動VitualBox和導入虛擬機對話框。導入虛擬機,即可。

虛擬機內的Guest OS帳號和密碼如下:
USERNAME:tutorial1
PASSWORD:tutorial1

2.3 重要的命令提示符

ONOS的命令提示符:

onos> 

Mininet的命令提示符:

mininet> 

2.4 重置

桌面上的Reset快捷方式用戶快速重置Tutorial所做的所有改動為初始狀態。

2.5 啟動Mininet

本教程所有的聯系都是使用相同的網絡拓撲(如下圖所示)。網絡中有6台交換機,4台外邊的交換機上連接了6台主機,這4台交換機又連接到中間互連的2台交換機上。

啟動Mininet(雙擊桌面的Mininet圖標)即可啟動此網絡拓撲。

網絡拓撲

3 激活數據包轉發(Reactive Forwarding)

雙擊桌面上的ONOS圖標,打開一個ONOS命令行提示符。

3.1 No ping? Why?

上面的網絡拓撲中主機之間是不能ping通的。在mininet提示符中輸入下面的命令:

mininet>h11 ping -c3 h41 

得到如下的結果:

mininet> h11 ping -c3 h41 PING 10.0.0.19 (10.0.0.19) 56(84) bytes of data. From 10.0.0.1 icmp_seq=1 Destination Host Unreachable From 10.0.0.1 icmp_seq=2 Destination Host Unreachable From 10.0.0.1 icmp_seq=3 Destination Host Unreachable --- 10.0.0.19 ping statistics --- 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2009ms 

“Reactive Forwarding”是一個非常簡單的SDN應用程序,它為每一個被送到控制器的數據包安裝流表。但是此應用默認沒有被加載。使用如下命令查看已經被加載的應用程序列表:

onos> list 110 | Active | 80 | 1.0.0.SNAPSHOT | onos-rest 116 | Active | 80 | 1.0.0.SNAPSHOT | onos-of-api 117 | Active | 80 | 1.0.0.SNAPSHOT | onos-of-ctl 118 | Active | 80 | 1.0.0.SNAPSHOT | onos-lldp-provider 119 | Active | 80 | 1.0.0.SNAPSHOT | onos-host-provider 120 | Active | 80 | 1.0.0.SNAPSHOT | onos-of-provider-device 121 | Active | 80 | 1.0.0.SNAPSHOT | onos-of-provider-packet 122 | Active | 80 | 1.0.0.SNAPSHOT | onos-of-provider-flow 136 | Active | 80 | 1.0.0.SNAPSHOT | onos-cli 137 | Active | 80 | 8.1.15.v20140411 | Jetty :: Websocket 138 | Active | 80 | 1.0.0.SNAPSHOT | onos-gui 151 | Active | 80 | 1.0.0.SNAPSHOT | onos-core-net 152 | Active | 80 | 1.0.0.SNAPSHOT | onos-core-trivial 

3.2 加載Reactive Forwarding應用

在ONOS提示符中輸入如下命令(可以使用tab鍵提示輸入內容):

ONOS>feature:install onos-app-fwd 

在Mininet提示符中再次輸入ping命令,即可ping通:

mininet> h11 ping h41 PING 10.0.0.19 (10.0.0.19) 56(84) bytes of data. 64 bytes from 10.0.0.19: icmp_req=1 ttl=64 time=9.12 ms 

3.3 啟動和停止

在ONOS命令行提示符中輸入如下的命令停止和啟動應用:

onos> stop onos-app-fwd 

停止應用程序后,不能ping通。

onos> start onos-app-fwd 

啟動應用程序后,能ping通。

4 ONOS CLI命令

ONOS有很多命令,本節學習最常用命令。獲得命令行幫助的方法如下:

onos>help onos 

4.1 devices命令

如果沒有設備去控制的話,SDN控制器就沒什么用。列出控制其中現有的設備列表:

onos> devices id=of:0000000000000001, available=true, role=MASTER, type=SWITCH, mfr=Nicira, Inc., hw=Open vSwitch, sw=2.1.3, serial=None, protocol=OF_10 id=of:0000000000000002, available=true, role=MASTER, type=SWITCH, mfr=Nicira, Inc., hw=Open vSwitch, sw=2.1.3, serial=None, protocol=OF_10 id=of:000000000000000b, available=true, role=MASTER, type=SWITCH, mfr=Nicira, Inc., hw=Open vSwitch, sw=2.1.3, serial=None, protocol=OF_10 id=of:000000000000000c, available=true, role=MASTER, type=SWITCH, mfr=Nicira, Inc., hw=Open vSwitch, sw=2.1.3, serial=None, protocol=OF_10 id=of:000000000000000d, available=true, role=MASTER, type=SWITCH, mfr=Nicira, Inc., hw=Open vSwitch, sw=2.1.3, serial=None, protocol=OF_10 

4.2 links命令

顯示系統中設備間的連接信息:

onos> links src=of:000000000000000e/1, dst=of:0000000000000001/5, type=DIRECT, state=ACTIVE src=of:000000000000000d/1, dst=of:0000000000000001/4, type=DIRECT, state=ACTIVE 。。。。。。。。 src=of:0000000000000001/1, dst=of:0000000000000002/1, type=DIRECT, state=ACTIVE 

4.3 hosts命令

列出網絡中的主機列表:

onos> hosts id=00:00:00:00:00:01/-1, mac=00:00:00:00:00:01, location=of:000000000000000b/3, vlan=-1, ip(s)=[10.0.0.1] id=00:00:00:00:00:13/-1, mac=00:00:00:00:00:13, location=of:000000000000000e/ 

4.4 flows命令

流命令允許你查看系統中當前注冊的流表項,流表項有如下幾個狀態:

  • PENDING_ADD – 流被提交和轉發給交換機。
  • ADDED – 流已被添加到交換機。
  • PENDING_REMOVE – 請求刪除已被提交和轉發給交換機的流。
  • REMOVED – 流表規則已被刪除

首先,在網絡中開始發送一些流量:

mininet> h11 ping h41 

接着在ONOS的提示符中輸入流命令,以查看流表信息:

onos> flows deviceId=of:0000000000000001, flowRuleCount=1 id=30000b889cb32, state=ADDED, bytes=8722, packets=89, duration=89, priority=10, appId=org.onlab.onos.fwd selector=[ETH_TYPE{ethType=800}, ETH_SRC{mac=00:00:00:00:00:01}, ETH_DST{mac=00:00:00:00:00:13}, IN_PORT{port=2}] treatment=[OUTPUT{port=5}] deviceId=of:0000000000000002, flowRuleCount=1 id=30000b889cf4d, state=ADDED, bytes=8624, packets=88, duration=88, priority=10, appId=org.onlab.onos.fwd selector=[ETH_TYPE{ethType=800}, ETH_SRC{mac=00:00:00:00:00:13}, ETH_DST{mac=00:00:00:00:00:01}, IN_PORT{port=5}] treatment=[OUTPUT{port=2}] deviceId=of:000000000000000b, flowRuleCount=2 id=30000b88a8321, state=ADDED, bytes=8722, packets=89, duration=89, priority=10, appId=org.onlab.onos.fwd selector=[ETH_TYPE{ethType=800}, ETH_SRC{mac=00:00:00:00:00:13}, ETH_DST{mac=00:00:00:00:00:01}, IN_PORT{port=2}] treatment=[OUTPUT{port=3}] id=30000b88a833e, state=ADDED, bytes=8722, packets=89, duration=89, priority=10, appId=org.onlab.onos.fwd selector=[ETH_TYPE{ethType=800}, ETH_SRC{mac=00:00:00:00:00:01}, ETH_DST{mac=00:00:00:00:00:13}, IN_PORT{port=3}] treatment=[OUTPUT{port=1}] deviceId=of:000000000000000c, flowRuleCount=0 deviceId=of:000000000000000d, flowRuleCount=0 deviceId=of:000000000000000e, flowRuleCount=2 id=30000b88a8e45, state=ADDED, bytes=8722, packets=89, duration=89, priority=10, appId=org.onlab.onos.fwd selector=[ETH_TYPE{ethType=800}, ETH_SRC{mac=00:00:00:00:00:01}, ETH_DST{mac=00:00:00:00:00:13}, IN_PORT{port=1}] treatment=[OUTPUT{port=3}] id=30000b88a8e82, state=ADDED, bytes=8722, packets=89, duration=89, priority=10, appId=org.onlab.onos.fwd selector=[ETH_TYPE{ethType=800}, ETH_SRC{mac=00:00:00:00:00:13}, ETH_DST{mac=00:00:00:00:00:01}, IN_PORT{port=3}] treatment=[OUTPUT{port=2}] 

從上面的輸出中可以看出,ONOS提供了很多交換機上流表的詳細信息。例如:每一條流表項定義一個“selector”和一個“treatment”,他們被流表項進行流量匹配,和匹配的流量如何被處理。每一個流表項被appId標記,指出此流表項被那個應用程序安裝,這是非常有用的特性,因為它能幫助管理員區分那個應用程序行為不當或耗費較多的資源。

4.5 apps命令

列出當前在ONOS上運行的應用程序列表:

onos> apps id=1, name=org.onlab.onos.net.intent id=2, name=org.onlab.onos.fwd 

如上所示,目前為止,本tutorial加載了2個應用程序。

4.6 paths命令

對於給定的網絡拓撲,ONOS計算所有任意兩個節點見的最短路徑。
這一點對於那些獲取路徑信息用於流表安裝的應用程序特別有用。當然也可用於其他用途。paths命令有兩個參數(分別是兩個設備)。可以使用ONOS的tab鍵的命令補全功能。

onos> paths <TAB> of:0000000000000001 of:0000000000000002 of:000000000000000b of:000000000000000c of:000000000000000d of:000000000000000e 

ONOS會列出可用的設備列表,方便找到你需要的設備。下面是paths命令的一個輸出結果示例:

onos> paths of:000000000000000b of:000000000000000e of:000000000000000b/1-of:0000000000000001/2==>of:0000000000000001/5-of:000000000000000e/1; cost=2.0 of:000000000000000b/2-of:0000000000000002/2==>of:0000000000000002/5-of:000000000000000e 

4.7 Intent命令

ONOS中的intent命令允許我們查看系統中的intents。“intents”存在如下幾個狀態:
– SUBMITTED – “intent”已經被提交,很快將被處理。
– COMPILING – “intent”正在被編譯,這是一個瞬態(transient state)。
– INSTALLING – 安裝的“intent”正在被處理。
– INSTALLED – 安裝的“intent”安裝成功。.
– RECOMPILING – “intent”遭遇失敗后,正在被重新編譯。
– WITHDRAWING – “intent”正在被撤銷。
– WITHDRAWN – “intent”已經被刪除。
– FAILED – 由於“intent”不能被滿足,而處於失敗狀態。

更多關於Intents的詳細,參考:https://wiki.onosproject.org/display/ONOS/The+Intent+Framework

onos> intents id=0x0, state=INSTALLED, type=HostToHostIntent, appId=org.onlab.onos.gui constraints=[LinkTypeConstraint{inclusive=false, types=[OPTICAL]}] id=0x1, state=WITHDRAWN, type=HostToHostIntent, appId=org.onlab.onos.cli constraints=[LinkTypeConstraint{inclusive=false, types=[OPTICAL]}] 

使用上面的命令在添加“intent”之前,是看不到任何“intent”。 在本教程的下一節中,你將加載“intent reactive forwarding”應用程序,它可以在需要的時候自動添加intents。

下面的命令(intents -i)能輸出intent被編譯后的“sub-intents”。

onos> intents -i id=0x2, state=INSTALLED, type=HostToHostIntent, appId=org.onlab.onos.ifwd constraints=[LinkTypeConstraint{inclusive=false, types=[OPTICAL]}] installable=[ PathIntent{id=0x4, appId=DefaultApplicationId{id=2, name=org.onlab.onos.ifwd}, selector=DefaultTrafficSelector{criteria=[ETH_SRC{mac=00:00:00:00:00:0D}, ETH_DST{mac=00:00:00:00:00:07}]}, treatment=DefaultTrafficTreatment{instructions=[]}, constraints=[LinkTypeConstraint{inclusive=false, types=[OPTICAL]}], path=DefaultPath{src=ConnectPoint{elementId=00:00:00:00:00:0D/-1, portNumber=0}, dst=ConnectPoint{elementId=00:00:00:00:00:07/-1, portNumber=0}, type=INDIRECT, state=ACTIVE, durable=false}}, PathIntent{id=0x5, appId=DefaultApplicationId{id=2, name=org.onlab.onos.ifwd}, selector=DefaultTrafficSelector{criteria=[ETH_SRC{mac=00:00:00:00:00:07}, ETH_DST{mac=00:00:00:00:00:0D}]}, treatment=DefaultTrafficTreatment{instructions=[]}, constraints=[LinkTypeConstraint{inclusive=false, types=[OPTICAL]}], path=DefaultPath{src=ConnectPoint{elementId=00:00:00:00:00:07/-1, portNumber=0}, dst=ConnectPoint{elementId=00:00:00:00:00:0D/-1, portNumber=0}, type=INDIRECT, state=ACTIVE, durable=false}}] 

例如,對於“host to host”的“intent”已經被編譯成2條“path intents”,這2條“path intents”具有適當的流量選擇和動作(with the appropriate traffic selections and actions computed on your behalf)

5 Intent Reactive Forwarding

ONOS中的另一個范例應用是“intent reactive forwarding”。與前面看到的,基於每個數據包推送流表項不同,“intent reactive forwarding”應用提供“intent”。特殊的,它提供一個“host to host”的“intent”(一個簡單的connectivity intent),用於兩個主機間的連通性。

5.1 除舊迎新

首先,移除原先加載的“reactive forwarding”應用,並且加載“intent reactive forwarding”應用。

onos> feature:uninstall onos-app-fwd onos> feature:install onos-app-ifwd 

注意兩個應用的名字差了一個“i”。:)

OK,查看一下應用是否加載正確:

onos> apps id=0, name=org.onlab.onos.net.intent id=1, name=org.onlab.onos.fwd id=2, name=org.onlab.onos.ifwd 

如上所示,“intent reactive forwarding”被正確加載。The appId“Reactive Forwarding”應用的appId還在,所以如果你重新加載此應用,它將得到與先前相同的appId。

5.2 Intentionally React

接下來,讓我們轉發一些流量:
mininet> h21 ping h31
PING 10.0.0.13 (10.0.0.13) 56(84) bytes of data.
64 bytes from 10.0.0.13: icmp_seq=1 ttl=64 time=25.7 ms
64 bytes from 10.0.0.13: icmp_seq=2 ttl=64 time=1.73 ms
64 bytes from 10.0.0.13: icmp_seq=3 ttl=64 time=0.191 ms
64 bytes from 10.0.0.13: icmp_seq=4 ttl=64 time=0.079 ms
^C
— 10.0.0.13 ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 0.079/6.926/25.700/10.859 ms

使用flows命令可以列出“intent”所安裝的流表項。“intent reactive forwarding”與其他應用,雖然最終結果是一樣的,但是他們從根本上是不同的。“intent reactive forwarding”應用在h21和h31之間安裝了一個“intent”,可以使用“intent -i”命令看到:

onos> intents -i id=0x0, state=INSTALLED, type=HostToHostIntent, appId=org.onlab.onos.ifwd constraints=[LinkTypeConstraint{inclusive=false, types=[OPTICAL]}] installable=[ PathIntent{id=0x1, appId=DefaultApplicationId{id=2, name=org.onlab.onos.ifwd}, selector=DefaultTrafficSelector{criteria=[ETH_SRC{mac=00:00:00:00:00:0D}, ETH_DST{mac=00:00:00:00:00:07}]}, treatment=DefaultTrafficTreatment{instructions=[]}, constraints=[LinkTypeConstraint{inclusive=false, types=[OPTICAL]}], path=DefaultPath{src=ConnectPoint{elementId=00:00:00:00:00:0D/-1, portNumber=0}, dst=ConnectPoint{elementId=00:00:00:00:00:07/-1, portNumber=0}, type=INDIRECT, state=ACTIVE, durable=false}}, PathIntent{id=0x2, appId=DefaultApplicationId{id=2, name=org.onlab.onos.ifwd}, selector=DefaultTrafficSelector{criteria=[ETH_SRC{mac=00:00:00:00:00:07}, ETH_DST{mac=00:00:00:00:00:0D}]}, treatment=DefaultTrafficTreatment{instructions=[]}, constraints=[LinkTypeConstraint{inclusive=false, types=[OPTICAL]}], path=DefaultPath{src=ConnectPoint{elementId=00:00:00:00:00:07/-1, portNumber=0}, dst=ConnectPoint{elementId=00:00:00:00:00:0D/-1, portNumber=0}, type=INDIRECT, state=ACTIVE, durable=false}}] 

從上面的輸出結果中的appId可以看出Intent是由“intent reactive forwarding”應用推送的。intent是一個“host to host”的intent,它指出了路徑(被安裝的流)的細節。關於intents或intents框架更詳細的,請參看:https://wiki.onosproject.org/display/ONOS/The+Intent+Framework

繼續往下進行前,讓我們刪除剛剛安裝的intent,以免影響下面的實驗。

onos> remove-intent <TAB> 

表示tab鍵,它自動不全關的id,類似的bash中tab鍵功能。刪除后再使用intents命令查看一下:

onos> intents 

確保沒有intents存在,一面后面的實驗出現問題。

6 State your intentions

使用intents比簡單的使用流表項去編程網絡的好處是:intents可以跟蹤網絡的狀態,並且為了滿足你的intention對網絡進行重新配置。例如:如果某處的link斷開了,intent框架可以變更(reroute)你的intent(也就是你的流表)到另外可用的路徑上。但是,如果沒有另外可用的路徑該怎么辦呢?在這種情況下,intent將進入失敗狀態,並且保持這種狀態直到出現一個可用的路徑。很酷吧,確實很牛拜!Let’s go。

讓我們從查看ONOS中已知的主機開始,如果你是按照上面的教程一路走來,你將看到4個主機:

onos> hosts id=00:00:00:00:00:01/-1, mac=00:00:00:00:00:01, location=of:000000000000000b/3, vlan=-1, ip(s)=[10.0.0.1] id=00:00:00:00:00:07/-1, mac=00:00:00:00:00:07, location=of:000000000000000c/3, vlan=-1, ip(s)=[10.0.0.7] id=00:00:00:00:00:0D/-1, mac=00:00:00:00:00:0D, location=of:000000000000000d/3, vlan=-1, ip(s)=[10.0.0.13] id=00:00:00:00:00:13/-1, mac=00:00:00:00:00:13, location=of:000000000000000e/3, vlan=-1, ip(s)=[10.0.0.19] 

選擇任意的兩個主機,為他們安裝“host to host”的intent:

onos> add-host-intent 00:00:00:00:00:01/-1 00:00:00:00:00:13/-1 

上面的這條命令在主機10.0.0.1(h11)和主機10.0.0.19(h41)之間建立一條路徑,用如下命令查看安裝的intent:

onos> intents id=0x9, state=INSTALLED, type=HostToHostIntent, appId=org.onlab.onos.cli constraints=[LinkTypeConstraint{inclusive=false, types=[OPTICAL]}] 

現在,intent已經被安裝,讓我們來看一下他使用的是什么路徑(注意:你的數據結果可能與下面的不同,這是因為所有可選的路徑具有相同的花費equal cost,所以ONOS隨機的選擇一個可用的路徑):

onos> flows deviceId=of:0000000000000001, flowRuleCount=2 id=10000c364dd58, state=ADDED, bytes=0, packets=0, duration=1781, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=2}, ETH_SRC{mac=00:00:00:00:00:01}, ETH_DST{mac=00:00:00:00:00:13}] treatment=[OUTPUT{port=5}] id=10000c364ddb2, state=ADDED, bytes=0, packets=0, duration=1781, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=5}, ETH_SRC{mac=00:00:00:00:00:13}, ETH_DST{mac=00:00:00:00:00:01}] treatment=[OUTPUT{port=2}] deviceId=of:0000000000000002, flowRuleCount=0 deviceId=of:000000000000000b, flowRuleCount=2 id=10000c3659528, state=ADDED, bytes=0, packets=0, duration=1781, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=1}, ETH_SRC{mac=00:00:00:00:00:13}, ETH_DST{mac=00:00:00:00:00:01}] treatment=[OUTPUT{port=3}] id=10000c3659564, state=ADDED, bytes=0, packets=0, duration=1781, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=3}, ETH_SRC{mac=00:00:00:00:00:01}, ETH_DST{mac=00:00:00:00:00:13}] treatment=[OUTPUT{port=1}] deviceId=of:000000000000000c, flowRuleCount=0 deviceId=of:000000000000000d, flowRuleCount=0 deviceId=of:000000000000000e, flowRuleCount=2 id=10000c365a06b, state=ADDED, bytes=0, packets=0, duration=1781, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=1}, ETH_SRC{mac=00:00:00:00:00:01}, ETH_DST{mac=00:00:00:00:00:13}] treatment=[OUTPUT{port=3}] id=10000c365a0a7, state=ADDED, bytes=0, packets=0, duration=1781, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=3}, ETH_SRC{mac=00:00:00:00:00:13}, ETH_DST{mac=00:00:00:00:00:01}] treatment=[OUTPUT{port=1}] 

從上面的輸出結果可以看出,在 dpid 00:00:00:00:00:00:00:01 (s1) 和 00:00:00:00:00:00:00:0b (s11) 之間建立了流量流(從流表項可以看出來)。在GUI圖形界面很容易查看。

接下來,讓我們拆除(teardown)s1和s11之間的連接。你必須拆除s2和s11之間的連接,注意觀察flows命令的輸出信息。使用如下的命令:

mininet> link s1 s11 down 

讓我們再次查看一下流表:

onos> flows deviceId=of:0000000000000001, flowRuleCount=0 deviceId=of:0000000000000002, flowRuleCount=2 id=10000c364e119, state=ADDED, bytes=0, packets=0, duration=1, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=2}, ETH_SRC{mac=00:00:00:00:00:01}, ETH_DST{mac=00:00:00:00:00:13}] treatment=[OUTPUT{port=5}] id=10000c364e173, state=ADDED, bytes=0, packets=0, duration=1, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=5}, ETH_SRC{mac=00:00:00:00:00:13}, ETH_DST{mac=00:00:00:00:00:01}] treatment=[OUTPUT{port=2}] deviceId=of:000000000000000b, flowRuleCount=2 id=10000c3659547, state=ADDED, bytes=0, packets=0, duration=1, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=2}, ETH_SRC{mac=00:00:00:00:00:13}, ETH_DST{mac=00:00:00:00:00:01}] treatment=[OUTPUT{port=3}] id=10000c3659565, state=ADDED, bytes=0, packets=0, duration=1, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=3}, ETH_SRC{mac=00:00:00:00:00:01}, ETH_DST{mac=00:00:00:00:00:13}] treatment=[OUTPUT{port=2}] deviceId=of:000000000000000c, flowRuleCount=0 deviceId=of:000000000000000d, flowRuleCount=0 deviceId=of:000000000000000e, flowRuleCount=2 id=10000c365a08a, state=ADDED, bytes=0, packets=0, duration=1, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=2}, ETH_SRC{mac=00:00:00:00:00:01}, ETH_DST{mac=00:00:00:00:00:13}] treatment=[OUTPUT{port=3}] id=10000c365a0a8, state=ADDED, bytes=0, packets=0, duration=1, priority=123, appId=org.onlab.onos.net.intent selector=[IN_PORT{port=3}, ETH_SRC{mac=00:00:00:00:00:13}, ETH_DST{mac=00:00:00:00:00:01}] treatment=[OUTPUT{port=2}] 

從上面的輸出結果可發現,流變成從00:00:00:00:00:00:00:01 to 00:00:00:00:00:00:00:02 (s2),其余的流沒有發生變化。這一切是怎么發生的呢?當拆除s1和s11之間的連接后,ONOS檢測到這個變化(時間),並且通知所有於對此事件有興趣的people“連接斷開了”。所以,intent服務收到這個信息后可以知道到受此變化影響的intent,所以,intent服務根據這個變化重新編譯intent,最終導致這個intent被安裝到一條不同的路徑上。

這個簡單的示例展示了intent比單純的安裝流表更加強大的地方。Intents維護你的意圖(intention,這也是intent名稱的來歷)同時保留安裝他們的能力,這是可能的和最高效的。

6.1 Up down up down

If you wish you can take down more links and see what happens. Obviously, if you partition the network then no flows will be installed, sadly ONOS doesn’t grow links between switches yet. You can bring up links in mininet by:

mininet> link s1 s11 up 

Have fun!

7 ONOS 圖形用戶接口

首先,重新加載reactive forwarding應用。

onos> feature:uninstall onos-app-ifwd onos> feature:install onos-app-fwd 

ONOS自帶GUI,允許你用簡單的方法維護網絡。加載ONOS內置的GUI:

onos> feature:install onos-gui 

之后,雙擊桌面上的’ONOS GUI’ 圖標,啟動web瀏覽器。初始化完成后,看到瀏覽器上有一個基於USA地圖背景的網絡拓撲(使用‘b’鍵隱藏或顯示地圖背景),在瀏覽器上輸入“/”鍵,顯示快速參考。

接下來,我們讓主機出現在這個UI中。在Mininet提示符中使用pingall命令讓主機和網絡進行回話:

mininet> pingall *** Ping: testing ping reachability h11 -> h12 h13 h14 h15 h16 h21 h22 h23 h24 h25 h26 h31 h32 h33 h34 h35 h36 h41 h42 h43 h44 h45 h46 h12 -> h11 h13 h14 h15 h16 h21 h22 h23 h24 h25 h26 h31 h32 h33 h34 h35 h36 h41 h42 h43 h44 h45 h46 。。。。 

注意初始時主機不會再UI中顯示,使用‘h’鍵來顯示主機。如下圖所示:

顯示主機

7.1 GUI特性

7.1.1 GUI速查表

任何時候,在瀏覽器中使用‘/’鍵,都可以顯示出GUI快捷鍵的速查表。

gui_help

7.1.2 摘要面板

在GUI界面中有一個非常有用的摘要面板,顯示了在你的ONOS集群上的摘要信息。

summary_pane

7.1.3 交換機詳細信息

當在GUI中點擊一台交換機時,在右邊會出現一個交換機詳細信息面板。如下圖所示:

switchs_detial

從上圖中可以發現,交換機詳細信息面板中顯示有9個端口,但是在GUI中只顯示了8個。這是引文,OpenFlow交換機具有虛擬端口(virtual ports),這些端口很難顯示在UI中。在交換機上右擊鼠標,將隱藏交換機詳細信息面板。

7.1.4 實例(Instances)

ONOS的GUI界面可以顯示哪一個ONOS實例是活動的(默認此功能是打開的,在左上角)。看使用‘i’鍵打開或關閉當前活動示例的顯示功能。

instances

注意:交換機顏色和示例的顏色一致,表示交換機被哪個實例控制。這有利於總體上瀏覽實例和交換機的控制關系。

7.1.5 安裝Intent

使用GUI可以安裝intent。首先,選擇兩台主機(先選中一個主機,然后按下shift鍵選擇另一個主機。)。我們選擇10.0.0.20和10.0.0.9兩台主機。現在,GUI的右邊會顯示一個面板,如下圖所示:

selected_node

點擊’Create Host-to-host Flow’,這將實際的規定一個host to host的intent,並且將此intent路徑高亮顯示。如下圖所示:

host_to_host_flow

可以通過命令行檢查使用ONOS GUI安裝的intent:

onos> intents id=0x223838ca, state=INSTALLED, type=HostToHostIntent, appId=org.onlab.onos.gui [LinkTypeConstraint{inclusive=false, types=[OPTICAL]}] 

現在,可以在此intent上發送一些流量。在GUI上可以以動畫的方式動態的顯示在這個路徑上的流量和流量的計數值。如下圖所示:(在實驗室,此部分的實時流量顯示有問題,達不到預想的效果!)

host_to_host_flow2

7.1.6 顯示所有的流量 traffic

使用‘a’鍵在ONOS GUI上顯示“All Traffic”。顯示運行網絡中的任何流量。

8.進一步探索

本教程僅僅介紹了一些ONOS的皮毛。強烈建議大家進一步使用ONOS和開發你自己的應用程序,Application tutorial


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM