今日も秋田で IoT

旧 Trema 日記

Routing Switch の紹介

SD 2 月号に書いた Routing Switch をもう少しだけ詳しく説明します。

Routing Switch は、複数の OpenFlow スイッチで構成されたネットワークをあたかも一つの L2 スイッチとして動作させる Trema アプリケーションです(図1)。C 言語で書かれています。起動は、trema ディレクトリから以下のように行います。

$ ./trema run -c ../apps/routing_switch/routing_switch_null.conf -d


f:id:kazuya_ax:20120128000924p:image
図 1 Routing Switch の動作イメージ

Routing Switch は、packet_in で入ったきたパケットの MAC アドレスと受信スイッチ、ポートの組を学習しておきます。以前に学習した情報を元に、packet_in 中のパケット (ファーストパケット) の宛先アドレスから送出先のスイッチ、ポートを決定します。Routing Switch では、図 1 の例のように、パケットの送信元と宛先のホストそれぞれが、異なるスイッチに接続している場合にも対応しています。その場合、パケットを受信したスイッチ から、宛先ホストに送出するスイッチまでの最短パスを計算します。そして、計算されたパス上の各スイッチに flow_mod メッセージを送信します。この flow_mod メッセージには、"ファーストパケットと同一の特徴を持つパケットを、最短パス上の次のスイッチへと転送せよ" という指令が含まれています。最後にコントローラに送られたファーストパケットが packet_out で出口となるスイッチまで送られ、宛先ホストに対して送出されます。

flow_mod で送られる指令の中にある同一の特徴とは何でしょうか? Routing Switch のソースを覗いてみると、関数 modify_flow_entry() の中で、Trema の関数 set_match_from_packet() を使ってマッチ条件を作っていることが分かります。Routing Switch では、送信元、宛先の MAC アドレス、IP アドレス、ポート番号等の OpenFlow で扱うことのできる全ての情報を用いてマッチ条件を作っています。


f:id:kazuya_ax:20120128000943p:image
図 2 通常のL2スイッチとの違い

Routing Switch により作ったネットワークは、通常の L2 スイッチを使用した場合に比べ、次のような利点があります。例えば図 2 のようなネットワークを通常の L2 スイッチで作った場合、スパニングツリーにより、リンクが一つ使用されません。Routing Switch では、常に最短となるパスが使用されるため、図 2 のネットワークではすべてのリンクを有効に使用できます。