Features Request でスイッチから情報を取得する (その1)
OpenFlow プロトコルでは、スイッチから情報を取得するために、Features Request/Reply メッセージが定義されています。
今回は、これらのメッセージを用いたコントローラを作り、実行することで、どのような情報が取得できるかを確認してみます。
class ShowFeatures < Controller def switch_ready datapath_id send_message datapath_id, FeaturesRequest.new end def features_reply datapath_id, message puts "Datapath ID: #{ datapath_id.to_hex }" message.ports.each do | each | puts "Port no: #{ each.number }" puts " Hardware address: #{ each.hw_addr.to_s }" puts " Port name: #{ each.name }" end end end
上記を show-features.rb として保存します。
vswitch { dpid "0xabc" } vhost ( "host1" ) vhost ( "host2" ) link "host1", "0xabc" link "host2", "0xabc"
ネットワークエミュレータ用に上記のファイル (network.conf) を用意して、以下のように trema で実行してみましょう。
% sudo trema run ./show-features.rb -c ./network.conf Datapath ID: 0xabc Port no: 2 Hardware address: fe:42:ea:3d:3a:8a Port name: trema0-1 Port no: 65534 Hardware address: ce:47:69:a5:7e:e0 Port name: vsw_0xabc Port no: 1 Hardware address: 46:e0:4e:93:24:79 Port name: trema1-1 ^C terminated
上記のように、スイッチ 0xabc のポート情報が表示されるはずです。このスイッチには、network.conf 内で定義した二つの vhost を収容するためのポート(trema1-1, trema0-1) と、ポート番号が 65534 のポート (vsw_0xabc) が準備されていることが分かります。
次回、取得できる情報について詳しい説明をしたいと思います。