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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
190
AIにブラウザを触らせて、E2EテストをPlaywrightで書く
koji_kawamura
0
210
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
110
AI時代に、人は何を、どう学ぶのか #pbl_pub / What and How Do We Learn in the AI Era?
takaking22
1
180
도구에서 동료까지: 10년차 AI 스타트업의 AI 적응기
inureyes
PRO
1
300
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
430
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
240
20分でわかるセキュアAPI
nwiizo
2
320
Digitization部 紹介資料
sansan33
PRO
2
7.7k
強化学習「理論」入門
enakai00
3
3.6k
案件に一番詳しいAIを Amazon Bedrock AgentCore で作る ― 知見が知見を生むチームへ / Compounding Knowledge with AgentCore
yusukeshimizu
1
160
NANDでも描画したい!
nichica906
0
230
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.9k
How to train your dragon (web standard)
notwaldorf
97
6.8k
4 Signs Your Business is Dying
shpigford
187
23k
Designing for Performance
lara
611
70k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
270
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
350
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
950
Mobile First: as difficult as doing things right
swwweet
225
10k
Facilitating Awesome Meetings
lara
57
7.1k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
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 ࠷ۙͷ
ऴΘΓ