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

• Erlangの話は一切しません。
• Openflow1.3の話もしません。
• 遊んでみた話が中心です。
Of_protocolってなんすか
• Erlangで書かれています。
• Flowforwarding.orgの中のerlangでopenflowな人たち
が作ったLINCというソフトウエアスイッチのOFパケット
パーサ
• 使えるバージョン...
Of_protocolのモジュールたち①
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•

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

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

• 時間がなかったので、全体的に3.5kLOCと...
構成図
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 --swi...
結果
$ sh start.sh
….[起動メッセージ]
connected from {127,0,0,1}:37903
Verdict: flood
ちゃんとtremaスイッチに怒られずに
動かせた!!!!
まとめ
• 今回は、openflowでの新しい遊び方を提案し
てみました。
– オレオレコントローラを作って遊ぶのたのしいで
す。

• of_protocolは便利です。
– 動かすだけなら、短くかけます。
以上
Upcoming SlideShare
Loading in...5
×

of_protocol_tremaday5

311

Published on

flowforwardingのof_protocolで遊んでみた話です。
おおざっぱすぎるんで、後日修正したのを再アップします。

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
311
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

of_protocol_tremaday5

  1. 1. Of_protocolで遊んでみた @Eishun_Kondoh
  2. 2. 自己紹介 • 某SIerでSEしています。 • 普段はネットワーク周りばかり(ですが、最近ruby 使った仕事もさせてもらってます) • Trema派です。 • 最近、プログラミングを勉強し始めたばかりの素 人です。
  3. 3. 今日は • of_protocolの話を少しだけします。 – あんまりないようは追っていないよ!!! • Erlangの話は一切しません。 • Openflow1.3の話もしません。 • 遊んでみた話が中心です。
  4. 4. 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)のブランチもあるようだ…?
  5. 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
  6. 6. Of_protocolのモジュールたち② • 中を読んでもらうとわかるかも。LINCでの用途 以外にも、OpenFlowコントローラでも利用さ れることを意識した作りこみになっているよう に見える。 • decodeでどんなメッセージが返ってくるかは、 大体include/ofp_vX.hrlと include/of_protocol.hrlを見ればわかる。
  7. 7. 使い方 • of_protocol:encode(#ofp_message) # => <<….>> ※バイナリが返ってくる。 • of_protocol:decode(BinaryData). # => #ofp_message{…} ※of_protocol.hrlにかいてるレコードがえられる。
  8. 8. LINCでのテストをチラ見する。 hello() -> message(#ofp_hello{}). message(Body) -> #ofp_message{version = 4, xid = get_xid(), body = Body}. encode(Message) -> of_protocol:encode(Message) これでhelloのバイナリを作れます。 簡単だね!
  9. 9. で、もう少し使ってみる。 • ErlangのOpenFlowコントローラには既に FlowERというものがあるが、、、
  10. 10. 少し作ってみた。 • Flowerベースだけど、コントローラのコード上の 見た目が少しだけ違う。 – 個人的には、そのままだと使いづらかった。。。 (FlowERをdisっているわけではない) • 時間がなかったので、全体的に3.5kLOCという短 さで実装。そのために色々なerlangで書かれたラ イブラリ等をいっぱい使って実装したみた。 • Openflow1.3に対応させてみた。
  11. 11. 構成図 app sup Connection Pool(ranch) Switch manager OpenFlow Switch event dispatcher
  12. 12. 構成図 app sup Connection Pool(ranch) Switch manager OpenFlow Switch event dispatcher
  13. 13. Switch manager コードはごちゃごちゃしてきたないので割愛。。。 gen_fsm(behaviour ) TransportMod Event Dispatcher of_protocol :de/encode
  14. 14. 何となくこんな感じに書いて、実行してみる。 Learning switch に相当するよ!
  15. 15. Trema switchを起動しておく • sudo -E ./objects/switch/switch/switch -datapath_id=4 --server_ip=localhost -server_port=6653 --switch_ports=eth0
  16. 16. 結果 $ sh start.sh ….[起動メッセージ] connected from {127,0,0,1}:37903 Verdict: flood ちゃんとtremaスイッチに怒られずに 動かせた!!!!
  17. 17. まとめ • 今回は、openflowでの新しい遊び方を提案し てみました。 – オレオレコントローラを作って遊ぶのたのしいで す。 • of_protocolは便利です。 – 動かすだけなら、短くかけます。
  18. 18. 以上
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×