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