OpenFlow実践入門

  • 書名: クラウド時代のネットワーク技術 OpenFlow実践入門 (SoftwareDesign plusシリーズ)
  • 著者: 高宮安仁、鈴木一哉
  • 体裁: A5版、336ページ
  • 発売日: 2013年1月8日
  • 価格: 3,360円 (本体3,200円)
  • 発行: 技術評論社

もくじ

完全なもくじはこちら

Part 1:SDN/OpenFlow入門
  第1章:OpenFlowって何?
    1.1:ソフトウェアで思いどおりにコントロールする
    1.2:SDN: ネットワークをソフトウェアで制御しよう
    1.3:OpenFlowの仕組み
    1.4:OpenFlowのうれしさ
    1.5:OpenFlowで気をつけること
    1.6:まとめ
  第2章:OpenFlowのユースケース
    2.1:OpenFlowはアカデミア出身
    2.2:なぜOpenFlowが注目されているのか?
    2.3:ユースケースあれこれ
    2.4:まとめ
  第3章:OpenFlowの仕組み
    3.1:スイッチとコントローラ間のやりとり
    3.2:フローエントリの中身
    3.3:まとめ
  第4章:OpenFlowの開発フレームワーク
    4.1:開発フレームワークを活用しよう
    4.2:Trema
    4.3:NOX
    4.4:POX
    4.5:Floodlight
    4.6:どれを選べばいい?
    4.7:その他のツール(Cbench)
    4.8:まとめ

Part 2:OpenFlowプログラミング入門
  第5章:OpenFlowフレームワークTrema
    5.1:作ってわかるOpenFlow
    5.2:Tremaとは
    5.3:Tremaのセットアップ
    5.4:Hello, Trema!
    5.5:tremaコマンド
    5.6:即席Ruby入門
    5.7:Tremaのファイル構成
    5.8:サンプルアプリ
    5.9:まとめ
  第6章:スイッチ監視ツール
    6.1:ネットワークを集中管理しよう
    6.2:SwitchMonitorコントローラ
    6.3:即席Ruby入門
    6.4:SwitchMonitorのソースコード
    6.5:まとめ
  第7章:インテリジェントなパッチパネル
    7.1:便利なインテリジェント・パッチパネル
    7.2:OpenFlow版インテリンジェント・パッチパネル
    7.3:PatchPanelコントローラ
    7.4:即席Ruby入門
    7.5:PatchPanelのソースコード
    7.6:まとめ
  第8章:すべての基本、ラーニングスイッチ
    8.1:ラーニングスイッチとは何か?
    8.2:スイッチの仕組み
    8.3:OpenFlow版スイッチ(ラーニングスイッチ)の仕組み
    8.4:LearningSwitchコントローラ
    8.5:即席Ruby入門
    8.6:LearningSwitchのソースコード
    8.7:まとめ
  第9章:トラフィックモニタ
    9.1:トラフィック情報を収集しよう
    9.2:TrafficMonitorコントローラ
    9.3:実行してみよう
    9.4:即席Ruby入門
    9.5:TrafficMonitorのソースコード
    9.6:まとめ
  第10章:シンプルなルータ(前編)
    10.1:ルータとスイッチの違いは?
    10.2:イーサネットだけならルータは不要?
    10.3:ルータの動作
    10.4:SimpleRouterのソースコード
    10.5:まとめ
  第11章:シンプルなルータ(後編)
    11.1:宛先ホストをまとめる
    11.2:ネットワーク宛てのエントリをまとめる
    11.3:RoutingTableのソースコード
    11.4:実行してみよう
    11.5:まとめ
  第12章:Tremaのアーキテクチャ
    12.1:OpenFlow先生が家にやってきた
    12.2:trema runの裏側
    12.3:Switch Manager
    12.4:Switch Daemon
    12.5:仮想ネットワーク
    12.6:Trema Cライブラリ
    12.7:低レベルデバッグツールTremashark
    12.8:Trema Apps
    12.9:まとめ

Part 3:ケーススタディ〜本格的なOpenFlowアプリケーション
  第13章:生活ネットワークをOpenFlowに移行する
    13.1:どんどん規模を広げていこう
    13.2:大ケガしないためのヘルメット
    13.3:私たちの失敗談
    13.4:OpenFlowへの移行パターン
    13.5:逆流防止フィルタ
    13.6:まとめ
  第14章:いくつものスイッチをルーティングスイッチで制御する
    14.1:美しい大規模ネットワーク
    14.2:複数のスイッチを制御する
    14.3:実行してみよう
    14.4:OpenFlowを使う利点
    14.5:まとめ
  第15章:スライス機能付きスイッチでネットワークを仮想化する
    15.1:クラウドサービスを作るには
    15.2:スライスとは何か?
    15.3:スライスによるネットワーク仮想化
    15.4:実行してみよう
    15.5:REST APIを使う
    15.6:OpenStackと連携する
    15.7:まとめ
  第16章:データセンター基盤をTremaで作る
    16.1:フリーソフトウェアでIaaS基盤を作ろう
    16.2:Wakame-VDC
    16.3:エッジによるネットワーク仮想化
    16.4:Wakame-VDCの全体アーキテクチャ
    16.5:なぜTremaを選んだのか
    16.6:まとめ
  第17章:OpenFlowでデータセンターをつなげる
    17.1:GoogleはOpenFlowを導入済み!
    17.2:WAN 回線を効率的に使うには?
    17.3:GoogleのWAN回線のしくみ
    17.4:まとめ

Appendix:
  Appendix A:2,000円でOpenFlowスイッチをDIY
    A.1:一家に1台、OpenFlowスイッチ
    A.2:OpenFlow化のしくみ
    A.3:OpenFlow化の手順
    A.4:Tremaとつないでみよう
    A.5:自作OpenFlowスイッチの制限
    A.6:まとめ
  Appendix B:Tremaでテスト駆動開発
    B.1:天才プログラマ達の伝説
    B.2:奥義、ソフトウェアテスト
    B.3:リピータハブの動き
    B.4:どこまでテストするか?
    B.5:リピータハブのテスト戦略
    B.6:最初のテスト
    B.7:パケット受信をテストする
    B.8:フローエントリのテスト
    B.9:再びパケットの受信をテスト
    B.10:まとめ

6 thoughts on “OpenFlow実践入門

  1. hogehoge says:

    はじめまして。hogehogeと申します。
    ”OPen Flow実践入門”を参照しながら、Ubuntu11.10にてセットアップを行ったのですが、
    小生のスキル不足のためうまくいきません。

    5.3

    % ./build.rb を実施すると以下のような 表示が出てきます。

    hogehogei@hogehogei:~/trema$ ./build.rb
    gcc -I/home/hogehogei/trema/objects/openflow -g -std=gnu99 -D_GNU_SOURCE -fno-strict-aliasing -Werror -Wa
    ll -Wextra -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wfloat-equal -Wpointer-ar
    ith -fPIC -c -o /home/hogehogei/trema/objects/lib/trema_wrapper.o /home/hogehogei/trema/src/lib/trema_wrappe
    r.c
    /home/hogehogei/trema/src/lib/trema_wrapper.c:21:21:致命的エラー:sqlite3.h:そのようなファイルやディレ
    クトリはありません
    コンパイルを停止しました。
    rant: [ERROR] in file `/home/hogehogei/trema/Rantfile’, line 397:
    rant: [ERROR] Task `default’ fail.
    rant aborted!
    ./build.rb aborted!

    →何が足りないのでしょうか??

    ◆因みに、rubyのVersionは以下のとおりです。

    hogehogei@hogehogei:~/trema$ ruby –version
    ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]

    ◆tremaのVersionは以下の通りです。
    (以下のような表示になってしまいます)
    /trema$ ./trema –version
    NAME
    trema – Trema command-line tool

    SYNOPSIS
    trema [global options] command [command options] [arguments…]

    VERSION
    0.3.1

    GLOBAL OPTIONS
    –help – Show this message
    -v, –verbose – Be verbose
    –version – Displays the current runtime version

    COMMANDS
    dump_flows – Print all flow entries
    help – Shows a list of commands or help for one command
    kill – Terminates a trema process
    killall – Terminates all trema processes
    netns – Opens a new shell in the specified network namespace
    reset_stats – Resets stats of packets
    ruby – Opens in your browser Trema’s Ruby API documentation
    run – Runs a trema application
    send_packets – Sends UDP packets to destination host
    show_stats – Shows stats of packets
    up – Starts a killed trema process again
    version – Displays the current runtime version

    ◆上記のような状態で、hello-trema.rbファイルを作成後
    trema run を実行しても not faund されてしまいます。

    hogehoge@hogehoge:~/trema$ trema run ./hello-trema.rb
    trema: command not found

    なにがエラーの原因となっているか教えていただけますでしょうか?
    お手数ではありますが、ご教授のほどよろしくお願い致します。

  2. エラーメッセージの通り、sqlite3 のヘッダファイル (libsqlite3-dev パッケージ) がインストールされていません。
    本のインストール手順にある、apt-get install は実行されましたでしょうか?

  3. hoge says:

    はじめまして。 どうしても原因の分からないエラーが出たので質問させてください。
    サンプルプログラムのスイッチモニター監視ツールが正常に動作しません。
    trema run ./switch-monitor.rb -c ./switch-monitor.conf コマンドで
    実行したのですが、実行結果が
    All switches =
    All switches =
    All switches =
    All switches =
    ….
    で、Switchがupせず、再度実行すると、
    ovs-openflowd: /var/lib/gems/1.8/gems/trema-0.3.19/tmp/pid/open_vswitch.0x1.pid: already running as pid 2276, aborting
    error: Command ‘sudo /var/lib/gems/1.8/gems/trema-0.3.19/objects/openvswitch/bin/ovs-openflowd –detach –out-of-band –fail=closed –inactivity-probe=180 –rate-limit=40000 –burst-limit=20000 –pidfile=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/pid/open_vswitch.0x1.pid –verbose=ANY:file:dbg –verbose=ANY:console:err –log-file=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/log/openflowd.0x1.log –datapath-id=0000000000000001 –unixctl=/var/lib/gems/1.8/gems/trema-0.3.19/tmp/sock/ovs-openflowd.0x1.ctl netdev@vsw_0x1 tcp:127.0.0.1:6633’ failed!
    というエラーが出てしまい実行できませんでした。
    エラーの意味が分からないのでご教授お願いします。

  4. mamohacry says:

    はじめまして。
    私もHogeさんとまったくおなじ症状が出ており困っています。
    実は最初のhello trema、次のスイッチモニターと連続して試してみたときは上手く動作していて、その後数日あけてさらに先にすすめようとしたところ、上記のような症状が発生しています。
    vSwitchが起動していない、というよりはコントローラーに接続できていない(vSwitchの起動がコントローラー側に通知されていない)ように見えるのですが。。。。対処方法などわかりましたらご教授願いますm(_ _)m

    念の為起動したときに使用したrbファイル、confファイル、vSwitchのログを添付させていただきます。
    ———————————————————————————
    #switch_monitor$ cat switch-monitor2.rb
    class SwitchMonitor < Controller
    periodic_timer_event :show_switches, 10

    def start
    @switches = []
    end

    def switch_ready datapath_id
    @switches </dev/null
    Shutting down 0xabc2…
    sudo kill 8510 2>/dev/null
    Shutting down 0xabc3…
    sudo kill 8516 2>/dev/null
    #switch_monitor$
    #switch_monitor$ cat /home/testuser/trema/trema/tmp/log/openflowd.0xabc3.log
    Jun 28 12:54:24|00001|vlog|INFO|opened log file /home/testuser/trema/trema/tmp/log/openflowd.0xabc3.log
    Jun 28 12:54:24|00002|openflowd|INFO|Open vSwitch version 1.2.2.trema1
    Jun 28 12:54:24|00003|openflowd|INFO|OpenFlow protocol version 0x01
    Jun 28 12:54:24|00004|dpif|DBG|netdev@vsw_0xabc3: recv_set_mask success
    Jun 28 12:54:24|00005|dpif|DBG|netdev@vsw_0xabc3: flow_flush success
    Jun 28 12:54:24|00006|ofproto|INFO|using datapath ID 0000002320ccfe24
    Jun 28 12:54:24|00007|dpif|DBG|netdev@vsw_0xabc3: port_dump_start success
    Jun 28 12:54:24|00008|dpif|DBG|netdev@vsw_0xabc3: port_dump_next success
    Jun 28 12:54:24|00009|dpif|DBG|netdev@vsw_0xabc3: dumped all ports
    Jun 28 12:54:24|00010|ofproto|INFO|datapath ID changed to 000000000000abc3
    Jun 28 12:54:24|00011|rconn|INFO|vsw_0xabc3tcp:127.0.0.1:6633: connecting…
    Jun 28 12:54:24|00012|rconn|WARN|vsw_0xabc3tcp:127.0.0.1:6633: connection failed (Connection refused)
    Jun 28 12:54:24|00013|rconn|INFO|vsw_0xabc3tcp:127.0.0.1:6633: waiting 1 seconds before reconnect
    Jun 28 12:54:24|00014|rconn|DBG|vsw_0xabc3tcp:127.0.0.1:6633: entering BACKOFF
    Jun 28 12:54:24|00015|dpif|DBG|netdev@vsw_0xabc3: flow_flush success
    Jun 28 12:54:25|00016|poll_loop|DBG|wakeup due to 987-ms timeout at lib/rconn.c:511
    Jun 28 12:54:25|00017|rconn|INFO|vsw_0xabc3tcp:127.0.0.1:6633: connecting…
    Jun 28 12:54:25|00018|rconn|WARN|vsw_0xabc3tcp:127.0.0.1:6633: connection failed (Connection refused)
    Jun 28 12:54:25|00019|rconn|INFO|vsw_0xabc3tcp:127.0.0.1:6633: waiting 2 seconds before reconnect
    Jun 28 12:54:25|00020|rconn|DBG|vsw_0xabc3tcp:127.0.0.1:6633: entering BACKOFF
    Jun 28 12:54:25|00021|poll_loop|DBG|wakeup due to 10-ms timeout at ofproto/ofproto-dpif.c:622
    Jun 28 12:54:25|00022|dpif|DBG|netdev@vsw_0xabc3: flow_dump_start success
    Jun 28 12:54:25|00023|dpif|DBG|netdev@vsw_0xabc3: dumped all flows
    Jun 28 12:54:26|00024|poll_loop|DBG|wakeup due to 1000-ms timeout at ofproto/ofproto-dpif.c:622
    Jun 28 12:54:26|00025|dpif|DBG|netdev@vsw_0xabc3: flow_dump_start success
    Jun 28 12:54:26|00026|dpif|DBG|netdev@vsw_0xabc3: dumped all flows
    ・・・・・・・
    #switch_monitor$

  5. おそらく、trema のプロセスが残っているのだと思います。
    trema killall としてもらってから、再び trema run するとどうなるでしょうか?

    起動中のプロセスの PID ファイルは [trema]/tmp/pid にあります。

  6. mamohacry says:

    レスありがとうございます!
    trema killall後に再起動しても状況変わらず・・・・でしたが、[trema]/tmp/pidにPIDファイルが残ったままになっていたので、それらを全部消して再起動したら、うまく行きました!!!!ありがとうございます。
    プロセス残り、というより管理ファイル残り?なんでしょうか・・・・。どういった契機で発生するのかわからないのがたまにきずですが、ひとまずうまく動かなくなったらここを確認するようにします。

    ↓こんなかんじでうまくいきました。
    #~/trema/trema/tmp/pid$ ls -al
    合計 20
    drwxrwxr-x 2 mamohacy mamohacy 4096 7月 2 10:39 .
    drwxrwxr-x 5 mamohacy mamohacy 4096 7月 2 10:39 ..
    -rw——- 1 mamohacy mamohacy 6 6月 10 19:25 switch.0x1.pid
    -rw——- 1 mamohacy mamohacy 6 6月 10 19:25 switch.0x2.pid
    -rw——- 1 mamohacy mamohacy 6 6月 10 19:25 switch_manager.pid
    #~/trema/trema/tmp/pid$ rm *
    #~/trema/trema/tmp/pid$ ls
    #~/trema/trema/tmp/pid$ cd ~/trema/trema/src/examples/switch_monitor/
    #~/trema/trema/src/examples/switch_monitor$ trema –verbose run ./switch-monitor2.rb -c ./switch-monitor2.conf
    /home/mamohacy/trema/trema/objects/switch_manager/switch_manager –daemonize –port=6633 — port_status::SwitchMonitor packet_in::SwitchMonitor state_notify::SwitchMonitor vendor::SwitchMonitor
    sudo /home/mamohacy/trema/trema/objects/openvswitch/bin/ovs-openflowd –detach –out-of-band –fail=closed –inactivity-probe=180 –rate-limit=40000 –burst-limit=20000 –pidfile=/home/mamohacy/trema/trema/tmp/pid/open_vswitch.0xabc1.pid –verbose=ANY:file:dbg –verbose=ANY:console:err –log-file=/home/mamohacy/trema/trema/tmp/log/openflowd.0xabc1.log –datapath-id=000000000000abc1 –unixctl=/home/mamohacy/trema/trema/tmp/sock/ovs-openflowd.0xabc1.ctl netdev@vsw_0xabc1 tcp:127.0.0.1:6633
    sudo /home/mamohacy/trema/trema/objects/openvswitch/bin/ovs-openflowd –detach –out-of-band –fail=closed –inactivity-probe=180 –rate-limit=40000 –burst-limit=20000 –pidfile=/home/mamohacy/trema/trema/tmp/pid/open_vswitch.0xabc2.pid –verbose=ANY:file:dbg –verbose=ANY:console:err –log-file=/home/mamohacy/trema/trema/tmp/log/openflowd.0xabc2.log –datapath-id=000000000000abc2 –unixctl=/home/mamohacy/trema/trema/tmp/sock/ovs-openflowd.0xabc2.ctl netdev@vsw_0xabc2 tcp:127.0.0.1:6633
    sudo /home/mamohacy/trema/trema/objects/openvswitch/bin/ovs-openflowd –detach –out-of-band –fail=closed –inactivity-probe=180 –rate-limit=40000 –burst-limit=20000 –pidfile=/home/mamohacy/trema/trema/tmp/pid/open_vswitch.0xabc3.pid –verbose=ANY:file:dbg –verbose=ANY:console:err –log-file=/home/mamohacy/trema/trema/tmp/log/openflowd.0xabc3.log –datapath-id=000000000000abc3 –unixctl=/home/mamohacy/trema/trema/tmp/sock/ovs-openflowd.0xabc3.ctl netdev@vsw_0xabc3 tcp:127.0.0.1:6633
    Switch 0xabc3 is UP
    Switch 0xabc2 is UP
    Switch 0xabc1 is UP
    All switches = 0xabc1,0xabc2,0xabc3
    All switches = 0xabc1,0xabc2,0xabc3
    All switches = 0xabc1,0xabc2,0xabc3
    All switches = 0xabc1,0xabc2,0xabc3
    All switches = 0xabc1,0xabc2,0xabc3
    All switches = 0xabc1,0xabc2,0xabc3
    ^C
    terminated
    Shutting down switch_manager…
    kill 7146 2>/dev/null
    Shutting down 0xabc1…
    sudo kill 7149 2>/dev/null
    Shutting down 0xabc2…
    sudo kill 7156 2>/dev/null
    Shutting down 0xabc3…
    sudo kill 7165 2>/dev/null
    #~/trema/trema/src/examples/switch_monitor$

Leave a Reply