Download - Lagopus, raw socket build
Lagopus,raw socket build
Feb 28, 2015Masaru OKItwitter @masaru0714
Lagopusとは(おさらい)
● OpenFlow対応ソフトウェアスイッチです● (もちろん)オープンソースです
○ http://lagopus.github.io● よく言われている特徴
○ x86 Linuxで動きます○ DPDKを使っていて、内部の工夫もあり速いです○ マルチコア・マルチスレッドで動作します○ OpenFlowの仕様のカバー範囲が大きいです
OpenFlowソフトウェアスイッチ?
OpenFlowコントローラと組み合わせて使います
別の言い方をすると、コントローラが必要です
Lagopus
コントローラ(別プロセス)
パケット パケット
TCP or SSLLagopusがつなぎにいく
受信パケットをどう処理するか、Lagopusに教える(フローエントリの投入)
OpenFlow Protocol
ソフトウェアスイッチ?
● 一番身近なハードウェアスイッチ: SW-HUB● あるポートで受信したパケットをどこかに転送● 特徴(H/Wだとお値段が張る製品でできる)
○ パケットヘッダを見て自在にフィルタリングができます○ パケットヘッダの加工ができます○ 転送先を自由に決めることができます
Lagopusを動かすまでのイロイロ
● DPDKの利用準備が必要○ hugepageの予約、確保○ UIOモジュールの組み込み○ NICのデバイスドライバ割り当ての切り替え(unbind)
● マルチコア+Intel NIC環境が必要○ 仮想マシンという手もあるけれど……
● unbindするとLinuxからNICが見えなくなる● 手間がかかる、ハードルが高い
raw socket版Lagopus
● DPDKを使わないLagopus● AF_PACKET socketを使いパケットを送受信
○ Intel NICじゃなくても大丈夫!○ ip(8)で作った仮想NIC(gretapやvxlan等)でもOK
● データプレーンは現在シングルスレッド動作● 煩わしいセットアップは不要● ARM等の非x86アーキテクチャでも動かせます
DPDK版とraw socket版
現状raw socket版Lagopusは● セットアップが簡単● 小規模システムでも動く
半面、
● 規模が大きな環境でもスケールしません。
単一プロセスで動くので手軽に試せます。
入手とビルド方法
● 同一ソースコードです○ https://github.com/lagopus/lagopus
● ./configureで切り替えます○ パラメータを何もつけなければraw socket版○ --with-dpdk-dir=をつければDPDK版
● make && sudo make install
lagopus.conf(記述例)
interface ethernet {
p1p1;
p2p2;
}
bridge-domain br0 {
port {
p1p1 port-no 1;
p1p2 port-no 2;
}
controller {
127.0.0.1;
}
}
Lagopusで使用する、 ip(8)で見えるインタフェース名を列挙します。
インタフェース名と、対応する OpenFlowポート番号(1以上)を列挙します。
接続先コントローラの IPアドレスを記述します。
起動、その前に
コントローラが必要です。
OSSなものは例えば下記。お好みでどうぞ○ Trema (Ruby)○ Ryu (Python)○ Floodlight (Java)
Ryuの例sudo pip install ryuryu-manager simple_switch_13.py
起動方法、終了方法
起動sudo lagopus -d -C ./lagopus.conf
終了sudo lagosh> configure# stop-process
-dでフォアグラウンド動作。
もちろんsudo pkill lagopusでも終了します
リファレンス
Lagopushttp://lagopus.github.ioONF (OpenFlowの総本山)http://www.opennetworking.org/Lagopus User Communityhttp://www.lagopus.community/cms/DPDKhttp://dpdk.org/