Top Banner
Tremaプログラミング ウル技 大技林 高宮 安仁 @yasuhito テク だい りん
18

Tremaプログラミング ウル技(テク) 大技林

Apr 13, 2017

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tremaプログラミング ウル技(テク) 大技林

Tremaプログラミングウル技 大技林

高宮 安仁 @yasuhito

テク だい ぎ りん

Page 2: Tremaプログラミング ウル技(テク) 大技林

スライスBスライスA

お題: ネットワークスライス

Page 3: Tremaプログラミング ウル技(テク) 大技林

どう書く? コントローラ

スライス機能

最短路パストポロジ探索

REST API CLI

スイッチへ

Page 4: Tremaプログラミング ウル技(テク) 大技林

RoutingSwitch

Topology

Slice

Path

PathManager

PathInSliceManager

小さなクラスに分ける!

Page 5: Tremaプログラミング ウル技(テク) 大技林

パケットを送信すると…

PacketIn

FlowMod PacketOut

宛先ホスト

Page 6: Tremaプログラミング ウル技(テク) 大技林

RoutingSwitch

Topology

PathManager

PacketOut

最短路パスを作る

PacketIn

Path

Path.create

FlowMod (上流から)

トポロジ情報

Page 7: Tremaプログラミング ウル技(テク) 大技林

処理のカプセル化

•Path.create(path, packet_in)パスに沿って上流からFlowModAdd

•Path.destroy(path)パスに沿って下流からFlowModDel

•Path.select do |each| each.link?(port_a, port_b)end.each(&:destroy) ポートa⇔ポートbのリンクをすべて消す

Page 8: Tremaプログラミング ウル技(テク) 大技林

リンクが切れたら…

宛先ホスト

PortDownFlowModDel

Page 9: Tremaプログラミング ウル技(テク) 大技林

RoutingSwitch

Topology

PathManager

無効なパスを消す

PortDown

Path

delete_link イベント

Path.destroy

FlowMod(下流から)

Page 10: Tremaプログラミング ウル技(テク) 大技林

オブザーバパターントポロジイベントをPathManagerへ

イベントハンドラでパスを消す

Page 11: Tremaプログラミング ウル技(テク) 大技林

RoutingSwitch

Topology

PathManager

メッセージの振り分け

OpenFlow メッセージ

Path

トポロジ

関係

PacketInのみ

Page 12: Tremaプログラミング ウル技(テク) 大技林

ハンドラの委譲トポロジ関連メッセージ→Topologyへ

PacketIn→TopologyとPathManagerへ

Page 13: Tremaプログラミング ウル技(テク) 大技林

RoutingSwitch

Topology

PathPathManager

スライス機能を追加したい…

Page 14: Tremaプログラミング ウル技(テク) 大技林

RoutingSwitch

Topology

Slice

Path

PathManager

PathInSliceManager

継承とオーバーライド

Page 15: Tremaプログラミング ウル技(テク) 大技林

RoutingSwitch

Topology

Slice

Path

PathManager

PathInSliceManager

どう作る? REST API

Page 16: Tremaプログラミング ウル技(テク) 大技林

Topology

Slice

Path

PathManager

PathInSliceManager

どう作る? REST API

REST API

コントローラプロセス

SliceProxy

:find_by!:find_by!(DRb)

Page 17: Tremaプログラミング ウル技(テク) 大技林

リモートクラス呼び出し

REST API の実装

Sliceクラスプロキシ

Page 18: Tremaプログラミング ウル技(テク) 大技林

• 小さいクラスを組み合わせよう • 必要なのはOOPの基本テクのみ! • リポジトリはtrema/routing_switch • もし新しいウル技を発見したらトレ通編集部まで

まとめ