Ryu

Ryu是日本NTT公司推出的SDN控制器框架,它基于Python开发,模块清晰,可扩展性好,逐步取代了早期的NOX和POX。

  • Ryu支持OpenFlow 1.0到1.5版本,也支持Netconf,OF-CONIFG等其他南向协议
  • Ryu可以作为OpenStack的插件,见Dragonflow
  • Ryu提供了丰富的组件,便于开发者构建SDN应用

示例

Ryu的安装非常简单,直接用pip就可以安装

  1. pip install ryu

安装完成后,就可以用python来开发SDN应用了。比如下面的例子构建了一个L2Switch应用:

  1. from ryu.base import app_manager
  2. from ryu.controller import ofp_event
  3. from ryu.controller.handler import MAIN_DISPATCHER
  4. from ryu.controller.handler import set_ev_cls
  5. from ryu.ofproto import ofproto_v1_0
  6. class L2Switch(app_manager.RyuApp):
  7. OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]
  8. def __init__(self, *args, **kwargs):
  9. super(L2Switch, self).__init__(*args, **kwargs)
  10. @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
  11. def packet_in_handler(self, ev):
  12. msg = ev.msg
  13. dp = msg.datapath
  14. ofp = dp.ofproto
  15. ofp_parser = dp.ofproto_parser
  16. actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
  17. out = ofp_parser.OFPPacketOut(
  18. datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
  19. actions=actions)
  20. dp.send_msg(out)

最后可以使用ryu-manager启动应用:

  1. ryu-manager L2Switch.py

参考文档