コマンド復唱と挙動の確認に昨日のL2フォワードを少し弄ってみる。
root@box:~# ovs-vsctl show
a66779ff-0224-40ef-89f1-0deb21b939db
Bridge "br0"
Controller "tcp:192.168.254.100"
Port "br0"
Interface "br0"
type: internal
Port "eth0"
Interface "eth0"
Port "eth1"
Interface "eth1"
Port "eth2"
Interface "eth2"
こんな感じのものを3つほど用意。コントローラ無しでもPingが通ります。
さて今回はコントローラでL3のフォワーディングを実行。これも通ります。
# ./pox.py forwarding.l3_learning POX 0.1.0 (betta) / Copyright 2011-2013 James McCauley, et al. INFO:core:POX 0.1.0 (betta) is up. INFO:openflow.of_01:[00-00-ab-f3-41-02 1] connected INFO:openflow.of_01:[00-ab-05-d3-88-00 2] connected INFO:openflow.of_01:[00-00-ab-05-5d-02 3] connected INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86 INFO:forwarding.l3_learning:2884845826 2 RE-learned 0.0.0.0 INFO:forwarding.l3_learning:2869255426 2 RE-learned 192.168.0.10 INFO:forwarding.l3_learning:2884845826 2 RE-learned 192.168.0.30 .... ... .. . ^CINFO:core:Going down... INFO:openflow.of_01:[00-00-ab-f3-41-02 1] disconnected INFO:openflow.of_01:[00-ab-05-d3-88-00 2] disconnected INFO:openflow.of_01:[00-00-ab-05-5d-02 3] disconnected INFO:core:Down.
ところでこれはハブ/スイッチっぽい動作ですが、今日実行したものはL3フォワードによる疎通。ひょっとしてループ状にしてもブロードキャストストーム的な事が起こらないのではないだろうか?ということで以下のようなトポロジにしてみます。
ifconfig eth0 down; ifconfig eth1 down; ifconfig eth2 down; ovs-vsctl init ovs-vsctl add-br br0 ovs-vsctl add-port br0 eth0 ovs-vsctl add-port br0 eth1 ovs-vsctl add-port br0 eth2 ovs-vsctl set-controller br0 tcp:192.168.254.100 //3台整ったら ifconfig eth0 up; ifconfig eth1 up; ifconfig eth2 up;
同じIPを何度も学習してPOXが落ちました。
ERROR:core:Exception while handling OpenFlowNexus!PacketIn...
Traceback (most recent call last):
File "/root/pox/pox/lib/revent/revent.py", line 234, in raiseEventNoErrors
return self.raiseEvent(event, *args, **kw)
File "/root/pox/pox/lib/revent/revent.py", line 281, in raiseEvent
rv = event._invoke(handler, *args, **kw)
File "/root/pox/pox/lib/revent/revent.py", line 159, in _invoke
return handler(self, *args, **kw)
File "/root/pox/pox/forwarding/l3_learning.py", line 201, in _handle_PacketIn
"input port" % (dpid, inport, str(dstaddr)))
TypeError: not all arguments converted during string formatting
うーん、いい考えと思ったのですが駄目みたいですね。インターフェイスを落とさないとループしましたし、PC1とPC2 (タイミングによる) だけ応答が出来る等不安定でしたし・・・まだサンプル動かして喜んでる程度では奇抜な事は出来なさそうです。