1.浏览RYU官网学习RYU控制器的安装和RYU开发入门教程,提交你对于教程代码的理解,包括但不限于:
- 描述官方教程实现了一个什么样的交换机功能?
官方教程实现了一个将接收到的数据包发送到所有端口的交换机功能 - 控制器设定交换机支持什么版本的OpenFlow?
OpenFlow 1.0 - 控制器设定了交换机如何处理数据包?
@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)] out = ofp_parser.OFPPacketOut( datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port, actions=actions) dp.send_msg(out)
类中添加了一个新方法“packet_in_handler”。当Ryu接收到消息中的OpenFlow数据包时调用此函数。诀窍是“set-ev-cls”装饰器。这个decorator告诉Ryu何时应该调用修饰函数。
每次Ryu在消息中收到一个packet_时,都会调用此函数。
使用“MAIN_DISPATCHER”作为第二个参数意味着仅在协商完成后才调用此函数。
之后定义packet_in数据结构对象,数据路径对象datapath,OpenFlow协议和解析过程;定义交换机的动作,如何发送数据包;定义Ryu向交换机发送的packet_out内容,最后发送消息