一。安装Mininet
apt-get install git
这是最好的方式。git下载方式安装容易出错。
二、安装并测试Ryu控制器
1、安装并更新pip
sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install --upgrade pip
2、下载ryu源码
git clone git://github.com/osrg/ryu.git
3、打开Ryu,查看文件夹内包含内容
cd ryu
ls
4、安装Ryu的依赖
sudo pip3 install -r tools/pip-requires
如果出现报错,再执行一遍即可,或者重启系统后执行。
5、安装Ryu
sudo python3 setup.py install
6、测试是否安装成功
cd ryu
cd app
sudo ryu-manager simple_switch.py
出错:pkg_resources.ContextualVersionConflict: (PyYAML 3.12 (/usr/lib/python3/dist-packages), Requirement.parse('PyYAML>=5.1'), {'oslo.config'})
解决方法:# 亲测可用
pip install --ignore-installed PyYAML
7、另打开一个终端,进入root模式,并输入权限密码
su root
8、创建网络拓扑
mn --controller remote --mac --topo tree,2,2
9、先回车ryu-manager,然后回车mn网络拓扑,正常通信即证明mininet和Ryu安装完成;
在网络拓扑中输入“pingall”查看网络连通性。
10. RYU安装GUI
安装依赖:
#pip install Flask((Python 上一個非常知名的輕量化 Web Famework))
#pip install gevent-websocket(在Web Browser 与 GUI Server做联系的套件)
获取图形界面源码:
在gui-patch-v3-rebase 下载gui-patch-v3- rebase软件压缩包,解压,把里面的ryu/gui目录复制到安装Ryu的源代码目录/ryu/ryu;
然后接着我们要到/ryu/ryu/topology/文件夹下修改switches.py文件中的第45行至53行注释掉, 如下图所示:不支持lldp消息处理。
启动Ryu,进入源码目录ryu/app,执行
# ryu-manager --verbose --observe-links ryu.topology.switches ryu.app.rest_topology ryu.app.ofctl_rest ryu.app.simple_switch
启动GUI界面,进入ryu/ryu/gui目录
#python3 controller.py
打开浏览器界面 http://127.0.0.1:8000,即可查看
第二种方式:Ryu自带了网络拓扑可视化的app,名称为gui_topology.py,路径为:ryu安装目录/ryu/app/gui_topology/gui_topology.py。
ryu-manager --verbose --observe-links ryu.app.gui_topology.gui_topology ryu.app.rest_topology ryu.app.ofctl_rest ryu.app.simple_switch
浏览器输入:
Ryu是支持同时启用多个app的,也就是说,启用gui_topology.py这个app并不影响你启用你自己写的控制逻辑app, 即你可以使用如下命令来启用多个app:
ryu-manager /ryu/app/gui_topology/gui_topology.py yourApp.py
三. 使用POSTMAN调用RESTAPI,方便调试
安装Postman:
官网下载地址:https://www.getpostman.com/根据机器类型选择64位下载。
在POSTMAN中输入正确的内容就可以下发请求信息。如请求dpid为1的交换机上的流表信息:
1 | http://localhost:8080/stats/flow/1 |
选择动作类型为GET,点击send,可以马上获得交换机1上的流表信息。
详细流表内容如下。可见目前交换机上有三条流表项,其中第一条是默认的miss_table_entry.后两条是h1和h2通信的双向流表项。
也可以使用POST动作类型,下发一个flow_mod消息,对现有流表进行操作。
四、使用miniedit建立网络拓扑
root 权限模式下依次运行以下代码
root@ubuntu:/home/grape/mininet/examples# ./miniedit.py
ImportError: No module named '_tkinter',
sudo apt install tk-dev
sudo apt-get install python-tk