Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Open vSwitch ソースコードの全体像
Search
Sho Shimizu
April 29, 2012
Technology
240
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Open vSwitch ソースコードの全体像
Sho Shimizu
April 29, 2012
More Decks by Sho Shimizu
See All by Sho Shimizu
OpenFlowとは何か
oshothebig
2
140
OpenFlowコントローラとその実装
oshothebig
1
130
OpenFlowコントローラを取り巻く状況とその実装
oshothebig
1
100
Floodlightのモジュール機構
oshothebig
1
390
Other Decks in Technology
See All in Technology
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
190
エンジニアリング戦略の作り方 / Crafting Engineering Strategy
iwashi86
21
6.9k
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
130
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
120
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
6
2.4k
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
120
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
150
LLMにもCAP定理があるという話
harukasakihara
0
380
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
1.1k
マルチアカウント環境での コーディングエージェントを使った障害調査が大変なので AIエージェントにReadOnly権限を付与してみた / ReadOnly AI Agents for Multi-Account AWS Incident Response
yamaguchitk333
2
110
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
680
失敗を資産に変えるClaude Code
shinyasaita
0
670
Featured
See All Featured
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
Skip the Path - Find Your Career Trail
mkilby
1
150
A Soul's Torment
seathinner
6
2.9k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
GitHub's CSS Performance
jonrohan
1033
470k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
A Tale of Four Properties
chriscoyier
163
24k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
160
For a Future-Friendly Web
brad_frost
183
10k
Claude Code のすすめ
schroneko
67
230k
Transcript
Open vSwitch ιʔείʔυͷશମ૾ ਗ਼ਫɹᠳ (@oshothebig)
ιʔείʔυͷೖखํ๏ • ϦϦʔε൛ (v.1.4.0) • http://openvswitch.org/releases/openvswitch-1.4.0.tar.gz • ։ൃ൛ • git
clone git://openvswitch.org/openvswitch • git clone http://openvswitch.org/git/openvswitch
σΟϨΫτϦߏ
ͱΓ͋͑ͣنΛݟΔ • *.c, *.h, *.pyͷϑΝΠϧͷҰཡ commit: 8a5b3cfd91841c97fbc8a003857cacbd602646ed • https://gist.github.com/2111386 •
478ϑΝΠϧ, ߹ܭ164700ߦ
ߦτοϓ10 6494 ./ofproto/ofproto-dpif.c 4551 ./lib/netdev-linux.c 4096 ./ofproto/ofproto.c 3953 ./lib/ofp-util.c 3924
./utilities/ovs-vsctl.c 3749 ./vswitchd/bridge.c 2461 ./lib/meta-flow.c 2350 ./python/compat/argparse.py 2263 ./lib/ovsdb-idl.c 2241 ./datapath/datapath.c
• README • INSTALL.* • ͦͷଞςΩετ • build-aux/ • datapath/
• debian/ • include/ • lib/ • m4/ • ofproto/ • ovsdb/ • python/ • rhel/ • tests/ • third-party/ • utilities/ • vswitchd/ • xenserver/
• ίϯϙʔωϯτͷઆ໌ • ovs-vswitchd • ovsdb-server • ovs-brcompatd • ovs-dpctl
• ovs-appctl • ovsdbmonitor • ovs-controller • ovs-ofctl • ovs-pki • patch for tcpdump • scripts for RPM READMEΛಡΉ
ovs-vswitchd • LinuxΧʔωϧϞδϡʔϧͱҰॹʹͳͬͯϑϩʔʹج ͍ͮͨεΠονϯάΛߦ͏ͨΊͷσʔϞϯ
ovsdb-server • ܰྔσʔλϕʔεαʔό • ovs-vswitchd͕ઃఆใΛऔಘ͢ΔͨΊʹ͍߹Θͤ Λߦ͏ઌͷαʔό
ovs-brcompatd • ovs-vswitchd͕LinuxϒϦοδΛஔ͖͑ΔܗͰಈ࡞͞ ͤΔͨΊͷσʔϞϯ • LinuxΧʔωϧϞδϡʔϧͱҰॹʹͳͬͯಈ࡞͠ɺϒ Ϧοδʹର͢ΔioctlΛΠϯλʔηϓτ͢Δ
ovs-dpctl • ΧʔωϧϞδϡʔϧͷઃఆΛߦ͏ͨΊͷπʔϧ
ovs-vsctl • ovs-vswitchdͷઃఆͷ͍߹Θͤͱߋ৽Λߦ͏Ϣʔ ςΟϦςΟ
ovs-appctl • ಈ࡞தͷOpen vSwitchσʔϞϯʹίϚϯυΛૹΔϢʔ ςΟϦςΟ
ovsdbmonitor • OVSσʔλϕʔεͱOpenFlowςʔϒϧΛ֎෦͔ΒݟΔ ͨΊͷGUIπʔϧ
ovs-controller • ୯७ͳOpenFlowίϯτϩʔϥ
ovs-ofctl • OpenFlowεΠον͓Αͼίϯτϩʔϥʹ͍߹Θͤ Λߦ͏ͨΊͷϢʔςΟϦςΟ
ovs-pki • OpenFlowεΠονͷͨΊͷެ։伴ج൫Λ࡞ɺཧ ͢ΔϢʔςΟϦςΟ
ovs-appctl ovs-controller ovs-dpctl ovs-pki ovs-vsctl utilities/ ovs-ofctl
ovs-vswitchd ovs-brcompatd vswitchd/
ovsdb-server ovsdb/
ovsdbmonitor ovsdb/ovsdbmonitor/
patch for tcpdump third-party/
DESIGN
Design Decision In Open vSwitch
OpenFlowʹؔ͢Δ ઃܭํʁ
PORTING
ଞϓϥοτϑΥʔϜ ͷҠ২ํ๏ͷઆ໌
ΞʔΩςΫνϟͷ આ໌͋Γ
ॏཁ
༻ޠղઆʢฆΒΘ͍͠ʣ datapath/ vport --------- vswitchd/ iface port ofproto/ port bundle
lib/bond.c slave bond lib/lacp.c slave lacp lib/netdev.c netdev --------- database Interface Port
ovs-vswitchd ofproto netdev netdev provider ofproto provider ΞʔΩςΫνϟ ovsdb-server OpenFlow
controllers
ovs-vswitchd ofproto netdev netdev provider ofproto provider ΞʔΩςΫνϟ ovsdb-server OpenFlow
controllers
ofproto • OpenFlowίϯτϩʔϥͱΓͱΓ • ofproto providerΛ௨ͯ͠εΠονͷ࣮ͱΓͱΓ • ofproto/ʹ֨ೲ͞Ε͍ͯΔ
ovs-vswitchd ofproto netdev netdev provider ofproto provider ΞʔΩςΫνϟ ovsdb-server OpenFlow
controllers
ovs-vswitchd ofproto netdev netdev provider ofproto provider ΞʔΩςΫνϟ ovsdb-server OpenFlow
controllers
netdev • ωοτϫʔΫσόΠεͱͷΓͱΓΛநԽ • EthernetΠϯλʔϑΣΠε • netdev providerͷബ͍ϨΠϠʔͱͯ͠ಇ͘ • lib/netdev.cʹ͋Δ
ovs-vswitchd ofproto netdev netdev provider ofproto provider ΞʔΩςΫνϟ ovsdb-server OpenFlow
controllers
ovs-vswitchd ofproto netdev netdev provider ofproto provider ΞʔΩςΫνϟ ovsdb-server OpenFlow
controllers
netdev provider • ωοτϫʔΫσόΠε(e.g. eth0)ʹରͯ͠ͷOSϋʔ υΣΞʹಛ༗ͷΠϯλʔϑΣΠεΛ࣮ • εΠονͷ֤ϙʔτnetdevͱͯ͠ಈ࡞͠ͳ͚Εͳ Βͳ͍ •
lib/netdev-provider.hதͷnetdev_classߏମ͕ॏཁ • ଟ͘ͷؔϙΠϯλ͔Βߏ͞ΕΔ
netdevͷΠϯλʔϑΣΠε • OpenFlowͷػೳΛ࣮͢ΔͨΊʹ࠷ݶඞཁͳؔ • ϙʔτͷMACΞυϨεͷใࠂ • Open vSwitchͷΦϓγϣϯͷػೳΛ࣮͢ΔͨΊʹඞ ཁͳؔ •
ARPςʔϒϧͷݕࠪ(in-band੍ޚͷͨΊ) • ಛఆͷ࣮Λߦ͏ͨΊʹඞཁͱͳΔؔ
netdevͷ࣮ • lib/netdev-linux.c: LinuxͷΧʔωϧݺͼग़͠Λͬͨ LinuxͷωοτϫʔΫσόΠεͷͨΊͷ࣮ɻϑϧػ ೳΛ࣮ͨ͠netdev࣮ͱͯ͠ࢀߟʹͳΔ • lib/netdev-vport.c: datapathϞδϡʔϧ͕࣮͢ΔԾ ϙʔτػೳΛαϙʔτ࣮ͨ͠Ͱɺnetdevͷ࠷ݶͷ
࣮ͱͯ͠ࢀߟʹͳΔ • lib/netdev-dummy.c: ςετͰ༗༻ͳμϛʔ࣮
ovs-vswitchd ofproto netdev netdev provider ofproto provider ΞʔΩςΫνϟ ovsdb-server OpenFlow
controllers
ovs-vswitchd ofproto netdev netdev provider ofproto provider ΞʔΩςΫνϟ ovsdb-server OpenFlow
controllers
ovs-vswitchd ofproto netdev netdev provider ofproto- dpif OpenFlow controllers ovsdb-server
dpif dpif provider datapath Userspace Kernel Implementation of ofproto provider Physical NIC
ΧʔωϧۭؒͱϢʔβۭؒ • ϢʔβۭؒͰͷ࣮ • Ұ൪ख͕͔͔ؒΒͳ͍͕ɺੑೳ͍ • ΧʔωϧۭؒͰͷ࣮ • ੑೳߴ͍͕ɺඞཁͳίʔυྔ͕ଟ͍ •
ೋͭͷબࢶ • ofproto provider • dpif provider
ofproto provider • OpenFlowεΠονΛϞχλʔͨ͠Γ੍ޚͨ͠Γ ͢ΔͨΊͷͷ • TCAMͷΑ͏ͳϫΠϧυΧʔυͷϋʔυΣΞͰͷ ϚονϯάʹରԠͤ͞Δ߹ • ofproto/ofproto-provider.hͷதͷofproto_classߏମͰ
ΠϯλʔϑΣΠε͕ఆٛ͞Ε͍ͯΔ
dpif provider • Open vSwitchͰαϙʔτ͞Ε͍ͯΔϘϯσΟϯάͳͲ ͷػೳΛ׆༻͢Δͷʹඞཁ • ௨ৗɺofproto providerΛ࣮͢ΔΑΓ༰қ •
lib/dpif-provider.hͷதͷdpif_classߏମͰΠϯλʔ ϑΣΠε͕ఆٛ͞Ε͍ͯΔ
dpifͷ࣮ • lib/dpif-linux.c: Linux༻ͷdpifͷ࣮ • ΧʔωϧϞδϡʔϧͱ࿈ܞͯ͠ಈ࡞͢Δ • lib/dpif-netdev.c: Ұൠతͳdpifͷ࣮ •
εΠονϯάಈ࡞Λશͯߦ͍ͬͯΔ • Ϣʔβʔۭؒͷ࣮ͰΘΕ͍ͯΔ
·ͱΊ
ovs-appctl ovs-controller ovs-dpctl ovs-pki ovs-vsctl utilities/ ovs-ofctl
ovs-vswitchd ovs-brcompatd vswitchd/
ovsdb-server ovsdb/
ovsdbmonitor ovsdb/ovsdbmonitor/
ϑΥϫʔσΟϯά datapath/
netdev provider netdev_classߏମ lib/netdev-provider.h
ofproto provider ofproto_classߏମ lib/ofproto-provider.h
dpif provider dpif_classߏମ lib/dpif-provider.h
• Linux 3.3ʹίʔυ͕औΓࠐ·Εͨ • MLͰͷ͓Βͤɿhttp://bit.ly/HEQntI • औΓࠐ·Εͨίʔυɿhttp://bit.ly/HEQzZM • OpenFlow 1.1,
1.2ͷରԠ • include/openflow/openflow-1.[012].h • ํɿhttp://bit.ly/HmVdCQ ࠷ۙͷ
ऴΘΓ