2014年3月18日火曜日

OpenFlow Mininetでフローテーブルを確認する方法

Mininetでフローテーブルを確認する方法を調べてみました。

以下のコマンドで表示できます。

dpctl dump-flows
sh ovs-ofctl dump-flows s1

実行すると以下のように表示されます。

mininet@mininet-vm:~$ sudo mn
*** Creating network
(省略)
*** Starting CLI:
mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
mininet> sh ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):

まだフローテーブルには何もフロールールが追加されていません。
1回ホスト1(h1)からホスト2にpingを実行してから、フローテーブルを表示します。

mininet> h1 ping -c 1 h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_req=1 ttl=64 time=1.68 ms

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.682/1.682/1.682/0.000 ms
mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=9.01s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=9, priority=0,icmp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:1
 cookie=0x0, duration=9.01s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=9, priority=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=46:16:7f:f7:0d:da,dl_dst=32:b1:55:2d:00:5e,nw_src=10.0.0.1,nw_dst=10.0.0.2,nw_tos=0,icmp_type=8,icmp_code=0 actions=output:2
 cookie=0x0, duration=9.01s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=9, priority=0,arp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=2 actions=output:1
 cookie=0x0, duration=4.001s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=4, priority=0,arp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=1 actions=output:1
 cookie=0x0, duration=4s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=4, priority=0,arp,in_port=1,vlan_tci=0x0000,dl_src=46:16:7f:f7:0d:da,dl_dst=32:b1:55:2d:00:5e,arp_spa=10.0.0.1,arp_tpa=10.0.0.2,arp_op=2 actions=output:2
mininet>
mininet>
mininet> sh ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=15.212s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=15, priority=0,icmp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:1
 cookie=0x0, duration=15.212s, table=0, n_packets=1, n_bytes=98, idle_timeout=60, idle_age=15, priority=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=46:16:7f:f7:0d:da,dl_dst=32:b1:55:2d:00:5e,nw_src=10.0.0.1,nw_dst=10.0.0.2,nw_tos=0,icmp_type=8,icmp_code=0 actions=output:2
 cookie=0x0, duration=15.212s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=15, priority=0,arp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=2 actions=output:1
 cookie=0x0, duration=10.203s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=10, priority=0,arp,in_port=2,vlan_tci=0x0000,dl_src=32:b1:55:2d:00:5e,dl_dst=46:16:7f:f7:0d:da,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=1 actions=output:1
 cookie=0x0, duration=10.202s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=10, priority=0,arp,in_port=1,vlan_tci=0x0000,dl_src=46:16:7f:f7:0d:da,dl_dst=32:b1:55:2d:00:5e,arp_spa=10.0.0.1,arp_tpa=10.0.0.2,arp_op=2 actions=output:2


他にもIPとポート番号を指定して表示する方法があるようです。

s1 ovs-ofctl dump-flows tcp:127.0.0.1:6634

ただし、前に作ったトポロジー(test_topo.py)でこのコマンドを実行すると以下のようなエラーが出ます。

mininet> s1 ovs-ofctl dump-flows tcp:127.0.0.1:6634
ovs-ofctl: connecting to tcp:127.0.0.1:6634 (Connection refused)

このコマンドで表示するにはトポロジーを少し直して、listenPortの指定をします。

■変更前
net = Mininet()

■変更後
net = Mininet(listenPort=6634)

以上になります。

0 件のコメント:

コメントを投稿