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