tremaプログラミング ウル技(テク) 大技林
TRANSCRIPT
![Page 1: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/1.jpg)
Tremaプログラミングウル技 大技林
高宮 安仁 @yasuhito
テク だい ぎ りん
![Page 2: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/2.jpg)
スライスBスライスA
お題: ネットワークスライス
![Page 3: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/3.jpg)
どう書く? コントローラ
スライス機能
最短路パストポロジ探索
REST API CLI
スイッチへ
![Page 4: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/4.jpg)
RoutingSwitch
Topology
Slice
Path
PathManager
PathInSliceManager
小さなクラスに分ける!
![Page 5: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/5.jpg)
パケットを送信すると…
PacketIn
FlowMod PacketOut
宛先ホスト
![Page 6: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/6.jpg)
RoutingSwitch
Topology
PathManager
PacketOut
最短路パスを作る
PacketIn
Path
Path.create
FlowMod (上流から)
トポロジ情報
![Page 7: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/7.jpg)
処理のカプセル化
•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プログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/8.jpg)
リンクが切れたら…
宛先ホスト
PortDownFlowModDel
![Page 9: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/9.jpg)
RoutingSwitch
Topology
PathManager
無効なパスを消す
PortDown
Path
delete_link イベント
Path.destroy
FlowMod(下流から)
![Page 10: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/10.jpg)
オブザーバパターントポロジイベントをPathManagerへ
イベントハンドラでパスを消す
![Page 11: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/11.jpg)
RoutingSwitch
Topology
PathManager
メッセージの振り分け
OpenFlow メッセージ
Path
トポロジ
関係
PacketInのみ
![Page 12: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/12.jpg)
ハンドラの委譲トポロジ関連メッセージ→Topologyへ
PacketIn→TopologyとPathManagerへ
![Page 13: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/13.jpg)
RoutingSwitch
Topology
PathPathManager
スライス機能を追加したい…
![Page 14: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/14.jpg)
RoutingSwitch
Topology
Slice
Path
PathManager
PathInSliceManager
継承とオーバーライド
![Page 15: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/15.jpg)
RoutingSwitch
Topology
Slice
Path
PathManager
PathInSliceManager
どう作る? REST API
![Page 16: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/16.jpg)
Topology
Slice
Path
PathManager
PathInSliceManager
どう作る? REST API
REST API
コントローラプロセス
SliceProxy
:find_by!:find_by!(DRb)
![Page 17: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/17.jpg)
リモートクラス呼び出し
REST API の実装
Sliceクラスプロキシ
![Page 18: Tremaプログラミング ウル技(テク) 大技林](https://reader034.vdocuments.site/reader034/viewer/2022051101/58a20cfe1a28ab40098b611d/html5/thumbnails/18.jpg)
• 小さいクラスを組み合わせよう • 必要なのはOOPの基本テクのみ! • リポジトリはtrema/routing_switch • もし新しいウル技を発見したらトレ通編集部まで
まとめ