SlideShare a Scribd company logo
1 of 20
Download to read offline
VPP Prototyping for
Stateless SRv6/GTP-U Translation
FD.io / VPP ユーザ有志の会 #1
2019/05/28 @東京ミッドタウン
Kentaro Ebisawa | Twitter: @ebiken
IETF 104 Hackathon Implementation
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
SRv6 on VPP (Vector Packet Processing)
https://fd.io/technology/
• Input as Packet Vector
• Process based on graph of nodes
(ethernet, mpls, ip6, arp …)
• New functionality could be added by
customizing node or creating plugin
SRv6 node: sr_localsid_node, sr_policy_*_node
DPDK (User Land)
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
SRv6 on VPP (by FD.io project)
Supported functions as of 2019/05/27
http://www.segment-routing.net/open-software/vpp/
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
IETF 104 Hackathon @Prague, Czech
https://trac.ietf.org/trac/ietf/meeting/wiki/104hackathon
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
IETF 104 Hackathon @Prague, Czech
Target Function Description
End.MAP Forwards the receiving IPv6 packet and update the IPv6 DA
with mapped SID.
End.M.GTP6.D Decap the receiving GTP/UDP/IPv6 packet and encap with
IPv6 header, or IPv6 header with SRH based on the
address/ID mapping rule and binding SR-Policy
End.M.GTP6.E Decap the receiving IPv6+SRH packet and encap with
IPv6/UDP/GTP-U header based on the address/ID mapping
rule.
End.M.GTP4.E
(SRv6 -> GTP-U)
Decap the receiving IPv6+SRH packet and encap with
IPv4/UDP/GTP-U header base on the address/ID mapping
rule.
T.M.Tmap
(GTP-U -> SRv6)
Decap the receiving GTP/UDP/IPv4 packet and encap with
IPv6 header, or IPv6 header with SRH based on the
address/ID mapping rule and binding SR-Policy.
End.Limit Limit the throughput of the packet flow with mapped SID.
**NEW** Translate GTP-U Echo Request to ICMP Echo Request and vice
versa
**NEW** Translate GTP-U Echo Reply to ICMP Echo Request and vice
versa
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
Hackathon Topology and CLI (ConfigCommands)
Hack target
VPP1
VPP4
D4::
IPv4 over GTP/UDP/IPv4 IPv4 over SRH/IPv6
VPP2
D2::
IPv4 over IPv6 IPv4 over GTP/UDP/IPv4
T.M.Tmap End.M.GTP4.E
VPP3
D3::
scapy scapy
T.M.Tmap
sr policy add bsid <bsid> next A1:: next B1:: next C1:: (weight 5) (fib-table 3) gtp4_removal
sr-prefix <ipv6_prefix_interworking>/<mask> local-prefix <src_prefix>/<mask>
sr steer l3 <IPv4 dst addr of GTP-U>/<mask> via bsid <bsid>
End.M.GTP4.E
sr localsid (del) address <IPv6 address of SRGW>/<mask> behavior end.m.gtp4.e
• https://wiki.fd.io/view/VPP/Software_Architecture
• VLIB
• Vnet
• https://wiki.fd.io/view/VPP/Feature_Arcs
• https://wiki.fd.io/view/VPP/DPOs_and_Feature_Arcs
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
VPP Architecture Reference (Wiki Pages)
POC SRv6 Implementations
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
Extending SRv6 functions
https://docs.fd.io/vpp/19.04/srv6_plugin_doc.html
$ git clone https://gerrit.fd.io/r/vpp
~/vpp/src/examples/srv6-sample-localsid$ ls
node.c srv6_localsid_sample.h
srv6_localsid_sample.c
srv6_sample_localsid_doc.md
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
SRv6 on VPP (Vector Packet Processing)
src/vnet/srv6$ grep VLIB_REGISTER_NODE *
sr_localsid.c:VLIB_REGISTER_NODE (sr_localsid_d_node) = {
sr_localsid.c:VLIB_REGISTER_NODE (sr_localsid_node) = {
sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_node) = {
sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_v4_node) = {
sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_l2_node) = {
sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_insert_node) = {
sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_b_insert_node) = {
sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_b_encaps_node) = {
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
SRv6 on VPP (Vector Packet Processing)
src/plugins$ grep -r VLIB_REGISTER_NODE | grep srv6
srv6-gtp/node.c:VLIB_REGISTER_NODE (srv6_gtp_node) = {
srv6-end/node.c:VLIB_REGISTER_NODE (srv6_end_m_gtp4_e) = {
srv6-ad/node.c:VLIB_REGISTER_NODE (srv6_ad_localsid_node) = {
srv6-ad/node.c:VLIB_REGISTER_NODE (srv6_ad2_rewrite_node) = {
srv6-ad/node.c:VLIB_REGISTER_NODE (srv6_ad4_rewrite_node) = {
srv6-ad/node.c:VLIB_REGISTER_NODE (srv6_ad6_rewrite_node) = {
srv6-am/node.c:VLIB_REGISTER_NODE (srv6_am_localsid_node) = {
srv6-am/node.c:VLIB_REGISTER_NODE (srv6_am_rewrite_node) = {
srv6-as/node.c:VLIB_REGISTER_NODE (srv6_as_localsid_node) = {
srv6-as/node.c:VLIB_REGISTER_NODE (srv6_as2_rewrite_node) = {
srv6-as/node.c:VLIB_REGISTER_NODE (srv6_as4_rewrite_node) = {
srv6-as/node.c:VLIB_REGISTER_NODE (srv6_as6_rewrite_node) = {
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
https://github.com/filvarga/srv6-mobile
https://github.com/filvarga/srv6-mobile/tree/ietf104-hackathon/extras/ietf104
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
Finding modified source code
Last commit before IETF Hackathon
1d85b1eef299bcdaa4df193fa70b7c90e9b2809f
Pablo Test Implementation
srv6-gtp
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
Finding modified source code
ebiken@lab:~/20190527-vppug/srv6-mobile$ git diff --name-only 1d85b1eef299bcdaa4df193fa70b7c90e9b2809f
extras/ietf104/Dockerfile.j2
extras/ietf104/README.md
extras/ietf104/requirements.txt
extras/ietf104/runner.py
extras/ietf104/startup.conf.j2
src/plugins/srv6-ad/ad.c
src/plugins/srv6-ad/node.c
src/plugins/srv6-end/CMakeLists.txt
src/plugins/srv6-end/node.c
src/plugins/srv6-end/srv6_end.c
src/plugins/srv6-end/srv6_end.h
src/vnet/dpo/dpo.c
src/vnet/srv6/sr.h
src/vnet/srv6/sr_api.c
src/vnet/srv6/sr_policy_rewrite.c
test/test_srv6_end.py
ebiken@lab:~/20190527-vppug/srv6-mobile$ git branch -a
* ietf104-hackathon
remotes/origin/HEAD -> origin/ietf104-hackathon
remotes/origin/ietf104-hackathon
remotes/origin/master
remotes/origin/satoru
Generic Code.
CLI/Configuration.
T.M.Tmap のコード
End.M.GTP4.E : src/plugins/srv6-end/
diff 調査メモ
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
add plugins
src/plugins/srv6-end/CMakeLists.txt src/plugins/srv6_gtp.am
srv6-endがhackathonで実装したコード
• src/vnet/srv6/sr.h
• GTPU Header 構造体(ip4_gtpu_header_t)の定義
• T.M.TmapのFlagやlocal_prefixの追加(line 94,95)
• sr_policy_add のプロトタイプ宣言
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
diff 調査メモ
• src/vnet/srv6/sr_policy_rewrite.c
• T.M.Tmap の実装
• Registration
• VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_v4_node) = {
$ diff --git a/src/vnet/srv6/sr_policy_rewrite.c b/src/vnet/srv6/sr_policy_rewrite.c
sr_policy_rewrite_encaps_v4 (vlib_main_t * vm, vlib_node_runtime_t * node,
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
diff 調査メモ
• src/plugins/srv6-end$
• End.M.GTP4.Eの実装
• Registration
• VLIB_REGISTER_NODE (srv6_end_m_gtp4_e) = {
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
diff 調査メモ
> src/plugins/srv6-end/node.c
211 VLIB_REGISTER_NODE (srv6_end_m_gtp4_e) = {
212 .name = "srv6-end-m-gtp4-e",
213 .vector_size = sizeof (u32),
214 .format_trace = format_srv6_end_rewrite_trace,
215 .type = VLIB_NODE_TYPE_INTERNAL,
217 .n_errors = ARRAY_LEN (srv6_end_error_strings),
218 .error_strings = srv6_end_error_strings,
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
diff 調査メモ
220 .n_next_nodes = SRV6_END_M_GTP4_E_N_NEXT,
221 .next_nodes = {
222 [SRV6_END_M_GTP4_E_NEXT_DROP] = "error-drop",
223 [SRV6_END_M_GTP4_E_NEXT_LOOKUP] = "ip4-lookup",
224 },
225 };
Appendix
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
POC SRv6 Implementations
VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
Extending SRv6 functions
https://docs.fd.io/vpp/19.04/srv6_plugin_doc.html $ git clone https://gerrit.fd.io/r/vpp
~/vpp/src/examples/srv6-sample-localsid$ ls
node.c srv6_localsid_sample.h
srv6_localsid_sample.c srv6_sample_localsid_doc.md

More Related Content

What's hot

hpsr-2020-srv6-tutorial
hpsr-2020-srv6-tutorialhpsr-2020-srv6-tutorial
hpsr-2020-srv6-tutorial
Stefano Salsano
 
CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016] CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016]
IO Visor Project
 

What's hot (20)

Service Function Chaining with SRv6
Service Function Chaining with SRv6Service Function Chaining with SRv6
Service Function Chaining with SRv6
 
hpsr-2020-srv6-tutorial
hpsr-2020-srv6-tutorialhpsr-2020-srv6-tutorial
hpsr-2020-srv6-tutorial
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
 
eBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceeBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to Userspace
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux Networking
 
SRv6 study
SRv6 studySRv6 study
SRv6 study
 
wakamonoによるISP的実験PROJECT AS59105のご紹介
wakamonoによるISP的実験PROJECT AS59105のご紹介wakamonoによるISP的実験PROJECT AS59105のご紹介
wakamonoによるISP的実験PROJECT AS59105のご紹介
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
NETCONFとYANGの話
NETCONFとYANGの話NETCONFとYANGの話
NETCONFとYANGの話
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
BPF Internals (eBPF)
BPF Internals (eBPF)BPF Internals (eBPF)
BPF Internals (eBPF)
 
Onieで遊んでみようとした話
Onieで遊んでみようとした話Onieで遊んでみようとした話
Onieで遊んでみようとした話
 
Linux BPF Superpowers
Linux BPF SuperpowersLinux BPF Superpowers
Linux BPF Superpowers
 
VLANs in the Linux Kernel
VLANs in the Linux KernelVLANs in the Linux Kernel
VLANs in the Linux Kernel
 
フロー技術によるネットワーク管理
フロー技術によるネットワーク管理フロー技術によるネットワーク管理
フロー技術によるネットワーク管理
 
CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016] CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016]
 
SRv6 Network Programming: deployment use-cases
SRv6 Network Programming: deployment use-cases SRv6 Network Programming: deployment use-cases
SRv6 Network Programming: deployment use-cases
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 

Similar to IETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U Translation

The Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF PrimerThe Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF Primer
Sasha Goldshtein
 

Similar to IETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U Translation (20)

SRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and ImplementationSRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and Implementation
 
JANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source ImplementationsJANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source Implementations
 
SRv6 Mobile User Plane P4 proto-type
SRv6 Mobile User Plane P4 proto-typeSRv6 Mobile User Plane P4 proto-type
SRv6 Mobile User Plane P4 proto-type
 
Cfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersCfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF Superpowers
 
Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)
Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)
Lightweight 4-over-6: One step further Dual-Stack Lite Networks (RIPE 76)
 
My First FD.io VPP
My First FD.io VPPMy First FD.io VPP
My First FD.io VPP
 
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuffBuildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
 
The Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF PrimerThe Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF Primer
 
MAP-E as IPv4 over IPv6 Technology
MAP-E as IPv4 over IPv6 TechnologyMAP-E as IPv4 over IPv6 Technology
MAP-E as IPv4 over IPv6 Technology
 
MAP-E as IPv4 over IPv6 Technology - with some operational experiences
MAP-E as IPv4 over IPv6 Technology - with some operational experiencesMAP-E as IPv4 over IPv6 Technology - with some operational experiences
MAP-E as IPv4 over IPv6 Technology - with some operational experiences
 
zebra & openconfigd Introduction
zebra & openconfigd Introductionzebra & openconfigd Introduction
zebra & openconfigd Introduction
 
JPNE MAP-E Deployment (IETF92@Dallas)
JPNE MAP-E Deployment (IETF92@Dallas)JPNE MAP-E Deployment (IETF92@Dallas)
JPNE MAP-E Deployment (IETF92@Dallas)
 
Linkmeup v076(2019-06).2
Linkmeup v076(2019-06).2Linkmeup v076(2019-06).2
Linkmeup v076(2019-06).2
 
Révolution eBPF - un noyau dynamique
Révolution eBPF - un noyau dynamiqueRévolution eBPF - un noyau dynamique
Révolution eBPF - un noyau dynamique
 
AutoIP -A mechanism for IPv6 migration and IPv4 sunsetting by Shishio Tsuchiy...
AutoIP -A mechanism for IPv6 migration and IPv4 sunsetting by Shishio Tsuchiy...AutoIP -A mechanism for IPv6 migration and IPv4 sunsetting by Shishio Tsuchiy...
AutoIP -A mechanism for IPv6 migration and IPv4 sunsetting by Shishio Tsuchiy...
 
You got database in my cloud!
You got database  in my cloud!You got database  in my cloud!
You got database in my cloud!
 
Operational Experience of MAP-E
Operational Experience of MAP-EOperational Experience of MAP-E
Operational Experience of MAP-E
 
p4srv6 (P4-16) design document rev1.0
p4srv6 (P4-16) design document rev1.0p4srv6 (P4-16) design document rev1.0
p4srv6 (P4-16) design document rev1.0
 
Tech Talk - Konrad Gawda : P4 programming language
Tech Talk - Konrad Gawda : P4 programming languageTech Talk - Konrad Gawda : P4 programming language
Tech Talk - Konrad Gawda : P4 programming language
 
SPDK benchmark memo
SPDK benchmark memoSPDK benchmark memo
SPDK benchmark memo
 

More from Kentaro Ebisawa

More from Kentaro Ebisawa (20)

P4 Updates (2020) (Japanese)
P4 Updates (2020) (Japanese)P4 Updates (2020) (Japanese)
P4 Updates (2020) (Japanese)
 
Barefoot Faster™ 日本語紹介
Barefoot Faster™ 日本語紹介Barefoot Faster™ 日本語紹介
Barefoot Faster™ 日本語紹介
 
IETF106 Hackathon 報告 & P4 based Switch の課題と未来
IETF106 Hackathon 報告 & P4 based Switch の課題と未来IETF106 Hackathon 報告 & P4 based Switch の課題と未来
IETF106 Hackathon 報告 & P4 based Switch の課題と未来
 
MPLS Japan 2019 : Data & Control Plane を繋ぐ API
MPLS Japan 2019 : Data & Control Plane を繋ぐ APIMPLS Japan 2019 : Data & Control Plane を繋ぐ API
MPLS Japan 2019 : Data & Control Plane を繋ぐ API
 
Yang Tools Quick Memo
Yang Tools Quick MemoYang Tools Quick Memo
Yang Tools Quick Memo
 
In Network Computing Prototype Using P4 at KSC/KREONET 2019
In Network Computing Prototype Using P4 at KSC/KREONET 2019In Network Computing Prototype Using P4 at KSC/KREONET 2019
In Network Computing Prototype Using P4 at KSC/KREONET 2019
 
Comparison of SRv6 Extensions uSID, SRv6+, C-SRH
Comparison of SRv6 Extensions uSID, SRv6+, C-SRHComparison of SRv6 Extensions uSID, SRv6+, C-SRH
Comparison of SRv6 Extensions uSID, SRv6+, C-SRH
 
Interop2019 Toyota Netcope P4
Interop2019 Toyota Netcope P4Interop2019 Toyota Netcope P4
Interop2019 Toyota Netcope P4
 
Using GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnlUsing GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnl
 
GTPing, How To
GTPing, How ToGTPing, How To
GTPing, How To
 
Zebra 2.0 in Hybrid Cloud Era
Zebra 2.0 in Hybrid Cloud EraZebra 2.0 in Hybrid Cloud Era
Zebra 2.0 in Hybrid Cloud Era
 
p4alu: Arithmetic Logic Unit in P4
p4alu: Arithmetic Logic Unit in P4p4alu: Arithmetic Logic Unit in P4
p4alu: Arithmetic Logic Unit in P4
 
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタックONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
"OPEN NETWORKING" に向けた Management / Data Plane の動向
"OPEN NETWORKING" に向けた Management / Data Plane の動向"OPEN NETWORKING" に向けた Management / Data Plane の動向
"OPEN NETWORKING" に向けた Management / Data Plane の動向
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
 
ネットワークAPI のあれこれ (ENOG37)
ネットワークAPI のあれこれ (ENOG37)ネットワークAPI のあれこれ (ENOG37)
ネットワークAPI のあれこれ (ENOG37)
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
 
Introduction to Ostinato , network packet crafting and generator.
Introduction to Ostinato, network packet crafting and generator.Introduction to Ostinato, network packet crafting and generator.
Introduction to Ostinato , network packet crafting and generator.
 
plotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfgplotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfg
 

Recently uploaded

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Recently uploaded (20)

Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 

IETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U Translation

  • 1. VPP Prototyping for Stateless SRv6/GTP-U Translation FD.io / VPP ユーザ有志の会 #1 2019/05/28 @東京ミッドタウン Kentaro Ebisawa | Twitter: @ebiken IETF 104 Hackathon Implementation VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
  • 2. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン SRv6 on VPP (Vector Packet Processing) https://fd.io/technology/ • Input as Packet Vector • Process based on graph of nodes (ethernet, mpls, ip6, arp …) • New functionality could be added by customizing node or creating plugin SRv6 node: sr_localsid_node, sr_policy_*_node DPDK (User Land)
  • 3. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン SRv6 on VPP (by FD.io project) Supported functions as of 2019/05/27 http://www.segment-routing.net/open-software/vpp/
  • 4. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン IETF 104 Hackathon @Prague, Czech https://trac.ietf.org/trac/ietf/meeting/wiki/104hackathon
  • 5. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン IETF 104 Hackathon @Prague, Czech Target Function Description End.MAP Forwards the receiving IPv6 packet and update the IPv6 DA with mapped SID. End.M.GTP6.D Decap the receiving GTP/UDP/IPv6 packet and encap with IPv6 header, or IPv6 header with SRH based on the address/ID mapping rule and binding SR-Policy End.M.GTP6.E Decap the receiving IPv6+SRH packet and encap with IPv6/UDP/GTP-U header based on the address/ID mapping rule. End.M.GTP4.E (SRv6 -> GTP-U) Decap the receiving IPv6+SRH packet and encap with IPv4/UDP/GTP-U header base on the address/ID mapping rule. T.M.Tmap (GTP-U -> SRv6) Decap the receiving GTP/UDP/IPv4 packet and encap with IPv6 header, or IPv6 header with SRH based on the address/ID mapping rule and binding SR-Policy. End.Limit Limit the throughput of the packet flow with mapped SID. **NEW** Translate GTP-U Echo Request to ICMP Echo Request and vice versa **NEW** Translate GTP-U Echo Reply to ICMP Echo Request and vice versa
  • 6. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン Hackathon Topology and CLI (ConfigCommands) Hack target VPP1 VPP4 D4:: IPv4 over GTP/UDP/IPv4 IPv4 over SRH/IPv6 VPP2 D2:: IPv4 over IPv6 IPv4 over GTP/UDP/IPv4 T.M.Tmap End.M.GTP4.E VPP3 D3:: scapy scapy T.M.Tmap sr policy add bsid <bsid> next A1:: next B1:: next C1:: (weight 5) (fib-table 3) gtp4_removal sr-prefix <ipv6_prefix_interworking>/<mask> local-prefix <src_prefix>/<mask> sr steer l3 <IPv4 dst addr of GTP-U>/<mask> via bsid <bsid> End.M.GTP4.E sr localsid (del) address <IPv6 address of SRGW>/<mask> behavior end.m.gtp4.e
  • 7. • https://wiki.fd.io/view/VPP/Software_Architecture • VLIB • Vnet • https://wiki.fd.io/view/VPP/Feature_Arcs • https://wiki.fd.io/view/VPP/DPOs_and_Feature_Arcs VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン VPP Architecture Reference (Wiki Pages)
  • 8. POC SRv6 Implementations VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン Extending SRv6 functions https://docs.fd.io/vpp/19.04/srv6_plugin_doc.html $ git clone https://gerrit.fd.io/r/vpp ~/vpp/src/examples/srv6-sample-localsid$ ls node.c srv6_localsid_sample.h srv6_localsid_sample.c srv6_sample_localsid_doc.md
  • 9. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン SRv6 on VPP (Vector Packet Processing) src/vnet/srv6$ grep VLIB_REGISTER_NODE * sr_localsid.c:VLIB_REGISTER_NODE (sr_localsid_d_node) = { sr_localsid.c:VLIB_REGISTER_NODE (sr_localsid_node) = { sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_node) = { sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_v4_node) = { sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_l2_node) = { sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_insert_node) = { sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_b_insert_node) = { sr_policy_rewrite.c:VLIB_REGISTER_NODE (sr_policy_rewrite_b_encaps_node) = {
  • 10. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン SRv6 on VPP (Vector Packet Processing) src/plugins$ grep -r VLIB_REGISTER_NODE | grep srv6 srv6-gtp/node.c:VLIB_REGISTER_NODE (srv6_gtp_node) = { srv6-end/node.c:VLIB_REGISTER_NODE (srv6_end_m_gtp4_e) = { srv6-ad/node.c:VLIB_REGISTER_NODE (srv6_ad_localsid_node) = { srv6-ad/node.c:VLIB_REGISTER_NODE (srv6_ad2_rewrite_node) = { srv6-ad/node.c:VLIB_REGISTER_NODE (srv6_ad4_rewrite_node) = { srv6-ad/node.c:VLIB_REGISTER_NODE (srv6_ad6_rewrite_node) = { srv6-am/node.c:VLIB_REGISTER_NODE (srv6_am_localsid_node) = { srv6-am/node.c:VLIB_REGISTER_NODE (srv6_am_rewrite_node) = { srv6-as/node.c:VLIB_REGISTER_NODE (srv6_as_localsid_node) = { srv6-as/node.c:VLIB_REGISTER_NODE (srv6_as2_rewrite_node) = { srv6-as/node.c:VLIB_REGISTER_NODE (srv6_as4_rewrite_node) = { srv6-as/node.c:VLIB_REGISTER_NODE (srv6_as6_rewrite_node) = {
  • 11. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン https://github.com/filvarga/srv6-mobile https://github.com/filvarga/srv6-mobile/tree/ietf104-hackathon/extras/ietf104
  • 12. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン Finding modified source code Last commit before IETF Hackathon 1d85b1eef299bcdaa4df193fa70b7c90e9b2809f Pablo Test Implementation srv6-gtp
  • 13. VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン Finding modified source code ebiken@lab:~/20190527-vppug/srv6-mobile$ git diff --name-only 1d85b1eef299bcdaa4df193fa70b7c90e9b2809f extras/ietf104/Dockerfile.j2 extras/ietf104/README.md extras/ietf104/requirements.txt extras/ietf104/runner.py extras/ietf104/startup.conf.j2 src/plugins/srv6-ad/ad.c src/plugins/srv6-ad/node.c src/plugins/srv6-end/CMakeLists.txt src/plugins/srv6-end/node.c src/plugins/srv6-end/srv6_end.c src/plugins/srv6-end/srv6_end.h src/vnet/dpo/dpo.c src/vnet/srv6/sr.h src/vnet/srv6/sr_api.c src/vnet/srv6/sr_policy_rewrite.c test/test_srv6_end.py ebiken@lab:~/20190527-vppug/srv6-mobile$ git branch -a * ietf104-hackathon remotes/origin/HEAD -> origin/ietf104-hackathon remotes/origin/ietf104-hackathon remotes/origin/master remotes/origin/satoru Generic Code. CLI/Configuration. T.M.Tmap のコード End.M.GTP4.E : src/plugins/srv6-end/
  • 14. diff 調査メモ VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン add plugins src/plugins/srv6-end/CMakeLists.txt src/plugins/srv6_gtp.am srv6-endがhackathonで実装したコード
  • 15. • src/vnet/srv6/sr.h • GTPU Header 構造体(ip4_gtpu_header_t)の定義 • T.M.TmapのFlagやlocal_prefixの追加(line 94,95) • sr_policy_add のプロトタイプ宣言 VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン diff 調査メモ
  • 16. • src/vnet/srv6/sr_policy_rewrite.c • T.M.Tmap の実装 • Registration • VLIB_REGISTER_NODE (sr_policy_rewrite_encaps_v4_node) = { $ diff --git a/src/vnet/srv6/sr_policy_rewrite.c b/src/vnet/srv6/sr_policy_rewrite.c sr_policy_rewrite_encaps_v4 (vlib_main_t * vm, vlib_node_runtime_t * node, VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン diff 調査メモ
  • 17. • src/plugins/srv6-end$ • End.M.GTP4.Eの実装 • Registration • VLIB_REGISTER_NODE (srv6_end_m_gtp4_e) = { VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン diff 調査メモ
  • 18. > src/plugins/srv6-end/node.c 211 VLIB_REGISTER_NODE (srv6_end_m_gtp4_e) = { 212 .name = "srv6-end-m-gtp4-e", 213 .vector_size = sizeof (u32), 214 .format_trace = format_srv6_end_rewrite_trace, 215 .type = VLIB_NODE_TYPE_INTERNAL, 217 .n_errors = ARRAY_LEN (srv6_end_error_strings), 218 .error_strings = srv6_end_error_strings, VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン diff 調査メモ 220 .n_next_nodes = SRV6_END_M_GTP4_E_N_NEXT, 221 .next_nodes = { 222 [SRV6_END_M_GTP4_E_NEXT_DROP] = "error-drop", 223 [SRV6_END_M_GTP4_E_NEXT_LOOKUP] = "ip4-lookup", 224 }, 225 };
  • 19. Appendix VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン
  • 20. POC SRv6 Implementations VPP Prototyping for Stateless SRv6/GTP-U Translation | FD.io / VPP ユーザ有志の会 #1 | 2019/05/28 @東京ミッドタウン Extending SRv6 functions https://docs.fd.io/vpp/19.04/srv6_plugin_doc.html $ git clone https://gerrit.fd.io/r/vpp ~/vpp/src/examples/srv6-sample-localsid$ ls node.c srv6_localsid_sample.h srv6_localsid_sample.c srv6_sample_localsid_doc.md