Features Request でスイッチから情報を取得する (その5)
前回からだいぶ時間がたってしまいましたが、Features Request を用いた情報取得に関する記事の最終回です。今回は、第一回で作成した ShowFeatures コントローラを改造して、Features Request で取得できる情報を更に出力できるようにしてみます。
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 }" puts "Max packets: #{ message.n_buffers }" puts "Number of tables: #{ message.n_tables }" puts "Capabilities: #{ message.capabilities.to_s( 2 ) }" puts "Supported actions: #{ message.actions.to_s( 2 ) }" message.ports.each do | each | puts "Port no: #{ each.number }" puts " Hardware address: #{ each.hw_addr.to_s }" puts " Port name: #{ each.name }" puts " Config: #{ each.config.to_s( 2 ) }" puts " State: #{ each.state.to_s( 2 ) }" puts " Features: #{ each.curr.to_s( 2 ) }" puts " Advertised: #{ each.advertised.to_s( 2 ) }" puts " Supported: #{ each.supported.to_s( 2 ) }" puts " Peer: #{ each.peer.to_s( 2 ) }" end end end
実行してみる
ShowFeatures コントローラを実行してみましょう。
$ sudo trema run ./show-features.rb -c ./network.conf Datapath ID: 0xabc Max packets: 256 Number of tables: 1 Capabilities: 10000111 Supported actions: 111111111111 Port no: 2 Hardware address: 1a:18:a9:7d:35:75 Port name: trema0-1 Config: 0 State: 0 Features: 11000000 Advertised: 0 Supported: 0 Peer: 0 Port no: 65534 Hardware address: 02:2a:33:5d:6c:bd Port name: vsw_0xabc Config: 1 State: 1 Features: 10000010 Advertised: 0 Supported: 0 Peer: 0 Port no: 1 Hardware address: 56:e5:fe:83:bc:9f Port name: trema1-1 Config: 0 State: 0 Features: 11000000 Advertised: 0 Supported: 0 Peer: 0 ^C terminated
スイッチのケイパビリティは、10000111 と表示されています。第三回の記事に記載した enum ofp_capabilities と見比べると、このスイッチでは OFPC_FLOW_STATS, OFPC_TABLE_STATS, OFPC_PORT_STATS, OFPC_ARP_MATCH_IP がサポートされていることがわかります。一方で、OFPC_STP, OFPC_RESERVED, OFPC_IP_REASM, OFPC_QUEUE_STATS はサポートされていません。
また、サポートアクションに関しては、111111111111 と表示されています。OpenFlow 1.0 の仕様で定義されているアクションの数は 12 ですので、このスイッチはこれらをすべてサポートしていることを意味しています。
次に各ポートごとの情報を見ていきます。Config と State に関しては、Port 番号 1 と 2 に関しては両方共 0 となっています。Config が 0 ということは定義されている設定は特に行われていないことを意味します。また State が 0 ということは、STP も特に利用していないので、単に Link up していることを意味します。一方で Port 番号 65534 に関しては、Administrative down されていることがわかります。
ポートのフィーチャーに関しては、Port 番号 1, 2 のポートでは OFPPF_10GB_FD, OFPPF_COPPER のフラグが立っています。今回使用している OpenFlow スイッチでは 10GbE のカッパーを使用しておらず、リンクに関してはソフトウェア的に仮想的に作られてものです。今回使用しているソフトウェアスイッチは、ソフトウェア的なリンクを 10GbE のカッパーとして返す実装を行なっているようです。