Java-based な OpenFlow コントローラとして Jaxon を開発しました.
一般的に「OpenFlow コントローラ」と言った場合には, OpenFlow Controller を実現するアプリケーションフレームを指します.
Jaxon は Java での OpenFlow アプリケーションフレームワークになります.
ご存知 (かどうかは知りませんが) OpenFlow は Switch を制御するための共通規格で, SDN (Software Defined Network) を実現するもっとも有力かつ現実的な方法として注目されています.
最近では, Software Design で連載されている NEC (の中の人) が主に開発している Trema プロジェクトが有名ですが.
他にも Nettle や Floodlight プロジェクトなんかがあります.
その中でも, Nicira ネットワークが古くから開発している OpenFlow コントローラに NOX というものがありまして, こいつは C++ と Python による OpenFlow コントロールアプリケーション作成のフレームワークを提供しており, 秀逸なモジュールのアタッチメント構造が特徴です.
さて. 某所で Java での開発を行っておりまして, こいつから直接ネットワーク制御を OpenFlow を使ってやりたいのですが, Floodlight は当時かなりショボいモジュール設計で (現在は NOX に近いモジュール構造が備わっています), NOX の機能を Java から呼び出す仕組みをつくることにしました.
それが今回の Jaxon になります.
アプリケーション側でのコード量を減らすようにする事と, Jaxon-NOX 間でのコミュニケーションコストを低く抑えるように設計しました.
Jaxon では OpenFlow protocol のコードは書かないで, NOX とアプリケーションとの間でのメッセージのやりとりの橋渡しのみを行います.
Jaxon と NOX での言語に違いがあるので, プロセス間通信のような仕組みが必要になってきますが.
NOX 間でのコミュニケーションをシンプルに実装するために, JNA を使って単純な関数呼び出しといった仕組みでメッセージの受け渡しを行います.
JNA は Java から共有ライブラリをロードする仕組みで, NOX の core 機能を共有ライブラリに閉じ込め, そいつとユーザが作成したアプリケーションとのメッセージのやりとりを軽量に行うことができます.
これを使って, どのようにしてコントローラが書けるかや, サンプルコードやその解説については, コミュニティサイトに (比較的丁寧に) 書きましたが.
日本語版や Tips をこの場を借りて, 今後ちょこちょこ書き溜めていこうと思います.
OpenFlow Student
初めてご連絡します。Jaxonの開発お疲れ様です。OpenFlowを学んでいるものです。
Jaxon勉強させていただきます。
ところで、reference(javadoc)を、IEで参照すると日本語の文字化けが発生します。文字コードのご対応をいただけると助かります。
Hiroyasu OHYAMA
コメントありがとうございます。
ごめんなさい、すぐ直します。
ohyama
コメントありがとうございます。
ごめんなさい。直しました。