SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Ryu の遊び方

Pica8 も一緒にもっと楽しく!

NCLC  大芝
※   Ryu の API が変わったので、 2014 年 1 月 23 日に
一部変更!
自己紹介 ( 及び会社紹介 )


OpenFlow スイッチ「 Pica8 」売ってます



Trema 、 Ryu 、 VNC を使って
色々やってます



個人的には Trema(Ruby) 好きです
今日お話しする内容
Ryu の使い方についてお話します。
‐   OFC の作り方とか
‐  パケット解析・生成の仕方とか
‐   REST API の定義方法とか
ついでに Pica8 を使った
Ryu の変わった遊び方もお話します。
HW の OpenFlow スイッチ
What is Ryu ?
Ryu の公式ページ

作っている人
対応機能

要するに Python ベースの OFC フレームワーク
☆   OF1.0 、 OF1.3 のどちらもサポート
☆   NetConf とか、 OF-Config とかにも対応
  ※ 僕は試してません。

☆   OpenStack のプラグインもある
  ※ これもまだ試せてません。。。ごめんなさい。
誰が使ってる?どこで使ってる?
NTT コミュニケーションさんが色々発表してい
る

http://cloud.watch.impress.co.jp/img/clw/docs/620/794/html/41.jpg.html
SDN Japan でも発表されていた
他には。。。


NTT グループ内で結構使われている



CYAN という会社が BluePlanet という
SDN アプリで使っている
インストールしよう!
2 つのやり方があります。
 pip install ryu
git clone ~
setup.py install


pip でインストールするか、ダウンロードしたソースにて、
setup.py を用いるか。
インストールするとついでに入るもの




oslo

INI 形式の設定データを使用するの
に用いる

wsgi, routes, webob
REST API に用いる



eventlet
タイマ定義等に用いる
動かす
通常動作
 ryu-manager sample.py
ヘルプを見る
 ryu-manager --help
サンプル
 ryu/ryu/app  にある
標準のサンプルには

REST API を用い
たものが多い
どうやって OFC を作る?
基本は他フレームワークと同じ
イベントのハンドリングによる適切な処理と
それによる OpenFlow メッセージの送信
☆  イベントハンドリング
☆   OpenFlow メッセージの送信
を、それぞれどう書けばいいのか見てみます!
イベントハンドラ
デコレータを用います。
各メッセージのクラスを渡します。以下を見るとそ
れぞれクラス名が分かります
ryu/ryu/ofproto/ofproto_v1_X_parser
※   X は 0, 2, 3 の3つのバージョン数値です

@set_ev_cls( ofp_event.EventOFPPacketIn,
MAIN_DISPATCHER)
def _packet_in_handler(self, ev):
pass
OpenFlow メッセージの生成


ryu/lib/ofctl_v1_x.py  を使う



ev.msg.datapath.ofproto_parser  を使う

多分一番簡単な方
法

昔からある一般的な方法
ev は各メッセージで引数として渡される

どちらもそうだが、プロアクティブに入れたい場合は、
datapath のオブジェクトを保持しておく必要があります。
datapath オブジェクト


スイッチ毎にインスタンスが準備される
datapath

IP アドレス、 DPID とかの情報
OF 定数

ofproto

OF メッ
セージ

ofproto_parser

動作バージョンに対応
したモジュールが紐付
けされる
ofproto や ofproto_parser はどこに?


ryu/ryu/ofproto 内にソースがある

内容は OpenFlow の各定数とかメッセージに
沿ったクラスとかがあります。
各メッセージの生成方法等が知りたいならここを読んで、

でも、ドキュメントはまだ色々あるんで最後でまた紹介しま
す
例:  L1 のスイッチを作ってみよう!
from ryu.base
import app_manager
from ryu.ofproto
import ofproto_v1_0
from ryu.controller
import dpset
from ryu.controller.handler import set_ev_cls

必要なモジュールを
import

class TestController(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]
_CONTEXTS = { "dpset" : dpset.DPSet }
def __init__(self, *args, **kwargs):
super(TestController, self).__init__(*args, **kwargs)
@set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER)
def handler_datapath(self, ev):
dp=ev.dp
if ev.enter:
match = dp.ofproto_parser.OFPMatch()
port = dp.ofproto.OFPP_FLOOD
actions = [ dp.ofproto_parser.OFPActionOutput( port ) ]
mod = dp.ofproto_parser.OFPFlowMod(
dp, match=match, cookie=0, actions=actions )
dp.send_msg(mod)

スイッチ接続のハ
ンドラ定義

L1 用のマッチ条件と
アクション定義して
フロー送信
便利な機能① トポロジ管理


LLDP を利用したトポロジの検出と管理が行える
Switches
Node
Link
Node

Link
Link

Node

get_all_links
get_all_switches

メインのクラス
トポロジ管理使い方
from ryu.topology import switches

動作させるアプリ
をここに指定

class TestController(app_manager.RyuApp):
_CONTEXTS = { “topology" : switches.Switches}
def __init__(self, *args, **kwargs):
super(TestController, self).__init__(*args, **kwargs)
self.topology = kwargs[“topology”]
引数の kwargs に _CONTEXTS で指定し
たクラスによるインスタンスが渡される
便利機能② パケットライブラリ

色々ある ( これは一部 )
( 普通のパケット生成用ラ
イブラリよりある? )
パケットライブラリ使い方
パース
packet=Packet(data=data)
eth=packet.get_protocol(
ethernet.ethernet)


※  変更 (2014/1/23)
生成
eth=ethernet(eth_info)
arp=arp(arp_info)
packet=eth.serialize(None, None)+
arp.serialize(None, None)


packet
残り
L4
L3
L2

対象プロトコルのク
ラスを渡して受け取
る
そのプロトコル情報
を持ってなければ、
None が返ってくる

個別のヘッダを作っ
てシリアライズ
REST API の定義
各ルートの制御をするアクションは、
このコントローラ内にて定義している
URI とメソッド (GET とか POST とか ) を指定して、
呼び出すメソッドをアクションとして定義する

mapper.connect(route, uri,
controller=MessageController,
action = "index",
conditions=dict(method=['GET']) )
例えば、 uri が” /ofc” として定義したなら、
http://( ホスト ):8080/ofc  に get でアクセスすると
「 index 」が呼ばれる。
※  追加のルートを付けたい場合は submapper を定義する
ドキュメント
Ryu の正式ページに Wiki がある
https://github.com/osrg/ryu/wiki




NCLC のホームページで色々情報発信し
ている (Trema もあり )



来年頭頃に、 Ryu-Book という日本語本を
出す予定らしい
Pica8   OpenFlow

Pica8 について
‐  安い
‐  ポート密度が高い
( 1Gx48, 10Gx4 or 10Gx48, 40Gx4 )
‐  ハイブリッドスイッチ

Pica8 を使った遊び方
OVS

OVS を使って
OpenFlow を実
現している

OF 1.0 、  OF1.2 、  OF1.3
3 バージョン対応
コントローラ接続検証  v1.3

v1.3

RoutingSwitch っぽい
ものの Ruby 版を作っ
て Pica8 と一緒に配布
してます。
※ trema-edge
Ryu と Pica8

Pica8 が Ryu にアプローチをかけて
る
特殊な遊び方
Ryu をスイッチ上で直接動かそ
う!

PicOS 2.0 から Debian に
なり、 Python 動作可能
何の意味がある?
統合管理サーバ
REST API

PacketIn 等のみ、 
 スイッチ単体で処
理させる、とか
コントローラの負荷軽減とか、リスク分散とか
実績?
海外ではあるらしい。
※   NCLC では、まだテストのみ。
インストール方法等の技術情報は、ホー
ムページで公開してます。
以上です!
有難うございました
NCLC  大芝

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Ixgbe internals
Ixgbe internalsIxgbe internals
Ixgbe internals
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてDeep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
 
Win10Pcap を使って見る
Win10Pcap を使って見るWin10Pcap を使って見る
Win10Pcap を使って見る
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
 
自作LLM作ろうとして 爆散した話 (1).pdf
自作LLM作ろうとして 爆散した話 (1).pdf自作LLM作ろうとして 爆散した話 (1).pdf
自作LLM作ろうとして 爆散した話 (1).pdf
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
magmaの概要および特徴の紹介
magmaの概要および特徴の紹介magmaの概要および特徴の紹介
magmaの概要および特徴の紹介
 
NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdfNEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
Linux Network Stack
Linux Network StackLinux Network Stack
Linux Network Stack
 
AS45679 on FreeBSD
AS45679 on FreeBSDAS45679 on FreeBSD
AS45679 on FreeBSD
 
Demystifying EVPN in the data center: Part 1 in 2 episode series
Demystifying EVPN in the data center: Part 1 in 2 episode seriesDemystifying EVPN in the data center: Part 1 in 2 episode series
Demystifying EVPN in the data center: Part 1 in 2 episode series
 
MAP 実装してみた
MAP 実装してみたMAP 実装してみた
MAP 実装してみた
 
分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報
 
LiLz Gauge Introduction 201907
LiLz Gauge Introduction 201907LiLz Gauge Introduction 201907
LiLz Gauge Introduction 201907
 
深センで半年間住んでMakeと研究をしてみた
深センで半年間住んでMakeと研究をしてみた深センで半年間住んでMakeと研究をしてみた
深センで半年間住んでMakeと研究をしてみた
 
SFUの話
SFUの話SFUの話
SFUの話
 
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
 

Ähnlich wie Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)

Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
エイシュン コンドウ
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
openrtm
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
 
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
kazuyas
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
 

Ähnlich wie Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版) (20)

Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
boost::shared_ptr tutorial
boost::shared_ptr tutorialboost::shared_ptr tutorial
boost::shared_ptr tutorial
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 

Kürzlich hochgeladen

Kürzlich hochgeladen (7)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)