1

很长一段时间以来,我一直在努力使用在 OpenFlow13 上工作的 RYU SDN 控制器。而且我不明白我们需要一个 buffer_id 来做什么。

我正在尝试编写代理应用程序,因此当我收到 192.168.2.2 作为 ipv4.dst 时,我将其修改为 172.10.2.2。

我使用命令执行此操作

actions = [parser.OFPActionSetField(eth_dst=pkt_ethernet.dst),parser.OFPActionSetField(ipv4_dst=pkt_ipv4.dst),parser.OFPActionOutput(2)]

out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
                              in_port=in_port, actions=actions, data=data)
    datapath.send_msg(out)

pkt_ipv4.dst 具有新 IP。

我收到一个错误的请求,OFPBRC_BUFFER_EMPTY(7)

我现在正在尝试在不向控制器添加流的情况下发送数据包。但我计划稍后添加流程。

4

1 回答 1

3

“在大多数情况下,交换机和路由器都配置为“尽力而为”的数据包转发。”

https://fasterdata.es.net/network-tuning/router-switch-buffer-size-issues/

如果交换机无法立即转发数据包,则需要将其排队并存储在缓冲区中以防止其被丢弃。

buffer_id只是为了唯一地识别和跟踪数据包(如果它在缓冲区中)。如果它不在缓冲区中,则不指定缓冲区 ID,并将其设置为OFP_NO_BUFFER

您正在尝试发送一个OFPacketOut包含buffer_id引用空缓冲区的内容。您只需为任何传入的缓冲区指定一次OFPacketIn,否则将其设置buffer_idOFPacketOut.BUFFER_ID_NONE.

于 2019-01-23T21:07:16.797 回答