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) が準備されていることが分かります。

次回、取得できる情報について詳しい説明をしたいと思います。