据我了解,dpctl dump-flows
命令仅有助于查看流表的当前状态。流表经常被刷新。我想记录流表条目。
我需要查看哪个类来记录流表?我在 Virtual Box 中安装的 Ubuntu 上使用 POX 控制器和 mininet。
将 s2 视为一个开关,您可以使用它来记录流表(-O OpenFlow13 是可选的):
sh ovs-ofctl dump-flows s2 -O OpenFlow13 > exampleLog.txt
如果您在 s2 中有规则,则结果将是:
mininet@mininet-vm:~/mininet$ cat exampleLog.txt
OFPST_FLOW reply (OF1.3) (xid=0x2):
cookie=0x170000000000000, duration=9.458s, table=0, n_packets=6, n_bytes=588, priority=10,ip,in_port=1,nw_src=10.0.0.1,nw_dst=10.0.0.6 actions=output:4
cookie=0x170000001000000, duration=8.556s, table=0, n_packets=5, n_bytes=490, priority=10,ip,in_port=4,nw_src=10.0.0.6,nw_dst=10.0.0.1 actions=output:1
cookie=0x0, duration=42.627s, table=0, n_packets=20, n_bytes=1368, priority=0 actions=CONTROLLER:65535
要记录被刷新的流,您可以使用OFPFF_SEND_FLOW_REM
可用字段,该字段可由控制器在设置流操作时设置。根据 openflow 规范:
当流条目被控制器或流到期机制删除时,交换机必须检查流条目的OFPFF_SEND_FLOW_REM
标志。如果设置了此标志,则交换机必须向控制器发送流移除消息。每个流删除消息都包含流条目的完整描述、删除原因(过期或删除)、删除时的流条目持续时间以及删除时的流统计信息。
我不确定 POX 中的确切实现,但这结合起来ovs-ofctl dump-flows
可能是一个好方法