OpenWRT/WHR-G301N 側の設定 前回の記事で /lib/openflow/ofprotocol.sh の修正を行いましたが、それに加え、今回は以下の修正を行いました。 /etc/config/network : switch_vlan の設定を変更しています。 /etc/config/openflow : OpenFlow の設定は、inban…
srchack さんの patch により、OpenWRT を OpenFlow スイッチとして動作させることができるようになりました。OpenWRT の OpenFlow 化については こちら をご参照いただくとして、ここでは trema に繋いでみる方法について簡単に紹介します。 OpenWRT 側の変…
前回紹介した packet_info 型のデータを取り出す関数として、get_packet_info() 関数を用意しています。この関数を使って packet_info 型の構造体の値を取り出すことで、パケット中の値を簡単に参照することができます。 例えば packet_in ハンドラを以下の…
今回は packet_in ハンドラにどのような情報が渡ってくるかについて解説します。packet_in ハンドラに引数として渡ってくる packet_in 構造体は、以下のように定義されています。 typedef struct { uint64_t datapath_id; uint32_t transaction_id; uint32_t…
今回は packet_in ハンドラを使って、簡単なコントローラを書いてみましょう。以下のソースの handle_packet_in() がハンドラです。packet_in メッセージの送りもとのスイッチの datapath_id および受信ポートを表示する簡単なハンドラです。 1. #include <stdio.h> 2</stdio.h>…
C 言語を使った Trema 上でのコントローラプログラミングに関する話です。今回は packet_in を扱う方法について解説します。 packet_in は、OpenFlow スイッチがフローエントリにマッチしなかったパケットをコントローラに送るためのメッセージです。このメ…
topology_discovery が LLDP でトポロジー検出を行う仕組みをみてみます。topology_discovery は LLDP メッセージを作り、packet_out でスイッチへと送ります。スイッチから出力された LLDP は隣接するスイッチに届き、packet_in でコントローラへと戻ってき…
前回の flow_dumper に似たアプリとして show_description があります。さっそく起動してみましょう。 $ ./trema run -c ../apps/routing_switch/routing_switch.conf -d $ TREMA_HOME=`pwd` ../apps/show_description/show_description Manufacturer descri…
Trema を使ってコントローラの開発をしていると、OpenFlow スイッチにちゃんとフローが設定できているのか気になります。OpenFlow の仕様では、OpenFlow スイッチに設定されているフローを取得するために、stats_request メッセージの OFPST_FLOW タイプが用…
作成した OpenFlow コントローラを trema 上で起動すると、セキュアチャネル用にデフォルトで tcp/6633 ポートを Listen します。このポート番号を変えるためには、コンフィグファイルに以下のような 1 行を付け加えます。 config.port = 6644 ネットワーク…
前回の記事で用いた topology_fullmesh.conf には run で始まる箇所が三つあり、それぞれ topology, topology_discovery, dumper という3つのアプリケーションを起動しています。このように trema では複数のアプリを同時に立ち上げることができます。しかし…
前回紹介した topology モジュールを動かしてみましょう。 ビルドと実行 trema 本体と topology のビルドを行ってください。 $ (cd trema/; ./build.rb) $ (cd apps/topology/; make) ビルドができたら、以下のように実行してみてください。 $ (cd trema/; .…
github 上の以下のリポジトリに、Trema を使ったアプリケーションがいくつか登録されています。https://github.com/trema/appsこの中にある topology について紹介します。 Topology とは? 複数の OpenFlow スイッチから構成されるネットワークを、コントロ…
./cruise.rb が最近失敗するようになった。こんな感じに。 kazuya@ubuntu0:~/proj/trema$ ./cruise.rb /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- bundler/setup (LoadError) from /…
質問を頂いたので、Trema のネットワークエミュレーション機能において、openvswitch がどのように起動されるかを解説します。 openvswitch の起動 openvswitch は、Trema 内の Ruby において、OpenVswitch クラスとして表現されています(ソース)。このクラ…
Trema のネットワークエミュレーション機能の中身を見てみたいと思います。例えば、以下のようなコンフィグファイルを Trema から起動したとします。 vswitch ( "vsw" ) { datapath_id "0xabc" } vhost ( "host1" ) vhost ( "host2" ) link "host1", "vsw" l…
今回は、ネットワークエミュレータ機能を使う場合の OpenFlow アプリケーションの起動方法について、解説します。 ネットワークエミュレータを使った起動方法 例えば、一台のスイッチに二台のホストが接続されているネットワークをエミューレートすることを…
Trema 上で開発した OpenFlow アプリケーションの起動方法について、解説します。基本的には、コマンドから直接オブジェクトを指定する方法と、コンフィグファイルに経由で起動する方法の二通りがあります。 コマンドから直接オブジェクトを指定する方法 ま…
SD 2 月号に書いた Routing Switch をもう少しだけ詳しく説明します。Routing Switch は、複数の OpenFlow スイッチで構成されたネットワークをあたかも一つの L2 スイッチとして動作させる Trema アプリケーションです(図1)。C 言語で書かれています。起動…
ブログはじめてみました。OpenFlow コントローラを書くためのフレームワークである Trema について書いてみようかなと思っています。http://trema.github.com/trema