实验6:开源控制器实践——RYU
作者:互联网
一、实验目的
- 能够独立部署RYU控制器;
- 能够理解RYU控制器实现软件定义的集线器原理;
- 能够理解RYU控制器实现软件定义的交换机原理。
二、实验环境
- 下载虚拟机软件Oracle VisualBox或VMware;
- 在虚拟机中安装Ubuntu 20.04 Desktop amd64,并完整安装Mininet;
三、实验要求
(一)基本要求
- 完成Ryu控制器的安装。
- 命令行运行
sudo mn --topo=single,3 --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow10
- 构建下图拓扑,协议使用Open Flow 1.0,并连接Ryu控制器
ryu-manager ryu/ryu/app/gui_topology/gui_topology.py --observe-links
- 通过Ryu的图形界面查看网络拓扑。
- 阅读Ryu文档的The First Application一节,运行并使用 tcpdump 验证L2Switch,分析和POX的Hub模块有何不同。
L2Switch.py
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.ofproto import ofproto_v1_0
class L2Switch(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]
def __init__(self, *args, **kwargs):
super(L2Switch, self).__init__(*args, **kwargs)
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def packet_in_handler(self, ev):
msg = ev.msg
dp = msg.datapath
ofp = dp.ofproto
ofp_parser = dp.ofproto_parser
actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
data = None
if msg.buffer_id == ofp.OFP_NO_BUFFER:
data = msg.data
out = ofp_parser.OFPPacketOut(
datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
actions=actions, data = data)
dp.send_msg(out)
h1 ping h2
h1 ping h3
分析和POX的Hub模块有何不同:
二者均通过洪泛发送报文,但是L2Swtich的下发流表不可查看。
四、个人总结
- 一开始运行gui_topology.py时提示no module name,后面根据同学的提醒发现是在因为在ryu文件夹下打开的终端,只需要返回学号目录下运行即可。
- 创建拓扑后pingall不连通,试了一下发现要重新启用ryu控制器,再使用Ryu验证L2Switch,最后创建拓扑。
- 本次实验与实验五非常相似,都是一个验证性实验,通过实验,我能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。
标签:控制器,ryu,开源,ofp,msg,RYU,dp 来源: https://www.cnblogs.com/Mawlek/p/15426638.html