simple_switch实验
一 源码分析
simple_switch.py 文件Ryu已默认给出,路径为ryu/ryu/app/simple_switch.py,可用Pycharm打开;
定义SimpleSwitch类
所有的app都要继承于app_manager.RyuApp基类;
初始化状态信息
交换机的状态信息主要为端口-MAC的映射关系,即self.mac_to_port = {}
编写处理函数
使用Ryu修饰符告知Ryu控制器本app希望处理的事件消息,一般为packet-in消息,即@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
将事件转化为报文,即msg = ev.msg
获取mac源目的地址,入端口号等信息;
若端口-mac映射表中没有该端口和mac地址则记录下来,添加至self.mac_to_port;
若目的地址在表中,则可直接找出并设置out_port;若不在则out_port设置为flood,进行泛洪广播;
若out_port不为flood,则下发流表,下次该主机间通信就无须经过控制器;
根据上步确定actions,以及packet_out消息
使用send_msg向交换机发该消息;
完成
二 实验过程
1 运行mininet,不运行Ryu控制器,测试——(不通)
sudo mn –controller=remote,ip=127.0.0.1,port=6653 –mac


