-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Kazuya Suzuki
committed
Oct 4, 2012
0 parents
commit 33ad313
Showing
22 changed files
with
881 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
source :rubygems | ||
gem 'redcarpet' | ||
gem 'showoff' | ||
gem 'heroku' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
GEM | ||
remote: http://rubygems.org/ | ||
specs: | ||
addressable (2.2.7) | ||
blankslate (2.1.2.4) | ||
bluecloth (2.2.0) | ||
gli (1.5.1) | ||
heroku (2.21.3) | ||
launchy (>= 0.3.2) | ||
netrc (~> 0.7.1) | ||
rest-client (~> 1.6.1) | ||
rubyzip | ||
json (1.6.5) | ||
launchy (2.0.5) | ||
addressable (~> 2.2.6) | ||
mime-types (1.17.2) | ||
netrc (0.7.1) | ||
nokogiri (1.5.2) | ||
parslet (1.3.0) | ||
blankslate (~> 2.0) | ||
rack (1.4.1) | ||
rack-protection (1.2.0) | ||
rack | ||
redcarpet (2.1.0) | ||
rest-client (1.6.7) | ||
mime-types (>= 1.16) | ||
rubyzip (0.9.6.1) | ||
showoff (0.7.0) | ||
bluecloth | ||
gli (>= 1.3.2) | ||
json | ||
nokogiri | ||
parslet | ||
sinatra | ||
sinatra (1.3.2) | ||
rack (~> 1.3, >= 1.3.6) | ||
rack-protection (~> 1.2) | ||
tilt (~> 1.3, >= 1.3.3) | ||
tilt (1.3.3) | ||
|
||
PLATFORMS | ||
ruby | ||
|
||
DEPENDENCIES | ||
heroku | ||
redcarpet | ||
showoff |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# Quick Start | ||
|
||
git clone git://github.com/trema/tutorial.git | ||
cd tutorial | ||
|
||
# run the standard presentation | ||
showoff serve | ||
|
||
This will launch a local Sinatra server on port 9090. Open your browser to `localhost:9090`. On a Mac you can run: | ||
|
||
open http://localhost:9090 | ||
|
||
Use arrow keys to navigate through the slides. Press '?' to see a help window with more key commands. | ||
|
||
|
||
# Printing slides (PDF) | ||
|
||
Try this: first `gem install pdfkit`, then visit | ||
|
||
http://localhost:9090/pdf | ||
|
||
|
||
# LICENSE | ||
Copyright (c) 2012 Yasuhito Takamiya | ||
|
||
Licensed under the GPL3 license |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
require "showoff" | ||
run ShowOff.new |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
<!SLIDE> | ||
# Task B: Hello Switch! ######################################################## | ||
## OpenFlow スイッチとコントローラを接続 | ||
|
||
|
||
<!SLIDE> | ||
## "OpenFlow スイッチを持っていないけど、<br />どうすればいい?" | ||
|
||
|
||
<!SLIDE small> | ||
# 演習 : Hello Switch コントローラ ############################################ | ||
|
||
$ trema run hello-switch.rb -c hello-switch.conf | ||
Password: xxxxxxxx # Enter your password here | ||
Hello 0xabc! # Ctrl-c to quit | ||
|
||
* <b>ソフトウェア版 OpenFlow スイッチ (dpid = 0xabc)</b> を起動し、コントローラと接続します | ||
* コントローラは `"Hello 0xabc!"` と表示します | ||
* ソフトウェア版 OpenFlow スイッチの起動は `hello-switch.conf` に定義します | ||
|
||
|
||
<!SLIDE center> | ||
![overview](hello_switch.png) | ||
|
||
|
||
<!SLIDE small> | ||
# hello-switch.conf ############################################################ | ||
|
||
@@@ ruby | ||
# | ||
# Add a switch with dpid == 0xabc | ||
# | ||
vswitch { dpid "0xabc" } | ||
# or | ||
vswitch { datapath_id "0xabc" } | ||
|
||
* ソフトウェア版 OpenFlow スイッチが起動し、コントローラとのコネクションを確立します | ||
* Trema は <b>Full-stack</b> の開発フレームワークです。ノート PC が一台あれば、物理スイッチを持っていなくても開発ができます | ||
|
||
|
||
<!SLIDE small> | ||
# `hello-switch.rb` ############################################################ | ||
|
||
@@@ ruby | ||
class HelloSwitch < Controller | ||
def switch_ready dpid | ||
info "Hello #{ dpid.to_hex }!" | ||
end | ||
end | ||
|
||
* `switch_ready` は、スイッチがコントローラに接続したときに呼ばれるハンドラです | ||
* 引数の `dpid` には接続したスイッチの ID が格納されます | ||
* `.to_hex` をつけることで `dpid` を 16 進数で表示します | ||
|
||
|
||
<!SLIDE small> | ||
# 演習: スイッチの追加 #################################################### | ||
|
||
@@@ ruby | ||
# hello-switch.conf | ||
vswitch { dpid "0x1" } | ||
vswitch { dpid "0x2" } | ||
vswitch { dpid "0x3" } | ||
... | ||
|
||
|
||
$ trema run hello-switch.rb -c hello-switch.conf | ||
??? | ||
|
||
* `hello-switch.conf` にスイッチを追加して `trema run` したとき、何が表示される? | ||
* 注 : 各スイッチの dpid はユニークである必要があります | ||
|
||
|
||
<!SLIDE small incremental transition=uncover> | ||
# ここまでのサマリー ############################################################### | ||
|
||
## Trema は "Post-Rails" なモダンなフレームワークです | ||
|
||
<br /> | ||
|
||
* <i>書いたコードをすぐ動かせる</i>: `trema run` | ||
* <i>Coding by Convention</i>: 分かりやすく名付けられた各種メソッド | ||
* <i>Full-Stack</i>: ネットワーク DSL によるエミュレーション | ||
* 便利なサブコマンド : `trema ruby` |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
<!SLIDE> | ||
# Task A: Hello Trema! ######################################################### | ||
|
||
|
||
<!SLIDE commandline> | ||
## 演習: "Hello Trema!" を実行 ############################################# | ||
|
||
### 以下のコマンドを入力し、Trema を実行します : | ||
|
||
$ cd Tutorials/Trema | ||
$ trema run hello-trema.rb | ||
Hello Trema! # Ctrl-C to quit | ||
|
||
|
||
<!SLIDE center> | ||
![overview](hello_trema.png) | ||
|
||
|
||
<!SLIDE small> | ||
# 基本コマンド : `trema run` ############################################### | ||
|
||
$ trema run [controller-file] | ||
|
||
* 上記コマンドで、コントローラを実行します | ||
* Ctrl-c で停止します | ||
* `trema help run` でオプションリストを表示します | ||
|
||
|
||
<!SLIDE small> | ||
# 書いたコードをすぐ動かす ################################################################# | ||
|
||
* `trema run` コマンドで、書いたコントローラをすぐ実行できます | ||
* 書いたコントローラを、即座にテストできます | ||
* 短いサイクルで "コーディング、テスト、デバッグ" を繰り返す開発スタイルを実現できます | ||
|
||
|
||
<!SLIDE small> | ||
# Trema 上での コントローラの書き方 ############################################# | ||
|
||
|
||
<!SLIDE small> | ||
# hello-trema.rb ############################################################### | ||
|
||
@@@ ruby | ||
class HelloController < Controller | ||
def start | ||
info "Hello Trema!" | ||
end | ||
end | ||
|
||
* シンプルですが、これだけで完全なコントローラのコードになっています | ||
* (ただし Hello Trema! と表示するだけのものです) | ||
|
||
|
||
<!SLIDE small> | ||
# コントローラクラス ############################################################# | ||
|
||
@@@ ruby | ||
class HelloController < Controller | ||
# ... | ||
end | ||
|
||
* すべてのコントローラは、クラスとして実装します (`class HelloController`) | ||
* Trema クラスライブラリに用意されている `Controller` クラスのサブクラスとして実装します | ||
* コントローラに必要なメソッドは、自動的に継承されます (flow-mod メッセージの送信等) | ||
|
||
|
||
<!SLIDE small> | ||
# イベントハンドラ ############################################################### | ||
|
||
@@@ ruby | ||
class MyController < Controller | ||
def start # start-up event handler | ||
# ... | ||
end | ||
def packet_in dpid, msg # Packet-in received handler | ||
# ... | ||
end | ||
|
||
# ... | ||
end | ||
|
||
* イベントドリブン形式で、コントローラを記述します | ||
* 各イベントハンドラを、インスタンスメソッドとして実装します | ||
|
||
|
||
<!SLIDE small> | ||
# イベントハンドラ (Floodlight の場合) ################################################# | ||
|
||
@@@ java | ||
// Packet-in handling in Floodlight | ||
public Command receive(IOFSwitch sw, ...) { | ||
switch (msg.getType()) { | ||
case PACKET_IN: | ||
return this.handlePacketIn(sw, ...); | ||
... | ||
private Command handlePacketIn(IOFSwitch sw, ...) { | ||
... | ||
|
||
* Floodlight では、複雑なイベント振り分けを必要とします | ||
* おまじないが多いため、コードの見通しが悪くなります | ||
|
||
|
||
<!SLIDE small> | ||
# イベントの振り分け ################################################################ | ||
|
||
@@@ ruby | ||
# Packet-in handling in Trema | ||
class MyController < Controller | ||
def start # automatically called at startup | ||
# ... | ||
end | ||
def packet_in dpid, msg # automatically caled when receiving a packet-in | ||
# ... | ||
end | ||
end | ||
|
||
* Trema はイベントの振り分けにリフレクションを使っています | ||
* そのため、複雑になりがちなディスパッチやハンドラ登録を行う必要はありません | ||
|
||
|
||
<!SLIDE small transition=uncover> | ||
# コーディングのための工夫 ####################################################### | ||
|
||
* 簡潔なコードを書くための工夫 | ||
* e.g., "handler name" == "message name" | ||
* イベントディスパッチのような、おまじないを不要に | ||
* 楽しいプログラミングのために、お約束事やつまらない部分を削減 | ||
|
||
|
||
<!SLIDE small> | ||
# 短く書く ################################################################ | ||
|
||
* コードの長さと生産性の間には強い相関関係 | ||
* e.g. Arc Programming Language [Paul Graham] | ||
* コードを短くすることで、 | ||
* お約束コードを書く時間を最小にする | ||
* バグ混入の可能性を少なくする | ||
|
||
<br /> | ||
|
||
## Trema は、実行時の効率性よりも | ||
## <b>プログラマーの生産性</b>に重きをおいています | ||
|
||
|
||
<!SLIDE small> | ||
# Logging API ################################################################## | ||
|
||
@@@ ruby | ||
class HelloController < Controller | ||
def start | ||
info "Hello Trema!" # outputs an info level message | ||
end | ||
end | ||
|
||
* ロギングレベル毎に用意されたシンプルな API (debug, info, etc) | ||
* `trema ruby` で、Logging API を含む API リファレンスを表示 | ||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
<!SLIDE> | ||
# Intermission (10 minutes) #################################################### |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
<!SLIDE title-slide> | ||
# 作ってわかる OpenFlow ######################################################## | ||
## Trema チュートリアル&ハンズオン | ||
|
||
### 鈴木 一哉 | ||
### 高宮 安仁 | ||
|
||
|
||
<!SLIDE small> | ||
# 本日のゴール ################################################################# | ||
|
||
## "トラフィックモニターつき L2 スイッチ" の実装 | ||
|
||
* Tutorial Kit: <https://github.com/trema/tutorial.files> | ||
* "Hello World" から始め、5 つの段階を踏んで開発を行います | ||
* Trema を使い OpenFlow コントローラの開発サイクルを体験します | ||
|
||
|
||
<!SLIDE small incremental> | ||
# Trema とは ################################################################ | ||
|
||
* Ruby と C 向けの OpenFlow コントローラ開発フレームワーク | ||
* GPL2 | ||
* <http://github.com/trema/trema> | ||
* "Post-Rails" 高い生産性を実現 | ||
* <i>書いたコードをすぐ動かせる</i> | ||
* <i>よくある処理を短く書ける</i> | ||
* <i>統合されたテスト環境</i> | ||
|
||
|
||
<!SLIDE> | ||
# Trema = ###################################################################### | ||
## OpenFlow コントローラ向けライブラリ | ||
## (Ruby and C) | ||
## + | ||
## ネットワークエミュレータ | ||
## + | ||
## `trema` コマンド | ||
|
||
|
||
<!SLIDE center> | ||
![overview](overview.png) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.