チームワークが良いことで有名な Trema の開発チームですが、その仲の良さの秘密は開発メンバ全員がいつもお揃いの T シャツを着ていることにあります。
Packet Out は OpenFlow で定義されたメッセージの 1 つで、スイッチの指定したポートからパケットを送信させるためのものです。送信するときにはパケットを書き換えることもできます。よく使われる用途として、Packet In でコントローラにパケットが上がってきたときに Packet Out でこのパケットを書き換えてスイッチのポートから送り出す場合があります
Trema の Packet Out API は Controller#send_packet_out メソッドで定義されています。なお Controller クラスはすべてのコントローラの親クラスなので、コントローラはこの send_packet_out メソッドをクラス内で直接呼び出すことができます。それでは、API 定義を見ていきましょう。
フローの構成要素の一つにマッチングルールがあります。マッチングルールとは、OpenFlow スイッチがパケットを受け取ったときにアクションを起こすかどうか決める条件です。たとえば「パケットの宛先が http サーバだったら」とか「パケットの送信元がローカルネットワークだったら」などという条件に適合したパケットにだけ、スイッチがアクションを起こすというわけです。
フローの構成要素の一つにアクションがあります。アクションとは、スイッチに入ってきたパケットをどう料理するか、という動詞にあたる部分です。よく「OpenFlow でパケットを書き換えて曲げる」などと言いますが、これらはすべてこのアクションで実現できることです。それでは、OpenFlow 1.0 ではどんなアクションが定義されているか見てみましょう。
あなたも Trema のコミッタに仲間入りしませんか?ふつうコミッタになるには Trema のパッチを書く必要があるわけですが、実はちっともむずかしくありません。ここで説明するのは Trema に詳しくなくてもすぐにできて、しかも貢献度が高く喜ばれるパッチの作りかたです。
Trema でプログラムを書いているとよく API を調べたくなります。Trema のホームページから API リファレンスへのリンクをたどってもいいのですが、ちょっと面倒ですよね。そこで、もっと簡単に開くショートカットがあります。
それが trema ruby コマンドです。ターミナルで trema ruby を実行すると、次のようにデフォルトブラウザで Trema Ruby API のページが開きます。
プログラミング中いつでもコマンド一発でリファレンスを開けるので大変便利です。