32
LOOM OpenFlow Controller shun159@shunichigokew trema/pio パケットマン

Loom openflow controller in 10 min

  • Upload
    -

  • View
    518

  • Download
    0

Embed Size (px)

Citation preview

LOOMOpenFlow Controller

shun159@shunichigokewtrema/pio パケットマン

こんにちは, 今からOpenFlowのユルい話しをします

LOOM OpenFlow Controller?

LOOM OpenFlow Controller?

•InfobloxとErlang Solutionsのエンジニアが主に開発

•Erlang/OTPが備える機能が持つ高いスケール性や耐障害性を備えたコントロールプレーンを目指す

•とはいえまだまだ開発中である

だけど…

もう結構出揃っている感はある

他にもJSやhaskell, OCaml果てはLuaやJuliaなど多岐に渡る

もう他の言語の実装なんていらないお…もう他の言語の実装なんていらないお…

でも待ってこういう話もあるよ!

Erlangで実装された AXD301は2002年1月の導入以来, 99.9999999%の可用性のためにメンテナンススキルを習得できないというリスクを持つという話しがある.

ErlangはネットワークサーバのDSLである,と例えを聞く程用途が偏っている(気がする)

これをSDN/OpenFlowで実現したい…

でもちょっとまってErlangって?

ちょっとまってErlangって?

SDNアプリのドキュメントとか読んでると, 分散とか平行とか障害の局所化とか, そんなキーワードがたまにきこえてきませんか.

そして, OpenFlowを触ってて生のパケットと触れ合ったこと, ありますよね.

ちょっとまってErlangって?①

• 以下の機能を言語レベルで提供しています

– Hot code reloading

– Supervisors

– Processes

– Asynchronous message passing

– Clustering

ちょっとまってErlangって?②

• バイナリパターンマッチが素敵

• L2 headerを上のようにパターンマッチ!

ちょっとまってErlangって?②

• 並行プログラミングがとてもやりやすい

• またそれに特化した例外等もわりと充実

ちょっとまってErlangって?③

• 分散プログラミングがやりやすい, これら以外にも分散プログラミングを支援するためのモジュールや関数がたくさんある.

Erlang/OTPが持つこれらの能力や機能を利用したOpenFlowプログラミングって…

面白そう(小並感

LOOM OpenFlow Controller

LOOM OpenFlow Controller

•私が好んでここで話すのは•Binary Pattern Match•Supervisons•Concurrent Programming

をやれるということの他にも面白い機能が備わっています

LOOM OpenFlow Controller

ofs_handler:sync_send/2

LOOM OpenFlow Controller

デモ

LOOM OpenFlow Controller

ofs_handler:sync_send/2

LOOM OpenFlow Controller

改めて, 試しに テキトーなアプリを書いてみました.

LOOM OpenFlow Controller

仮想L2ネットワーク

LOOM OpenFlow Controller

デモ

LOOM OpenFlow Controller

LOOM OpenFlow Controller

たとえからあまりErlangの特徴見えないかも…

ポートを管理するコードを書く時間がなかったのでどうしようかと悩んだ末,

sync_send/2でブロードキャストする前にスイッチ聞いたらイイね,ということでその分ごっそり怠けた楽できた結果,実質200行でかける.

LOOM OpenFlow Controller

LOOM作成ステップ1. callback moduleを設定ファイルに

指定する2. callback関数をもれなく書く3. 各callbackにロジックを記述する4. コンパイルして起動

LOOM OpenFlow Controller

また,mainコネクション接続とは別に,Aux接続のためのcallback関数connect/8があり, openflow messageを受ける関数 handle_message/2は TCPセッション毎にメッセージを受けるので, うまく使えればaux接続を有効利用したプログラミングができるはず.

LOOM OpenFlow Controller

Flow modメッセージを作って送る

LOOM OpenFlow Controller

注意!

•init/7からスイッチに対してメッセージを送ろうとすると, アプリがくたばります.

LOOM OpenFlow Controller

Erlang/OTPは独特で難しい,けど文法的には覚えることは少ない(はず).やりたいことを最短できるというのであれば,触れてみる価値はあるはず.