OpenFlow应用程序框架

zof的Python项目详细描述


MIT licensedBuild Statuscodecov.io

zof是一个python框架,用于创建基于异步的应用程序来控制 使用openflow协议的网络。

支持的功能

  • OpenFlow版本1.0-1.4(部分支持1.5)
  • TLS连接
  • 有限的数据包解析和生成:arp、lldp、ipv4、ipv6、udp、tcp、icmpv4、icmpv6
  • 应用程序可以模拟交换机;支持OpenFlow协议的两边

要求

  • python 3.5.1或更高版本
  • oftr命令行工具

安装-Linux

# Install /usr/bin/oftr dependency.
sudo add-apt-repository ppa:byllyfish/oftr
sudo apt-get update
sudo apt-get install oftr

# Create virtual environment and install latest zof.
python3.5 -m venv myenv
source myenv/bin/activate
pip install zof

oftr命令行工具也可以安装在Raspberry PI or using HomeBrew上。

演示

运行Layer2控制器演示:

python -m zof.demo.layer2

架构

zof使用单独的oftr进程终止openflow连接并将openflow消息转换为json。

Architecture diagram

架构:oftr进程将openflow转换为json。

您可以通过YAML字符串或Python字典构造OpenFlow消息传入的openflow消息是通用的python对象。特殊的openflow常量(如“no_buffer”)显示为字符串。

type:FLOW_MODmsg:command:ADDmatch:-field:IN_PORTvalue:1-field:ETH_DSTvalue:00:00:00:00:00:01instructions:-instruction:APPLY_ACTIONSactions:-action:OUTPUTport_no:2

zof的基本构建块是一个appapp与各种消息和事件处理程序关联。 使用zof.Application类创建应用程序对象。然后,使用应用程序的消息decorator关联处理程序。

importzofAPP=zof.Application('app_name_here')@APP.message('packet_in')defpacket_in(event):APP.logger.info('packet_in message %r',event)@APP.message(any)defother(event):APP.logger.info('other message %r',event)if__name__=='__main__':zof.run()

将上述文本放在名为demo.py的文件中,并使用python demo.py运行它。此应用程序使用packet-in函数处理openflow“packet-in”消息。所有其他消息将发送到other函数。这个应用程序什么也不做,只是记录事件。

要使用第2层演示编写demo.py程序,请执行以下操作:

python demo.py --x-modules=zof.demo.layer2

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OpenShift的齿轮特性   java如何在Liferay站点的每个页面上放置公司地址和电话?   java确定整数数组中是否存在一个子集,在两个条件下求和到给定的目标值   序列化为什么java中的serialVersionUID必须是静态的、最终的、长类型的?   java响应返回null   java注入接口实现Quarkus   java我不明白为什么第二次排序的运行时间比第一次慢?   (Java)显示图像的最佳方式?   java Android应用程序因添加布局而崩溃   java如何在运行时获取泛型变量的类   java Selenium web驱动程序:无效的选择器:*:WebKitFullScreenSentor   Spring中的java注入值始终为空   Eclipse中带有TestNG插件的@BeforeSuite和@AfterSuite的java问题   使用trycatch块、filewriter和printwriter在java中创建自定义类   如何在Java 安卓上绘制相交的两条线