SDN實驗---Ryu的安裝

一:Ryu是主流SDN開源控制器之一

(一)推文(摘錄自)

https://ryu.readthedocs.io/en/latest/

https://www.sdnlab.com/1785.html

(二)Ryu是什麼

Ryu is a component-based software defined networking framework.  Ryu是一個基於組件的軟件定義網絡框架

Ryu provides software components with well defined API's that make it easy for developers to create new network management and control applications. 
Ryu爲軟件組件提供了定義良好的API,使開發人員可以輕鬆地建立新的網絡管理和控制應用程序。

Ryu supports various protocols for managing network devices, such as OpenFlow, Netconf, OF-config, etc.  支持管理網絡設備的多種協議
About OpenFlow, Ryu supports fully 1.0, 1.2, 1.3, 1.4, 1.5 and Nicira Extensions.  所支持的OpenFLow協議版本
All of the code is freely available under the Apache 2.0 license. Ryu is fully written in Python.  全部代碼在Apache2.0許可下都是免費的,Ryu是使用Python開發的

(三)Ryu的架構

二:Ryu的安裝

(一)git遠程獲取文件

git clone git://github.com/osrg/ryu.git

(二)安裝Ryu依賴環境

cd ryu  須要先進入文件夾中
sudo pip install -r tools/pip-requires

(三)進行Ryu安裝

sudo python setup.py install

(四)安裝測試

1.常見問題及解決辦法

 

 2.安裝測試 

njzy@njzy-Inspiron-5493:/usr/local/bin$ ryu-manager

njzy@njzy-Inspiron-5493:/usr/local/bin$ sudo easy_install webob==1.2.3

這裏有點尷尬了

參考:html

https://blog.csdn.net/cyz14/article/details/79994548python

https://ryu-devel.narkive.com/AvVCZ4OS/ryu-installation-error-the-ovs-distribution-was-not-found-and-is-required-by-ryu git

http://www.javashuo.com/article/p-csmiquae-hv.htmlgithub

實際:web

由於Ubuntu下,還含有一個Python3版本安裝的pip3,因此我將依賴和安裝中pip所有改爲pip3,就安裝成功了

sudo pip3 install -r tools/pip-requires sudo python3 setup.py install ryu-manager

安裝成功:api

三:Ryu的源碼目錄

(一)base

base中有一個很是重要的文件:app_manager.py,其做用是RYU應用的管理中心。用於加載RYU應用程序,接受從APP發送過來的信息,同時也完成消息的路由。

其主要的函數有app註冊、註銷、查找、並定義了RYUAPP基類,定義了RYUAPP的基本屬性。包含name, threads, events, event_handlers和observers等成員,以及對應的許多基本函數。如:start(), stop()等。

這個文件中還定義了AppManager基類,用於管理APP。定義了加載APP等函數。不過若是僅僅是開發APP的話,這個類能夠沒必要關心。

(二)controller

 

controller文件夾中許多很是重要的文件,如events.py, ofp_handler.py, controller.py等。其中controller.py中定義了OpenFlowController基類。用於定義OpenFlow的控制器,用於處理交換機和控制器的鏈接等事件,同時還能夠產生事件和路由事件。其事件系統的定義,能夠查看events.py和ofp_events.py。

在ofp_handler.py中定義了基本的handler句柄,完成了基本的如:握手,錯誤信息處理和keep alive 等功能。更多的如packet_in_handler應該在app中定義。

在dpset.py文件中,定義了交換機端的一些消息,如端口狀態信息等,用於描述和操做交換機。如添加端口,刪除端口等操做。

其餘文件之後再敘述

(三)lib

lib中定義了咱們須要使用到的基本的數據結構,如dpid, mac和ip等數據結構。在lib/packet目錄下,還定義了許多網絡協議,如ICMP, DHCP, MPLS和IGMP等協議內容。而每個數據包的類中都有parser和serialize兩個函數。用於解析和序列化數據包。

lib目錄下,還有ovs, netconf目錄,對應的目錄下有一些定義好的數據類型,再也不贅述。

(四)ofproto

在這個目錄下,基本分爲兩類文件,一類是協議的數據結構定義,另外一類是協議解析,也即數據包處理函數文件。
如ofproto_v1_0.py是1.0版本的OpenFlow協議數據結構的定義,而ofproto_v1_0_parser.py則定義了1.0版本的協議編碼和解碼。具體內容不贅述,實現功能與協議相同。

(五)topology

包含了switches.py等文件,基本定義了一套交換機的數據結構。

event.py定義了交換上的事件。

dumper.py定義了獲取網絡拓撲的內容。

最後api.py向上提供了一套調用topology目錄中定義函數的接口。

(六)contrib

這個文件夾主要存放的是開源社區貢獻者的代碼。

(七)cmd

定義了RYU的命令系統,具體不贅述。

(八)services

完成了BGP和vrrp的實現。

(九)tests

tests目錄下存放了單元測試以及整合測試的代碼

四:Ryu和Mininet聯用

(一)開啓控制器,使用二層交換

~/ryu/ryu/app$ ryu-manager simple_switch.py 

(二)開啓Mininet

sudo mn --controller=remote  //不指定拓撲--默認是一個交換機下面掛兩個主機  --controller=remote 是將mininet的控制器指向遠端控制器 未指定ip,默認0.0.0.0或者本地IP 端口默認是在6635

相關文章
相關標籤/搜索