Your SlideShare is downloading. ×
of_protocol_tremaday5
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

of_protocol_tremaday5

221
views

Published on

flowforwardingのof_protocolで遊んでみた話です。 …

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

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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