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
230
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
96
Floodlightのモジュール機構
oshothebig
1
380
Other Decks in Technology
See All in Technology
CDKのコードを書く環境を作りました with Amazon Q
nobuhitomorioka
1
120
分解して理解する Aspire
nenonaninu
2
510
Visualize, Visualize, Visualize and rclone
tomoaki0705
9
73k
2024.02.19 W&B AIエージェントLT会 / AIエージェントが業務を代行するための計画と実行 / Algomatic 宮脇
smiyawaki0820
15
4.2k
Iceberg Meetup Japan #1 : Iceberg and Databricks
databricksjapan
0
240
生成 AI プロダクトを育てる技術 〜データ品質向上による継続的な価値創出の実践〜
icoxfog417
PRO
5
1.9k
転生CISOサバイバル・ガイド / CISO Career Transition Survival Guide
kanny
3
1.1k
スキルだけでは満たせない、 “組織全体に”なじむオンボーディング/Onboarding that fits “throughout the organization” and cannot be satisfied by skills alone
bitkey
0
110
LINE NEWSにおけるバックエンド開発
lycorptech_jp
PRO
0
110
ローカルLLMを活用したコード生成と、ローコード開発ツールへの応用
kazuhitoyokoi
0
140
ユーザーストーリーマッピングから始めるアジャイルチームと並走するQA / Starting QA with User Story Mapping
katawara
0
280
Windows の新しい管理者保護モード
murachiakira
0
190
Featured
See All Featured
Designing for humans not robots
tammielis
250
25k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Bash Introduction
62gerente
611
210k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Facilitating Awesome Meetings
lara
52
6.2k
Building Adaptive Systems
keathley
40
2.4k
Producing Creativity
orderedlist
PRO
344
39k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Six Lessons from altMBA
skipperchong
27
3.6k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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 ࠷ۙͷ
ऴΘΓ