At the time of its inception in 2018, the objective of this project was to implement SRv6 functions still under discussion at IETF using P4 Lang to make running code available for testing and demo.
After 5+ years, the standardization of SRv6 has progressed, and many specifications have become RFCs. Open Source implementation has also advanced. For switch type implementation, SONiC now (in 202211, 202305 release) supports many SRv6 functions including uSID. Switch Abstraction Interface (SAI), which is the de facto standard API for Switch ASICs, is used by SONiC to communicate with ASIC from multiple vendors. e.g. Intel/Barefoot Tofino, Cisco Silicon One, Broadcom, Marvell, etc.
Since SAI has become the de facto of Switch Object and Pipeline Model, p4srv6 is being refactored in a way that is (not perfect but some what) compatible with SAI, aiming to provide an implementation that serves as a educational reference for people who are interested in how packets are processed inside ASIC behind SAI.
- BMv2 v1model
- The main target of this p4srv6 is switch based P4 target which is BMv2 using v1model.p4 architecture.
- Tofino Native Architecture (TNA)
- Tofino Native Architecture is now public on GitHub Open-Tofino with architecture document(pdf) and P4 architecture file (tna.p4)
- However, there are still some restrictions (e.g. doesn't have an ASIC simulator publically available so anyone can try)
- Thus, the P4 code in this repo is written to be compatible with TNA as much as posible, but not intented to run full demo nor fully documented. (Since it's difficult to do so without violating Intel NDA/SLA)
- SmartNIC (FPGA, IPU, DPU, ARM-Manycore, etc.)
- There is no plan to support SmartNIC type of targets. However, P4 work in this area is evolving very fast. Thus, I would recommend checking other projects for SRv6 implementation on SmartNIC.
Update after documenting SAI object / pipeline model
- Phase 1
- Basic L3 features
- Port Forwarding (for debug)
- nexthop, neighbor
- Phase 2
- Basic L2 features
- VLAN Port/Tag
- L2 (dmac) Table
- Data Plane (P4) Switching
Feature | Schedule |
---|---|
Port Forwarding | TBD |
L2 (dmac) forwarding | TBD |
VLAN (port) | TBD |
VLAN (Tag) | TBD |
IPv4 forwarding (lpm/host) | TBD |
IPv6 forwarding (lpm/host) | TBD |
- Control Plane
| L2 learning agent | TBD | | Host Interface (ping/arp) | TBD |
Function | schedule | description |
---|---|---|
Args.Mob.Session | ||
End.MAP | ||
End.M.GTP6.D | GTP-U/IPv6 => SRv6 | |
End.M.GTP6.Di | GTP-U/IPv6 => SRv6 | |
End.M.GTP6.E | SRv6 => GTP-U/IPv6 | |
End.M.GTP4.E | SRv6 => GTP-U/IPv4 | |
T.M.GTP4.D | GTP-U/IPv4 => SRv6 | |
End.Limit | - | Rate Limiting function |
Function | schedule | description |
---|---|---|
Args.Mob.Upmsg | ||
Encoding of Tags Field | ||
User Plane message IE |
SR Policy Headend Behaviors
Function | schedule | description |
---|---|---|
H.Encaps | SR Headend with Encapsulation in an SR Policy | |
H.Encaps.Red | H.Encaps with Reduced Encapsulation | |
H.Encaps.L2 | H.Encaps Applied to Received L2 Frames | |
H.Encaps.L2.Red | H.Encaps.Red Applied to Received L2 Frames |
SR Endpoint Behaviors
Function | schedule | description |
---|---|---|
End | ||
End.X | L3 Cross-Connect | |
End.T | Specific IPv6 Table Lookup | |
End.DX6 | Decapsulation and IPv6 Cross-Connect | |
End.DX4 | Decapsulation and IPv4 Cross-Connect | |
End.DT6 | Decapsulation and Specific IPv6 Table Lookup | |
End.DT4 | Decapsulation and Specific IPv4 Table Lookup | |
End.DT46 | Decapsulation and Specific IP Table Lookup | |
End.DX2 | Decapsulation and L2 Cross-Connect | |
End.DX2V | Decapsulation and VLAN L2 Table Lookup | |
End.DT2U | Decapsulation and Unicast MAC L2 Table Lookup | |
End.DT2M | Decapsulation and L2 Table Flooding | |
End.B6.Encaps | Endpoint Bound to an SRv6 Policy with Encapsulation | |
End.B6.Encaps.Red | End.B6.Encaps with Reduced SRH | |
End.BM | Endpoint Bound to an SR-MPLS Policy |
Flavours
Function | schedule | description |
---|---|---|
PSP | Penultimate Segment Pop | |
USP | Ultimate Segment Pop | |
USD | Ultimate Segment Decapsulation |
- SRv6 consortium is where many people in Japan interested in SRv6 gathers.
You can find old version of p4srv6 here
- [2019/03/03] Old P4-14 version is moved under archive/p4-14/ for archival purpose.
- demos presented at events and hackathon are archived as below
- [2023/03/31] branch v20191206 is created to archive pre-refactoring version started working from April 2023.
- [2023/04/01] All code, script, docs predates April 2023 refactoring are archived under archive/