diff --git a/appendix_trema_command_reference.adoc b/appendix_trema_command_reference.adoc deleted file mode 100644 index 7f6bbffd..00000000 --- a/appendix_trema_command_reference.adoc +++ /dev/null @@ -1,163 +0,0 @@ -== trema コマンド - -=== trema run - -コントローラを実行する。 - ----- -$ ./bin/trema run [コマンドオプション] コントローラ ----- - -==== 使い方 - -コントローラを実行するには、`trema run` の引数にコントローラのファイル名を次のように渡す。実行したコントローラは `Ctrl + c` で停止できる。 - ----- -$ ./bin/trema run hello_trema.rb ----- - -デフォルトでは、コントローラは OpenFlow 1.0 モードで起動する。OpenFlow 1.3 を使いたい場合には、`--openflow13` オプションを指定する。 - ----- -$ ./bin/trema run hello_trema.rb --openflow13 ----- - -仮想ネットワーク上でコントローラを動かす場合には、`trema run` の `-c` (`--conf`) オプションに仮想ネットワーク定義ファイルを指定する。 - ----- -$ ./bin/trema run hello_trema.rb -c trema.conf ----- - -コントローラをデーモンプロセスとして起動する場合には、`-d` (`--daemonize`) オプションを指定する。 - ----- -$ ./bin/trema run hello_trema.rb -c trema.conf -d ----- - -==== コマンドオプション一覧 - -|=== -| コマンドオプション | 説明 | デフォルト値 - -| `-c`, `--conf` | 仮想ネットワークの定義ファイルを指定する | -| `-d`, `--daemonize` | コントローラをデーモンプロセスとして起動する | -| `--openflow13` | コントローラを OpenFlow 1.3 モードで起動する | -| `-L`, `--log_dir` | コントローラプロセスのログファイル (`コントローラ名.log`) を生成するディレクトリを指定する。 | `/tmp` -| `-P`, `--pid_dir` | コントローラプロセスの PID ファイル (`コントローラ名.pid`) を生成するディレクトリを指定する。 | `/tmp` -| `-S`, `--socket_dir` | コントローラのソケットファイル (`コントローラ名.ctl`) を生成するディレクトリを指定する。| `/tmp` -| `-l`, `--logging_level` | コントローラプロセスのロギングレベルを指定する。 | `info` -| `-p`, `--port` | コントローラプロセスがスイッチからの接続を待ち受ける TCP ポート番号を指定する | 6653 -|=== - - -=== trema dump_flows - -指定したスイッチのすべてのフローエントリを表示する。 - ----- -$ ./bin/trema dump_flows [コマンドオプション] スイッチ名 ----- - -==== 使い方 - -仮想ネットワーク設定で `of_switch` という名前のスイッチを定義し、コントローラを実行したとする。 - -[source,ruby,subs="verbatim,attributes"] -.trema.conf ----- -vswitch('of_switch') { datapath_id 0x1 } ----- - -.コントローラの実行 ----- -$ ./bin/trema run my_controller.rb -c trema.conf ----- - -このときコントローラがスイッチ `of_switch` に書き込んだフローエントリを表示するには、次のように `trema dump_flows of_switch` を実行する。 - ----- -$ ./bin/trema dump_flows of_switch -cookie=0x0, duration=10.727s, table=0, n_packets=0, n_bytes=0, priority=0 actions=drop ----- - -出力フォーマットは Open vSwitch の `ovs-ofctl dump-flows` コマンドと同じ。詳しくは `man ovs-ofctl` の Table Entry Output を参照。 - -==== コマンドオプション一覧 - -|=== -| コマンドオプション | 説明 | デフォルト値 - -| `-S`, `--socket_dir` | コントローラプロセスのソケットファイル (`trema.コントローラ名.ctl`) があるディレクトリを指定する。これは `trema run` コマンドの `-S`, `--socket_dir` オプションで指定した値を指定すればよい | `/tmp` -|=== - - -=== trema netns - -仮想ネットワークに作ったネットワークネームスペース内でシェルまたはコマンドを実行する。 - ----- -$ ./bin/trema netns ネットワークネームスペース名 [コマンド] ----- - -==== 使い方 - -仮想ネットワーク設定で `host1`, `host2` という名前の 2 つのネットワークネームスペースをそれぞれ次のように定義し、コントローラを実行したとする。 - -[source,ruby,subs="verbatim,attributes"] -.trema.conf ----- -vswitch { dpid 0x1 } - -netns('host1') { - ip '192.168.1.2' - netmask '255.255.255.0' - route net: '0.0.0.0', gateway: '192.168.1.1' -} - -netns('host2') { - ip '192.168.1.3' - netmask '255.255.255.0' - route net: '0.0.0.0', gateway: '192.168.1.1' -} - -link '0x1', 'host1' -link '0x1', 'host2' ----- - -.コントローラの実行 ----- -$ ./bin/trema run my_controller.rb -c trema.conf ----- - -このときネットワークネームスペース `host1` 内でシェルを起動するには、`trema netns` の引数にネットワークネームスペース名を次のように渡す。実行したシェルは `exit` または `Ctrl + d` で停止できる。 - ----- -$ ./bin/trema netns host1 -[sudo] password for yasuhito: (パスワードを入力) -$ ip addr -1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default - link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 - inet 127.0.0.1/8 scope host lo - valid_lft forever preferred_lft forever - inet6 ::1/128 scope host - valid_lft forever preferred_lft forever -23642: host1: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 - link/ether 6e:59:cb:51:86:db brd ff:ff:ff:ff:ff:ff - inet 192.168.1.2/24 brd 192.168.1.255 scope global host1 - valid_lft forever preferred_lft forever - inet6 fe80::6c59:cbff:fe51:86db/64 scope link - valid_lft forever preferred_lft forever -$ exit ----- - -シェルに入らずに直接コマンドを実行したい場合には、次のようにネットワークネームスペース名の後に実行したいコマンドを指定する。 - ----- -$ ./bin/trema netns host1 "ping -c1 192.168.1.3" -PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. -64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.448 ms - ---- 192.168.1.3 ping statistics --- -1 packets transmitted, 1 received, 0% packet loss, time 0ms -rtt min/avg/max/mdev = 0.448/0.448/0.448/0.000 ms ----- diff --git a/appendix_trema_reference.adoc b/appendix_trema_reference.adoc index 53241d17..0d16a068 100644 --- a/appendix_trema_reference.adoc +++ b/appendix_trema_reference.adoc @@ -1,4 +1,13 @@ [appendix] = Tremaリファレンス -include::appendix_trema_command_reference.adoc[] -include::appendix_trema_api_reference.adoc[] +== trema コマンド + +include::trema_run.adoc[] +include::trema_dump_flows.adoc[] +include::trema_killall.adoc[] +include::trema_netns.adoc[] + + +== ハンドラ + +include::start_handler.adoc[] diff --git a/appendix_trema_api_reference.adoc b/start_handler.adoc similarity index 99% rename from appendix_trema_api_reference.adoc rename to start_handler.adoc index 6a598cd6..7afa5a59 100644 --- a/appendix_trema_api_reference.adoc +++ b/start_handler.adoc @@ -1,5 +1,3 @@ -== ハンドラ - === start(args) コントローラの起動イベントを捕捉するハンドラ。引数 `args` は trema run で `--` の後に渡した引数の配列。 diff --git a/trema_dump_flows.adoc b/trema_dump_flows.adoc new file mode 100644 index 00000000..cab961f1 --- /dev/null +++ b/trema_dump_flows.adoc @@ -0,0 +1,39 @@ +=== trema dump_flows + +指定したスイッチのすべてのフローエントリを表示する。 + +---- +$ ./bin/trema dump_flows [コマンドオプション] スイッチ名 +---- + +==== 使い方 + +仮想ネットワーク設定で `of_switch` という名前のスイッチを定義し、コントローラを実行したとする。 + +[source,ruby,subs="verbatim,attributes"] +.trema.conf +---- +vswitch('of_switch') { datapath_id 0x1 } +---- + +.コントローラの実行 +---- +$ ./bin/trema run my_controller.rb -c trema.conf +---- + +このときコントローラがスイッチ `of_switch` に書き込んだフローエントリを表示するには、次のように `trema dump_flows of_switch` を実行する。 + +---- +$ ./bin/trema dump_flows of_switch +cookie=0x0, duration=10.727s, table=0, n_packets=0, n_bytes=0, priority=0 actions=drop +---- + +出力フォーマットは Open vSwitch の `ovs-ofctl dump-flows` コマンドと同じ。詳しくは `man ovs-ofctl` の Table Entry Output を参照。 + +==== コマンドオプション一覧 + +|=== +| コマンドオプション | 説明 | デフォルト値 + +| `-S`, `--socket_dir` | コントローラプロセスのソケットファイル (`コントローラ名.ctl`) があるディレクトリを指定する。これは `trema run` コマンドの `-S`, `--socket_dir` オプションで指定した値を指定すればよい | `/tmp` +|=== diff --git a/trema_killall.adoc b/trema_killall.adoc new file mode 100644 index 00000000..a43e9354 --- /dev/null +++ b/trema_killall.adoc @@ -0,0 +1,31 @@ +=== trema killall + +コントローラと仮想ネットワークのプロセスを kill する。 + +---- +$ ./bin/trema killall [コマンドオプション] コントローラ名 +---- + +==== 使い方 + +`trema run` で起動したコントローラと仮想ネットワークプロセスを kill するには、`trema killall` の引数にコントローラ名 (=コントローラのクラス名) を次のように渡す。 + +---- +$ ./bin/trema killall HelloTrema +---- + +現在起動中のすべてのコントローラプロセスおよび仮想ネットワーク関連プロセスを kill するには、`--all` オプションを指定する。 + +---- +$ ./bin/trema killall --all +---- + +==== コマンドオプション一覧 + +|=== +| コマンドオプション | 説明 | デフォルト値 + +| `-S`, `--socket_dir` | コントローラプロセスや vhost プロセスのソケットファイル (`*.ctl`) があるディレクトリを指定する。これは `trema run` コマンドの `-S`, `--socket_dir` オプションで指定した値を指定すればよい | `/tmp` +| `--all` | Trema 関連のすべてのプロセスを kill する | +|=== + diff --git a/trema_netns.adoc b/trema_netns.adoc new file mode 100644 index 00000000..c67baf4f --- /dev/null +++ b/trema_netns.adoc @@ -0,0 +1,70 @@ +=== trema netns + +仮想ネットワークに作ったネットワークネームスペース内でシェルまたはコマンドを実行する。 + +---- +$ ./bin/trema netns ネットワークネームスペース名 [コマンド] +---- + +==== 使い方 + +仮想ネットワーク設定で `host1`, `host2` という名前の 2 つのネットワークネームスペースをそれぞれ次のように定義し、コントローラを実行したとする。 + +[source,ruby,subs="verbatim,attributes"] +.trema.conf +---- +vswitch { dpid 0x1 } + +netns('host1') { + ip '192.168.1.2' + netmask '255.255.255.0' + route net: '0.0.0.0', gateway: '192.168.1.1' +} + +netns('host2') { + ip '192.168.1.3' + netmask '255.255.255.0' + route net: '0.0.0.0', gateway: '192.168.1.1' +} + +link '0x1', 'host1' +link '0x1', 'host2' +---- + +.コントローラの実行 +---- +$ ./bin/trema run my_controller.rb -c trema.conf +---- + +このときネットワークネームスペース `host1` 内でシェルを起動するには、`trema netns` の引数にネットワークネームスペース名を次のように渡す。実行したシェルは `exit` または `Ctrl + d` で停止できる。 + +---- +$ ./bin/trema netns host1 +[sudo] password for yasuhito: (パスワードを入力) +$ ip addr +1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever +23642: host1: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 6e:59:cb:51:86:db brd ff:ff:ff:ff:ff:ff + inet 192.168.1.2/24 brd 192.168.1.255 scope global host1 + valid_lft forever preferred_lft forever + inet6 fe80::6c59:cbff:fe51:86db/64 scope link + valid_lft forever preferred_lft forever +$ exit +---- + +シェルに入らずに直接コマンドを実行したい場合には、次のようにネットワークネームスペース名の後に実行したいコマンドを指定する。 + +---- +$ ./bin/trema netns host1 "ping -c1 192.168.1.3" +PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. +64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.448 ms + +--- 192.168.1.3 ping statistics --- +1 packets transmitted, 1 received, 0% packet loss, time 0ms +rtt min/avg/max/mdev = 0.448/0.448/0.448/0.000 ms +---- diff --git a/trema_run.adoc b/trema_run.adoc new file mode 100644 index 00000000..c3d939b7 --- /dev/null +++ b/trema_run.adoc @@ -0,0 +1,48 @@ +=== trema run + +コントローラを実行する。 + +---- +$ ./bin/trema run [コマンドオプション] コントローラファイル +---- + +==== 使い方 + +コントローラを実行するには、`trema run` の引数にコントローラのファイル名を次のように渡す。実行したコントローラは `Ctrl + c` で停止できる。 + +---- +$ ./bin/trema run hello_trema.rb +---- + +デフォルトでは、コントローラは OpenFlow 1.0 モードで起動する。OpenFlow 1.3 を使いたい場合には、`--openflow13` オプションを指定する。 + +---- +$ ./bin/trema run hello_trema.rb --openflow13 +---- + +仮想ネットワーク上でコントローラを動かす場合には、`trema run` の `-c` (`--conf`) オプションに仮想ネットワーク定義ファイルを指定する。 + +---- +$ ./bin/trema run hello_trema.rb -c trema.conf +---- + +コントローラをデーモンプロセスとして起動する場合には、`-d` (`--daemonize`) オプションを指定する。 + +---- +$ ./bin/trema run hello_trema.rb -c trema.conf -d +---- + +==== コマンドオプション一覧 + +|=== +| コマンドオプション | 説明 | デフォルト値 + +| `-c`, `--conf` | 仮想ネットワークの定義ファイルを指定する | +| `-d`, `--daemonize` | コントローラをデーモンプロセスとして起動する | +| `--openflow13` | コントローラを OpenFlow 1.3 モードで起動する | +| `-L`, `--log_dir` | コントローラプロセスのログファイル (`コントローラ名.log`) を生成するディレクトリを指定する。 | `/tmp` +| `-P`, `--pid_dir` | コントローラプロセスの PID ファイル (`コントローラ名.pid`) を生成するディレクトリを指定する。 | `/tmp` +| `-S`, `--socket_dir` | コントローラのソケットファイル (`コントローラ名.ctl`) を生成するディレクトリを指定する。| `/tmp` +| `-l`, `--logging_level` | コントローラプロセスのロギングレベルを指定する。 | `info` +| `-p`, `--port` | コントローラプロセスがスイッチからの接続を待ち受ける TCP ポート番号を指定する | 6653 +|===