Trema アプリを複数同時に起動する方法

前回の記事で用いた topology_fullmesh.conf には run で始まる箇所が三つあり、それぞれ topology, topology_discovery, dumper という3つのアプリケーションを起動しています。このように trema では複数のアプリを同時に立ち上げることができます。

しかしここで、trema は OpenFlow スイッチから送られてきた packet_in などのメッセージを、どのアプリに送るのだろうという疑問がわきます。実は topology.conf の最後にある event, filter から始まる行で、その指定を行なっています。

event :port_status => "topology", :packet_in => "filter", :state_notify => "topology"
filter :lldp => "topology_discovery", :packet_in => "dumper"

event は、OpenFlow スイッチとセキュアチャネルを通じて通信を担う switch_manager に対する設定になっています。OpenFlow スイッチからのイベント port_status, packet_in, state_notify に関して、それぞれどのモジュールに送るかの指定を行います。ここで packet_in は filter モジュールに送られます。

filter は、packet_in で送られるパケットの中身に応じて送り先を変える場合に用いられます。この場合、lldp パケットであれば topology_discovery へ送り、それ以外であれば dumper に送られます。

ここで出てきた switch_manager や filter は、trema の一部をなすモジュールなので、run でその起動をあえて指定する必要はありません。ソースコードはそれぞれ trema/src/switch_manager, trema/src/packetin_filter にあるので、興味がある方はご参照を。