实验6:开源控制器实践——Ryu
作者:互联网
实验6:开源控制器实践——Ryu
实验步骤
一、安装 Ryu
二、 tcpdump 验证 Ryu 控制器的 L2Switch
- 根据官方文档第一节的 L2Switch 的 python 代码创建文件并运行 Ryu
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,h2 和 h3 都接收到 h1 发送的 ICMP 报文
-
h1 ping h3,h2 和 h3 都接收到 h1 发送的 ICMP 报文
个人总结
- 本次实验与实验 5 类似,不过使用的是不同的控制器。实验中遇到的一个困惑是 POX 控制器实践时,h1 ping h2 会先发送 ARP 报文。然而 Ryu 实践时居然没看见 ARP 报文,直接发送了 ICMP 报文,刚开始时还以为是 Ryu 和 POX的不同之处,后来搜索了资料,并没有相关内容,遂使用 arp -a 命令查看,发现 h1 上已经有了 h2 和 h3的 ip/mac 缓存,可能就是这个原因。清除缓存以后重试,发现 ARP 报文。思考了一下,问题在于我在完成 POX 实践以后并没有马上退出 mininet 命令行,导致拓扑被复用,原来设置的 ip/mac 缓存映射表也被保留了下来,这才有了上述不发送 ARP 报文而直接发送ICMP报文的情况。
标签:控制器,报文,h1,开源,ofp,msg,Ryu,dp 来源: https://www.cnblogs.com/ChenYH-bolg/p/15382953.html