OpenFlow in Raspberry Pi

2,853 views
2,613 views

Published on

Evaluation of LINC-Switch in Raspberry Pi

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,853
On SlideShare
0
From Embeds
0
Number of Embeds
339
Actions
Shares
0
Downloads
22
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

OpenFlow in Raspberry Pi

  1. 1. ARMボードもくもく勉強会 Raspberry Piで OpenFlow動作を確認してみました 2014.2.22 @ttsubo
  2. 2. 自己紹介 @ttsubo ・通信事業者向けネットワークエンジニアをやってます。 ・最近は、データセンタ系ネットワーク技術動向に興味があり、   OpenStack等のIaaS管理基盤技術を勉強中。 ・さらに、「これからの時代、ネットワーク屋も、プログラミ  ング必要だよね。」という風潮に感化されて、OpenFlow  プログラミングも勉強中。 2
  3. 3. 動機付け ・OpenFlowスイッチを安価に手に入れたい Raspberry Pi LINC-Switch + FlowForwarding.org =OpenFlow1.3 3
  4. 4. Raspberry Piとは? 「Raspberry Pi」は、イギリス生まれで低価格のPCボード。名刺サイズと 小型ながら、組み込みシステムのコントローラーとしてはもちろん、サーバー としても十分な性能を備える。GUIベースのOS(Linux)も動き、デスクトッ プPCとしても、テレビのセットトップボックスとしても使用できる。2013 年7月時点で世界で120万台が出荷された、人気ボードとなっている。 IT Proより引用 http://itpro.nikkeibp.co.jp/article/COLUMN/20130919/505592/ 4
  5. 5. LINC-Switchとは? ・オープンソースベースのOpenFlowスイッチ ・OpenFlow v1.2/1.3.1とOF-Config1.1をサポート ・OFプロトコルをサポートするどのOpen Flowコントローラ とも動作可能 5
  6. 6. OpenFlow動作確認方法 以下のブログ記事を参考にしてください Ryu SDN Frameworkを活用した簡易ルータ機能の作成(7)  ∼IPルーティング基本編∼ http://ttsubo.hatenablog.com/entry/2014/02/16/221417 6
  7. 7. OpenFlow簡易ルータの概要 Rest-client Interface設定 Gateway設定 OpenflowRouter REST-IF PortTable ArpTable PC-A 192.168.100.1 FlowMod Flowテーブル LINC-Switch(OFS) PC-B 192.168.101.1 7
  8. 8. ! OpenFlow動作の確認結果 OpenFlow化したRaspberry Piで簡易ルータを実現して みて、期待どおり、動作できました!! OFC FlowMod SecureChannel を用いたFlowエントリ 書き込み処理は正しく動作した は正しく開設できた Packet-out Flowエントリにマッチしない を用いたパケット送出処理は正 しく動作した 未知パケットのPacket-in 処理は正しく動作した PC-A PC-B Flow テーブル Flowエントリに従った LINC-Switch(OFS) Forwarding 処理は正しく動作した 8
  9. 9. 注意事項 OFSには、スイッチIDとしてdpid(通常は自動付与)を 変更する場合、of_configを活用する必要があります。 Rest-client REST-IF OFS を区別するdpidは 自由に変更したい OpenflowRouter FlowMod dpid LINC-Switch(OFS) 9
  10. 10. 参考)LINC-Switch上での設定方法 OFS起動プロンプト上でのコマンド投入例 (linc@LincSwitch)1> {ok, C} = enetconf_client:connect("localhost", [{port, 1830}, {user, “linc"},             {password, "linc"}]). (linc@LincSwitch)1> linc_ofconfig:get_switch_state(0). ! (linc@LincSwitch)1> Controller = {controller, [{id, ["Switch0-DefaultController"]},             {'ip-address', ["192.168.0.100"]},             {port, ["6633"]}, {protocol, ["tcp"]}]}, (linc@LincSwitch)1> Config = {'capable-switch', [{xmlns, "urn:onf:of111:config:yang"}],             [{id, ["CapableSwitch0"]}, {'logical-switches',             [{'switch', [{id, ["LogicalSwitch0"]}, {'datapath-id', ["00:00:00:00:00:01:00:00"]},             {enabled, ["true"]}, {controllers, [Controller]}]}]}]}. ! (linc@LincSwitch)1> {ok, Y} = enetconf_client:edit_config(C, running, {xml, Config}). ! (linc@LincSwitch)1> linc_ofconfig:get_switch_state(0). 10

×