Python Openflow多部分请求错误消息:OFPBRC\u BAD\u LEN(6)
长话短说,我有一个项目,需要我用python从头创建一个控制器,并处理通过遵循开放流协议的mininet拓扑创建的交换机的请求 有用的开放流协议资源:Python Openflow多部分请求错误消息:OFPBRC\u BAD\u LEN(6),python,lua,wireshark,mininet,openflow,Python,Lua,Wireshark,Mininet,Openflow,长话短说,我有一个项目,需要我用python从头创建一个控制器,并处理通过遵循开放流协议的mininet拓扑创建的交换机的请求 有用的开放流协议资源: 我的代码可在github上获得,用于克隆和完全透明: [自2019年12月10日起删除,请参见下面我的回答] 我遇到的问题是,我无法发送端口统计信息描述的多部分请求消息(在此上搜索PortDesc)。我不知道为什么会出现这种情况,但是当我在wireshark中查看数据包时,我得到一个“范围超出界限”错误。我还没弄明白为什么会这样。以
- [自2019年12月10日起删除,请参见下面我的回答]
PortDesc
)。我不知道为什么会出现这种情况,但是当我在wireshark中查看数据包时,我得到一个“范围超出界限”错误。我还没弄明白为什么会这样。以下是数据包数据的一些屏幕截图:
Wireshark捕获:
Lua错误消息:
错误请求错误消息响应:
这里需要注意的是,代码中显示了opbrc\u BAD\u LEN(6),但在多部分请求中发送的字节长度为16
一位正确发送数据包的同学说,他们使用的打包结构与我相同,只是他们的打包成功了(参见python文档)。我不知道我的问题出在哪里,我也没有什么好主意去检查了。任何指点都将不胜感激
TL;DR:我无法发送多部分请求,即使我遵守请求规范,结果仍会返回错误代码。wireshark中的错误表示“超出范围”,我不知道如何构造我的请求以更正此错误消息 我解决了我的问题,但我想我对问题所在没有答案。首先,我将从我的解决方案开始,然后谈谈我认为问题所在 解决方案: 正如您在上面的屏幕截图中所看到的,我在1.5版协议中发送OpenFlow数据包,这是最新的版本,但是访问只显示了1.4版之前的文档 在此基础上,文档显示的多部分请求的最新版本是1.3.1。即使当我发送OpenFlowProtocolVersion1.5的多部分请求时,它也没有显示为OpenFlowProtocol,而是显示为常规TCP数据包。我做了以下三件事:
s1=self.addSwitch('s1')
。我在这上面加了什么
语句是协议参数:s1=self.addSwitch('s1',
协议='OpenFlow14')
协议
规范添加到
控制台中的mininet命令:sudo mn--custom mytopo.py--topo
mytopo
--控制器=远程,ipaddr=127.0.0.1,端口=6653,协议=OpenFlow14
功能请求
消息
发送到交换机)stats\u回复
问题(或我认为问题所在):
我认为问题在于,到目前为止,OpenFlow版本1.5还不支持多部分请求,当发送端口描述的多部分请求时,它显示的是常规TCP协议,而不是OpenFlow协议