OpenFlow 13、RYU SDN控制器,buffer_id到底是什么?

OpenFlow 13, RYU SDN controller, what exactly is a buffer_id?

我在 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)

我现在正在尝试发送数据包而不向控制器添加流。不过我打算以后加流量。

"In most cases, switches and routers are configured for "尽最大努力"数据包转发。"

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

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

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

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