Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
hiroshi oshiba
PPTX, PDF
5,920 views
Tremaとtrema edgeの違い
Document for develop OFC App by Trema-Edge.
Technology
◦
Read more
5
Save
Share
Embed
Embed presentation
Download
Downloaded 23 times
1
/ 28
2
/ 28
3
/ 28
4
/ 28
5
/ 28
6
/ 28
7
/ 28
8
/ 28
9
/ 28
10
/ 28
11
/ 28
12
/ 28
13
/ 28
14
/ 28
15
/ 28
16
/ 28
17
/ 28
18
/ 28
19
/ 28
20
/ 28
21
/ 28
22
/ 28
23
/ 28
24
/ 28
25
/ 28
26
/ 28
27
/ 28
28
/ 28
More Related Content
ODP
できる!trema-switch
by
Hiroaki Kawai
PPT
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
by
hiroshi oshiba
PPTX
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
by
エイシュン コンドウ
PDF
Kanazawa.js.Next
by
dynamis
PDF
ジェネリック関数の呼び出され方 #cocoa_kansai
by
Tomohiro Kumagai
PPTX
Nmap 9つの真実
by
abend_cve_9999_0001
PDF
Ruby でパケットパーサを作ろう
by
Yasuhito Takamiya
PDF
Doctrine2 odm-workshop-1
by
Hidenori Goto
できる!trema-switch
by
Hiroaki Kawai
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
by
hiroshi oshiba
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
by
エイシュン コンドウ
Kanazawa.js.Next
by
dynamis
ジェネリック関数の呼び出され方 #cocoa_kansai
by
Tomohiro Kumagai
Nmap 9つの真実
by
abend_cve_9999_0001
Ruby でパケットパーサを作ろう
by
Yasuhito Takamiya
Doctrine2 odm-workshop-1
by
Hidenori Goto
What's hot
PPTX
Erlangご紹介 websocket編
by
Masatoshi Itoh
PDF
async/await不要論
by
bleis tift
PDF
ペパボ福岡支社におけるRubyの活用事例
by
Uchio Kondo
PDF
Phpのレガシーコードをrubyで焼き変えてみた
by
Akira Kaneda
PDF
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
by
真乙 九龍
PDF
第三回ありえる社内勉強会 「いわががのLombok」
by
yoshiaki iwanaga
PDF
Web技術勉強会 第33回
by
龍一 田中
PDF
Zabbix2.0.3の新機能と変更点
by
真乙 九龍
PDF
Inside FastEnum
by
Takaaki Suzuki
PDF
【学習メモ#4th】12ステップで作る組込みOS自作入門
by
sandai
PPTX
Prometheus最初に悩む3つのこと
by
貴仁 大和屋
PPTX
Nmapの真実(ゾクゾク)
by
Keigo Yamazaki
PDF
Vsubuntu
by
Naohiro Aota
PDF
Rpn and forth 超入門
by
Yoshitaka Seo
PDF
謎の言語Forthが謎なので実装した
by
t-sin
PDF
Python勉強会1-はじめに
by
理 小林
PDF
Elog and Ebuild Phase Hook
by
Yasuhiro Asaka
PDF
Javaクラスファイルの読み方
by
y torazuka
PDF
Project Loom + Project Panama
by
Yuichi Sakuraba
PDF
LagopusでPPPoEを使えるか考えてみた件
by
Masaru Oki
Erlangご紹介 websocket編
by
Masatoshi Itoh
async/await不要論
by
bleis tift
ペパボ福岡支社におけるRubyの活用事例
by
Uchio Kondo
Phpのレガシーコードをrubyで焼き変えてみた
by
Akira Kaneda
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
by
真乙 九龍
第三回ありえる社内勉強会 「いわががのLombok」
by
yoshiaki iwanaga
Web技術勉強会 第33回
by
龍一 田中
Zabbix2.0.3の新機能と変更点
by
真乙 九龍
Inside FastEnum
by
Takaaki Suzuki
【学習メモ#4th】12ステップで作る組込みOS自作入門
by
sandai
Prometheus最初に悩む3つのこと
by
貴仁 大和屋
Nmapの真実(ゾクゾク)
by
Keigo Yamazaki
Vsubuntu
by
Naohiro Aota
Rpn and forth 超入門
by
Yoshitaka Seo
謎の言語Forthが謎なので実装した
by
t-sin
Python勉強会1-はじめに
by
理 小林
Elog and Ebuild Phase Hook
by
Yasuhiro Asaka
Javaクラスファイルの読み方
by
y torazuka
Project Loom + Project Panama
by
Yuichi Sakuraba
LagopusでPPPoEを使えるか考えてみた件
by
Masaru Oki
Viewers also liked
ODP
カーネルモジュールプログラミング超入門 #1(仮)
by
University of Tsukuba Linux User Group
PDF
Open vSwitchソースコードの全体像
by
Sho Shimizu
PDF
60分でわかるソケットプログラミング
by
Masahiko Kimoto
PPTX
パケットジェネレータipgenから見るnetmap
by
furandon_pig
PDF
エンタープライズにおけるOpen flowユースケースを考える
by
cloretsblack
PDF
Cloud Days Tokyo 2014 Spring 「80分でばっちり理解するOpenFlow」 NEC宮永直樹
by
Naoki Miyanaga
PDF
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
by
Richie Shellshoccar
PDF
Intel DPDK Step by Step instructions
by
Hisaki Ohara
PPTX
良いコードとは
by
Nobuyuki Matsui
PDF
Linux Profiling at Netflix
by
Brendan Gregg
PDF
Linux packet-forwarding
by
Masakazu Asama
PDF
Linux Performance Analysis and Tools
by
Brendan Gregg
PDF
Docker入門: コンテナ型仮想化技術の仕組みと使い方
by
Yuichi Ito
カーネルモジュールプログラミング超入門 #1(仮)
by
University of Tsukuba Linux User Group
Open vSwitchソースコードの全体像
by
Sho Shimizu
60分でわかるソケットプログラミング
by
Masahiko Kimoto
パケットジェネレータipgenから見るnetmap
by
furandon_pig
エンタープライズにおけるOpen flowユースケースを考える
by
cloretsblack
Cloud Days Tokyo 2014 Spring 「80分でばっちり理解するOpenFlow」 NEC宮永直樹
by
Naoki Miyanaga
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
by
Richie Shellshoccar
Intel DPDK Step by Step instructions
by
Hisaki Ohara
良いコードとは
by
Nobuyuki Matsui
Linux Profiling at Netflix
by
Brendan Gregg
Linux packet-forwarding
by
Masakazu Asama
Linux Performance Analysis and Tools
by
Brendan Gregg
Docker入門: コンテナ型仮想化技術の仕組みと使い方
by
Yuichi Ito
Similar to Tremaとtrema edgeの違い
PDF
Rubyで創るOpenFlowネットワーク - LLまつり
by
Yuya Rin
PDF
ニューTrema 5つのポイント
by
Yasuhito Takamiya
PPTX
Trema での Open vSwitch
by
kazuyas
PDF
最近のTremaを触ってみてちょっとはまったこととか
by
M Hagiwara
PPTX
Trema の紹介とネットワーク仮想化への応用
by
kazuyas
PDF
18166746-NeverBlock-RubyKaigi2009
by
Muhammad Ali
PPT
The Overall Architecture of ROMA
by
Muga Nishizawa
KEY
Real world rails
by
Jun Yokoyama
PDF
Tremaプログラミング ウル技(テク) 大技林
by
Yasuhito Takamiya
PDF
Start-padrino
by
Uchio Kondo
PPT
20091119_sinatraを使ってみた
by
ngi group.
PDF
otomodachi-kakumei
by
Uchio Kondo
PPT
JRuby on Rails
by
Yoichiro Tanaka
PDF
話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!
by
Akira Yokokawa
PDF
Redmine 260 300_new_feature
by
Jun Naitoh
PDF
my unite plugins
by
basyura
PDF
Rubyな日々
by
Kazuhiro Nishiyama
Rubyで創るOpenFlowネットワーク - LLまつり
by
Yuya Rin
ニューTrema 5つのポイント
by
Yasuhito Takamiya
Trema での Open vSwitch
by
kazuyas
最近のTremaを触ってみてちょっとはまったこととか
by
M Hagiwara
Trema の紹介とネットワーク仮想化への応用
by
kazuyas
18166746-NeverBlock-RubyKaigi2009
by
Muhammad Ali
The Overall Architecture of ROMA
by
Muga Nishizawa
Real world rails
by
Jun Yokoyama
Tremaプログラミング ウル技(テク) 大技林
by
Yasuhito Takamiya
Start-padrino
by
Uchio Kondo
20091119_sinatraを使ってみた
by
ngi group.
otomodachi-kakumei
by
Uchio Kondo
JRuby on Rails
by
Yoichiro Tanaka
話題のOpenFlowをフル活用! OpenVNetで仮想ネットワークを実現しよう!
by
Akira Yokokawa
Redmine 260 300_new_feature
by
Jun Naitoh
my unite plugins
by
basyura
Rubyな日々
by
Kazuhiro Nishiyama
Tremaとtrema edgeの違い
1.
意外に違う Trema と Trema-Edge oshiba
2.
自己紹介 PythonとRubyが好きで、 色々遊んでます! フレームワークをあれこれ触って楽しん でます。 会社でOpenFlowスイッチ扱ってます。
3.
今日お話しする内容 TremaEdgeを使ってみて分かった、 Tremaとの違いどころを色々と書きます。 Pio試したり、Sinatra試したりすると中々手ごわいこと (ズバリ書くと不具合)があったため、その辺りを重点的に。 ※ 今後修正されると思うので、そのときにはこの資料は 意味をなさないね! (2014年2月17日で作りました)
4.
What is TremaEdge
? Trema TremaEdge OF v1.0 対応 OF v1.3 対応 要するにTremaのOF1.3用 フレームワークです
5.
ちなみに。。。 OF v1.3になったことによる変更点は、 あんまり解説しません。 マスタリングTCP/IPのOpenFlowとか読んでね! 解説しない理由: めんどくさいから(変更点多すぎ) ※
混乱しそうな場所だけほんのちょっと触れるかも ※ あと、Ruby2.0になったことによる違いも触れないです
6.
まず、起動するだけ class TestController <
Controller def start puts “ Hello Trema! ” end end 何も変化無し。
7.
ハンドラ定義 ※ ハンドラ名はものによって変わってる OpenFlowメッセージが変わったの で def packet_in
dpid, message end def port_status dpid, message end def port_desc_multipart_reply dpid, message end def packet_in dpid, message end ポート情報一覧の 取得用 ※FeaturesRequest/Re plyで受け取れなくなっ た情報 今まで通りメソッドを定義。
8.
タイマ定義とかメッセージ送信 とか # タイマ定義 add_timer_event :discover_neighbor,
5, :periodic # フロー追加 send_flow_mod_add( dpid, options) #メッセージ送信 send_message dpid, PortMultipartRequest.new 基本、今まで通り。 ※ フロー追加はoptionについて変更 有(instructionとか)
9.
ここから変更点とか問題点とか ・ ・ ・ ・ ・ ・ PacketInのときのパケット情報取得 PortStatusのポート情報受け取り PacketOutでデータのみのパケット出力 色々な便利メソッドの有無 Sinatraと連携 Trema::Pioと連携
10.
PacketInのときのパケット情報取得 マッチ条件の名前がベース eth_dst、eth_src、ipv4_dst とか https://github.com/trema/tremaedge/blob/develop/ruby/trema/match.rb をチェック!
11.
PortStatusのポート情報受け取り Trema def port_status dpid,
message message.phy_port.port_no end TremaEdge def port_status dpid, message phy_port message.port_no がない end 理由:TremaEdgeでは、 PortStatusがPortクラスを継承する形で作られている
12.
PacketOutでデータのみのパケット出力 # PacketInベースのリアクティブな処理 send_packet_out( dpid, :packet_in
=> packet_in, :actions => SendOutPort.new( OFPP_ALL ) # バイナリデータを渡す形の処理 send_packet_out( dpid, :data => packet, :buffer_id => OFP_NO_BUFFER, :actions => SendOutPort.new( OFPP_ALL ) ) ) An Ethernet frame must be provided if buffer_id is equal to 0xffffffff データを渡してもNG…
13.
PacketOutでデータのみのパケット出力 VALUE r_opt_message =
HASH_REF( options, packet_in ); ~中略~ if ( buffer_id == OFP_NO_BUFFER && !NIL_P( r_opt_message ) ) { ~中略~ else { packet_out = create_packet_out( get_transaction_id(), :packet_inオプションが指定さ buffer_id, れていないと、ちゃんと動く in_port, ようになっていない。 actions, NULL ); } 一部改変が必要
14.
PacketOutでデータのみのパケット出力 ~改変例~ VALUE r_opt_message =
HASH_REF( options, packet_in ); VALUE r_opt_data = HASH_REF( options, data ); //データオプション追加 ~中略~ if ( !NIL_P( r_opt_message ) ) { ~中略~ else if( !NIL_P(r_opt_data) ){ //データオプション追加 data = r_array_to_buffer( r_opt_data ); dataに対するfree自体は既に処理 があるため、追記はしない } ~中略~ if ( buffer_id == OFP_NO_BUFFER && //条件を1つ追加 ( !NIL_P( r_opt_message ) || !NIL_P(r_opt_data) )) { ~中略~ else { :dataのオプション指定があった場合を想定 ~中略~
15.
PacketOutでデータのみのパケット出力 これだけではNG! send_packet_out( dpid, # :data =>
packet, :data => packet.unpack(“C*”), :buffer_id => OFP_NO_BUFFER, :actions => SendOutPort.new( OFPP_ALL ) Arrayで渡さないといけないので、 unpackをする必要がある )
16.
Sinatraと連携 普通に使うと以下のようなメッセージが出 てしまい、Sinatraが動かない。。。 「Logger」に問題がありそう? クラスじゃないというメッセー ジが出てる。
17.
Sinatraと連携 Sinatra のLoggerクラスと TremaのLoggerモジュールがバッティングしてる。 Sinatra Trema-Edge Logger クラス 競合 Logger モジュール Tremaだと、「DefaultLogger」だったのでOKだった。。。
18.
Sinatraと連携(回避策) Loggerモジュールの名前を変えてあげる。 # logger.cについて(145行目) mLogger =
rb_define_module_under( mTrema, "TremaLogger" ); # logger.rbについて(20行目) module TremaLogger # controller.rbについて(33行目) include TremaLogger
19.
Sinatraと連携(変更後) エラーは出ない。ルートを書けば問題なく動作 少なくとも、GET、POST、DELETEは動作
20.
Trema::Pioと連携 require "pio" class TestPacket
< Controller def start puts "start" end end require しただけでエラー 動かない。。。 error: field '[:octets, {:type=>:uint8, :initial_length=>6}]' is an illegal fieldname in Pio::Type::MacAddress
21.
Trema::Pioと連携 どうやら、Trema-Edgeの問題。。。 # Trema-Edgeで動かした場合 class Fuga end p
Fuga.superclass p Fuga.superclass.respond_to? "string" p Fuga.superclass.respond_to? “array" Object true true Objectクラスに対して、stringやarrayがクラスメソッ ドとして存在してしまっている。
22.
Trema::Pioと連携 この”string”や”array”が、bindataを使ったPioのソースにお ける、arrayやstringの宣言的な箇所で問題を起こしている。 こういう箇所で問題になる
23.
Trema::Pioと連携(回避策) arrayとかstringが使えないので、とりあえずPio側を書き換え。 pio_arrayとかpio_stringにする。 class PioString <
Bindata::String end class PioArray < Bindata::Array end こんな感じの宣言箇所を arrayから、pio_arrayに変更 stringから、pio_stringに変更 sugyoさんからもっとよさそうな回避策も出てました。 でも試してないからここでは書くのをやめました。
24.
色々な便利メソッドの有無 message-helperに今後は纏められる? (sugyoさんがissueあげてた) でも、今はまだ、ほとんどない。。。 send_flow_mod_add、 send_group_mod_addぐら いしかない。。。
25.
色々な便利メソッドの有無 残念ながら以下みたいなのは自分で定義する必要あり ・ send_flow_mod_delete ・ Portクラスの
port.up? もしくは port.down? def up? if(self.state | 1 == 0) return true end return false end def down? return (not self.up?) end Portクラスに 追加する def send_flow_mod_delete datapath_id, options options[ :command ] = OFPFC_DELETE options[ :table_id ] = OFPTT_ALL if options[ :table_id ].nil? options[ :match ] = Match.new if options[ :match ].nil? options[ :cookie ] =0 if options[ :cookie ].nil? options[ :cookie_mask ] = 0 if options[ :cookie_mask ].nil? options[ :out_port ] = OFPP_ANY if options[ :out_port ].nil? options[ :out_group ] = OFPG_ANY if options[ :out_group ].nil? send_flow_mod datapath_id, options end message-helperに追加するなど
26.
Statsメッセージについて Multipartメッセージになったことにより、 名前が変わっているので注意。 # PortStatsを取る場合 send_message dpid,
PortMultipartRequest.new # GroupStatsを取る場合 send_message dpid, GroupDescMultipartRequest.new # FlowStatsを取る場合 send_message dpid, FlowMultipartRequest.new( cookie: 0x0 ) def flow_multipart_reply dpid, message # FlowStatsのハンドラ end def group_desc_multipart_reply dpid, message # GroupStatsのハンドラ end def port_multipart_reply dpid, message # PortStatsのハンドラ end
27.
最後に注意事項(OF 1.3関連) FeaturesReplyにはポート情報は入ってない (PortMultipartRequest/Replyが必要になります) フローエントリにはInstructionsというものが増えてる フローの削除でクッキー番号の指定とout_groupの指定を考えてあげる 必要がある PacketIn用のフローを入れないと、PacketInしない ポート番号以外に、物理ポート番号とかあるから気をつけて OFPP_NONEとかなくなった アクションについてset_fieldとかpush/pop tagとか色々細かくなったか ら気をつけて アクションは即時実行(APPLY_ACTION)とパイプライン終了後に 実行するWRITE_ACTIONがある WRITE_ACTIONには実行順序が決められている APPLY_ACTIONは、今まで通りセットした順番どおりに実行される
28.
以上です! 有難うございました。 oshiba
Download