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
1
240
Open vSwitch ソースコードの全体像
Sho Shimizu
April 29, 2012
Tweet
Share
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
プロポーザルに込める段取り八分
shoheimitani
1
180
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
150
AWS Network Firewall Proxyを触ってみた
nagisa53
0
150
Meshy Proプラン課金した
henjin0
0
250
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
210
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
220
ZOZOにおけるAI活用の現在 ~開発組織全体での取り組みと試行錯誤~
zozotech
PRO
5
4.9k
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
210
システムのアラート調査をサポートするAI Agentの紹介/Introduction to an AI Agent for System Alert Investigation
taddy_919
2
2k
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
3
440
15 years with Rails and DDD (AI Edition)
andrzejkrzywda
0
180
Featured
See All Featured
Optimizing for Happiness
mojombo
379
71k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
36k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
200
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
Why Our Code Smells
bkeepers
PRO
340
58k
エンジニアに許された特別な時間の終わり
watany
106
230k
How to make the Groovebox
asonas
2
1.9k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
280
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
270
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
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 ࠷ۙͷ
ऴΘΓ