我一直在努力使用在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)
我正在尝试将数据包发送出去而不向控制器添加流量。但我计划稍后添加流量。
答案 0 :(得分:0)
“在大多数情况下,交换机和路由器都配置为“尽力而为”包转发。”
https://fasterdata.es.net/network-tuning/router-switch-buffer-size-issues/
如果交换机无法立即转发数据包,则需要将其排队并存储在缓冲区中,以防止其被丢弃。
buffer_id
仅用于唯一标识和跟踪数据包(如果它在缓冲区中)。如果它不在缓冲区中,则不指定缓冲区ID,并将其设置为OFP_NO_BUFFER
您正在尝试发送一个包含OFPacketOut
的{{1}},该{@ 1}}引用了一个空缓冲区。您只需为任何传入的buffer_id
指定一次缓冲区,否则将OFPacketIn
设置为buffer_id
。