7. Develop Open Source implementation of “SRv6 Mobile User Plane”
“Segment Routing IPv6 for Mobile User Plane”
https://datatracker.ietf.org/doc/draft-ietf-dmm-srv6-mobile-uplane/
“User Plane Message Encoding” !!NEW!!
https://datatracker.ietf.org/doc/draft-murakami-dmm-user-plane-message-encoding/
• Participants
• Satoru Matsushima ... Champion
• Tetsuya Murakami ... VPP development
• Kentaro Ebisawa ... P4 development
• Pablo Camarillo / Ole Troan ... VPP upstream
• Filip Varga ... VPP development (IETF104)
Internet Week 2019 B4 ソフトウェアルータ・スイッチBoF | Twitter: @ebiken | 2019/11/27 7
Hackathon Objectives
8. Open Source 5G aware mobile user-plane functions
Source Code available on GitHub
VPP : https://github.com/filvarga/srv6-mobile
P4 (BMv2) : https://github.com/ebiken/p4srv6/tree/ietf106
A code review requested to the VPP community for upstreaming.
https://gerrit.fd.io/r/c/vpp/+/23297
Merged to the main VPP branch during IEFT106 ☺
Internet Week 2019 B4 ソフトウェアルータ・スイッチBoF | Twitter: @ebiken | 2019/11/27 8
What we have achieved
9. VPP P4 (BMv2)
Args.Mob.Session YES YES
End.M.GTP6.D YES NO
End.M.GTP6.Di YES NO
End.M.GTP6.E YES NO
End.M.GTP4.E YES YES
T.M.GTP4.D YES YES
End.MAP NO NO
End.Limit NO NO
Internet Week 2019 B4 ソフトウェアルータ・スイッチBoF | Twitter: @ebiken | 2019/11/27 9
Implementation Status
draft-ietf-dmm-srv6-mobile-uplane-07
10. • Modularity is important for the code and the protocol
• Some SRv6 Mobile code on VPP required better modularity.
• A new function idea
• SRv6 End function for GTP-U decap and table look up.
• Found improvement points to the protocol spec
• Sequence number is required to recreate GTP packet in drop in mode
• Ex: To match GTP Echo / Echo response
Internet Week 2019 B4 ソフトウェアルータ・スイッチBoF | Twitter: @ebiken | 2019/11/27 10
What we have learned during the Hackathon
11. Internet Week 2019 B4 ソフトウェアルータ・スイッチBoF | Twitter: @ebiken | 2019/11/27 11
p4srv6 (p4 based SRv6 switch)の課題
!!Upstream 先が無い!!
https://www.segment-routing.net/open-software/
15. Internet Week 2019 B4 ソフトウェアルータ・スイッチBoF | Twitter: @ebiken | 2019/11/27 15
Difference you should care between P4 Architectures
• Pipeline
• Metadata
• Special In/Out port
• Externs (Checksum)
Architecture is also defined using P4
https://github.com/p4lang/p4c/blob/master/p4include/v1model.p4
https://github.com/p4lang/p4c/blob/master/p4include/psa.p4
https://github.com/vmware/p4c-xdp/blob/master/p4include/xdp_model.p4
アーキテクチャの違いを整理
16. Internet Week 2019 B4 ソフトウェアルータ・スイッチBoF | Twitter: @ebiken | 2019/11/27 16
p4srv6 Pipeline
SwitchParser()
SwitchParser(
packet_in pkt,
out Header hdr,
inout UserMetadata user_md,
inout standard_metadata_t st_md)
state start {
transition parse_ethernet;
}
SwitchVerifyChecksum()
SwitchVerifyChecksum(
inout Header hdr,
inout UserMetadata user_md)
SwitchComputeChecksum()
SwitchComputeChecksum(
inout Header hdr,
inout UserMetadata user_md)
SwitchEgress()
SwitchEgress(
inout Header hdr,
inout UserMetadata user_md,
inout standard_metadata_t st_md)
< no control implemented so far >
SwitchDeparser()
SwitchDeparser(
packet_out pkt,
in Header hdr)
pkt.emit(hdr.ether);
pkt.emit(hdr.ipv6);
pkt.emit(hdr.srh);
pkt.emit(hdr.srh_sid);
pkt.emit(hdr.ipv4);
pkt.emit(hdr.icmp);
pkt.emit(hdr.tcp);
pkt.emit(hdr.udp);
pkt.emit(hdr.gtpu);
pkt.emit(hdr.inner_ether);
pkt.emit(hdr.inner_ipv6);
pkt.emit(hdr.inner_ipv4);
pkt.emit(hdr.inner_tcp);
pkt.emit(hdr.inner_udp);
SwitchIngress()
SwitchIngress(
inout Header hdr,
inout UserMetadata user_md,
inout standard_metadata_t st_md)
table local_mac;
PortFwd() port_fwd;
SRv6() srv6;
L2Fwd(1024) l2fwd;
No parsing of
vendor specific header
Checksum done in
Control Block dedicated for Checksum
Controls to do main packet header
and metadata processing
Architecture: v1model.p4
v1model.p4 ... p4-14 compatible pipeline
package V1Switch<H, M>(
Parser<H, M> p,
VerifyChecksum<H, M> vr,
Ingress<H, M> ig,
Egress<H, M> eg,
ComputeChecksum<H, M> ck,
Deparser<H> dep);
設計のドキュメント化
(パイプライン, テーブル etc.)