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

這里有點尷尬了

參考:

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

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

https://blog.csdn.net/u012424148/article/details/88951559

實際:

因為Ubuntu下,還含有一個Python3版本安裝的pip3,所以我將依賴和安裝中pip全部改成pip3,就安裝成功了

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

安裝成功:

三: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

 


免責聲明!

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



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