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

2 运行mininet,运行Ryu控制器,测试——(通)

cd ryu

PYTHONPATH=. ./bin/ryu-manager ryu/app/simple_switch.py

3 运行mininet,运行Ryu控制器,ping通后断开Ryu控制器,测试——(通,说明流表已下发,且为永久)

results matching ""

    No results matching ""