SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
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は便利です。
– 動かすだけなら、短くかけます。
以上

Mais conteúdo relacionado

Destaque

中国にOpenflowを入れてきた話
中国にOpenflowを入れてきた話中国にOpenflowを入れてきた話
中国にOpenflowを入れてきた話cloretsblack
 
Node最新トピックス
Node最新トピックスNode最新トピックス
Node最新トピックスshigeki_ohtsu
 
自動でできるかな?
自動でできるかな?自動でできるかな?
自動でできるかな?_norin_
 
OpenStack Congress and Datalog (Japanese)
OpenStack Congress and Datalog (Japanese)OpenStack Congress and Datalog (Japanese)
OpenStack Congress and Datalog (Japanese)Motonori Shindo
 
10分で作るクラスライブラリ
10分で作るクラスライブラリ10分で作るクラスライブラリ
10分で作るクラスライブラリ_norin_
 
【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...シスコシステムズ合同会社
 
Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?J-Stream Inc.
 
ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話zaki4649
 
とある診断員とAWS
とある診断員とAWSとある診断員とAWS
とある診断員とAWSzaki4649
 
Janog37 Pattern BoF
Janog37 Pattern BoFJanog37 Pattern BoF
Janog37 Pattern BoFMiya Kohno
 
Jcsug21 20140912
Jcsug21 20140912Jcsug21 20140912
Jcsug21 20140912hirokihojo
 
情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた
情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみた
情シス戦線異状アリ!? 自作のパケットレコーダーで海外拠点のLANを自動監視してみたcloretsblack
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Tomoya Hibi
 
試してわかるSDN
試してわかるSDN試してわかるSDN
試してわかるSDNcloretsblack
 

Destaque (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
 

Semelhante a of_protocol_tremaday5

つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜Eric Sartre
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみたJaeseop Jeong
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話Yuta Ohashi
 
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでPowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでKazuhiro Matsushima
 
実践Excelスクレイピング
実践Excelスクレイピング実践Excelスクレイピング
実践Excelスクレイピング宏明 塩原
 
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」についてYuta Hayakawa
 
UniRxでPUNを使いやすくする
UniRxでPUNを使いやすくするUniRxでPUNを使いやすくする
UniRxでPUNを使いやすくするtorisoup
 
OSC hiroshima 2014
OSC hiroshima 2014OSC hiroshima 2014
OSC hiroshima 2014nemumu
 
libpgenでパケット操作
libpgenでパケット操作libpgenでパケット操作
libpgenでパケット操作slankdev
 
簡易デプロイツール(スクリプト)を作ってみた話
簡易デプロイツール(スクリプト)を作ってみた話簡易デプロイツール(スクリプト)を作ってみた話
簡易デプロイツール(スクリプト)を作ってみた話yokoda_toshiaki
 
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事情Junichi Ishida
 
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 20130から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013Tasuku Suenaga
 
LibreOffice ヘルプを翻訳してみよう
LibreOffice ヘルプを翻訳してみようLibreOffice ヘルプを翻訳してみよう
LibreOffice ヘルプを翻訳してみようKazumi Ohhashi
 
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFOLIOのコードを動かしてみた
FOLIOのコードを動かしてみたFutoshi Tanuma
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンNagi Teramo
 
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 2012Hirohide Sano
 
Perl入学式をやってみた! - YAPC::Asia 2012
Perl入学式をやってみた! - YAPC::Asia 2012Perl入学式をやってみた! - YAPC::Asia 2012
Perl入学式をやってみた! - YAPC::Asia 2012Takayuki Fukumoto
 

Semelhante a 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