SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Of_protocolで遊んでみた
@Eishun_Kondoh
自己紹介
• 某SIerでSEしています。
• 普段はネットワーク周りばかり(ですが、最近ruby
使った仕事もさせてもらってます)
• Trema派です。
• 最近、プログラミングを勉強し始めたばかりの素
人です。
今日は
• of_protocolの話を少しだけします。
– あんまりないようは追っていないよ!!!

• Erlangの話は一切しません。
• Openflow1.3の話もしません。
• 遊んでみた話が中心です。
Of_protocolってなんすか
• Erlangで書かれています。
• Flowforwarding.orgの中のerlangでopenflowな人たち
が作ったLINCというソフトウエアスイッチのOFパケット
パーサ
• 使えるバージョンは1.2(3)と1.3(4)
– ofp_v1.hrlとofp_v2.hrlは1.0と1.1のヘッダみたいなのある
けど、実装はされていない・・・?

• 1.4(5)のブランチもあるようだ…?
Of_protocolのモジュールたち①
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•

gen_protocol.erl
of_protocol.app.src
ofp_channel.erl
ofp_channel_sup.erl
ofp_client.erl
ofp_client_v4.erl
ofp_conn_listener.erl
ofp_conn_listener_sup.erl
ofp_parser.erl
ofp_utils.erl
ofp_v4.erl
ofp_v4_decode.erl
ofp_v4_encode.erl
ofp_v4_enum.erl
ofp_v4_map.erl
ofp_v4_utils.erl
Of_protocolのモジュールたち②
• 中を読んでもらうとわかるかも。LINCでの用途
以外にも、OpenFlowコントローラでも利用さ
れることを意識した作りこみになっているよう
に見える。
• decodeでどんなメッセージが返ってくるかは、
大体include/ofp_vX.hrlと
include/of_protocol.hrlを見ればわかる。
使い方
• of_protocol:encode(#ofp_message)
# => <<….>>
※バイナリが返ってくる。
• of_protocol:decode(BinaryData).
# => #ofp_message{…}
※of_protocol.hrlにかいてるレコードがえられる。
LINCでのテストをチラ見する。
hello() ->
message(#ofp_hello{}).
message(Body) ->
#ofp_message{version = 4,
xid = get_xid(),
body = Body}.
encode(Message) ->
of_protocol:encode(Message)

これでhelloのバイナリを作れます。
簡単だね!
で、もう少し使ってみる。

• ErlangのOpenFlowコントローラには既に
FlowERというものがあるが、、、
少し作ってみた。
• Flowerベースだけど、コントローラのコード上の
見た目が少しだけ違う。
– 個人的には、そのままだと使いづらかった。。。
(FlowERをdisっているわけではない)

• 時間がなかったので、全体的に3.5kLOCという短
さで実装。そのために色々なerlangで書かれたラ
イブラリ等をいっぱい使って実装したみた。
• Openflow1.3に対応させてみた。
構成図
app
sup

Connection
Pool(ranch)

Switch
manager

OpenFlow Switch

event
dispatcher
構成図
app
sup

Connection
Pool(ranch)

Switch
manager

OpenFlow Switch

event
dispatcher
Switch manager
コードはごちゃごちゃしてきたないので割愛。。。
gen_fsm(behaviour )

TransportMod

Event Dispatcher

of_protocol :de/encode
何となくこんな感じに書いて、実行してみる。
Learning switch に相当するよ!
Trema switchを起動しておく

• sudo -E ./objects/switch/switch/switch -datapath_id=4 --server_ip=localhost -server_port=6653 --switch_ports=eth0
結果
$ sh start.sh
….[起動メッセージ]
connected from {127,0,0,1}:37903
Verdict: flood
ちゃんとtremaスイッチに怒られずに
動かせた!!!!
まとめ
• 今回は、openflowでの新しい遊び方を提案し
てみました。
– オレオレコントローラを作って遊ぶのたのしいで
す。

• of_protocolは便利です。
– 動かすだけなら、短くかけます。
以上

Contenu connexe

En vedette

自動でできるかな?
自動でできるかな?自動でできるかな?
自動でできるかな?
_norin_
 
Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?
J-Stream Inc.
 
情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた
情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた
情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた
cloretsblack
 

En vedette (20)

中国にOpenflowを入れてきた話
中国にOpenflowを入れてきた話中国にOpenflowを入れてきた話
中国にOpenflowを入れてきた話
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
Node最新トピックス
Node最新トピックスNode最新トピックス
Node最新トピックス
 
自動でできるかな?
自動でできるかな?自動でできるかな?
自動でできるかな?
 
OpenStack Congress and Datalog (Japanese)
OpenStack Congress and Datalog (Japanese)OpenStack Congress and Datalog (Japanese)
OpenStack Congress and Datalog (Japanese)
 
10分で作るクラスライブラリ
10分で作るクラスライブラリ10分で作るクラスライブラリ
10分で作るクラスライブラリ
 
【Interop Tokyo 2016】 Seminar - EA-14 : シスコ スイッチが標的型攻撃を食い止める ~新しい内部対策ソリューション「C...
【Interop Tokyo 2016】 Seminar - EA-14 : シスコ スイッチが標的型攻撃を食い止める ~新しい内部対策ソリューション「C...【Interop Tokyo 2016】 Seminar - EA-14 : シスコ スイッチが標的型攻撃を食い止める ~新しい内部対策ソリューション「C...
【Interop Tokyo 2016】 Seminar - EA-14 : シスコ スイッチが標的型攻撃を食い止める ~新しい内部対策ソリューション「C...
 
HTTP/2, QUIC入門
HTTP/2, QUIC入門HTTP/2, QUIC入門
HTTP/2, QUIC入門
 
Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?
 
ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話
 
とある診断員とAWS
とある診断員とAWSとある診断員とAWS
とある診断員とAWS
 
Janog37 Pattern BoF
Janog37 Pattern BoFJanog37 Pattern BoF
Janog37 Pattern BoF
 
Jcsug21 20140912
Jcsug21 20140912Jcsug21 20140912
Jcsug21 20140912
 
Contiv 20160914
Contiv 20160914Contiv 20160914
Contiv 20160914
 
Cedexis
CedexisCedexis
Cedexis
 
情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた
情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた
情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)
 
試してわかるSDN
試してわかるSDN試してわかるSDN
試してわかるSDN
 
Router chat for np
Router chat for npRouter chat for np
Router chat for np
 
npstudy 161129
npstudy 161129npstudy 161129
npstudy 161129
 

Similaire à of_protocol_tremaday5

【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
Yuta Hayakawa
 
簡易デプロイツール(スクリプト)を作ってみた話
簡易デプロイツール(スクリプト)を作ってみた話簡易デプロイツール(スクリプト)を作ってみた話
簡易デプロイツール(スクリプト)を作ってみた話
yokoda_toshiaki
 
Perl入学式をやってみた! - YAPC::Asia 2012
Perl入学式をやってみた! - YAPC::Asia 2012Perl入学式をやってみた! - YAPC::Asia 2012
Perl入学式をやってみた! - YAPC::Asia 2012
Takayuki Fukumoto
 

Similaire à of_protocol_tremaday5 (20)

つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話
 
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでPowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまで
 
実践Excelスクレイピング
実践Excelスクレイピング実践Excelスクレイピング
実践Excelスクレイピング
 
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
 
UniRxでPUNを使いやすくする
UniRxでPUNを使いやすくするUniRxでPUNを使いやすくする
UniRxでPUNを使いやすくする
 
OSC hiroshima 2014
OSC hiroshima 2014OSC hiroshima 2014
OSC hiroshima 2014
 
libpgenでパケット操作
libpgenでパケット操作libpgenでパケット操作
libpgenでパケット操作
 
簡易デプロイツール(スクリプト)を作ってみた話
簡易デプロイツール(スクリプト)を作ってみた話簡易デプロイツール(スクリプト)を作ってみた話
簡易デプロイツール(スクリプト)を作ってみた話
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 20130から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013
 
LibreOffice ヘルプを翻訳してみよう
LibreOffice ヘルプを翻訳してみようLibreOffice ヘルプを翻訳してみよう
LibreOffice ヘルプを翻訳してみよう
 
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFOLIOのコードを動かしてみた
FOLIOのコードを動かしてみた
 
Fn project爆誕
Fn project爆誕Fn project爆誕
Fn project爆誕
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
 
Cake assets plugin in PHP Matsuri 2012
Cake assets plugin in PHP Matsuri 2012Cake assets plugin in PHP Matsuri 2012
Cake assets plugin in PHP Matsuri 2012
 
R超入門
R超入門R超入門
R超入門
 
Perl入学式をやってみた! - YAPC::Asia 2012
Perl入学式をやってみた! - YAPC::Asia 2012Perl入学式をやってみた! - YAPC::Asia 2012
Perl入学式をやってみた! - YAPC::Asia 2012
 
オープンソース入門
オープンソース入門オープンソース入門
オープンソース入門
 

of_protocol_tremaday5