Successfully reported this slideshow.
Your SlideShare is downloading. ×

Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)

Ad

Ryu の遊び方

Pica8 も一緒にもっと楽しく!

NCLC  大芝
※   Ryu の API が変わったので、 2014 年 1 月 23 日に
一部変更!

Ad

自己紹介 ( 及び会社紹介 )


OpenFlow スイッチ「 Pica8 」売ってます



Trema 、 Ryu 、 VNC を使って
色々やってます



個人的には Trema(Ruby) 好きです

Ad

今日お話しする内容
Ryu の使い方についてお話します。
‐   OFC の作り方とか
‐  パケット解析・生成の仕方とか
‐   REST API の定義方法とか
ついでに Pica8 を使った
Ryu の変わった遊び方もお話します。
HW ...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Upcoming SlideShare
Tremaとtrema edgeの違い
Tremaとtrema edgeの違い
Loading in …3
×

Check these out next

1 of 32 Ad
1 of 32 Ad
Advertisement

More Related Content

Slideshows for you (19)

Similar to Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版) (20)

Advertisement

Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)

  1. 1. Ryu の遊び方 Pica8 も一緒にもっと楽しく! NCLC  大芝 ※   Ryu の API が変わったので、 2014 年 1 月 23 日に 一部変更!
  2. 2. 自己紹介 ( 及び会社紹介 )  OpenFlow スイッチ「 Pica8 」売ってます  Trema 、 Ryu 、 VNC を使って 色々やってます  個人的には Trema(Ruby) 好きです
  3. 3. 今日お話しする内容 Ryu の使い方についてお話します。 ‐   OFC の作り方とか ‐  パケット解析・生成の仕方とか ‐   REST API の定義方法とか ついでに Pica8 を使った Ryu の変わった遊び方もお話します。 HW の OpenFlow スイッチ
  4. 4. What is Ryu ? Ryu の公式ページ 作っている人 対応機能 要するに Python ベースの OFC フレームワーク
  5. 5. ☆   OF1.0 、 OF1.3 のどちらもサポート ☆   NetConf とか、 OF-Config とかにも対応   ※ 僕は試してません。 ☆   OpenStack のプラグインもある   ※ これもまだ試せてません。。。ごめんなさい。
  6. 6. 誰が使ってる?どこで使ってる? NTT コミュニケーションさんが色々発表してい る http://cloud.watch.impress.co.jp/img/clw/docs/620/794/html/41.jpg.html
  7. 7. SDN Japan でも発表されていた
  8. 8. 他には。。。  NTT グループ内で結構使われている  CYAN という会社が BluePlanet という SDN アプリで使っている
  9. 9. インストールしよう! 2 つのやり方があります。  pip install ryu git clone ~ setup.py install  pip でインストールするか、ダウンロードしたソースにて、 setup.py を用いるか。
  10. 10. インストールするとついでに入るもの   oslo INI 形式の設定データを使用するの に用いる wsgi, routes, webob REST API に用いる  eventlet タイマ定義等に用いる
  11. 11. 動かす 通常動作  ryu-manager sample.py ヘルプを見る  ryu-manager --help サンプル  ryu/ryu/app  にある
  12. 12. 標準のサンプルには REST API を用い たものが多い
  13. 13. どうやって OFC を作る? 基本は他フレームワークと同じ イベントのハンドリングによる適切な処理と それによる OpenFlow メッセージの送信 ☆  イベントハンドリング ☆   OpenFlow メッセージの送信 を、それぞれどう書けばいいのか見てみます!
  14. 14. イベントハンドラ デコレータを用います。 各メッセージのクラスを渡します。以下を見るとそ れぞれクラス名が分かります ryu/ryu/ofproto/ofproto_v1_X_parser ※   X は 0, 2, 3 の3つのバージョン数値です @set_ev_cls( ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) def _packet_in_handler(self, ev): pass
  15. 15. OpenFlow メッセージの生成  ryu/lib/ofctl_v1_x.py  を使う  ev.msg.datapath.ofproto_parser  を使う 多分一番簡単な方 法 昔からある一般的な方法 ev は各メッセージで引数として渡される どちらもそうだが、プロアクティブに入れたい場合は、 datapath のオブジェクトを保持しておく必要があります。
  16. 16. datapath オブジェクト  スイッチ毎にインスタンスが準備される datapath IP アドレス、 DPID とかの情報 OF 定数 ofproto OF メッ セージ ofproto_parser 動作バージョンに対応 したモジュールが紐付 けされる
  17. 17. ofproto や ofproto_parser はどこに?  ryu/ryu/ofproto 内にソースがある 内容は OpenFlow の各定数とかメッセージに 沿ったクラスとかがあります。 各メッセージの生成方法等が知りたいならここを読んで、 でも、ドキュメントはまだ色々あるんで最後でまた紹介しま す
  18. 18. 例:  L1 のスイッチを作ってみよう! from ryu.base import app_manager from ryu.ofproto import ofproto_v1_0 from ryu.controller import dpset from ryu.controller.handler import set_ev_cls 必要なモジュールを import class TestController(app_manager.RyuApp): OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION] _CONTEXTS = { "dpset" : dpset.DPSet } def __init__(self, *args, **kwargs): super(TestController, self).__init__(*args, **kwargs) @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) def handler_datapath(self, ev): dp=ev.dp if ev.enter: match = dp.ofproto_parser.OFPMatch() port = dp.ofproto.OFPP_FLOOD actions = [ dp.ofproto_parser.OFPActionOutput( port ) ] mod = dp.ofproto_parser.OFPFlowMod( dp, match=match, cookie=0, actions=actions ) dp.send_msg(mod) スイッチ接続のハ ンドラ定義 L1 用のマッチ条件と アクション定義して フロー送信
  19. 19. 便利な機能① トポロジ管理  LLDP を利用したトポロジの検出と管理が行える Switches Node Link Node Link Link Node get_all_links get_all_switches メインのクラス
  20. 20. トポロジ管理使い方 from ryu.topology import switches 動作させるアプリ をここに指定 class TestController(app_manager.RyuApp): _CONTEXTS = { “topology" : switches.Switches} def __init__(self, *args, **kwargs): super(TestController, self).__init__(*args, **kwargs) self.topology = kwargs[“topology”] 引数の kwargs に _CONTEXTS で指定し たクラスによるインスタンスが渡される
  21. 21. 便利機能② パケットライブラリ 色々ある ( これは一部 ) ( 普通のパケット生成用ラ イブラリよりある? )
  22. 22. パケットライブラリ使い方 パース packet=Packet(data=data) eth=packet.get_protocol( ethernet.ethernet)  ※  変更 (2014/1/23) 生成 eth=ethernet(eth_info) arp=arp(arp_info) packet=eth.serialize(None, None)+ arp.serialize(None, None)  packet 残り L4 L3 L2 対象プロトコルのク ラスを渡して受け取 る そのプロトコル情報 を持ってなければ、 None が返ってくる 個別のヘッダを作っ てシリアライズ
  23. 23. REST API の定義 各ルートの制御をするアクションは、 このコントローラ内にて定義している URI とメソッド (GET とか POST とか ) を指定して、 呼び出すメソッドをアクションとして定義する mapper.connect(route, uri, controller=MessageController, action = "index", conditions=dict(method=['GET']) ) 例えば、 uri が” /ofc” として定義したなら、 http://( ホスト ):8080/ofc  に get でアクセスすると 「 index 」が呼ばれる。 ※  追加のルートを付けたい場合は submapper を定義する
  24. 24. ドキュメント Ryu の正式ページに Wiki がある https://github.com/osrg/ryu/wiki   NCLC のホームページで色々情報発信し ている (Trema もあり )  来年頭頃に、 Ryu-Book という日本語本を 出す予定らしい
  25. 25. Pica8   OpenFlow Pica8 について ‐  安い ‐  ポート密度が高い ( 1Gx48, 10Gx4 or 10Gx48, 40Gx4 ) ‐  ハイブリッドスイッチ 
  26. 26. Pica8 を使った遊び方 OVS OVS を使って OpenFlow を実 現している OF 1.0 、  OF1.2 、  OF1.3 3 バージョン対応
  27. 27. コントローラ接続検証  v1.3 v1.3 RoutingSwitch っぽい ものの Ruby 版を作っ て Pica8 と一緒に配布 してます。 ※ trema-edge
  28. 28. Ryu と Pica8 Pica8 が Ryu にアプローチをかけて る
  29. 29. 特殊な遊び方 Ryu をスイッチ上で直接動かそ う! PicOS 2.0 から Debian に なり、 Python 動作可能
  30. 30. 何の意味がある? 統合管理サーバ REST API PacketIn 等のみ、   スイッチ単体で処 理させる、とか コントローラの負荷軽減とか、リスク分散とか
  31. 31. 実績? 海外ではあるらしい。 ※   NCLC では、まだテストのみ。 インストール方法等の技術情報は、ホー ムページで公開してます。
  32. 32. 以上です! 有難うございました NCLC  大芝

×