From 65d8960356f5248d3c62de3a7cb2904be3da1452 Mon Sep 17 00:00:00 2001 From: "Robert J. Halstead" Date: Wed, 16 Feb 2022 11:17:54 -0800 Subject: [PATCH] Initial version of PINS P4RT App HLD (#826) * High level design document for the PINS P4RT application. --- doc/pins/images/p4rt_app.png | Bin 0 -> 81449 bytes doc/pins/images/sai_p4.png | Bin 0 -> 76424 bytes doc/pins/p4rt_app_hld.md | 170 +++++++++++++++++++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 doc/pins/images/p4rt_app.png create mode 100644 doc/pins/images/sai_p4.png create mode 100644 doc/pins/p4rt_app_hld.md diff --git a/doc/pins/images/p4rt_app.png b/doc/pins/images/p4rt_app.png new file mode 100644 index 0000000000000000000000000000000000000000..03cbf81f4bf6d8105f82406fed47375d1e17243e GIT binary patch literal 81449 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 XcJ=06{Ph*;PLEdRHfJl&c*g$^HR_U+ literal 0 HcmV?d00001 diff --git a/doc/pins/images/sai_p4.png b/doc/pins/images/sai_p4.png new file mode 100644 index 0000000000000000000000000000000000000000..9f024b2f6898d540b8f3dff924e9d711b9d251b2 GIT binary patch literal 76424 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 literal 0 HcmV?d00001 diff --git a/doc/pins/p4rt_app_hld.md b/doc/pins/p4rt_app_hld.md new file mode 100644 index 0000000000..5aa70ef738 --- /dev/null +++ b/doc/pins/p4rt_app_hld.md @@ -0,0 +1,170 @@ +# P4RT Application HLD + +_Rev v0.1_ + +- [Revision](#revision) +- [Scope](#scope) +- [Definitions/Abbreviations](#definitions-abbreviations) +- [Overview](#overview) +- [Requirements](#requirements) +- [P4RT Application High-Level Design](#p4rt-application-high-level-design) + * [Arbitration & Controller Roles](#arbitration---controller-roles) + * [P4 programs & P4Info](#p4-programs---p4info) + * [ACL Table Definitions](#acl-table-definitions) + * [Writing (insert/modify/delete) into the P4RT APPL_DB Table](#writing--insert-modify-delete--into-the-p4rt-appl-db-table) + * [WCMP/Hashing](#wcmp-hashing) + * [Response path](#response-path) +- [APPL DB Schema High-Level Design](#appl-db-schema-high-level-design) +- [Testing Requirements/Design](#testing-requirements-design) +- [Open/Action items - if any](#open-action-items---if-any) + +## Revision + +Rev | RevDate | Author(s) | Change Description +---- | ---------- | ----------- | ------------------ +v0.1 | 06/30/2021 | Google, ONF | Initial Version + +## Scope + +This document describes the high-level design for adding a P4Runtime gRPC service into SONiC which will run on [port 9559](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=9559). + + +## Definitions/Abbreviations + +**P4**: Programming Protocol-independent Packet Processors (P4) is a domain-specific language for network devices, specifying how data plane devices (switches, NICs, routers, filters, etc.) process packets + +**P4RT**: P4Runtime (P4RT) is a control plane specification for controlling the data plane elements of a device defined or described by a P4 program. + +**PI**: Platform Independent representation of P4RT messages, which does not change if the P4 program changes. + +**PD**: Program Dependent representation of P4RT messages which improves the readability and type safety of P4 program. + +**ECMP**: Equal Cost Multipath (ECMP) is a routing protocol that uniformly distributes traffic among the shortest paths toward a destination. + +**WCMP**: Weighted Cost Multipath (WCMP) is a routing protocol which distributes traffic among available next hops according to the available link capacity based on the changing network topology. + +**PINS**: P4 Integrated Network Stack (PINS) is a project that provides additional components and changes to SONiC and allows the stack to be remotely controlled using P4 and P4Runtime. + +**SAI**: Switch Abstraction Interface (SAI) is a standardized interface which allows programming and managing different switch ASICs in a vendor-independent fashion. + +**SDN**: Software Defined Networking (SDN) is the practice of disaggregating the data, control, and management planes of networks, and implementing the control and management planes outside the switch. + + +## Overview + +The P4RT application is a new component being introduced into SONiC as part of the PINS proposal. P4RT is an API which allows a controller to push a forwarding pipeline configuration (compiled from a P4 program) and control different elements of that pipeline over a gRPC connection. + + +## Requirements + +Functional requirements: +* P4RT application should be compliant with the open standard maintained by p4.org: [https://p4lang.github.io/p4runtime/spec/v1.3.0/P4Runtime-Spec.html](https://p4lang.github.io/p4runtime/spec/v1.3.0/P4Runtime-Spec.html) +* Support an SDN controller connecting and sending requests over gRPC. +* Arbitrate between multiple active SDN controller connections. +* Validate forwarding pipeline configurations (ACLs, PacketIO), and reject any configs that cannot be realized in the SAI pipeline. +* Allow P4 table entries to be inserted, modified or deleted from the P4RT table in the APPL_DB. +* Respond back with the success or failure of each request. +* Allow P4RT table entries in the APPL_DB to be read back. +* Support Packet I/O for punt rules defined by P4RT (TODO: reference PacketIO doc). + + +## P4RT Application High-Level Design + +The P4RT application is responsible for implementing the [P4Runtime Specification](https://p4lang.github.io/p4runtime/spec/v1.3.0/P4Runtime-Spec.html) as a gRPC service. The application will run in its own Docker container. A controller (or multiple controllers) can connect as clients to the gRPC service, and write P4 table entries that correspond to SAI tables (specified by a P4 program). These entries are intended for the ASIC database, but following the SONiC architecture, the P4RT application will translate/format the gRPC request and write its output into the APPL_DB. From there, the P4Orch (TODO: reference OA HLD) handles the request. + +![drawing](images/p4rt_app.png) + + +### Arbitration & Controller Roles + +As part of the P4RT specification, [multiple controllers can connect to the gRPC service](https://p4lang.github.io/p4runtime/spec/v1.3.0/P4Runtime-Spec.html#sec-client-arbitration-and-controller-replication). Each controller can have a unique role which limits its access to specific tables. A default role can also be used which gives full pipeline access. Multiple connections for the same role are allowed. In this case, the P4RT application will arbitrate between all the connections using an election ID provided by each client. A single primary connection is selected for each role and that client is allowed to update tables; all other connections become backups which have read-only access to the pipeline. + + +### P4 programs & P4Info + +![drawing](images/sai_p4.png) + +The PINS effort will model the SAI pipeline as a P4 program which will be compiled using a [P4 compiler](https://github.com/p4lang/p4c). The compiler generates a P4Info file which describes all parts of the SAI pipeline controllable from the P4RT application (e.g. tables, counters, or groups). + +When a SDN controller first connects to the P4RT application it should push a P4Info. The P4RT App will enforce SONiC requirements needed by any P4Info: +* PacketIO metadata matches expectations. +* Field types used by fixed SAI components are supportable. + +Once the P4RT App has done its validation any configurable information needed by the lower layers will be written into the APPL_DB. Any failures either by the P4RT App itself or the lower layers (reported back through the response path (TODO: reference Response path HLD) will cause the config to be rejected. + + +### ACL Table Definitions + +The configurable parts of the SAI pipeline like ACL tables are switch dependent, and must respect hardware limitations. These limitations can be difficult to verify at the P4 program level, but are much simpler to verify on actual hardware. For example: + +* ACL table taking up too many resources +* ACL action or qualifier not available at a specific stage in the pipeline. + +P4 annotations are used when modeling configurable parts of the SAI pipeline in the P4 program. These annotations are sent to the P4RT application during the P4Info push, and the P4RT application will translate them into P4RT:DEFINITION entries in the APPL_DB (format outlined in the AppDb schema section). The OA layer will read the definition and try to realize the configuration. The P4RT application will wait for it to report back success or failure. + +As an example of how the P4 program may model a SAI forwarding action using the @sai_action annotation consider: + +``` +// A SAI forwarding action for use during ACL ingress. +// +// The packet is assigned a color to be used by rate limiting checks if needed, and +// increments the ACL counter for this rule. + @sai_action(SAI_PACKET_ACTION_FORWARD) + action forward() { + acl_ingress_meter.read(local_metadata.color); + acl_ingress_counter.count(); + } +``` + +similarly a match qualifier for IPv4 packets may use a @sai_field like: + +``` +// Model the ACL Ingress stage. +table acl_ingress_table { + key = { + // Allow flows to match on IPv4 packets. ACL qualifiers are marked 'optional' + // and will be ignored if unset. + // + // If set and the packet has a valid IPv4 header when reaching the ACL Ingress + // stage the qualifier will match. + headers.ipv4.isValid() : optional @name("is_ipv4") @id(2) + @sai_field(SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE/IPV4ANY); + } +} +``` + + +### Writing (insert/modify/delete) into the P4RT APPL_DB Table + +P4 Runtime uses a Platform Independent (PI) request format for all writes & reads. The P4RT application is responsible for translating these requests into APPL_DB entries according to the AppDb schema (covered later). Table entry updates are only allowed from a primary connection. These table entries can further be restricted based on controller roles. Reads can be done from either a primary or backup connection. The entries can also be restricted based on roles. + + +### WCMP/Hashing + +WCMP group enables the weight adjusted selection of members as an action for a route entry match. Depending on the hash value computed from selected fields of the packet header, one of the members is chosen for packet forwarding. + +There are 2 parts to the WCMP feature in P4RT, first is the selection of the packet header fields for different packets, the hashing algorithm to be used etc and the second is the actual WCMP group, member and route entry definitions. The values for the former come in the P4Info file and the latter in the Write request. + +OrchAgent added a new orchestrator HashOrch to take care of programming the hash related SAI attributes in the SWITCH_TABLE. The APP_DB format for hashing entry is described in the P4RT Schema HLD. + + +### Response path + +P4RT application needs a response status for every request (success and failure) that is sent southwards to the OrchAgent. This ensures the external client making the request is aware of the status and can respond appropriately. + +At a high level, syncd operates in synchronous mode and OrchAgent relays the hardware status of the operation back to P4RT application via a separate notification channel and writes all successful responses into the APPL_STATE_DB. This abstraction differs from the existing STATE_DB which does not provide an application level response. P4RT application uses the APPL_STATE_DB to restore the entry in APPL_DB when a particular request fails. More details on the response path design is captured in the AppDb Shema HLD. + + +## APPL DB Schema High-Level Design + +P4RT application introduces new tables that are written to APPL_DB for the tables it intends to program via the P4Orch. The schema of the P4RT tables and other details are captured in the P4RT DB Schema HLD (TODO: add reference to AppDb Schema HLD). + + +## Testing Requirements/Design + +The P4RT application code will have unit & component tests that together will give >80% code coverage. + + +## Open/Action items - if any + +N/A