SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
Lagopus as OpenFlow
Hybrid Switch 実践編
Sep 20, 2016
Masaru OKI @masaru0714
前回までのあらすじ
● Hybrid SwitchはOpenFlowと既存のスイッチ/ルーティングとの組み合わせ
● tapインタフェースを作成しLinuxカーネルの機能と組み合わせる実装をしてみた
● 自前のスイッチング/ルーティングが実装されつつあり、近日公開(Dec 2015)
のあと、音沙汰がないまま半年以上がたちました……(すみません)
ので、近況をお知らせします!
summary: recent releases of Lagopus
● 0.2.5 Apr 6, 2016
○ GTP-U tunnel support, some bug fixes
● 0.2.6 May 2, 2016
○ performance improvement, but DPDK ixgbe vector enabled, much slow
● 0.2.7 May 18, 2016
○ DPDK vector disabled again
● 0.2.8 July 12, 2016
○ build and tests on Ubuntu 16.04LTS
○ deprecated -p parameter
■ ignored if specified
○ it works as L2 and/or L3 Hybrid switch
OpenFlow Hybrid Switch (おさらい)
● L2スイッチあるいはL3ルーティングとOpenFlowスイッチの合体
● Lagopusでの現時点での実装は、外部から見てOpenFlowスイッチが前段にある
● OFPP_NORMALに向かってoutputすると、内蔵のL2/L3エンジンに処理が移る
● tapインタフェースが生えていて、Linuxのipコマンド等で操作できる
○ IPアドレスを付けるなどすると netlink socketを使ってLagopusが情報を読み内蔵エンジンに反映
ビルド方法
./configure --enable-hybrid
make
コンフィグの記述方法(conf形式) - L2bridge
bridgeの定義に
l2-bridge true;
mactable-ageing-time 300;
mactable-max-entries 8192;
を加える。
DPDK使用時のみでなく、rawsocketでも動作する。
fail-mode standalone; を書いておくと、コントローラ未接続時L2bridge動作となる。
数字は例。いずれも省略可。
ageing-timeの単位は秒
max-entriesはエントリ数
デフォルト false
DSLでの記述(例)
1行で記述する。長いので  折り返ししているが許してほしい。
bridge BR01 create …. 
-l2-bridge true 
-mactable-ageing-time 300 
-mactable-max-entires 8192
L3は?
● hybridのlagopusを起動するとinterface設定の名前と同じtap i/fが生える。
● tap i/fにipコマンドなどでIPアドレスをつけると自動的にL3処理対象になる。
○ bridgeごとにnamespaceがあるわけではなく、 Lagopus全体で一つのL3
● routing daemonはtap i/fに向かってパケット送受信するよう設定。
● 外部とのインタフェースはDPDKあるいはrawsocket。
動かしてみよう(L2編)
● rawsocketで試すのが簡単 (./configure --disable-dpdkつきでビルドしてください)
● vethペアを作り、ip netnsで片方を分離させる
● というのを2本生やして、もう片方どうしをLagopus L2bridgeでつなぐ
● 両端に同一ネットワークのIPアドレスを付与し、pingする
NET1 NET2(default)
Lagopus
L2Bridge
veth0veth1 veth3veth2
172.21.0.1/24 172.21.0.2/24
vethの準備
sudo ip link add veth0 type veth peer name veth1
sudo ip link add veth2 type veth peer name veth3
sudo ip netns add NET1
sudo ip netns add NET2
sudo ip link set veth1 netns NET1
sudo ip link set veth3 netns NET2
sudo ip netns exec NET1 ip addr add 172.21.0.1/24 dev veth1
sudo ip netns exec NET2 ip addr add 172.21.0.2/24 dev veth3
sudo ip link set veth0 up
sudo ip netns exec NET1 ip link set veth1 up
sudo ip link set veth2 up
sudo ip netns exec NET2 ip link set veth3 up
DSLの準備
l2bridge.dsl
interface if0 create -type ethernet-rawsock -device veth0
interface if2 create -type ethernet-rawsock -device veth2
port p1 create -interface if0
port p2 create -interface if2
bridge br01 create -l2-bridge true -port p1 1 -port p2 2 -fail-mode standalone
bridge br01 enable
pingしてみる
sudo lagopus -d -C ./l2bridge.dsl
一方他の端末で
sudo ip netns exec NET1 ping 172.21.0.2
PING 172.21.0.2 (172.21.0.2) 56(84) bytes of data.
64 bytes from 172.21.0.2: icmp_seq=166 ttl=64 time=1.79 ms
64 bytes from 172.21.0.2: icmp_seq=167 ttl=64 time=0.886 ms
64 bytes from 172.21.0.2: icmp_seq=168 ttl=64 time=0.878 ms
64 bytes from 172.21.0.2: icmp_seq=169 ttl=64 time=0.888 ms
64 bytes from 172.21.0.2: icmp_seq=170 ttl=64 time=1.06 ms
64 bytes from 172.21.0.2: icmp_seq=171 ttl=64 time=0.885 ms
64 bytes from 172.21.0.2: icmp_seq=172 ttl=64 time=0.921 ms
OK!
動かしてみよう(L3編)
● rawsocketで試すのが簡単 (./configure --disable-dpdkつきでビルドしてください)
● veth0-veth1とveth2-veth3の2つのネットワークを作る。
● NET1のdefault routeを10.0.0.2、NET2のdefault routeを10.1.1.1に設定する。
● NET1からping 10.1.1.2する。
NET1 NET2(default)
Lagopus
L3Engine
veth0veth1 veth3veth2
10.0.0.1/24 10.1.1.2/2410.0.0.2/24 10.1.1.1/24
vethの準備(まっさらな前提で)
sudo ip link add veth0 type veth peer name veth1
sudo ip link add veth2 type veth peer name veth3
sudo ip netns add NET1
sudo ip netns add NET2
sudo ip link set veth1 netns NET1
sudo ip link set veth3 netns NET2
sudo ip netns exec NET1 ip addr add 10.0.0.1/24 dev veth1
sudo ip netns exec NET2 ip addr add 10.1.1..2/24 dev veth3
sudo ip link set veth0 up
sudo ip netns exec NET1 ip link set veth1 up
sudo ip link set veth2 up
sudo ip netns exec NET2 ip link set veth3 up
sudo ip netns exec NET1 route add default gw 10.0.0.2
sudo ip netns exec NET2 route add default gw 10.1.1.1
lagopusを起動してからIPアドレス付与
sudo lagopus -d -C ./l2bridge.dsl
一方別の端末から
sudo ip addr add 10.0.0.2/24 dev veth0
sudo ip addr add 10.1.1.1/24 dev veth2
sudo ip netns exec NET1 ping 10.1.1.2
PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data.
64 bytes from 10.1.1.2: icmp_seq=1 ttl=63 time=0.117 ms
64 bytes from 10.1.1.2: icmp_seq=1 ttl=63 time=1.59 ms (DUP!)
64 bytes from 10.1.1.2: icmp_seq=2 ttl=63 time=0.020 ms
64 bytes from 10.1.1.2: icmp_seq=2 ttl=63 time=0.673 ms (DUP!)
64 bytes from 10.1.1.2: icmp_seq=3 ttl=63 time=0.024 ms
64 bytes from 10.1.1.2: icmp_seq=3 ttl=63 time=0.690 ms (DUP!)
あれ?
設定対象の誤りでした。
● veth0やveth2にIPアドレスを振ってはいけない。
● LagopusとLinuxのネットワークスタックが同時に動いていた。
● veth0→if0、veth2→if2に訂正して、再度試す。
$ sudo ip netns exec NET1 ping 10.1.1.2
PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data.
64 bytes from 10.1.1.2: icmp_seq=1 ttl=63 time=1.43 ms
64 bytes from 10.1.1.2: icmp_seq=2 ttl=63 time=0.957 ms
64 bytes from 10.1.1.2: icmp_seq=3 ttl=63 time=1.73 ms
64 bytes from 10.1.1.2: icmp_seq=4 ttl=63 time=1.02 ms
64 bytes from 10.1.1.2: icmp_seq=5 ttl=63 time=1.41 ms
OK!
tapにIPアドレスつけ
るって解説しておいて
これでしたorz
動かしてみよう(L3編)正しい図はこちら
● veth0やveth2は、DPDK PMDで動かしているときには、見えない。
● 1:1で対応するtapインタフェースがLagopus起動時に作成される。
● confやDSLに書かれたinterfaceの名前がそれ。
● tapインタフェースに対してIPアドレスを付与する。
NET1 NET2(default)
Lagopus
L3Engine
veth0veth1 veth3veth2
10.0.0.1/24 10.1.1.2/24
10.0.0.2/24 10.1.1.1/24
if0 if2
最後に、バグのお知らせorz
● (./configure --disable-dpdkつきでビルドしてください)
● DPDKありでビルドして試すと、rawsocket only modeで動くはずである。
● rawsocket only modeとは
○ DPDKありでビルドしてrawsocketしか使わない起動コマンドラインで Lagopusを起動する
○ すると、DPDKの機能を使わず、--disable-dpdkでビルドしたのと同じように動作する
● のはずが、なぜか0.2.8ではDPDK前提のコードに突入して、落ちました。orz
● 調査して修正しますので、しばらくお待ちください……

Mais conteúdo relacionado

Mais procurados

Open flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitchOpen flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitchMasaru Oki
 
Open stack+lagopus できるかな
Open stack+lagopus できるかなOpen stack+lagopus できるかな
Open stack+lagopus できるかなMasaru Oki
 
Ryu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみようRyu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみようMasaru Oki
 
SDNソフトウェアスイッチlagopus for FreeBSD
SDNソフトウェアスイッチlagopus for FreeBSDSDNソフトウェアスイッチlagopus for FreeBSD
SDNソフトウェアスイッチlagopus for FreeBSDMasaru Oki
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発slankdev
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Coreslankdev
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたnpsg
 
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件Masaru Oki
 
VPP事始め
VPP事始めVPP事始め
VPP事始めnpsg
 
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介Takashi Sogabe
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケットTakaaki Hoyo
 
Running lagopus on Xeon D
Running lagopus on Xeon DRunning lagopus on Xeon D
Running lagopus on Xeon DMasaru Oki
 
Openvswitch vps 20120429資料
Openvswitch vps 20120429資料Openvswitch vps 20120429資料
Openvswitch vps 20120429資料Daisuke Nakajima
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwardingMasakazu Asama
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Tomoya Hibi
 

Mais procurados (20)

Lagopus 0.2.2
Lagopus 0.2.2Lagopus 0.2.2
Lagopus 0.2.2
 
Open flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitchOpen flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitch
 
Open stack+lagopus できるかな
Open stack+lagopus できるかなOpen stack+lagopus できるかな
Open stack+lagopus できるかな
 
Ryu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみようRyu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみよう
 
SDNソフトウェアスイッチlagopus for FreeBSD
SDNソフトウェアスイッチlagopus for FreeBSDSDNソフトウェアスイッチlagopus for FreeBSD
SDNソフトウェアスイッチlagopus for FreeBSD
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
 
DPDK QoS
DPDK QoSDPDK QoS
DPDK QoS
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみた
 
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
Lagopus 0.2
Lagopus 0.2Lagopus 0.2
Lagopus 0.2
 
Lagos running on small factor machine
Lagos running on small factor machineLagos running on small factor machine
Lagos running on small factor machine
 
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケット
 
Dpdk pmd
Dpdk pmdDpdk pmd
Dpdk pmd
 
Running lagopus on Xeon D
Running lagopus on Xeon DRunning lagopus on Xeon D
Running lagopus on Xeon D
 
Openvswitch vps 20120429資料
Openvswitch vps 20120429資料Openvswitch vps 20120429資料
Openvswitch vps 20120429資料
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwarding
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)
 

Semelhante a Lagopus as open flow hybrid switch 実践編

FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始めtetsusat
 
「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例SAKURA Internet Inc.
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~npsg
 
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) VirtualTech Japan Inc.
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2Masahide Yamamoto
 
「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...
「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...
「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...Kenichiro MATOHARA
 
自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介Kentaro Mitsuyasu
 
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)Naoto MATSUMOTO
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKensuke Maeda
 
Bird in show_net
Bird in show_netBird in show_net
Bird in show_netTomoya Hibi
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419エイシュン コンドウ
 
Lagopus Router v19.07.1
Lagopus Router v19.07.1Lagopus Router v19.07.1
Lagopus Router v19.07.1Tomoya Hibi
 
Nsegソフトウェアルータvyatta
NsegソフトウェアルータvyattaNsegソフトウェアルータvyatta
Nsegソフトウェアルータvyattajem 3
 
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月VirtualTech Japan Inc.
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitchkazuyas
 
SDN Japan: ovs-hw
SDN Japan: ovs-hwSDN Japan: ovs-hw
SDN Japan: ovs-hwykuga
 
JOSUG 9th Study
JOSUG 9th StudyJOSUG 9th Study
JOSUG 9th Studyirix_jp
 

Semelhante a Lagopus as open flow hybrid switch 実践編 (20)

FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
 
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
 
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2
 
「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...
「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...
「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...
 
自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介
 
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化する
 
Bird in show_net
Bird in show_netBird in show_net
Bird in show_net
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
Lagopus Router v19.07.1
Lagopus Router v19.07.1Lagopus Router v19.07.1
Lagopus Router v19.07.1
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
Nsegソフトウェアルータvyatta
NsegソフトウェアルータvyattaNsegソフトウェアルータvyatta
Nsegソフトウェアルータvyatta
 
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
OpenStack Neutronの機能概要 - OpenStack最新情報セミナー 2014年12月
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitch
 
SDN Japan: ovs-hw
SDN Japan: ovs-hwSDN Japan: ovs-hw
SDN Japan: ovs-hw
 
JOSUG 9th Study
JOSUG 9th StudyJOSUG 9th Study
JOSUG 9th Study
 

Mais de Masaru Oki

NetBSD移植の昔話
NetBSD移植の昔話NetBSD移植の昔話
NetBSD移植の昔話Masaru Oki
 
Lagopusとvagrant
LagopusとvagrantLagopusとvagrant
LagopusとvagrantMasaru Oki
 
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるかOpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるかMasaru Oki
 
今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話Masaru Oki
 
Onieで遊んでみようとした話
Onieで遊んでみようとした話Onieで遊んでみようとした話
Onieで遊んでみようとした話Masaru Oki
 
GPD WINが来た!
GPD WINが来た!GPD WINが来た!
GPD WINが来た!Masaru Oki
 
新生Lagopus2017(仮称)
新生Lagopus2017(仮称)新生Lagopus2017(仮称)
新生Lagopus2017(仮称)Masaru Oki
 
Lagopus match improvements
Lagopus match improvementsLagopus match improvements
Lagopus match improvementsMasaru Oki
 
Lagopus as open flow hybrid switch
Lagopus as open flow hybrid switchLagopus as open flow hybrid switch
Lagopus as open flow hybrid switchMasaru Oki
 
Net bsd advent calendar 2015 bpf
Net bsd advent calendar 2015 bpfNet bsd advent calendar 2015 bpf
Net bsd advent calendar 2015 bpfMasaru Oki
 
Using rump on NetBSD 7.0
Using rump on NetBSD 7.0Using rump on NetBSD 7.0
Using rump on NetBSD 7.0Masaru Oki
 
Rumpを使ってみる
Rumpを使ってみるRumpを使ってみる
Rumpを使ってみるMasaru Oki
 
Using Xeon D 10GBase-T
Using Xeon D 10GBase-TUsing Xeon D 10GBase-T
Using Xeon D 10GBase-TMasaru Oki
 

Mais de Masaru Oki (18)

NetBSD移植の昔話
NetBSD移植の昔話NetBSD移植の昔話
NetBSD移植の昔話
 
Rust-DPDK
Rust-DPDKRust-DPDK
Rust-DPDK
 
Rust-DPDK
Rust-DPDKRust-DPDK
Rust-DPDK
 
Lagopusとvagrant
LagopusとvagrantLagopusとvagrant
Lagopusとvagrant
 
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるかOpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
 
今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話
 
Onieで遊んでみようとした話
Onieで遊んでみようとした話Onieで遊んでみようとした話
Onieで遊んでみようとした話
 
GPD WINが来た!
GPD WINが来た!GPD WINが来た!
GPD WINが来た!
 
新生Lagopus2017(仮称)
新生Lagopus2017(仮称)新生Lagopus2017(仮称)
新生Lagopus2017(仮称)
 
Lagopus 0.2.7
Lagopus 0.2.7Lagopus 0.2.7
Lagopus 0.2.7
 
Lagopus match improvements
Lagopus match improvementsLagopus match improvements
Lagopus match improvements
 
Lagopus 0.2.4
Lagopus 0.2.4Lagopus 0.2.4
Lagopus 0.2.4
 
Lagopus as open flow hybrid switch
Lagopus as open flow hybrid switchLagopus as open flow hybrid switch
Lagopus as open flow hybrid switch
 
Net bsd advent calendar 2015 bpf
Net bsd advent calendar 2015 bpfNet bsd advent calendar 2015 bpf
Net bsd advent calendar 2015 bpf
 
Using rump on NetBSD 7.0
Using rump on NetBSD 7.0Using rump on NetBSD 7.0
Using rump on NetBSD 7.0
 
Rumpを使ってみる
Rumpを使ってみるRumpを使ってみる
Rumpを使ってみる
 
Using Xeon D 10GBase-T
Using Xeon D 10GBase-TUsing Xeon D 10GBase-T
Using Xeon D 10GBase-T
 
Xeon d
Xeon dXeon d
Xeon d
 

Lagopus as open flow hybrid switch 実践編

  • 1. Lagopus as OpenFlow Hybrid Switch 実践編 Sep 20, 2016 Masaru OKI @masaru0714
  • 2. 前回までのあらすじ ● Hybrid SwitchはOpenFlowと既存のスイッチ/ルーティングとの組み合わせ ● tapインタフェースを作成しLinuxカーネルの機能と組み合わせる実装をしてみた ● 自前のスイッチング/ルーティングが実装されつつあり、近日公開(Dec 2015) のあと、音沙汰がないまま半年以上がたちました……(すみません) ので、近況をお知らせします!
  • 3. summary: recent releases of Lagopus ● 0.2.5 Apr 6, 2016 ○ GTP-U tunnel support, some bug fixes ● 0.2.6 May 2, 2016 ○ performance improvement, but DPDK ixgbe vector enabled, much slow ● 0.2.7 May 18, 2016 ○ DPDK vector disabled again ● 0.2.8 July 12, 2016 ○ build and tests on Ubuntu 16.04LTS ○ deprecated -p parameter ■ ignored if specified ○ it works as L2 and/or L3 Hybrid switch
  • 4. OpenFlow Hybrid Switch (おさらい) ● L2スイッチあるいはL3ルーティングとOpenFlowスイッチの合体 ● Lagopusでの現時点での実装は、外部から見てOpenFlowスイッチが前段にある ● OFPP_NORMALに向かってoutputすると、内蔵のL2/L3エンジンに処理が移る ● tapインタフェースが生えていて、Linuxのipコマンド等で操作できる ○ IPアドレスを付けるなどすると netlink socketを使ってLagopusが情報を読み内蔵エンジンに反映
  • 6. コンフィグの記述方法(conf形式) - L2bridge bridgeの定義に l2-bridge true; mactable-ageing-time 300; mactable-max-entries 8192; を加える。 DPDK使用時のみでなく、rawsocketでも動作する。 fail-mode standalone; を書いておくと、コントローラ未接続時L2bridge動作となる。 数字は例。いずれも省略可。 ageing-timeの単位は秒 max-entriesはエントリ数 デフォルト false
  • 7. DSLでの記述(例) 1行で記述する。長いので 折り返ししているが許してほしい。 bridge BR01 create …. -l2-bridge true -mactable-ageing-time 300 -mactable-max-entires 8192
  • 8. L3は? ● hybridのlagopusを起動するとinterface設定の名前と同じtap i/fが生える。 ● tap i/fにipコマンドなどでIPアドレスをつけると自動的にL3処理対象になる。 ○ bridgeごとにnamespaceがあるわけではなく、 Lagopus全体で一つのL3 ● routing daemonはtap i/fに向かってパケット送受信するよう設定。 ● 外部とのインタフェースはDPDKあるいはrawsocket。
  • 9. 動かしてみよう(L2編) ● rawsocketで試すのが簡単 (./configure --disable-dpdkつきでビルドしてください) ● vethペアを作り、ip netnsで片方を分離させる ● というのを2本生やして、もう片方どうしをLagopus L2bridgeでつなぐ ● 両端に同一ネットワークのIPアドレスを付与し、pingする NET1 NET2(default) Lagopus L2Bridge veth0veth1 veth3veth2 172.21.0.1/24 172.21.0.2/24
  • 10. vethの準備 sudo ip link add veth0 type veth peer name veth1 sudo ip link add veth2 type veth peer name veth3 sudo ip netns add NET1 sudo ip netns add NET2 sudo ip link set veth1 netns NET1 sudo ip link set veth3 netns NET2 sudo ip netns exec NET1 ip addr add 172.21.0.1/24 dev veth1 sudo ip netns exec NET2 ip addr add 172.21.0.2/24 dev veth3 sudo ip link set veth0 up sudo ip netns exec NET1 ip link set veth1 up sudo ip link set veth2 up sudo ip netns exec NET2 ip link set veth3 up
  • 11. DSLの準備 l2bridge.dsl interface if0 create -type ethernet-rawsock -device veth0 interface if2 create -type ethernet-rawsock -device veth2 port p1 create -interface if0 port p2 create -interface if2 bridge br01 create -l2-bridge true -port p1 1 -port p2 2 -fail-mode standalone bridge br01 enable
  • 12. pingしてみる sudo lagopus -d -C ./l2bridge.dsl 一方他の端末で sudo ip netns exec NET1 ping 172.21.0.2 PING 172.21.0.2 (172.21.0.2) 56(84) bytes of data. 64 bytes from 172.21.0.2: icmp_seq=166 ttl=64 time=1.79 ms 64 bytes from 172.21.0.2: icmp_seq=167 ttl=64 time=0.886 ms 64 bytes from 172.21.0.2: icmp_seq=168 ttl=64 time=0.878 ms 64 bytes from 172.21.0.2: icmp_seq=169 ttl=64 time=0.888 ms 64 bytes from 172.21.0.2: icmp_seq=170 ttl=64 time=1.06 ms 64 bytes from 172.21.0.2: icmp_seq=171 ttl=64 time=0.885 ms 64 bytes from 172.21.0.2: icmp_seq=172 ttl=64 time=0.921 ms OK!
  • 13. 動かしてみよう(L3編) ● rawsocketで試すのが簡単 (./configure --disable-dpdkつきでビルドしてください) ● veth0-veth1とveth2-veth3の2つのネットワークを作る。 ● NET1のdefault routeを10.0.0.2、NET2のdefault routeを10.1.1.1に設定する。 ● NET1からping 10.1.1.2する。 NET1 NET2(default) Lagopus L3Engine veth0veth1 veth3veth2 10.0.0.1/24 10.1.1.2/2410.0.0.2/24 10.1.1.1/24
  • 14. vethの準備(まっさらな前提で) sudo ip link add veth0 type veth peer name veth1 sudo ip link add veth2 type veth peer name veth3 sudo ip netns add NET1 sudo ip netns add NET2 sudo ip link set veth1 netns NET1 sudo ip link set veth3 netns NET2 sudo ip netns exec NET1 ip addr add 10.0.0.1/24 dev veth1 sudo ip netns exec NET2 ip addr add 10.1.1..2/24 dev veth3 sudo ip link set veth0 up sudo ip netns exec NET1 ip link set veth1 up sudo ip link set veth2 up sudo ip netns exec NET2 ip link set veth3 up sudo ip netns exec NET1 route add default gw 10.0.0.2 sudo ip netns exec NET2 route add default gw 10.1.1.1
  • 15. lagopusを起動してからIPアドレス付与 sudo lagopus -d -C ./l2bridge.dsl 一方別の端末から sudo ip addr add 10.0.0.2/24 dev veth0 sudo ip addr add 10.1.1.1/24 dev veth2 sudo ip netns exec NET1 ping 10.1.1.2 PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data. 64 bytes from 10.1.1.2: icmp_seq=1 ttl=63 time=0.117 ms 64 bytes from 10.1.1.2: icmp_seq=1 ttl=63 time=1.59 ms (DUP!) 64 bytes from 10.1.1.2: icmp_seq=2 ttl=63 time=0.020 ms 64 bytes from 10.1.1.2: icmp_seq=2 ttl=63 time=0.673 ms (DUP!) 64 bytes from 10.1.1.2: icmp_seq=3 ttl=63 time=0.024 ms 64 bytes from 10.1.1.2: icmp_seq=3 ttl=63 time=0.690 ms (DUP!) あれ?
  • 16. 設定対象の誤りでした。 ● veth0やveth2にIPアドレスを振ってはいけない。 ● LagopusとLinuxのネットワークスタックが同時に動いていた。 ● veth0→if0、veth2→if2に訂正して、再度試す。 $ sudo ip netns exec NET1 ping 10.1.1.2 PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data. 64 bytes from 10.1.1.2: icmp_seq=1 ttl=63 time=1.43 ms 64 bytes from 10.1.1.2: icmp_seq=2 ttl=63 time=0.957 ms 64 bytes from 10.1.1.2: icmp_seq=3 ttl=63 time=1.73 ms 64 bytes from 10.1.1.2: icmp_seq=4 ttl=63 time=1.02 ms 64 bytes from 10.1.1.2: icmp_seq=5 ttl=63 time=1.41 ms OK! tapにIPアドレスつけ るって解説しておいて これでしたorz
  • 17. 動かしてみよう(L3編)正しい図はこちら ● veth0やveth2は、DPDK PMDで動かしているときには、見えない。 ● 1:1で対応するtapインタフェースがLagopus起動時に作成される。 ● confやDSLに書かれたinterfaceの名前がそれ。 ● tapインタフェースに対してIPアドレスを付与する。 NET1 NET2(default) Lagopus L3Engine veth0veth1 veth3veth2 10.0.0.1/24 10.1.1.2/24 10.0.0.2/24 10.1.1.1/24 if0 if2
  • 18. 最後に、バグのお知らせorz ● (./configure --disable-dpdkつきでビルドしてください) ● DPDKありでビルドして試すと、rawsocket only modeで動くはずである。 ● rawsocket only modeとは ○ DPDKありでビルドしてrawsocketしか使わない起動コマンドラインで Lagopusを起動する ○ すると、DPDKの機能を使わず、--disable-dpdkでビルドしたのと同じように動作する ● のはずが、なぜか0.2.8ではDPDK前提のコードに突入して、落ちました。orz ● 調査して修正しますので、しばらくお待ちください……