ネットワークエミュレーション機能 (openvswitch の起動)
質問を頂いたので、Trema のネットワークエミュレーション機能において、openvswitch がどのように起動されるかを解説します。
openvswitch の起動
openvswitch は、Trema 内の Ruby において、OpenVswitch クラスとして表現されています(ソース)。このクラス中で、openvswitch を起動するためのメソッドが以下のように定義されています。
def command "sudo #{ Executables.ovs_openflowd } #{ options }" end
実行ファイル名は、executables.rb を見ると、trema ディレクトリ内でビルドされた "openvswitch/bin/ovs-openflowd" です。これが options つきで起動されています。options は以下のようになっています。
def options default_options.join( " " ) + " netdev@#{ network_device } tcp:#{ ip }:#{ @port }" end def default_options [ "--detach", "--out-of-band", "--fail=closed", "--inactivity-probe=180", "--rate-limit=40000", "--burst-limit=20000", "--pidfile=#{ pid_file }", "--verbose=ANY:file:dbg", "--verbose=ANY:console:err", "--log-file=#{ log_file }", "--datapath-id=#{ dpid_long }", "--unixctl=#{ unixctl }", ] + ports_option end
さらに ports_option は以下のようになっています。
def ports_option @interfaces.empty? ? [] : [ "--ports=#{ @interfaces.join( "," ) }" ] end
"--ports=trema0-1,trema1-1" といった感じで ports_option が作られます。
追記
openvswitch の Changelog を見ると、1.2 系から ovs-openflowd が test-openflowd にリネームされています。Trema では Rantfile 中で、test-openflowd を ovs-openflowd に戻しているようです。ovs-openflowd は廃止の方向のようなので、Trema チームでは今後どうするか検討を行なっています(検討結果について誰かがすでにつぶやいてしまっている気もしますが)。