Openflow多部分请求错误消息:OFPBRC\ U BAD\ U LEN(6)

2024-09-30 14:38:34 发布

您现在位置:Python中文网/ 问答频道 /正文

长话短说,我有一个项目,它要求我用python从头开始创建一个控制器,并处理通过遵循开放流协议的mininet拓扑创建的交换机的请求。你知道吗

有用的开放流协议资源:

我的代码可在github上获得,用于克隆和完全透明:

  • [自2019年12月10日起删除,请参阅下面我的答案]

我遇到的问题是无法发送端口统计信息描述的多部分请求消息(在这个link上搜索PortDesc)。我不知道为什么会这样,但是当我在wireshark中查看数据包时,我得到一个“Range is outbounds”错误。我还没弄明白为什么会这样。以下是一些数据包的截图:

Wireshark捕获:Bytes where I created the multipart requestOpenflow multipart request messFull screenshot of the openflow protocol

Lua错误消息:Lua error message part 1Lua error message part 2

错误请求错误消息响应:Bad request error message responseenter image description here 这里需要注意的是,代码是OFPBRC_BAD_LEN (6),但是在多部分请求中发送的字节长度是16。你知道吗

一位正确发送数据包的同学说,他们使用的打包结构与我相同,只是他们的打包成功了(参见python^{}文档)。我不知道我的问题出在哪里,我也没有什么好主意去检查了。任何指点都将不胜感激。你知道吗

TL;DR:我无法发送多部分请求,即使我遵守了请求规范,结果仍会返回错误代码。wireshark中的错误表示“范围超出界限”,我不知道如何构造我的请求来更正此错误消息。你知道吗


Tags: 项目代码orglayerhttp消息协议message
1条回答
网友
1楼 · 发布于 2024-09-30 14:38:34

我解决了我的问题,但我不认为我有什么问题的答案。首先我将从我的解决方案开始,然后谈谈我认为问题所在。你知道吗

解决方案:

正如您在上面的屏幕截图中所看到的,我在1.5版协议中发送OpenFlow数据包,这是最新的版本,但是访问openflow message layer documentation只显示1.4版之前的文档。你知道吗

在此基础上,文档显示的最新版本的multipart request是1.3.1。即使我为openflowprotocolversion1.5发送了一个多部分请求,它也没有显示为OpenFlowProtocol,而是显示为一个常规的TCP包。我做了以下三件事:

  1. 在我创建交换机的拓扑文件中,我正在初始化 开关为s1 = self.addSwitch( 's1')。我补充了什么 语句是协议参数:s1 = self.addSwitch( 's1', protocols='OpenFlow14')

  2. 为了更好地衡量,我还将protocols规范添加到 控制台中的mininet命令:sudo mn custom mytopo.py topo mytopo controller=remote,ipaddr=127.0.0.1,port=6653,protocols=OpenFlow14

  3. 我还改变了打包请求的方式 指定版本1.5(在包头中是'06',I 将其打包为1.4(在数据包头中是“05”)。req = struct.pack('!BBHI',5,5,8,0)(例如feature_request消息 发送到交换机)。

这些步骤解决了我遇到的问题,并且我能够从交换机获得stats_reply。你知道吗

问题(或我认为的问题):

我认为问题是,到目前为止,openflowversion1.5还不支持multipart请求,当发送端口描述的multipart请求时,它显示了一个常规的TCP协议,而不是OpenFlow协议。你知道吗

相关问题 更多 >