From e2e9db11ac408058eeaa8c319ac0a66e614de476 Mon Sep 17 00:00:00 2001 From: Aaron Bernardino Date: Thu, 30 Jul 2026 20:06:08 +0000 Subject: [PATCH 1/7] [doc] Add SONiC-VPP packet-trimming (DROP_AND_TRIM) HLD High-level design for enabling SAI packet trimming on the sonic-vpp data plane: the software admission + trim datapath in the sonic_ext VPP plugin, the SAI attribute translation in sonic-sairedis vslib/vpp, the sonic-mgmt test enablement, dev-VM validation results, and the explicitly deferred scope (asymmetric trimming, ACL/mirror/SRv6 actions, trim counters exposure, and reload/reboot stability toggles). Tracking: sonic-net/sonic-buildimage#25789 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Aaron Bernardino --- doc/vpp/vpp-packet-trimming-HLD.md | 967 +++++++++++++++++++++++++++++ 1 file changed, 967 insertions(+) create mode 100644 doc/vpp/vpp-packet-trimming-HLD.md diff --git a/doc/vpp/vpp-packet-trimming-HLD.md b/doc/vpp/vpp-packet-trimming-HLD.md new file mode 100644 index 00000000000..f25fa1c5349 --- /dev/null +++ b/doc/vpp/vpp-packet-trimming-HLD.md @@ -0,0 +1,967 @@ +# SONiC-VPP Packet Trimming HLD + +## Table of Contents + +1. [Revisions](#1-revisions) +2. [Scope](#2-scope) +3. [Definitions](#3-definitions) +4. [Background](#4-background) +5. [Requirements](#5-requirements) +6. [Architecture](#6-architecture) +7. [High-Level Design](#7-high-level-design) +8. [SAI API Mapping](#8-sai-api-mapping) +9. [Configuration and Management](#9-configuration-and-management) +10. [Warmboot and Fastboot](#10-warmboot-and-fastboot) +11. [Memory and Performance](#11-memory-and-performance) +12. [Error Handling](#12-error-handling) +13. [Limitations and Future Work](#13-limitations-and-future-work) +14. [Testing](#14-testing) +15. [Open Items](#15-open-items) +16. [References](#16-references) + +## 1. Revisions + +| Rev | Date | Author(s) | Changes | +|---|---|---|---| +| v0.1 | 2026-07-23 | Aaron Bernardino | Initial SONiC-VPP packet-trimming design | +| v0.2 | 2026-07-23 | Aaron Bernardino | Corrected current-state analysis: SAI-VPP already advertises trimming capability; clarified that advertisement must be *reduced* to match the datapath; identified KVM egress backend and refined counter and enablement details | +| v0.3 | 2026-07-23 | Aaron Bernardino | Feasibility spike (Gate 0) on the live `vms-kvm-vpp-t1-lag` testbed: confirmed VPP has no egress QoS / queue-admission substrate, so the test's blocking scheduler is a dataplane no-op and trimming cannot occur. Corrected the KVM egress backend to DPDK virtio + LCP TAP. Scoped this increment to **capability truthfulness** (VPP advertises trimming as *not* supported); retained the datapath design as the target architecture and a tracked prerequisite (future work) | +| v0.4 | 2026-07-25 | Aaron Bernardino | Gate 0 resolved **positively**: instead of deferring the datapath, this increment supplies the missing admission substrate in software. The `sonic_ext` plugin gains a generic per-`{port, queue}` software admission shim (a token bucket driven by the SONiC scheduler rate and buffer-profile capacity) on the `interface-output` arc, plus a trim action node (truncate → DSCP rewrite → static trim-queue retry → counters), validated end to end on standalone VPP. Reframed the datapath from *tracked prerequisite* to *delivered design*; SAI-VPP raises the advertised capability to `SWITCH_TRIMMING_CAPABLE=true` once the translation is wired and validated. Corrected the header-checksum (§7.4) and one-shot guard (§7.6, now an `interface-output-arc-end` bypass) descriptions to match the implementation | +| v0.5 | 2026-07-30 | Aaron Bernardino | Root-caused and fixed a multi-segment (jumbo) trim defect on the KVM/DPDK backend: truncation cleared the VLIB chain flag but left the backing `rte_mbuf` `->next`/`nb_segs` stale, so the virtio PMD re-appended the freed tail (5000→256 egressed as 1208 = 256 + 952). Fix clears `VLIB_BUFFER_EXT_HDR_VALID` on the severed segment (§7.4). Validated end to end on `vms-kvm-vpp-t1-lag`: `test_packet_size_after_trimming` passes for single-segment (400→256) and jumbo/multi-segment (5000→4084, 3000→256). Bumped `VPP_VERSION` suffix for the plugin content change | +| v0.6 | 2026-07-30 | Aaron Bernardino | Made the `sonic-mgmt` suite self-sufficient and enabled it on VPP. Test helpers now create the `queue{1,3}_{uplink,downlink}_lossy_profile` BUFFER_PROFILEs when absent (they ship only in real SN5640/7060X6 QoS templates) and clear test-created `BUFFER_QUEUE` trim-queue refs in teardown so post-test YANG validation stays clean — the three in-scope cases pass with zero setup/teardown errors and no manual `redis-cli` (§14.2). Implemented the `conditional_mark` enablement (§14.3): exempted `asic_type == 'vpp'` from the hwsku skip and added `asic_type in ['vpp']` skips for the deferred asymmetric module and symmetric cases (ACL, SRv6, counters ×2, mirror, reload/reboot, stability/port-admin toggles). Validated the rule against the plugin's own decision logic with the DUT's real facts across VPP / real-SKU / non-listed-SKU / `vs` | + +## 2. Scope + +This document describes how SONiC-VPP relates to the existing +[SONiC Packet Trimming](../packet_trimming/packet-trimming-design.md) design, +and defines the dataplane architecture implementing it on VPP. + +**Increment scope (this change).** A Gate 0 feasibility spike on the live VPP +KVM testbed (see [4. Background](#4-background)) established that the VPP +dataplane has no native egress QoS / queue-admission model, so a blocking SONiC +scheduler cannot by itself produce the admission failure that packet trimming +hangs off. Rather than defer the datapath, this increment **supplies the missing +substrate in software**: the `sonic_ext` VPP plugin gains a generic +per-`{egress port, queue}` software admission shim — a token bucket sized from +the SONiC scheduler rate and buffer-profile capacity, installed on the +`interface-output` feature arc — plus a trim action node that truncates the +rejected copy, rewrites its DSCP, and retries it on the configured static trim +queue. SAI-VPP translates the existing packet-trimming SAI attributes onto that +datapath and, once the translation is complete and validated end to end, +advertises the capability truthfully as **supported** +(`SWITCH_TRIMMING_CAPABLE=true`), at which point the `sonic-mgmt` suite runs. + +Until that SAI-VPP translation is complete and validated, the platform continues +to advertise packet trimming as **not supported** so the advertised capability +never runs ahead of the datapath. The shared `sonic-sairedis` virtual-switch +base over-advertises the capability today; that over-advertisement is corrected +on VPP as the interim state and is raised to *supported* when the datapath wiring +lands (see [7.12](#712-capability-advertisement)). + +The target design covers: + +- Translating the existing packet-trimming SAI attributes into VPP state. +- Detecting a failed admission to a trim-eligible egress queue. +- Truncating eligible IPv4 and IPv6 packets and remapping their DSCP. +- Sending the shortened packet through a configured static trim queue. +- Supporting symmetric `DSCP_VALUE` and asymmetric `FROM_TC` modes. +- Supporting per-buffer-profile eligibility and ACL `DISABLE_TRIM`. +- Reporting switch, port, and queue packet-trimming counters. +- Preserving the selected physical egress member for LAG traffic. +- Rebuilding packet-trimming state after configuration replay. + +This document is a VPP platform adaptation. It does not redefine the existing +SONiC CLI, Config DB schema, YANG model, orchestration, or SAI contract. + +The design does not support dynamic trim-queue resolution. That mode requires the +complete DSCP-to-TC-to-queue pipeline to select the trim queue after DSCP +remapping and is left for future work. The shared `sonic-sairedis` virtual-switch +base currently advertises the dynamic mode as supported; VPP advertises only the +`STATIC` mode it honors and omits `DYNAMIC` from the enum (see +[7.12](#712-capability-advertisement)). + +## 3. Definitions + +| Term | Meaning | +|---|---| +| Admission failure | A packet cannot be accepted by its selected egress queue because the queue has reached its configured capacity | +| Original queue | The egress queue selected for the unmodified packet | +| Trim queue | The egress queue selected for the shortened packet | +| Trim attempt | An eligible original packet reaches the packet-trimming path after original-queue admission fails | +| Trimmed packet | A packet processed by the trim path, whether or not its original length exceeded the configured trim size | +| Admission provider | The VPP component that enforces queue capacity and hands rejected buffers to packet-trimming policy | +| DSCP | Differentiated Services Code Point | +| TC | Traffic Class | +| LAG | Link Aggregation Group, represented by a VPP BondEthernet interface | +| SAI-VPP | The `sonic-sairedis` virtual switch implementation that translates SAI objects to VPP | +| VPP plugin | The SONiC-local VPP packet-trimming plugin and binary API | + +## 4. Background + +Packet trimming lets a receiver learn about congestion sooner than it would +after a complete packet drop and retransmission timeout. When admission to a +trim-eligible lossy queue fails, the switch: + +1. Keeps at most the configured number of bytes. +2. Assigns a configured DSCP, or resolves DSCP from a configured trim TC. +3. Tries to transmit the shortened packet through a high-priority trim queue. + +SONiC already provides the platform-independent control-plane implementation: + +```text +CLI / Config DB + | + v +switchorch + bufferorch + qosorch + aclorch + | + v +SAI switch / buffer profile / QoS / ACL objects + | + v +syncd + | + v +platform SAI +``` + +The current SAI-VPP state is important to state precisely, because it is not a +blank slate: + +- The shared `sonic-sairedis` virtual-switch base already advertises full + packet-trimming capability. It reports the switch, buffer-profile, and stats + enum capabilities (DSCP `DSCP_VALUE`/`FROM_TC`, queue `STATIC`/`DYNAMIC`, + buffer action `DROP`/`DROP_AND_TRIM`, and the switch/port/queue trim stats), + and `SwitchVpp::queryAttributeCapability` reports every attribute as + create/set/get implemented. +- As a result, `sonic-swss` already computes `isSwitchTrimmingSupported() == true` + and publishes `SWITCH_CAPABILITY|switch:SWITCH_TRIMMING_CAPABLE=true` on VPP. + The configuration path is fully functional today: switch, buffer-profile, QoS, + and ACL objects are accepted and stored as virtual object state. +- What is missing is entirely below SAI: VPP performs no trimming, and the trim + statistics read back as zero because the base returns no values for them. + +VPP also has no native equivalent of +`SAI_BUFFER_PROFILE_PACKET_ADMISSION_FAIL_ACTION_DROP_AND_TRIM`. + +Because capability is already advertised while the datapath does nothing, VPP +currently reports support it does not provide. A Gate 0 feasibility spike on the +live `vms-kvm-vpp-t1-lag` testbed confirmed *why* the datapath does nothing and +established the near-term direction: + +- **Forwarding path (measured).** Front-panel transit egresses through + `BondEthernetXXX` (mode `xor`, load-balance `l34-inner`) onto member + interfaces that are **DPDK virtio** ports (`Red Hat Virtio`, one TX queue, + 4096 descriptors). SONiC `EthernetX` ports are VPP **Linux Control Plane + (LCP) TAP** interfaces paired to those members. (An AF_PACKET + `host-interface` backend exists in `vpp_init.sh` only for veth-based ports; + this testbed presents virtio PCI, so it takes the DPDK path.) +- **No QoS / admission substrate (measured).** The running VPP graph has no + policer (the CLI is not even compiled in), no scheduler, shaper, HQoS, or + per-queue admission node, no per-queue buffer accounting, and no + congestion/tail-drop counter in the transit path. There is no native + equivalent of `SAI_BUFFER_PROFILE_PACKET_ADMISSION_FAIL_ACTION_DROP_AND_TRIM`. +- **The SONiC scheduler is a dataplane no-op.** SAI-VPP stores the + `SAI_SCHEDULER_GROUP` / `SAI_QUEUE` object model so orchagent is satisfied, + but programs no VPP rate/shaper. The packet-trimming test creates congestion + by binding a `PIR=1` blocking scheduler to a queue; on VPP that scheduler + changes no dataplane state, so the "blocked" queue keeps forwarding at line + rate. Without congestion there is no admission failure, so a trim action + would never fire. + +Consequently, real trimming on VPP first requires an egress per-queue admission +model that honors the SONiC scheduler rate, so that a blocked queue can actually +reach a *cannot-admit* state. Rather than treat that as a separate prerequisite, +this design **provides it in software**: a generic per-`{port, queue}` +token-bucket admission shim on the `interface-output` arc (see +[7.1](#71-admission-provider)), sized from the SONiC scheduler rate and +buffer-profile capacity, so the test's `PIR=1` blocking scheduler drains the +bucket and yields a real, recoverable admission failure. The trim action node +([7.4](#74-truncation-and-header-handling)–[7.6](#76-static-trim-queue-and-retry)) +hangs off that failure. Because the shim is generic — it carries no +packet-trimming SAI policy or test constants — it is the minimal substrate +needed and keeps the SONiC-specific logic in SAI-VPP and the plugin control path. + +While the SAI-VPP translation that drives this datapath is being completed and +validated end to end, the platform still corrects the base over-advertisement and +reports packet trimming as *not* supported, so capability never leads the +datapath; the advertisement is raised to *supported* when the wiring lands (see +[7.12](#712-capability-advertisement)). + +## 5. Requirements + +### 5.1 Functional Requirements + +| ID | Requirement | +|---|---| +| REQ-1 | VPP must trim only after admission to the original queue fails | +| REQ-2 | Trimming eligibility must follow the buffer profile attached to the original queue | +| REQ-3 | `DROP` must retain normal drop behavior; `DROP_AND_TRIM` must invoke trim policy | +| REQ-4 | The trim size must be runtime configurable | +| REQ-5 | Symmetric mode must write the configured DSCP value | +| REQ-6 | Asymmetric mode must resolve DSCP from the configured trim TC and the selected egress port's TC-to-DSCP map | +| REQ-7 | The initial implementation must transmit through the configured static trim queue | +| REQ-8 | ACL `DISABLE_TRIM` must suppress trimming for matching packets | +| REQ-9 | A packet must enter the trim path no more than once | +| REQ-10 | Trim attempts, successful trim transmissions, and trim-queue drops must be counted at the required SAI scopes | +| REQ-11 | LAG traffic must remain associated with the physical member selected before original-queue admission | +| REQ-12 | Runtime updates must not leave SAI object state and VPP policy state divergent | + +### 5.2 Non-Functional Requirements + +- No per-packet heap allocation is allowed in the dataplane path. +- Packet trimming must be inactive when no eligible buffer profile is bound. +- Existing forwarding behavior must remain unchanged while the feature is + disabled. +- The admission integration point must be generic and must not contain SONiC + SAI policy. +- The design must not depend on scheduler names, a particular configured rate, + or constants from the packet-trimming test suite. +- Capability advertisement must reflect only functionality that is initialized + and usable at runtime. + +### 5.3 Non-Goals + +- Changes to the generic packet-trimming Config DB schema or CLI. +- A new SONiC application extension. +- Full hardware-MMU emulation in VPP. +- Dynamic trim-queue resolution in the initial implementation. +- Recalculation of IP or transport length and checksum fields after truncation. +- Replacing VPP's existing forwarding, LAG hashing, QoS, or ACL architecture. + +## 6. Architecture + +> **Scope note.** Sections [6](#6-architecture)–[9](#9-behavioral-details) +> describe the delivered datapath: a software egress admission shim plus the trim +> action node in the `sonic_ext` plugin, driven by SAI-VPP. The datapath is +> validated on standalone VPP; the SAI-VPP translation that programs it from live +> SONiC configuration is completed and validated end to end before the capability +> is advertised as supported (see [7.12](#712-capability-advertisement)). Genuine +> remaining limitations and future work are in +> [13](#13-limitations-and-future-work). + +### 6.1 Control-Plane Flow + +```mermaid +flowchart TD + A[Config DB packet-trimming configuration] --> B[SONiC orchagent] + B --> C[SAI switch, buffer, QoS, ACL objects] + C --> D[syncd] + D --> E[SAI-VPP] + E --> F[VPP packet-trim binary API] + F --> G[Packet-trim plugin policy] + E --> H[Egress admission provider configuration] + E --> I[Capability and counter mapping] +``` + +SAI-VPP owns object relationships and translates the platform-independent SAI +contract into compact VPP policy: + +- Global trim size, DSCP mode/value, TC value, and static trim queue. +- Effective eligibility for each `{egress port, original queue}` pair. +- TC-to-DSCP maps associated with egress ports. +- ACL rules that set trim-disable metadata. +- Queue rate and capacity inputs required by the admission provider. + +### 6.2 Dataplane Flow + +```mermaid +flowchart TD + A[Packet reaches final egress classification] --> B[Resolve physical egress and original queue] + B --> C{Original queue admits packet?} + C -->|Yes| D[Transmit original packet] + C -->|No| E{Eligible and not ACL disabled?} + E -->|No| F[Normal original-packet drop] + E -->|Yes| G[Increment trim-attempt counters on original queue and port] + G --> H[Truncate to configured size when needed] + H --> I[Apply symmetric or asymmetric DSCP] + I --> J[Select configured static trim queue on same physical egress] + J --> K{Trim queue admits packet?} + K -->|Yes| L[Transmit and increment trim-sent counters] + K -->|No| M[Drop and increment trim-drop counters] +``` + +### 6.3 Component Responsibilities + +| Component | Responsibility | +|---|---| +| VPP admission integration | Software per-`{port, queue}` token-bucket admission shim on the `interface-output` arc that turns a rate-limited (blocked) queue into a recoverable admission failure; generic, carrying no packet-trimming SAI policy | +| VPP packet-trim plugin | Eligibility lookup, truncation, DSCP rewrite, static trim-queue retry with one-shot `interface-output-arc-end` re-injection, counters, binary API, and debug CLI | +| SAI-VPP | Translate the packet-trimming SAI attributes and object relationships onto the plugin (global policy, per-queue eligibility from the buffer profile, scheduler rate/capacity, TC-to-DSCP map), source trim counters through `getStatsExt`, and — once wired and validated — raise the capability advertisement from *not supported* to the modes the datapath honors. The interim over-advertisement correction keeps `SWITCH_TRIMMING_CAPABLE=false` until then | +| sonic-swss | No VPP-specific change expected; the generic packet-trimming orchestration and capability publication already function on VPP | +| sonic-mgmt | No suite code change: the `skip_if_packet_trimming_not_supported` capability fixture gates the suite on `SWITCH_TRIMMING_CAPABLE`, so it skips while the capability is *false* and runs automatically once SAI-VPP raises it to *true* | + +## 7. High-Level Design + +### 7.1 Admission Provider + +Packet trimming needs a point where an egress packet can be *recoverably* +rejected — rejected while VPP still owns the buffer, so the trim action can run +instead of the packet being freed. VPP has no such point natively, so the plugin +provides one as a software admission shim. + +**`sonic-ext-trim-admission`** is a feature node on the `interface-output` arc, +enabled per egress `sw_if_index` whenever that port has at least one +trim-eligible queue. For each packet it resolves the egress `{port, queue}` — the +queue from the packet DSCP via the SAI-pushed DSCP-to-queue table — and runs that +queue's software token bucket: + +| Result | Meaning | Action | +|---|---|---| +| Non-eligible / unconfigured queue | not policed | pass straight through the arc (normal traffic is never perturbed) | +| Eligible queue, bucket admits | within rate | continue the arc (normal egress) | +| Eligible queue, bucket rejects | recoverable admission failure | divert to the trim action node ([7.4](#74-truncation-and-header-handling)) | + +The token bucket is driven by generic rate/capacity inputs only, supplied by +SAI-VPP from the queue's scheduler and buffer profile. A queue with no effective +rate limit (a scheduler `PIR` of `0`, SONiC's "unlimited") keeps the bucket +permanently full, so its traffic is always admitted and normal forwarding is +never perturbed. A queue whose scheduler imposes a nonzero `PIR` — the mechanism +SONiC's blocking scheduler (`PIR=1`) uses to hold a data-plane queue closed — +empties the bucket, so every eligible packet on that queue hits a real admission +failure and is trimmed. The shim recognizes no packet-trimming scheduler names or +test constants; it is pure rate/capacity accounting, so it never carries SONiC +SAI policy and never perturbs a queue that is not trim-eligible. + +Because the shim is a normal feature-arc node, no VPP core change is required for +the KVM DPDK-virtio backend. Backends that cannot be policed on the +`interface-output` arc (for example the AF_PACKET `host-interface` path) would +reuse the same generic node at their own pre-transmit point. + +### 7.2 Packet-Trim Policy State + +The VPP plugin maintains: + +- One global packet-trimming configuration. +- One eligibility record per effective egress-port/original-queue binding. +- One TC-to-DSCP map reference per egress port for asymmetric mode. +- Switch, port, and queue counters. + +The global configuration contains: + +| Field | Meaning | +|---|---| +| `trim_size` | Maximum number of bytes retained | +| `dscp_mode` | Direct configured value or `FROM_TC` | +| `dscp_value` | Symmetric DSCP value | +| `trim_tc` | TC used for asymmetric egress-map lookup | +| `queue_mode` | Static in the initial implementation | +| `trim_queue` | Queue index used for the shortened packet | + +An eligibility record is active only when the queue's effective buffer profile +uses `DROP_AND_TRIM`. + +### 7.3 Original-Queue Admission Failure + +On a recoverable admission failure, the admission node has resolved: + +- The buffer index. +- The final physical egress `sw_if_index` (`VLIB_TX`). +- The original queue index (stamped into the buffer for the trim node). +- That the queue is trim-eligible. + +The plugin diverts the packet to the trim action node only when the global +configuration is valid and the original queue is trim-eligible; otherwise the +packet stays on the normal arc (admitted) or follows the existing drop path. +Re-entry is prevented **structurally** rather than with a per-buffer flag: the +trimmed copy is re-injected at `interface-output-arc-end`, past the admission +feature, so it can never re-enter admission and be trimmed twice (see +[7.6](#76-static-trim-queue-and-retry)). This avoids depending on `opaque2` being +cleared on buffer recycle, which VPP does not guarantee. + +ACL-driven trim suppression (`SAI_ACL_ENTRY_ATTR_ACTION_PACKET_TRIM_DISABLE`, +[7.9](#79-acl-disable-trim)) sets a per-buffer flag that this decision also +honors when that path is enabled. + +### 7.4 Truncation and Header Handling + +When a packet is longer than `trim_size`, VPP shortens the buffer chain to at +most `trim_size` bytes, freeing any tail buffers in a chained packet. When a +packet is shorter than or equal to `trim_size`, it is sent at its original +length. In both cases the packet is processed by the trim path and receives the +configured DSCP behavior. + +**Multi-segment (jumbo) buffers.** On the KVM/DPDK backend, jumbo frames arrive +scatter-gathered into a chain of VLIB buffers, each backed by a DPDK `rte_mbuf` +(the `interface-output` arc runs with `VLIB_BUFFER_EXT_HDR_VALID` set on RX +buffers). Truncating the chain clears the VLIB `VLIB_BUFFER_NEXT_PRESENT` flag +and frees the tail buffers, but that alone does **not** update the backing +`rte_mbuf`: it still carries the RX-time `nb_segs` and a `->next` pointer to the +now-freed tail segment. `dpdk_validate_rte_mbuf()` only rebuilds the mbuf header +(via `rte_pktmbuf_reset()`, which sets `next = NULL` and `nb_segs = 1`) when +`EXT_HDR_VALID` is clear, and the virtio PMD TX path walks `mb->next` until NULL +rather than trusting `nb_segs`. Without intervention the freed tail therefore +rides onto the wire — a 5000-byte frame trimmed to 256 was observed egressing as +256 + 952 = 1208 bytes. The trim path fixes this by clearing +`VLIB_BUFFER_EXT_HDR_VALID` on the severed segment, forcing the mbuf header to be +rebuilt cleanly so only the retained bytes are transmitted. This case is covered +end to end by `test_packet_size_after_trimming` (jumbo 5000 → 4084 and, with a +larger default packet, 3000 → 256). + +The trim path deliberately preserves the original L3/L4 length fields as the +congestion signal — it does **not** recalculate: + +- IPv4 total length (the header still reports the pre-trim length). +- IPv6 payload length. +- TCP or UDP length and checksum fields. + +The one field that *is* updated is the **IPv4 header checksum**, and only because +the DSCP rewrite ([7.5](#75-dscp-resolution)) changes the ToS byte: the checksum +is recomputed over the 20-byte header so the header stays valid after the DSCP +change, while the (deliberately unmodified) total-length field is unaffected. The +IPv4 header checksum covers only the header, so leaving the truncated payload out +does not invalidate it; IPv6 carries no header checksum. This matches the +existing SONiC packet-trimming validation contract, which inspects the preserved +length fields together with the rewritten DSCP. + +### 7.5 DSCP Resolution + +For IPv4, VPP rewrites the six DSCP bits in the Type of Service field while +preserving ECN bits. For IPv6, VPP rewrites the DSCP portion of Traffic Class +while preserving ECN bits. + +| Mode | Resolution | +|---|---| +| `DSCP_VALUE` | Use the global configured `dscp_value` | +| `FROM_TC` | Use `trim_tc` to look up DSCP in the TC-to-DSCP map attached to the selected egress port | + +If asymmetric mode has no usable egress map entry, the trim operation fails, +the packet is dropped, and a configuration/runtime error counter is incremented. +SAI-VPP should reject configurations that are invalid at programming time. + +### 7.6 Static Trim Queue and Retry + +The initial implementation uses +`SAI_PACKET_TRIM_QUEUE_RESOLUTION_MODE_STATIC`. + +The trim action node: + +1. Rewrites the DSCP of the copy ([7.5](#75-dscp-resolution)) and truncates it + ([7.4](#74-truncation-and-header-handling)). +2. Steers the copy to the configured static `trim_queue` on the **same** physical + egress interface (`VLIB_TX` is unchanged) and runs that queue's token bucket. +3. If the trim queue admits, transmits the copy by enqueuing it directly to + `interface-output-arc-end` — the node the `interface-output` feature arc + terminates at — so it goes straight to the port TX, *past* the admission + feature. If the trim queue rejects (it is itself congested), the copy is + dropped. + +Enqueuing the transmitted copy to the arc end is what makes the one-shot +guarantee **structural**: a trimmed copy never re-enters the admission feature, +so it can never be trimmed a second time and no per-buffer "already trimmed" flag +is needed. This is deliberately more robust than a buffer flag, because VPP does +not zero `opaque2` on buffer recycle, so a flag could survive into an unrelated +future packet and wrongly suppress its trimming. + +### 7.7 Physical Ports and LAGs + +For a physical-port egress, the trim retry uses the same physical interface. + +For a LAG egress, VPP bond selection occurs before queue admission. The +admission provider records the selected physical member. The trim retry uses +that member directly instead of re-entering bond hashing, which: + +- Keeps original-queue and trim-queue counters on one physical port. +- Avoids moving a congestion notification to a different LAG member. +- Prevents a second flow-hash decision from changing packet ordering. + +The logical LAG identity remains available for diagnostics, but SAI port and +queue trim counters are attributed to the physical member and its queues. + +### 7.8 Buffer Profile and Queue Relationships + +SAI-VPP tracks the object chain from a queue to its attached buffer profile. +Whenever the queue binding or +`SAI_BUFFER_PROFILE_ATTR_PACKET_ADMISSION_FAIL_ACTION` changes, SAI-VPP +recomputes and programs effective eligibility. + +Because sonic-vpp creates front-panel ports dynamically as orchagent brings the +switch up — not at switch-create time — SAI-VPP enumerates the ports to program +from the live SAI port-object store on each recompute, rather than from a port +list captured at initialization. A recompute therefore always covers every +front-panel port that currently exists, including ports created after the first +trim-relevant attribute was observed, and a late buffer-profile binding is picked +up by the next recompute rather than being missed. + +The update sequence is: + +1. Validate the referenced SAI objects. +2. Program the new VPP eligibility. +3. Update stored SAI object state only after VPP accepts the change. + +Removing or replacing a buffer profile first disables affected eligibility, +then removes the VPP policy state. + +### 7.9 ACL Disable Trim + +SAI-VPP extends the existing VPP ACL translation for +`SAI_ACL_ENTRY_ATTR_ACTION_PACKET_TRIM_DISABLE`. + +A matching ACL rule sets a per-buffer `trim_disabled` flag. The flag is metadata +only and does not change the packet action by itself. If original-queue admission +later fails, trim policy observes the flag and follows normal drop behavior. + +ACL rule create, update, and remove operations program VPP before stored SAI +state is committed. + +### 7.10 Scheduler and Capacity Inputs + +The admission provider requires a controllable rate and queue capacity for the +KVM dataplane. + +SAI-VPP translates the subset of scheduler and buffer configuration required by +the selected provider: + +- The effective egress scheduling rate attached to a queue. +- The effective queue capacity derived from its buffer profile. +- Queue-to-port and queue-index relationships. + +This translation is generic but binarized to the two states the supported +topology exercises: a queue whose scheduler imposes no rate limit (`PIR=0`, +SONiC's "unlimited") is mapped to an always-admitting bucket, and a queue whose +scheduler imposes any nonzero `PIR` — the form SONiC's +`SCHEDULER_BLOCK_DATA_PLANE` profile uses to close a data-plane queue — is mapped +to a bucket that cannot admit, producing the recoverable admission failure that +drives trim. Modeling a proportional sub-line-rate `PIR` (a partial rate limit +rather than open/closed) is future work; the KVM testbed only ever drives a +data-plane queue as unlimited or closed. + +Full SAI scheduler hierarchy, shared-buffer accounting across ports, headroom, +and hardware-specific threshold behavior remain outside this design. + +### 7.11 Counters + +The VPP plugin maintains packet-trim counters in the dataplane and exposes them +through the binary API; SAI-VPP maps them onto the existing SAI statistics and +serves them from `getStatsExt`. Counters are kept at three scopes so the SAI +switch, port, and queue stat IDs can all be sourced: + +| Event | Counter attribution | +|---|---| +| Eligible original-queue admission failure | `TRIM_PACKETS` on the original queue and physical egress port | +| Trim packet transmitted | `TX_TRIM_PACKETS` on the switch, physical egress port, and trim queue | +| Trim-queue admission failure | `DROPPED_TRIM_PACKETS` on the switch, physical egress port, and trim queue | + +Counter reads must be monotonic and safe while workers update them, and a clear +operation resets only the requested scope and statistics. + +The exact queue-index attribution must match the `sonic-mgmt` counter +assertions: the suite verifies that the switch-level trim-sent counter equals the +sum of the per-port counters and that each port's counter is consistent with its +per-queue counters, and the feature-toggle test reads the queue-level +`trimpacket` counter on the *trim* queue index (`UC` + configured trim queue). +The plugin's per-`{port, queue}` counter model is defined to satisfy those +cross-checks directly. + +Before this design, the shared virtual-switch base advertised the trim stats as +supported but returned zero for them; sourcing real values from the plugin +through `getStatsExt` is part of raising the capability to *supported*. + +### 7.12 Capability Advertisement + +Packet-trimming capability on VPP must track the datapath: advertised *supported* +only for the modes the plugin actually honors, and *not supported* until the +SAI-VPP translation that drives the datapath is wired and validated. Today the +shared virtual-switch base advertises packet trimming unconditionally on VPP: + +- `SwitchStateBase::queryAttrEnumValuesCapability` returns the DSCP modes + (`DSCP_VALUE`, `FROM_TC`), the queue modes (`STATIC`, `DYNAMIC`), and the + buffer-profile action modes (`DROP`, `DROP_AND_TRIM`). +- `SwitchStateBase::queryStatsCapability` lists the switch, port, and queue trim + stats as supported. +- `SwitchVpp::queryAttributeCapability` reports every switch trim attribute as + create/set/get implemented. + +Together these make `sonic-swss` publish `SWITCH_TRIMMING_CAPABLE=true` +unconditionally — including while the datapath integration is incomplete. Two +`SwitchVpp` overrides make the advertisement track the datapath instead: + +| Seam | Behavior | +|---|---| +| `SwitchVpp::queryAttributeCapability` | Reports the six `SAI_SWITCH_ATTR_PACKET_TRIM_*` attributes (size, DSCP mode, DSCP value, TC value, queue mode, queue index) as create/set/get implemented **only when the trim datapath is active**; otherwise gates them to `false`. `sonic-swss`'s `isSwitchTrimmingSupported()` follows the `set` capability | +| `SwitchVpp::queryAttrEnumValuesCapability` | Advertises exactly the enum values the datapath honors — `STATIC` queue resolution, the supported DSCP modes, and `DROP`/`DROP_AND_TRIM` — while returning `SAI_STATUS_NOT_SUPPORTED` for `DYNAMIC` queue resolution, which is out of scope for the initial implementation | + +**Interim state (integration incomplete).** Both overrides report *not supported*, +so `sonic-swss`'s `writeCapabilitiesToDb()` publishes +`STATE_DB SWITCH_CAPABILITY|switch:SWITCH_TRIMMING_CAPABLE=false`, the base +over-advertisement is corrected, and the `sonic-mgmt` suite skips through its +capability fixture instead of running against a datapath that is not yet fully +driven from SAI. No swss or sonic-mgmt change is required. + +**End state (datapath wired and validated).** The overrides advertise the +implemented modes (initially `STATIC` queue resolution and both DSCP modes, with +`DROP_AND_TRIM` eligibility and the switch/port/queue trim stats), so +`SWITCH_TRIMMING_CAPABLE` becomes `true` and the suite runs. The flip is a change +of the gating predicate, made once the SAI-VPP translation +([13.1](#131-integration-status)) and counter sourcing are validated end to end +on the testbed. + +### 7.13 Update and Remove Ordering + +For create or set operations: + +1. Validate SAI input and object references. +2. Build the complete replacement VPP policy. +3. Apply it to VPP. +4. Commit the SAI virtual object state. + +For remove operations: + +1. Disable or detach dependent VPP policy. +2. Remove the VPP object or mapping. +3. Remove the SAI virtual object state. + +If VPP programming fails, the SAI operation fails and the previous stored state +is retained. + +## 8. SAI API Mapping + +### 8.1 Switch Attributes + +| SAI attribute | VPP mapping | +|---|---| +| `SAI_SWITCH_ATTR_PACKET_TRIM_SIZE` | Global `trim_size` | +| `SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE` | Global DSCP mode | +| `SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_VALUE` | Symmetric DSCP value | +| `SAI_SWITCH_ATTR_PACKET_TRIM_TC_VALUE` | Asymmetric trim TC | +| `SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE` | Accept `STATIC`; reject `DYNAMIC` with `SAI_STATUS_NOT_SUPPORTED` and omit it from the advertised enum | +| `SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_INDEX` | Global static trim queue | + +### 8.2 Buffer Profile and ACL + +| SAI attribute/action | VPP mapping | +|---|---| +| `SAI_BUFFER_PROFILE_ATTR_PACKET_ADMISSION_FAIL_ACTION=DROP` | Disable trim eligibility for queues using the profile | +| `SAI_BUFFER_PROFILE_ATTR_PACKET_ADMISSION_FAIL_ACTION=DROP_AND_TRIM` | Enable trim eligibility for queues using the profile | +| `SAI_ACL_ENTRY_ATTR_ACTION_PACKET_TRIM_DISABLE` | Set per-buffer trim-disable metadata for matching packets | + +### 8.3 Statistics + +The implementation maps the existing switch, port, and queue trim statistics, +including: + +- `SAI_SWITCH_STAT_DROPPED_TRIM_PACKETS` +- `SAI_SWITCH_STAT_TX_TRIM_PACKETS` +- `SAI_PORT_STAT_TRIM_PACKETS` +- `SAI_PORT_STAT_DROPPED_TRIM_PACKETS` +- `SAI_PORT_STAT_TX_TRIM_PACKETS` +- `SAI_QUEUE_STAT_TRIM_PACKETS` +- `SAI_QUEUE_STAT_DROPPED_TRIM_PACKETS` +- `SAI_QUEUE_STAT_TX_TRIM_PACKETS` + +No SAI API change is required. + +## 9. Configuration and Management + +This design introduces no new CLI, Config DB, APP DB, State DB, YANG, REST, or +gNMI schema. SONiC-VPP uses the configuration and capability fields defined by +the generic packet-trimming HLD. + +The VPP plugin adds diagnostic commands for: + +- Current global trim configuration. +- Effective eligible egress queues. +- Port TC-to-DSCP map resolution. +- Admission-provider status. +- Switch, port, and queue trim counters. + +These commands are for serviceability and do not replace the standard SONiC CLI. + +## 10. Warmboot and Fastboot + +Packet-trimming policy is rebuilt from normal SONiC configuration replay. + +- Global configuration, object relationships, QoS maps, ACL rules, and queue + eligibility are reprogrammed through SAI. +- Transient queue occupancy and per-buffer metadata are not restored. +- Trim counters follow the existing SAI-VPP counter persistence behavior. +- A packet in the trim retry path during restart may be dropped. + +The feature adds no sleeps, file I/O, or CPU-heavy processing to the boot +critical path when unused. Initialization creates only the plugin state and +capability check. Fastboot behavior is otherwise unchanged. + +## 11. Memory and Performance + +Persistent state is proportional to configured ports, queues, buffer-profile +bindings, and QoS maps: + +```text +O(number of ports * queues per port + configured maps + ACL policy) +``` + +The per-buffer trim metadata (the resolved original queue, and the ACL +trim-disable flag when that path is used) reuses existing VPP buffer opaque +space; the one-shot guarantee is structural (arc-end re-injection), not a stored +flag. The dataplane performs no heap allocation. + +When trimming is disabled or no eligible profile is bound, the additional +dataplane cost is one predictable eligibility check at the admission-failure +path. Packets admitted to their original queue do not enter packet mutation. + +The software admission shim, if required for the KVM backend, must use bounded +queues and worker-local state. It must not introduce unbounded buffering or a +global lock in the packet path. + +## 12. Error Handling + +| Error case | Handling | +|---|---| +| Invalid trim size, DSCP, TC, or queue index | Return `SAI_STATUS_INVALID_PARAMETER`; do not update VPP or stored SAI state | +| Unsupported dynamic queue mode | Return `SAI_STATUS_NOT_SUPPORTED` | +| Referenced queue, port, buffer profile, or QoS map is missing | Return an appropriate SAI object/reference failure | +| VPP plugin or admission provider is unavailable | Keep trimming capability false and reject trimming configuration | +| VPP binary API update fails | Return failure and retain previous SAI object state | +| Asymmetric DSCP cannot be resolved at runtime | Drop the trim packet and increment a diagnostic error counter | +| Egress metadata is missing at admission failure | Use the normal drop path; do not guess an interface or queue | +| Trim queue rejects the packet | Drop once, increment trim-drop counters, and do not retry | +| Counter read fails | Return the SAI failure; do not return a success-shaped zero | + +## 13. Limitations and Future Work + +### 13.1 Integration status + +The datapath in [6](#6-architecture)–[9](#9-behavioral-details) — the software +admission shim, the trim action node, the binary API, and the debug CLI — is +implemented in the `sonic_ext` plugin and validated on standalone VPP +(happy-path trim plus the recycled-buffer regression that confirms the arc-end +bypass one-shot guarantee). + +The SAI-VPP translation that drives it from live SONiC configuration is +implemented and validated at the datapath-programming layer on the `t1-lag` +testbed dev VM, confirmed by reading VPP's own plugin state (`show sonic-ext +trim`) after pushing configuration through CONFIG_DB: + +1. **Per-`{port, queue}` eligibility** is programmed from + `SAI_BUFFER_PROFILE_ATTR_PACKET_ADMISSION_FAIL_ACTION` and the + queue↔buffer-profile binding. **Validated:** with `egress_lossy_profile` set + to `DROP_AND_TRIM`, VPP reports the lossy queues (`0,1,2,5,6`) eligible and + the lossless queues (`3,4,7`) bypassed on every front-panel port. +2. **Scheduler rate and buffer-profile capacity** map onto the admission shim's + token bucket — unlimited when the queue has no rate limit, closed when a + blocking scheduler holds it ([7.10](#710-scheduler-and-capacity-inputs)). + **Validated:** unlimited eligible queues report an always-admitting bucket in + VPP; the closed-queue branch is the one the `packet_trimming` suite's blocking + scheduler drives to force the trim. +3. **The global trim policy and DSCP-to-queue table** are pushed and confirmed in + VPP. **Validated:** `show sonic-ext trim` reports `size=256, dscp=48 + (symmetric), queue=6`. + +The remaining integration work, tracked by the feature story, is: + +4. Source the switch/port/queue trim counters through `getStatsExt`. +5. Raise the [7.12](#712-capability-advertisement) overrides to advertise the + supported modes, flipping `SWITCH_TRIMMING_CAPABLE` to `true`. + +The capability is advertised as supported and the `sonic-mgmt` suite enabled only +once the end-to-end `packet_trimming` PTF cases pass on the `t1-lag` testbed. + +### 13.2 Design limitations + +- Dynamic trim-queue resolution is not supported in the initial implementation; + only `STATIC` queue resolution is advertised and honored. +- The admission shim models only the token-bucket behavior needed to produce a + recoverable admission failure; it is not full hardware-MMU or multi-level HQoS + emulation. +- SAI-VPP programs eligibility to the admission shim only for queue indices below + the plugin's `SONIC_EXT_TRIM_MAX_QUEUES` (8). sonic-vpp creates additional + per-port unicast/multicast queue objects at indices ≥ 8; these are never + trim-eligible in the supported configuration — the trim queue and every + eligible lossy queue are below the cap — so they are intentionally not pushed + to the shim, which also avoids per-queue programming errors for out-of-range + indices. +- Eligibility is recomputed on each trim-relevant attribute change rather than + cached at initialization ([7.8](#78-buffer-profile-and-queue-relationships)), + so a binding that lands after an earlier recompute (for example while buffer + configuration is still replaying on a cold boot) is picked up by the next + trim-relevant update rather than being missed. +- The IPv4 header checksum is updated after the DSCP rewrite, but IP and + transport **length** fields are deliberately not recalculated after truncation + (the original length is the congestion signal — + [7.4](#74-truncation-and-header-handling)). +- The admission shim uses one token bucket per `{port, queue}` updated on the + egress worker; multi-worker per-queue bucket sharding is future work and is not + required by the single-worker KVM topology. +- The global trim policy and the DSCP-to-queue table are switch-wide; per-port + QoS-map variation is not modeled in the initial implementation, which matches + the uniform testbed configuration. +- The first implementation targets the DPDK virtio egress backend used by the + supported VPP KVM topology. Additional backends (for example the AF_PACKET + `host-interface` path used for veth ports) may reuse the same generic admission + node at their own pre-transmit point. +- Advanced interactions such as mirroring and SRv6 are enabled in sonic-mgmt only + after their focused validation passes. + +Future work includes dynamic queue resolution, per-worker bucket sharding, +per-port QoS-map fidelity, broader software QoS scheduling, and upstreaming any +generic VPP admission-failure integration through FD.io. + +## 14. Testing + +### 14.1 Unit and Component Tests + +VPP tests cover: + +- IPv4 and IPv6 TCP/UDP packets. +- Packets larger than, equal to, and smaller than the trim size. +- Symmetric and asymmetric DSCP resolution. +- ECN preservation. +- Ineligible buffer profiles. +- ACL trim disable. +- Original-queue and trim-queue admission failure. +- One-shot retry behavior. +- Physical and LAG-member egress attribution. +- Chained-buffer truncation. +- Counter read and clear behavior. + +SAI-VPP tests cover: + +- Capability query results. +- Switch attribute validation and update ordering. +- Buffer-profile-to-queue relationship changes. +- QoS map create, replace, and remove. +- ACL action create, update, and remove. +- VPP failure rollback. +- Switch, port, and queue statistic mapping. + +### 14.2 System Tests + +The packet-trimming suite is enabled on the VPP `t1-lag` KVM topology in +stages: + +1. Configuration and capability tests. +2. Symmetric packet size and DSCP tests. +3. Asymmetric `FROM_TC` tests. +4. Feature and port-state toggles. +5. ACL disable trim. +6. Switch, port, and queue counters. +7. Trim-queue congestion. +8. Reload and reboot persistence. +9. Mirror and SRv6 interactions. + +Regression coverage includes normal forwarding, LAG hashing and failover, QoS +mapping, ACL actions, and existing VPP plugin tests. + +**Validation status (2026-07-30).** Stages 1–2 are validated end to end on the +live `vms-kvm-vpp-t1-lag` testbed with the delivered `sonic_ext` datapath and the +SAI-VPP capability raised to `true`: + +| Test | Result | +|---|---| +| `test_trimming_configuration` | pass | +| `test_packet_size_after_trimming` (single-segment 400→256) | pass | +| `test_packet_size_after_trimming` (jumbo/multi-segment 5000→4084, 3000→256) | pass | +| `test_dscp_remapping_after_trimming` (trimmed and small-untrimmed) | pass | + +The jumbo case exercised the multi-segment DPDK mbuf fix in +[7.4](#74-truncation-and-header-handling). Stages 3–9 (asymmetric `FROM_TC`, +counters, ACL disable-trim, reload/reboot persistence, mirror, SRv6) remain +out of scope for this increment and are tracked as future work in +[13.1](#131-integration-status). + +**Test-layer self-sufficiency (2026-07-30).** The suite now runs unattended on +VPP with no manual `redis-cli` preparation. Two `sonic-mgmt` gaps surfaced on the +minimal `Force10-S6000` config and were closed in the test helpers: + +- The per-block-queue `queue{1,3}_{uplink,downlink}_lossy_profile` BUFFER_PROFILEs + the suite references ship only in the real Mellanox SN5640 / Arista 7060X6 QoS + templates. `set_buffer_profile_for_block_queue` now creates the profile when it + is absent (idempotent no-op on the real SKUs), so the block-queue scheduler + wiring is available on VPP. +- `config load` of the pre-test backup is a merge, so a test-created + `BUFFER_QUEUE||` reference is not removed on platforms whose + base config lacks it (VPP). Teardown now clears those references before + deleting `trim_queue_test_profile`, so post-test YANG validation stays clean. + +With both fixes the three in-scope cases pass with zero setup/teardown errors. + +### 14.3 Enablement Gating + +The suite is gated by two mechanisms that must agree: + +1. The `sonic-mgmt` `conditional_mark` packet-trimming rule (OR-combined + conditions). On the VPP testbed `asic_type` is `vpp` (not `vs`) and `hwsku` + is `Force10-S6000`, so the hardware-SKU allowlist disjunct is the one that + would otherwise skip the suite; it is amended to exempt VPP (see the + implemented enablement below). +2. The suite's own `skip_if_packet_trimming_not_supported` fixture, which reads + `STATE_DB SWITCH_CAPABILITY|switch:SWITCH_TRIMMING_CAPABLE` and skips when it + is not `true`. + +Mechanism 2 is the primary gate and stays honest automatically: while the +SAI-VPP integration ([13.1](#131-integration-status)) is incomplete the +capability is `false` and the fixture skips the whole suite, so the suite is never +run against a datapath that is not yet fully driven from SAI. When the integration +is validated and the [7.12](#712-capability-advertisement) overrides are raised, +`SWITCH_TRIMMING_CAPABLE` becomes `true`, the fixture stops skipping, and the +suite runs. The suite is brought up in the stages listed in +[14.2](#142-system-tests), enabling each stage as its datapath and counter +behavior is validated. + +**Implemented enablement (2026-07-30).** The `packet_trimming` `conditional_mark` +rule is updated so exactly the three in-scope symmetric cases run on VPP: + +- The hardware-SKU allowlist disjunct becomes + `hwsku not in [<4 real SKUs>] and asic_type != 'vpp'`, so the SKU gate no + longer skips the suite on VPP while every non-VPP platform keeps its prior + behavior. +- The deferred cases are skipped on VPP with per-test / per-file rules keyed on + `asic_type in ['vpp']`: the whole `test_packet_trimming_asymmetric.py` module, + and the symmetric `test_acl_action_with_trimming`, `test_trimming_with_srv6`, + `test_stability_during_feature_toggles`, + `test_trimming_during_port_admin_toggle`, + `test_trimming_with_reload_and_reboot`, `test_trimming_counters`, + `test_trimming_counters_with_feature_toggle`, and + `test_port_mirror_with_trimming` cases. Each carries a reason pointing at the + deferral in [13.1](#131-integration-status) and the tracking issue. + +This was validated by driving the plugin's own `find_all_matches` / +`evaluate_conditions` logic against the deployed rule file with the DUT's real +facts: on VPP the three in-scope cases run and all deferred/asymmetric cases +skip; on the real SN5640 SKU every case still runs; on a non-listed SKU and on +the generic `vs` KVM every case still skips. The longest-match-per-mark +semantics keep the VPP disjunct and the general rule mutually exclusive per +platform, so there is no cross-interference. + +The local KVM harness cannot exercise a `conditional_mark`-enforcing `pytest` +run because its `dut_basic_facts` ansible module is incompatible with the +harness ansible-core (`No module named ansible.module_utils.parse_utils`), which +is why in-harness runs use `--ignore-conditional-mark` and select cases with +`-k`. The rule is therefore validated at the plugin-decision level and behaves +normally in standard CI, where DUT fact-gathering works. + +## 15. Open Items + +Gate 0 (feasibility) is **resolved positively**: the VPP egress backend is DPDK +virtio with LCP TAP control-plane interfaces and has no native QoS/admission +substrate, so this design supplies that substrate as a generic software admission +shim in the `sonic_ext` plugin ([7.1](#71-admission-provider)) and builds the +trim action on top of it. The former open question — whether the backend could +supply recoverable admission directly or needed a software shim — is answered: +the shim approach is implemented and validated on standalone VPP. + +The remaining items are integration details, tracked by the feature story and +resolved during end-to-end validation ([13.1](#131-integration-status)): + +1. **Resolved.** SAI-VPP maps the SONiC scheduler `PIR` onto the shim's token + bucket as open/closed — `PIR=0` (unlimited) admits, any nonzero `PIR` (the + `SCHEDULER_BLOCK_DATA_PLANE` close) rejects — with buffer-profile capacity as + the bucket depth ([7.10](#710-scheduler-and-capacity-inputs)). A proportional + sub-line-rate `PIR` is not modeled. +2. Confirm the queue-index attribution expected by the `sonic-mgmt` counter + assertions (which read `trimpacket` on the trim-queue index) against the + plugin's per-`{port, queue}` counters and `getStatsExt` sourcing + ([7.11](#711-counters)). +3. Confirm the point at which the [7.12](#712-capability-advertisement) overrides + are raised, gated on validated datapath readiness. + +These items do not change the SONiC configuration or SAI contract, nor the +generic packet-trimming design described above. + +## 16. References + +- [SONiC Packet Trimming HLD](../packet_trimming/packet-trimming-design.md) +- [SONiC-VPP LAG Member Egress Disable HLD](vpp-lag-member-egress-disable-HLD.md) +- [SONiC HLD Template](../guidelines/hld_template.md) +- [sonic-buildimage issue #25789](https://github.com/sonic-net/sonic-buildimage/issues/25789) +- [SAI repository](https://github.com/opencomputeproject/SAI) +- [FD.io VPP](https://github.com/FDio/vpp) From 222c81f4b9cdb8add9c957e110b52a6a3d01ced1 Mon Sep 17 00:00:00 2001 From: Aaron Bernardino Date: Thu, 30 Jul 2026 22:43:41 +0000 Subject: [PATCH 2/7] [doc] Reconcile packet-trimming HLD with the delivered gating model Address code-review gap M5: update the SONiC-VPP packet-trimming HLD so it matches what shipped. Replace the stale "gate SWITCH_TRIMMING_CAPABLE to false / not supported" language with the delivered model: - advertise SWITCH_TRIMMING_CAPABLE = true, - narrow the trimming enum-values capability to the single resolution mode the VPP software shim honors (DSCP_VALUE for the DSCP mode, STATIC for the queue mode), and - defer the out-of-scope config variants via conditional_mark (asic_type == vpp) rather than by suppressing the capability. Sections 2 (Scope), 4 (Background), 6.3 (component responsibilities), 14.3 (Enablement Gating) and 15 (Open Items) are reconciled; the previously rewritten 7.12 / 13.1 remain consistent. Tracking: sonic-net/sonic-buildimage#25789 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Aaron Bernardino --- doc/vpp/vpp-packet-trimming-HLD.md | 215 +++++++++++++++++------------ 1 file changed, 124 insertions(+), 91 deletions(-) diff --git a/doc/vpp/vpp-packet-trimming-HLD.md b/doc/vpp/vpp-packet-trimming-HLD.md index f25fa1c5349..f556333f75e 100644 --- a/doc/vpp/vpp-packet-trimming-HLD.md +++ b/doc/vpp/vpp-packet-trimming-HLD.md @@ -47,16 +47,20 @@ the SONiC scheduler rate and buffer-profile capacity, installed on the `interface-output` feature arc — plus a trim action node that truncates the rejected copy, rewrites its DSCP, and retries it on the configured static trim queue. SAI-VPP translates the existing packet-trimming SAI attributes onto that -datapath and, once the translation is complete and validated end to end, +datapath and, for the symmetric core that is complete and validated end to end, advertises the capability truthfully as **supported** -(`SWITCH_TRIMMING_CAPABLE=true`), at which point the `sonic-mgmt` suite runs. - -Until that SAI-VPP translation is complete and validated, the platform continues -to advertise packet trimming as **not supported** so the advertised capability -never runs ahead of the datapath. The shared `sonic-sairedis` virtual-switch -base over-advertises the capability today; that over-advertisement is corrected -on VPP as the interim state and is raised to *supported* when the datapath wiring -lands (see [7.12](#712-capability-advertisement)). +(`SWITCH_TRIMMING_CAPABLE=true`), at which point the `sonic-mgmt` symmetric suite +runs. + +The capability stays honest by narrowing *what* is advertised rather than gating +the switch capability off: SAI-VPP advertises only the enum values the datapath +honors (`DSCP_VALUE` DSCP resolution, `STATIC` queue resolution), so orchagent +never programs the asymmetric `FROM_TC` or `DYNAMIC` modes VPP does not implement. +Cases that exercise unimplemented behavior are deferred in `sonic-mgmt` through +conditional_mark skips keyed on `asic_type == vpp`. The shared `sonic-sairedis` +virtual-switch base over-advertises every trim enum today; that enum +over-advertisement is corrected on VPP (see +[7.12](#712-capability-advertisement)). The target design covers: @@ -181,11 +185,13 @@ hangs off that failure. Because the shim is generic — it carries no packet-trimming SAI policy or test constants — it is the minimal substrate needed and keeps the SONiC-specific logic in SAI-VPP and the plugin control path. -While the SAI-VPP translation that drives this datapath is being completed and -validated end to end, the platform still corrects the base over-advertisement and -reports packet trimming as *not* supported, so capability never leads the -datapath; the advertisement is raised to *supported* when the wiring lands (see -[7.12](#712-capability-advertisement)). +The SAI-VPP translation that drives this datapath is completed and validated for +the symmetric core, so the platform advertises packet trimming as *supported* +(`SWITCH_TRIMMING_CAPABLE=true`). To keep the advertisement honest, VPP corrects +the base's enum over-advertisement — narrowing the advertised trim enum values to +the modes the datapath honors (`DSCP_VALUE`, `STATIC`) so orchagent never +programs an unimplemented mode — rather than gating the switch capability off +(see [7.12](#712-capability-advertisement)). ## 5. Requirements @@ -286,9 +292,9 @@ flowchart TD |---|---| | VPP admission integration | Software per-`{port, queue}` token-bucket admission shim on the `interface-output` arc that turns a rate-limited (blocked) queue into a recoverable admission failure; generic, carrying no packet-trimming SAI policy | | VPP packet-trim plugin | Eligibility lookup, truncation, DSCP rewrite, static trim-queue retry with one-shot `interface-output-arc-end` re-injection, counters, binary API, and debug CLI | -| SAI-VPP | Translate the packet-trimming SAI attributes and object relationships onto the plugin (global policy, per-queue eligibility from the buffer profile, scheduler rate/capacity, TC-to-DSCP map), source trim counters through `getStatsExt`, and — once wired and validated — raise the capability advertisement from *not supported* to the modes the datapath honors. The interim over-advertisement correction keeps `SWITCH_TRIMMING_CAPABLE=false` until then | +| SAI-VPP | Translate the packet-trimming SAI attributes and object relationships onto the plugin (global policy, per-queue eligibility from the buffer profile, scheduler rate/capacity, TC-to-DSCP map) and advertise the capability truthfully — narrowing the advertised trim enum values to the modes the datapath honors (`DSCP_VALUE`, `STATIC`) so `SWITCH_TRIMMING_CAPABLE=true` is honest for the symmetric core. Sourcing trim counters through `getStatsExt` is deferred ([7.11](#711-counters)) | | sonic-swss | No VPP-specific change expected; the generic packet-trimming orchestration and capability publication already function on VPP | -| sonic-mgmt | No suite code change: the `skip_if_packet_trimming_not_supported` capability fixture gates the suite on `SWITCH_TRIMMING_CAPABLE`, so it skips while the capability is *false* and runs automatically once SAI-VPP raises it to *true* | +| sonic-mgmt | No suite code change: the `skip_if_packet_trimming_not_supported` capability fixture gates the suite on `SWITCH_TRIMMING_CAPABLE` (`true` on VPP, so it runs), and conditional_mark skips the out-of-scope cases on `asic_type == vpp` ([14.3](#143-enablement-gating)) | ## 7. High-Level Design @@ -531,9 +537,10 @@ and hardware-specific threshold behavior remain outside this design. ### 7.11 Counters The VPP plugin maintains packet-trim counters in the dataplane and exposes them -through the binary API; SAI-VPP maps them onto the existing SAI statistics and -serves them from `getStatsExt`. Counters are kept at three scopes so the SAI -switch, port, and queue stat IDs can all be sourced: +through the binary API (`sonic_ext_trim_counters_get`). The **target** design +maps them onto the existing SAI statistics and serves them from `getStatsExt`, +kept at three scopes so the SAI switch, port, and queue stat IDs can all be +sourced: | Event | Counter attribution | |---|---| @@ -552,16 +559,20 @@ per-queue counters, and the feature-toggle test reads the queue-level The plugin's per-`{port, queue}` counter model is defined to satisfy those cross-checks directly. -Before this design, the shared virtual-switch base advertised the trim stats as -supported but returned zero for them; sourcing real values from the plugin -through `getStatsExt` is part of raising the capability to *supported*. +**Delivered scope (initial enablement).** The plugin maintains the counters and +serves them over the binary API, but SAI-VPP does **not** yet source them through +`getStatsExt` — `SwitchVpp::getStatsExt` still delegates trim stat IDs to the +shared virtual-switch base, which returns zero. SAI stat sourcing is deferred +(see [13.1](#131-integration-status)), and the `sonic-mgmt` trim-counter cases +are skipped on `vpp` via conditional_mark until it lands. Raising the base's +zero-valued trim stats to real plugin values is future work, not part of this +enablement. ### 7.12 Capability Advertisement -Packet-trimming capability on VPP must track the datapath: advertised *supported* -only for the modes the plugin actually honors, and *not supported* until the -SAI-VPP translation that drives the datapath is wired and validated. Today the -shared virtual-switch base advertises packet trimming unconditionally on VPP: +Packet-trimming capability on VPP must track the datapath: `sonic-swss` must be +told which trim modes VPP can actually satisfy so orchagent never programs one it +cannot. The shared virtual-switch base advertises packet trimming on VPP: - `SwitchStateBase::queryAttrEnumValuesCapability` returns the DSCP modes (`DSCP_VALUE`, `FROM_TC`), the queue modes (`STATIC`, `DYNAMIC`), and the @@ -571,29 +582,28 @@ shared virtual-switch base advertises packet trimming unconditionally on VPP: - `SwitchVpp::queryAttributeCapability` reports every switch trim attribute as create/set/get implemented. -Together these make `sonic-swss` publish `SWITCH_TRIMMING_CAPABLE=true` -unconditionally — including while the datapath integration is incomplete. Two -`SwitchVpp` overrides make the advertisement track the datapath instead: +Together these make `sonic-swss` publish `SWITCH_TRIMMING_CAPABLE=true`. The +initial enablement **keeps** trimming advertised as supported — the symmetric +datapath is wired and validated ([13.1](#131-integration-status)) — but narrows +the advertised *enum values* to exactly what the software admission shim honors: -| Seam | Behavior | +| Seam | Delivered behavior | |---|---| -| `SwitchVpp::queryAttributeCapability` | Reports the six `SAI_SWITCH_ATTR_PACKET_TRIM_*` attributes (size, DSCP mode, DSCP value, TC value, queue mode, queue index) as create/set/get implemented **only when the trim datapath is active**; otherwise gates them to `false`. `sonic-swss`'s `isSwitchTrimmingSupported()` follows the `set` capability | -| `SwitchVpp::queryAttrEnumValuesCapability` | Advertises exactly the enum values the datapath honors — `STATIC` queue resolution, the supported DSCP modes, and `DROP`/`DROP_AND_TRIM` — while returning `SAI_STATUS_NOT_SUPPORTED` for `DYNAMIC` queue resolution, which is out of scope for the initial implementation | - -**Interim state (integration incomplete).** Both overrides report *not supported*, -so `sonic-swss`'s `writeCapabilitiesToDb()` publishes -`STATE_DB SWITCH_CAPABILITY|switch:SWITCH_TRIMMING_CAPABLE=false`, the base -over-advertisement is corrected, and the `sonic-mgmt` suite skips through its -capability fixture instead of running against a datapath that is not yet fully -driven from SAI. No swss or sonic-mgmt change is required. - -**End state (datapath wired and validated).** The overrides advertise the -implemented modes (initially `STATIC` queue resolution and both DSCP modes, with -`DROP_AND_TRIM` eligibility and the switch/port/queue trim stats), so -`SWITCH_TRIMMING_CAPABLE` becomes `true` and the suite runs. The flip is a change -of the gating predicate, made once the SAI-VPP translation -([13.1](#131-integration-status)) and counter sourcing are validated end to end -on the testbed. +| `SwitchVpp::queryAttributeCapability` | Inherits the base: the six `SAI_SWITCH_ATTR_PACKET_TRIM_*` attributes (size, DSCP mode, DSCP value, TC value, queue mode, queue index) stay create/set/get implemented, so `sonic-swss`'s `isSwitchTrimmingSupported()` follows the `set` capability and `SWITCH_TRIMMING_CAPABLE` is `true` | +| `SwitchVpp::queryAttrEnumValuesCapability` | Overrides the base to advertise a single value per trim enum — `DSCP_VALUE` for `SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE` and `STATIC` for `SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE` — so orchagent never programs the asymmetric `FROM_TC` or `DYNAMIC` modes VPP does not implement. `DROP`/`DROP_AND_TRIM` buffer-profile actions are left to the base metadata | + +Because the capability stays `true`, the symmetric `packet_trimming` PTF suite +runs on sonic-vpp. Cases that exercise unimplemented behavior — asymmetric +per-port DSCP (`FROM_TC`), `DYNAMIC` queue resolution, ACL disable-trim, trim +counters, port mirroring with trim, and reload/reboot persistence — are deferred +in `sonic-mgmt` through conditional_mark skips keyed on `asic_type == vpp` +([14.3](#143-enablement-gating)), rather than by gating the switch capability to +`false`. This keeps the supported symmetric core enabled while excluding the +out-of-scope cases from the run. + +The enum-advertisement decision is factored into a small pure predicate +(`SwitchVpp::getTrimEnumValuesCapability`) that the override calls, so it is +covered directly by a SAI-VPP unit test ([14.1](#141-unit-and-component-tests)). ### 7.13 Update and Remove Ordering @@ -748,12 +758,18 @@ trim`) after pushing configuration through CONFIG_DB: The remaining integration work, tracked by the feature story, is: -4. Source the switch/port/queue trim counters through `getStatsExt`. -5. Raise the [7.12](#712-capability-advertisement) overrides to advertise the - supported modes, flipping `SWITCH_TRIMMING_CAPABLE` to `true`. +4. Source the switch/port/queue trim counters through `getStatsExt` + ([7.11](#711-counters)) instead of returning the base's zero values, and + enable the deferred `sonic-mgmt` trim-counter cases. +5. Extend the datapath to the deferred modes — asymmetric per-port DSCP + (`FROM_TC`), `DYNAMIC` queue resolution, ACL disable-trim, port mirroring with + trim, and reload/reboot persistence — and remove the corresponding + conditional_mark skips ([14.3](#143-enablement-gating)). -The capability is advertised as supported and the `sonic-mgmt` suite enabled only -once the end-to-end `packet_trimming` PTF cases pass on the `t1-lag` testbed. +Capability is advertised as supported (`SWITCH_TRIMMING_CAPABLE=true`) and the +symmetric `packet_trimming` suite is enabled now that its end-to-end PTF cases +pass on the `t1-lag` testbed; the out-of-scope cases above remain skipped on +`vpp` until each is implemented and validated. ### 13.2 Design limitations @@ -799,29 +815,38 @@ generic VPP admission-failure integration through FD.io. ### 14.1 Unit and Component Tests -VPP tests cover: - -- IPv4 and IPv6 TCP/UDP packets. -- Packets larger than, equal to, and smaller than the trim size. -- Symmetric and asymmetric DSCP resolution. -- ECN preservation. -- Ineligible buffer profiles. -- ACL trim disable. -- Original-queue and trim-queue admission failure. -- One-shot retry behavior. -- Physical and LAG-member egress attribution. -- Chained-buffer truncation. -- Counter read and clear behavior. - -SAI-VPP tests cover: - -- Capability query results. -- Switch attribute validation and update ordering. -- Buffer-profile-to-queue relationship changes. -- QoS map create, replace, and remove. -- ACL action create, update, and remove. -- VPP failure rollback. -- Switch, port, and queue statistic mapping. +**Target coverage.** The full trim design is intended to be covered by VPP +framework tests and SAI-VPP unit tests: + +- VPP dataplane: IPv4/IPv6 TCP/UDP packets; packets larger than, equal to, and + smaller than the trim size; symmetric and asymmetric DSCP resolution; ECN + preservation; ineligible buffer profiles; ACL trim disable; original-queue and + trim-queue admission failure; one-shot retry behavior; physical and LAG-member + egress attribution; chained-buffer truncation; counter read and clear behavior. +- SAI-VPP: capability query results; switch attribute validation and update + ordering; buffer-profile-to-queue relationship changes; QoS map create, + replace, and remove; ACL action create, update, and remove; VPP failure + rollback; switch, port, and queue statistic mapping. + +**Delivered in this enablement.** The datapath itself was validated on standalone +VPP and on the `t1-lag` dev VM by reading the plugin state directly (`show +sonic-ext trim`, [13.1](#131-integration-status)); no automated VPP framework +tests are added for `sonic_ext` yet. The SAI-VPP unit tests +(`unittest/vslib/TestSwitchVpp.cpp`, built under `USE_VPP`) cover the pure +decision logic that gates the enablement: + +- `getTrimEnumValuesCapability` — the trim enum-values advertisement + ([7.12](#712-capability-advertisement)): `DSCP_VALUE` for the DSCP mode, + `STATIC` for the queue mode, and no match for unrelated attributes or object + types. +- `isTrimDataplaneAttr` — the set/create attribute classification that triggers a + per-queue trim re-resolve, including the port QoS-map bindings and QoS-map + edits. +- `getLagMemberEgressDisableAction` — pre-existing LAG-member egress logic. + +The remaining target coverage (VPP framework tests, counter/rollback/QoS-map SAI +tests) is future work tracked with the deferred datapath modes +([13.1](#131-integration-status)). ### 14.2 System Tests @@ -876,26 +901,29 @@ With both fixes the three in-scope cases pass with zero setup/teardown errors. ### 14.3 Enablement Gating -The suite is gated by two mechanisms that must agree: +The suite is gated by two mechanisms that act at different granularities: 1. The `sonic-mgmt` `conditional_mark` packet-trimming rule (OR-combined conditions). On the VPP testbed `asic_type` is `vpp` (not `vs`) and `hwsku` is `Force10-S6000`, so the hardware-SKU allowlist disjunct is the one that would otherwise skip the suite; it is amended to exempt VPP (see the - implemented enablement below). + implemented enablement below). This is the primary gate for **scoping** the + suite on VPP: it selects exactly the in-scope symmetric cases to run and + defers every out-of-scope case, keyed on `asic_type == vpp`. 2. The suite's own `skip_if_packet_trimming_not_supported` fixture, which reads - `STATE_DB SWITCH_CAPABILITY|switch:SWITCH_TRIMMING_CAPABLE` and skips when it - is not `true`. - -Mechanism 2 is the primary gate and stays honest automatically: while the -SAI-VPP integration ([13.1](#131-integration-status)) is incomplete the -capability is `false` and the fixture skips the whole suite, so the suite is never -run against a datapath that is not yet fully driven from SAI. When the integration -is validated and the [7.12](#712-capability-advertisement) overrides are raised, -`SWITCH_TRIMMING_CAPABLE` becomes `true`, the fixture stops skipping, and the -suite runs. The suite is brought up in the stages listed in -[14.2](#142-system-tests), enabling each stage as its datapath and counter -behavior is validated. + `STATE_DB SWITCH_CAPABILITY|switch:SWITCH_TRIMMING_CAPABLE` and skips the + whole suite when it is not `true`. + +Mechanism 2 is a coarse on/off switch, and it is **satisfied** on VPP: +`SWITCH_TRIMMING_CAPABLE` is `true` (the shared virtual-switch base reports the +switch trim capability as implemented; VPP narrows only the advertised trim +*enum values* to the modes the datapath honors — see +[7.12](#712-capability-advertisement)), so the fixture does not skip. Case-level +scoping is therefore performed entirely by Mechanism 1: `conditional_mark` runs +the in-scope symmetric cases on VPP and defers the rest. The suite is brought up +in the stages listed in [14.2](#142-system-tests), deferring each +not-yet-validated stage through `conditional_mark` rather than by gating the +switch capability off. **Implemented enablement (2026-07-30).** The `packet_trimming` `conditional_mark` rule is updated so exactly the three in-scope symmetric cases run on VPP: @@ -951,8 +979,13 @@ resolved during end-to-end validation ([13.1](#131-integration-status)): assertions (which read `trimpacket` on the trim-queue index) against the plugin's per-`{port, queue}` counters and `getStatsExt` sourcing ([7.11](#711-counters)). -3. Confirm the point at which the [7.12](#712-capability-advertisement) overrides - are raised, gated on validated datapath readiness. +3. **Resolved.** The [7.12](#712-capability-advertisement) enum-narrowing + override is in place: `SWITCH_TRIMMING_CAPABLE` is advertised `true` for the + symmetric core, with the trim enum values restricted to `DSCP_VALUE` and + `STATIC` so orchagent never programs the asymmetric modes VPP does not + implement. Out-of-scope cases are deferred in `sonic-mgmt` via + `conditional_mark` rather than by gating the capability off + ([14.3](#143-enablement-gating)). These items do not change the SONiC configuration or SAI contract, nor the generic packet-trimming design described above. From 34ecaf4351b04ea318bdf4ad9424e71e795dc022 Mon Sep 17 00:00:00 2001 From: Aaron Bernardino Date: Thu, 30 Jul 2026 23:52:38 +0000 Subject: [PATCH 3/7] [doc] Reconcile packet-trimming HLD with delivered code Second accuracy pass over the full HLD against the committed sonic_ext plugin, SAI-VPP translation, and sonic-mgmt changes. Distinguish the pre-change baseline, delivered symmetric core, and deferred target behavior throughout: - Admission model: buffer profiles select trim eligibility; SAI-VPP maps the effective scheduler to a binary unlimited/blocked bucket (UINT64_MAX or 0 rate/capacity) rather than deriving a proportional rate or buffer-profile capacity. - Original-queue classification via a switch-wide DSCP-to-queue table; multicast queues skipped by type, unicast index >= 8 skipped by cap. - Counters: three switch-global plugin summaries only; SAI getStatsExt sourcing and per-port/queue scoping deferred. - Update/create/remove ordering matched to the delivered error propagation (set commits then surfaces the VPP push failure for orchagent retry; create refresh is best effort; remove does not refresh). - Marked FROM_TC, DYNAMIC, ACL disable-trim, GCU config, toggles, persistence, mirroring, and SRv6 as deferred, with matching conditional_mark skips and CLI/warmboot/requirement status updates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Aaron Bernardino --- doc/vpp/vpp-packet-trimming-HLD.md | 567 ++++++++++++++++------------- 1 file changed, 319 insertions(+), 248 deletions(-) diff --git a/doc/vpp/vpp-packet-trimming-HLD.md b/doc/vpp/vpp-packet-trimming-HLD.md index f556333f75e..babe60c6b72 100644 --- a/doc/vpp/vpp-packet-trimming-HLD.md +++ b/doc/vpp/vpp-packet-trimming-HLD.md @@ -26,9 +26,10 @@ | v0.1 | 2026-07-23 | Aaron Bernardino | Initial SONiC-VPP packet-trimming design | | v0.2 | 2026-07-23 | Aaron Bernardino | Corrected current-state analysis: SAI-VPP already advertises trimming capability; clarified that advertisement must be *reduced* to match the datapath; identified KVM egress backend and refined counter and enablement details | | v0.3 | 2026-07-23 | Aaron Bernardino | Feasibility spike (Gate 0) on the live `vms-kvm-vpp-t1-lag` testbed: confirmed VPP has no egress QoS / queue-admission substrate, so the test's blocking scheduler is a dataplane no-op and trimming cannot occur. Corrected the KVM egress backend to DPDK virtio + LCP TAP. Scoped this increment to **capability truthfulness** (VPP advertises trimming as *not* supported); retained the datapath design as the target architecture and a tracked prerequisite (future work) | -| v0.4 | 2026-07-25 | Aaron Bernardino | Gate 0 resolved **positively**: instead of deferring the datapath, this increment supplies the missing admission substrate in software. The `sonic_ext` plugin gains a generic per-`{port, queue}` software admission shim (a token bucket driven by the SONiC scheduler rate and buffer-profile capacity) on the `interface-output` arc, plus a trim action node (truncate → DSCP rewrite → static trim-queue retry → counters), validated end to end on standalone VPP. Reframed the datapath from *tracked prerequisite* to *delivered design*; SAI-VPP raises the advertised capability to `SWITCH_TRIMMING_CAPABLE=true` once the translation is wired and validated. Corrected the header-checksum (§7.4) and one-shot guard (§7.6, now an `interface-output-arc-end` bypass) descriptions to match the implementation | +| v0.4 | 2026-07-25 | Aaron Bernardino | Gate 0 resolved **positively**: instead of deferring the datapath, this increment supplies the missing admission substrate in software. The `sonic_ext` plugin gains a generic per-`{port, queue}` token-bucket admission shim on the `interface-output` arc, plus a trim action node (truncate → DSCP rewrite → static trim-queue retry → counters), validated end to end on standalone VPP. Reframed the datapath from *tracked prerequisite* to *delivered design*; SAI-VPP raises the advertised capability to `SWITCH_TRIMMING_CAPABLE=true` once the translation is wired and validated. Corrected the header-checksum (§7.4) and one-shot guard (§7.6, now an `interface-output-arc-end` bypass) descriptions to match the implementation | | v0.5 | 2026-07-30 | Aaron Bernardino | Root-caused and fixed a multi-segment (jumbo) trim defect on the KVM/DPDK backend: truncation cleared the VLIB chain flag but left the backing `rte_mbuf` `->next`/`nb_segs` stale, so the virtio PMD re-appended the freed tail (5000→256 egressed as 1208 = 256 + 952). Fix clears `VLIB_BUFFER_EXT_HDR_VALID` on the severed segment (§7.4). Validated end to end on `vms-kvm-vpp-t1-lag`: `test_packet_size_after_trimming` passes for single-segment (400→256) and jumbo/multi-segment (5000→4084, 3000→256). Bumped `VPP_VERSION` suffix for the plugin content change | | v0.6 | 2026-07-30 | Aaron Bernardino | Made the `sonic-mgmt` suite self-sufficient and enabled it on VPP. Test helpers now create the `queue{1,3}_{uplink,downlink}_lossy_profile` BUFFER_PROFILEs when absent (they ship only in real SN5640/7060X6 QoS templates) and clear test-created `BUFFER_QUEUE` trim-queue refs in teardown so post-test YANG validation stays clean — the three in-scope cases pass with zero setup/teardown errors and no manual `redis-cli` (§14.2). Implemented the `conditional_mark` enablement (§14.3): exempted `asic_type == 'vpp'` from the hwsku skip and added `asic_type in ['vpp']` skips for the deferred asymmetric module and symmetric cases (ACL, SRv6, counters ×2, mirror, reload/reboot, stability/port-admin toggles). Validated the rule against the plugin's own decision logic with the DUT's real facts across VPP / real-SKU / non-listed-SKU / `vs` | +| v0.7 | 2026-07-30 | Aaron Bernardino | Reconciled the full document with the delivered code after the review-hardening commits. Distinguished the pre-change baseline, delivered symmetric core, and deferred target behavior throughout. Corrected the admission model (buffer profiles select eligibility; SAI-VPP maps scheduler state to binary blocked/unlimited buckets rather than deriving proportional rate/capacity), DSCP-to-queue classification, global-only plugin counters, update/create/remove ordering, capability behavior, CLI output, warmboot status, and the exact `sonic-mgmt` enablement and teardown changes. Marked asymmetric `FROM_TC`, `DYNAMIC`, ACL disable-trim, SAI counter sourcing, GCU config validation, toggles, persistence, mirroring, and SRv6 as deferred | ## 2. Scope @@ -42,13 +43,17 @@ dataplane has no native egress QoS / queue-admission model, so a blocking SONiC scheduler cannot by itself produce the admission failure that packet trimming hangs off. Rather than defer the datapath, this increment **supplies the missing substrate in software**: the `sonic_ext` VPP plugin gains a generic -per-`{egress port, queue}` software admission shim — a token bucket sized from -the SONiC scheduler rate and buffer-profile capacity, installed on the -`interface-output` feature arc — plus a trim action node that truncates the -rejected copy, rewrites its DSCP, and retries it on the configured static trim -queue. SAI-VPP translates the existing packet-trimming SAI attributes onto that -datapath and, for the symmetric core that is complete and validated end to end, -advertises the capability truthfully as **supported** +per-`{egress port, queue}` token-bucket admission shim on the +`interface-output` feature arc, plus a trim action node that truncates the +rejected packet, rewrites its DSCP, and retries it on the configured static trim +queue. The binary API accepts generic rate and capacity values, while the +delivered SAI-VPP translation intentionally programs only the two states needed +by the supported topology: an unlimited bucket for a queue with no effective +rate limit and an empty, non-refilling bucket for a queue with any nonzero +scheduler `PIR`. Buffer profiles determine trim eligibility; their size is not +used as bucket depth in this increment. For the symmetric core that is complete +and validated end to end, SAI-VPP advertises the capability truthfully as +**supported** (`SWITCH_TRIMMING_CAPABLE=true`), at which point the `sonic-mgmt` symmetric suite runs. @@ -62,17 +67,22 @@ virtual-switch base over-advertises every trim enum today; that enum over-advertisement is corrected on VPP (see [7.12](#712-capability-advertisement)). -The target design covers: +The delivered increment covers: -- Translating the existing packet-trimming SAI attributes into VPP state. -- Detecting a failed admission to a trim-eligible egress queue. -- Truncating eligible IPv4 and IPv6 packets and remapping their DSCP. -- Sending the shortened packet through a configured static trim queue. -- Supporting symmetric `DSCP_VALUE` and asymmetric `FROM_TC` modes. -- Supporting per-buffer-profile eligibility and ACL `DISABLE_TRIM`. -- Reporting switch, port, and queue packet-trimming counters. -- Preserving the selected physical egress member for LAG traffic. -- Rebuilding packet-trimming state after configuration replay. +- Translating the symmetric packet-trimming switch attributes into VPP state. +- Selecting eligibility from the buffer profile attached to the original queue. +- Classifying the original queue through a switch-wide DSCP-to-queue table. +- Producing a recoverable admission failure from the scheduler's binary + blocked/unlimited state. +- Truncating eligible IPv4 and IPv6 packets and writing the configured symmetric + DSCP value. +- Sending the shortened packet through a configured static trim queue on the + selected physical egress member. + +The full target design additionally includes asymmetric `FROM_TC`, dynamic +trim-queue resolution, ACL `DISABLE_TRIM`, SAI switch/port/queue counter +sourcing, and validated replay/persistence behavior. Those items are deferred +as listed in [13.1](#131-integration-status). This document is a VPP platform adaptation. It does not redefine the existing SONiC CLI, Config DB schema, YANG model, orchestration, or SAI contract. @@ -88,12 +98,12 @@ base currently advertises the dynamic mode as supported; VPP advertises only the | Term | Meaning | |---|---| -| Admission failure | A packet cannot be accepted by its selected egress queue because the queue has reached its configured capacity | +| Admission failure | The selected egress queue's admission provider rejects the packet. In the delivered VPP mapping this means the queue is trim-eligible and has a nonzero scheduler `PIR`, which is represented by an empty, non-refilling bucket | | Original queue | The egress queue selected for the unmodified packet | | Trim queue | The egress queue selected for the shortened packet | | Trim attempt | An eligible original packet reaches the packet-trimming path after original-queue admission fails | | Trimmed packet | A packet processed by the trim path, whether or not its original length exceeded the configured trim size | -| Admission provider | The VPP component that enforces queue capacity and hands rejected buffers to packet-trimming policy | +| Admission provider | The VPP feature node that evaluates the programmed per-queue token-bucket state and diverts rejected buffers to packet-trimming policy | | DSCP | Differentiated Services Code Point | | TC | Traffic Class | | LAG | Link Aggregation Group, represented by a VPP BondEthernet interface | @@ -128,8 +138,8 @@ syncd platform SAI ``` -The current SAI-VPP state is important to state precisely, because it is not a -blank slate: +The **pre-change SAI-VPP baseline** is important to state precisely, because the +control-plane capability already existed before this increment: - The shared `sonic-sairedis` virtual-switch base already advertises full packet-trimming capability. It reports the switch, buffer-profile, and stats @@ -137,20 +147,22 @@ blank slate: buffer action `DROP`/`DROP_AND_TRIM`, and the switch/port/queue trim stats), and `SwitchVpp::queryAttributeCapability` reports every attribute as create/set/get implemented. -- As a result, `sonic-swss` already computes `isSwitchTrimmingSupported() == true` - and publishes `SWITCH_CAPABILITY|switch:SWITCH_TRIMMING_CAPABLE=true` on VPP. - The configuration path is fully functional today: switch, buffer-profile, QoS, - and ACL objects are accepted and stored as virtual object state. -- What is missing is entirely below SAI: VPP performs no trimming, and the trim - statistics read back as zero because the base returns no values for them. +- As a result, `sonic-swss` already computed + `isSwitchTrimmingSupported() == true` and published + `SWITCH_CAPABILITY|switch:SWITCH_TRIMMING_CAPABLE=true` on VPP. The + configuration path was functional at the virtual-object layer: switch, + buffer-profile, QoS, and ACL objects were accepted and stored. +- What was missing was entirely below SAI: VPP performed no trimming, and the + trim statistics read back as zero because the base returned no values for + them. VPP also has no native equivalent of `SAI_BUFFER_PROFILE_PACKET_ADMISSION_FAIL_ACTION_DROP_AND_TRIM`. -Because capability is already advertised while the datapath does nothing, VPP -currently reports support it does not provide. A Gate 0 feasibility spike on the -live `vms-kvm-vpp-t1-lag` testbed confirmed *why* the datapath does nothing and -established the near-term direction: +Because capability was already advertised while the datapath did nothing, the +pre-change platform reported support it did not provide. A Gate 0 feasibility +spike on the live `vms-kvm-vpp-t1-lag` testbed confirmed *why* and established +the implementation direction: - **Forwarding path (measured).** Front-panel transit egresses through `BondEthernetXXX` (mode `xor`, load-balance `l34-inner`) onto member @@ -173,13 +185,14 @@ established the near-term direction: would never fire. Consequently, real trimming on VPP first requires an egress per-queue admission -model that honors the SONiC scheduler rate, so that a blocked queue can actually -reach a *cannot-admit* state. Rather than treat that as a separate prerequisite, -this design **provides it in software**: a generic per-`{port, queue}` -token-bucket admission shim on the `interface-output` arc (see -[7.1](#71-admission-provider)), sized from the SONiC scheduler rate and -buffer-profile capacity, so the test's `PIR=1` blocking scheduler drains the -bucket and yields a real, recoverable admission failure. The trim action node +model that reacts to the SONiC scheduler state, so that a blocked queue can +produce a *cannot-admit* result. Rather than treat that as a separate +prerequisite, this design **provides it in software**: a generic +per-`{port, queue}` token-bucket admission shim on the `interface-output` arc +(see [7.1](#71-admission-provider)). The delivered SAI-VPP mapping represents +the test's nonzero `PIR` blocking scheduler with a zero-rate, zero-capacity +bucket, yielding a real, recoverable admission failure; a queue without a rate +limit receives an always-admitting bucket. The trim action node ([7.4](#74-truncation-and-header-handling)–[7.6](#76-static-trim-queue-and-retry)) hangs off that failure. Because the shim is generic — it carries no packet-trimming SAI policy or test constants — it is the minimal substrate @@ -197,20 +210,20 @@ programs an unimplemented mode — rather than gating the switch capability off ### 5.1 Functional Requirements -| ID | Requirement | -|---|---| -| REQ-1 | VPP must trim only after admission to the original queue fails | -| REQ-2 | Trimming eligibility must follow the buffer profile attached to the original queue | -| REQ-3 | `DROP` must retain normal drop behavior; `DROP_AND_TRIM` must invoke trim policy | -| REQ-4 | The trim size must be runtime configurable | -| REQ-5 | Symmetric mode must write the configured DSCP value | -| REQ-6 | Asymmetric mode must resolve DSCP from the configured trim TC and the selected egress port's TC-to-DSCP map | -| REQ-7 | The initial implementation must transmit through the configured static trim queue | -| REQ-8 | ACL `DISABLE_TRIM` must suppress trimming for matching packets | -| REQ-9 | A packet must enter the trim path no more than once | -| REQ-10 | Trim attempts, successful trim transmissions, and trim-queue drops must be counted at the required SAI scopes | -| REQ-11 | LAG traffic must remain associated with the physical member selected before original-queue admission | -| REQ-12 | Runtime updates must not leave SAI object state and VPP policy state divergent | +| ID | Requirement | Increment status | +|---|---|---| +| REQ-1 | VPP must trim only after admission to the original queue fails | Delivered | +| REQ-2 | Trimming eligibility must follow the buffer profile attached to the original queue | Delivered | +| REQ-3 | `DROP` must retain normal drop behavior; `DROP_AND_TRIM` must invoke trim policy | Delivered | +| REQ-4 | The trim size must be runtime configurable | Delivered | +| REQ-5 | Symmetric mode must write the configured DSCP value | Delivered | +| REQ-6 | Asymmetric mode must resolve DSCP from the configured trim TC and the selected egress port's TC-to-DSCP map | Deferred | +| REQ-7 | The initial implementation must transmit through the configured static trim queue | Delivered | +| REQ-8 | ACL `DISABLE_TRIM` must suppress trimming for matching packets | Deferred | +| REQ-9 | A packet must enter the trim path no more than once | Delivered | +| REQ-10 | Trim attempts, successful trim transmissions, and trim-queue drops must be counted at the required SAI scopes | Plugin summary counters delivered; SAI scope attribution deferred | +| REQ-11 | LAG traffic must remain associated with the physical member selected before original-queue admission | Delivered | +| REQ-12 | A failed runtime VPP update must be surfaced so orchagent can retry the idempotent full policy and converge SAI and VPP state | Delivered for set; create refresh is best effort | ### 5.2 Non-Functional Requirements @@ -236,14 +249,12 @@ programs an unimplemented mode — rather than gating the switch capability off ## 6. Architecture -> **Scope note.** Sections [6](#6-architecture)–[9](#9-behavioral-details) -> describe the delivered datapath: a software egress admission shim plus the trim -> action node in the `sonic_ext` plugin, driven by SAI-VPP. The datapath is -> validated on standalone VPP; the SAI-VPP translation that programs it from live -> SONiC configuration is completed and validated end to end before the capability -> is advertised as supported (see [7.12](#712-capability-advertisement)). Genuine -> remaining limitations and future work are in -> [13](#13-limitations-and-future-work). +> **Scope note.** Sections [6](#6-architecture)–[9](#9-configuration-and-management) +> describe both the full target architecture and the delivered symmetric core. +> Status labels in the detailed sections are authoritative. The delivered path +> is the software admission shim, symmetric DSCP rewrite, static trim queue, +> binary API/CLI, and SAI-VPP programming validated end to end. Deferred behavior +> is summarized in [13](#13-limitations-and-future-work). ### 6.1 Control-Plane Flow @@ -256,17 +267,21 @@ flowchart TD E --> F[VPP packet-trim binary API] F --> G[Packet-trim plugin policy] E --> H[Egress admission provider configuration] - E --> I[Capability and counter mapping] + E --> I[Capability mapping; SAI counter sourcing deferred] ``` SAI-VPP owns object relationships and translates the platform-independent SAI contract into compact VPP policy: -- Global trim size, DSCP mode/value, TC value, and static trim queue. +- Global trim size, symmetric DSCP value, and static trim queue. The DSCP mode + and TC value are stored, but `FROM_TC` is not honored in this increment. - Effective eligibility for each `{egress port, original queue}` pair. -- TC-to-DSCP maps associated with egress ports. -- ACL rules that set trim-disable metadata. -- Queue rate and capacity inputs required by the admission provider. +- A switch-wide DSCP-to-queue table composed from the first front-panel port + that has both `DSCP_TO_TC` and `TC_TO_QUEUE` maps. +- Binary blocked/unlimited admission state derived from the effective scheduler. + +ACL trim-disable programming, per-port TC-to-DSCP resolution, and SAI trim +counter sourcing are deferred. ### 6.2 Dataplane Flow @@ -286,15 +301,23 @@ flowchart TD K -->|No| M[Drop and increment trim-drop counters] ``` +This flowchart is the full conceptual design. In the delivered increment the +"ACL disabled" branch and the asymmetric-DSCP step are deferred: the datapath +applies symmetric `DSCP_VALUE` only and does not yet honor an ACL trim-disable +flag ([7.5](#75-dscp-resolution), [7.9](#79-acl-disable-trim), +[13.1](#131-integration-status)). The delivered counters are switch-global +plugin summaries; the port/queue increments shown are target SAI attribution +([7.11](#711-counters)). + ### 6.3 Component Responsibilities | Component | Responsibility | |---|---| | VPP admission integration | Software per-`{port, queue}` token-bucket admission shim on the `interface-output` arc that turns a rate-limited (blocked) queue into a recoverable admission failure; generic, carrying no packet-trimming SAI policy | | VPP packet-trim plugin | Eligibility lookup, truncation, DSCP rewrite, static trim-queue retry with one-shot `interface-output-arc-end` re-injection, counters, binary API, and debug CLI | -| SAI-VPP | Translate the packet-trimming SAI attributes and object relationships onto the plugin (global policy, per-queue eligibility from the buffer profile, scheduler rate/capacity, TC-to-DSCP map) and advertise the capability truthfully — narrowing the advertised trim enum values to the modes the datapath honors (`DSCP_VALUE`, `STATIC`) so `SWITCH_TRIMMING_CAPABLE=true` is honest for the symmetric core. Sourcing trim counters through `getStatsExt` is deferred ([7.11](#711-counters)) | +| SAI-VPP | Translate the delivered symmetric policy onto the plugin: global size/DSCP/static queue, per-queue eligibility from the buffer profile, binary blocked/unlimited state from the scheduler, and a switch-wide DSCP-to-queue table. Advertise only `DSCP_VALUE` and `STATIC`, while leaving SAI trim-counter sourcing and the asymmetric/ACL modes deferred | | sonic-swss | No VPP-specific change expected; the generic packet-trimming orchestration and capability publication already function on VPP | -| sonic-mgmt | No suite code change: the `skip_if_packet_trimming_not_supported` capability fixture gates the suite on `SWITCH_TRIMMING_CAPABLE` (`true` on VPP, so it runs), and conditional_mark skips the out-of-scope cases on `asic_type == vpp` ([14.3](#143-enablement-gating)) | +| sonic-mgmt | Make the test setup self-sufficient on the minimal VPP config, clean up test-created buffer bindings/profiles, exempt VPP from the hardware-SKU gate, and skip deferred files/cases on `asic_type == vpp` ([14.2](#142-system-tests), [14.3](#143-enablement-gating)) | ## 7. High-Level Design @@ -317,16 +340,15 @@ queue's software token bucket: | Eligible queue, bucket admits | within rate | continue the arc (normal egress) | | Eligible queue, bucket rejects | recoverable admission failure | divert to the trim action node ([7.4](#74-truncation-and-header-handling)) | -The token bucket is driven by generic rate/capacity inputs only, supplied by -SAI-VPP from the queue's scheduler and buffer profile. A queue with no effective -rate limit (a scheduler `PIR` of `0`, SONiC's "unlimited") keeps the bucket -permanently full, so its traffic is always admitted and normal forwarding is -never perturbed. A queue whose scheduler imposes a nonzero `PIR` — the mechanism -SONiC's blocking scheduler (`PIR=1`) uses to hold a data-plane queue closed — -empties the bucket, so every eligible packet on that queue hits a real admission -failure and is trimmed. The shim recognizes no packet-trimming scheduler names or -test constants; it is pure rate/capacity accounting, so it never carries SONiC -SAI policy and never perturbs a queue that is not trim-eligible. +The plugin API and token-bucket implementation accept generic rate/capacity +inputs. The delivered SAI-VPP translation deliberately binarizes them: a queue +with no effective rate limit receives `UINT64_MAX` rate and capacity (always +admit), while any nonzero scheduler `PIR` — including the +`SCHEDULER_BLOCK_DATA_PLANE` profile's `PIR=1` — receives zero rate and capacity +(always reject). The attached buffer profile controls only whether the queue is +trim-eligible; its size does not set the bucket depth in this increment. The +plugin recognizes no scheduler names or test constants, and non-eligible queues +are never policed. Because the shim is a normal feature-arc node, no VPP core change is required for the KVM DPDK-virtio backend. Backends that cannot be policed on the @@ -339,18 +361,21 @@ The VPP plugin maintains: - One global packet-trimming configuration. - One eligibility record per effective egress-port/original-queue binding. -- One TC-to-DSCP map reference per egress port for asymmetric mode. -- Switch, port, and queue counters. +- One switch-wide DSCP-to-queue table used for original-queue classification. +- Three switch-global summary counters: admission failures, trimmed packets + sent, and trimmed packets dropped. + +Per-port TC-to-DSCP state for `FROM_TC` and per-port/per-queue counter +attribution are target behavior, not delivered state. The global configuration contains: | Field | Meaning | |---|---| | `trim_size` | Maximum number of bytes retained | -| `dscp_mode` | Direct configured value or `FROM_TC` | +| `dscp_mode` | Stored DSCP mode; only direct `DSCP_VALUE` is honored | | `dscp_value` | Symmetric DSCP value | -| `trim_tc` | TC used for asymmetric egress-map lookup | -| `queue_mode` | Static in the initial implementation | +| `trim_tc` | Stored TC for the deferred asymmetric egress-map lookup | | `trim_queue` | Queue index used for the shortened packet | An eligibility record is active only when the queue's effective buffer profile @@ -369,14 +394,14 @@ The plugin diverts the packet to the trim action node only when the global configuration is valid and the original queue is trim-eligible; otherwise the packet stays on the normal arc (admitted) or follows the existing drop path. Re-entry is prevented **structurally** rather than with a per-buffer flag: the -trimmed copy is re-injected at `interface-output-arc-end`, past the admission +trimmed packet is re-injected at `interface-output-arc-end`, past the admission feature, so it can never re-enter admission and be trimmed twice (see [7.6](#76-static-trim-queue-and-retry)). This avoids depending on `opaque2` being cleared on buffer recycle, which VPP does not guarantee. -ACL-driven trim suppression (`SAI_ACL_ENTRY_ATTR_ACTION_PACKET_TRIM_DISABLE`, -[7.9](#79-acl-disable-trim)) sets a per-buffer flag that this decision also -honors when that path is enabled. +The target ACL-driven trim-suppression path would add a per-buffer flag to this +decision. It is not present in the delivered node +([7.9](#79-acl-disable-trim)). ### 7.4 Truncation and Header Handling @@ -400,8 +425,8 @@ rides onto the wire — a 5000-byte frame trimmed to 256 was observed egressing 256 + 952 = 1208 bytes. The trim path fixes this by clearing `VLIB_BUFFER_EXT_HDR_VALID` on the severed segment, forcing the mbuf header to be rebuilt cleanly so only the retained bytes are transmitted. This case is covered -end to end by `test_packet_size_after_trimming` (jumbo 5000 → 4084 and, with a -larger default packet, 3000 → 256). +end to end by `test_packet_size_after_trimming` (jumbo 5000 → 4084 and a second +multi-segment case, 3000 → 256). The trim path deliberately preserves the original L3/L4 length fields as the congestion signal — it does **not** recalculate: @@ -428,11 +453,17 @@ while preserving ECN bits. | Mode | Resolution | |---|---| | `DSCP_VALUE` | Use the global configured `dscp_value` | -| `FROM_TC` | Use `trim_tc` to look up DSCP in the TC-to-DSCP map attached to the selected egress port | - -If asymmetric mode has no usable egress map entry, the trim operation fails, -the packet is dropped, and a configuration/runtime error counter is incremented. -SAI-VPP should reject configurations that are invalid at programming time. +| `FROM_TC` (deferred) | Use `trim_tc` to look up DSCP in the TC-to-DSCP map attached to the selected egress port | + +The delivered datapath implements **only** the symmetric `DSCP_VALUE` mode and +always rewrites with the global `dscp_value`; asymmetric `FROM_TC` is deferred +and omitted from the advertised DSCP-resolution enum +([7.12](#712-capability-advertisement), [13.1](#131-integration-status)), so +orchagent never programs it. The `FROM_TC` behavior below is the target design +for a future increment: if asymmetric mode has no usable egress map entry, the +trim operation fails, the packet is dropped, and a configuration/runtime error +counter is incremented. SAI-VPP should reject configurations that are invalid at +programming time. ### 7.6 Static Trim Queue and Retry @@ -441,18 +472,18 @@ The initial implementation uses The trim action node: -1. Rewrites the DSCP of the copy ([7.5](#75-dscp-resolution)) and truncates it +1. Rewrites the packet DSCP ([7.5](#75-dscp-resolution)) and truncates it ([7.4](#74-truncation-and-header-handling)). -2. Steers the copy to the configured static `trim_queue` on the **same** physical +2. Steers the shortened packet to the configured static `trim_queue` on the **same** physical egress interface (`VLIB_TX` is unchanged) and runs that queue's token bucket. -3. If the trim queue admits, transmits the copy by enqueuing it directly to +3. If the trim queue admits, transmits the packet by enqueuing it directly to `interface-output-arc-end` — the node the `interface-output` feature arc terminates at — so it goes straight to the port TX, *past* the admission - feature. If the trim queue rejects (it is itself congested), the copy is + feature. If the trim queue rejects (it is itself congested), the packet is dropped. -Enqueuing the transmitted copy to the arc end is what makes the one-shot -guarantee **structural**: a trimmed copy never re-enters the admission feature, +Enqueuing the transmitted packet to the arc end is what makes the one-shot +guarantee **structural**: a trimmed packet never re-enters the admission feature, so it can never be trimmed a second time and no per-buffer "already trimmed" flag is needed. This is deliberately more robust than a buffer flag, because VPP does not zero `opaque2` on buffer recycle, so a flag could survive into an unrelated @@ -466,12 +497,14 @@ For a LAG egress, VPP bond selection occurs before queue admission. The admission provider records the selected physical member. The trim retry uses that member directly instead of re-entering bond hashing, which: -- Keeps original-queue and trim-queue counters on one physical port. +- Keeps the original and trimmed packet on one physical port; future + per-port/per-queue counter sourcing can therefore use that member. - Avoids moving a congestion notification to a different LAG member. - Prevents a second flow-hash decision from changing packet ordering. -The logical LAG identity remains available for diagnostics, but SAI port and -queue trim counters are attributed to the physical member and its queues. +The delivered plugin records the selected physical `VLIB_TX` member. SAI +port/queue trim counters are not sourced yet; the target attribution is the +physical member and its queues. ### 7.8 Buffer Profile and Queue Relationships @@ -488,17 +521,23 @@ front-panel port that currently exists, including ports created after the first trim-relevant attribute was observed, and a late buffer-profile binding is picked up by the next recompute rather than being missed. -The update sequence is: - -1. Validate the referenced SAI objects. -2. Program the new VPP eligibility. -3. Update stored SAI object state only after VPP accepts the change. - -Removing or replacing a buffer profile first disables affected eligibility, -then removes the VPP policy state. +On a trim-relevant set, SAI-VPP first commits the virtual object attribute, then +rebuilds and pushes the complete eligibility state. A push failure is returned +to orchagent for retry; the committed attribute is retained. On create, the +object is committed and the trim refresh is best effort. Normal orchagent remove +sequencing first unbinds a profile or scheduler through a set (which refreshes +eligibility), then removes the now-unreferenced object; direct object removal +does not itself trigger a trim refresh ([7.13](#713-update-and-remove-ordering)). ### 7.9 ACL Disable Trim +> **Status: deferred (target design).** The ACL trim-disable path is not +> implemented in this increment; SAI-VPP accepts and stores the ACL objects as +> virtual state but does not yet program a per-buffer trim-disable flag into the +> VPP datapath. The `sonic-mgmt` `test_acl_action_with_trimming` case is skipped +> on `vpp` ([14.3](#143-enablement-gating)). The design below is the target for a +> future increment ([13.1](#131-integration-status)). + SAI-VPP extends the existing VPP ACL translation for `SAI_ACL_ENTRY_ATTR_ACTION_PACKET_TRIM_DISABLE`. @@ -506,41 +545,41 @@ A matching ACL rule sets a per-buffer `trim_disabled` flag. The flag is metadata only and does not change the packet action by itself. If original-queue admission later fails, trim policy observes the flag and follows normal drop behavior. -ACL rule create, update, and remove operations program VPP before stored SAI -state is committed. +The target implementation must use the same explicit failure propagation and +retry/convergence model as other trim-relevant updates. ### 7.10 Scheduler and Capacity Inputs -The admission provider requires a controllable rate and queue capacity for the -KVM dataplane. - -SAI-VPP translates the subset of scheduler and buffer configuration required by -the selected provider: +The plugin admission API supports a byte rate and byte capacity, but the +delivered SAI-VPP translation does not model proportional scheduling or derive a +capacity from the buffer profile. It resolves the queue's effective scheduler +(direct queue binding first, then the parent leaf scheduler group used by +QosOrch) and programs one of two states: -- The effective egress scheduling rate attached to a queue. -- The effective queue capacity derived from its buffer profile. -- Queue-to-port and queue-index relationships. +| Effective scheduler | Programmed rate | Programmed capacity | Behavior | +|---|---:|---:|---| +| No scheduler or `MAX_BANDWIDTH_RATE=0` | `UINT64_MAX` | `UINT64_MAX` | Always admit | +| Any nonzero `MAX_BANDWIDTH_RATE` | `0` | `0` | Always reject when trim-eligible | -This translation is generic but binarized to the two states the supported -topology exercises: a queue whose scheduler imposes no rate limit (`PIR=0`, -SONiC's "unlimited") is mapped to an always-admitting bucket, and a queue whose -scheduler imposes any nonzero `PIR` — the form SONiC's -`SCHEDULER_BLOCK_DATA_PLANE` profile uses to close a data-plane queue — is mapped -to a bucket that cannot admit, producing the recoverable admission failure that -drives trim. Modeling a proportional sub-line-rate `PIR` (a partial rate limit -rather than open/closed) is future work; the KVM testbed only ever drives a -data-plane queue as unlimited or closed. +The buffer profile contributes only +`PACKET_ADMISSION_FAIL_ACTION=DROP_AND_TRIM` eligibility. Modeling a +proportional sub-line-rate `PIR`, actual queue occupancy, or buffer-profile +capacity as token-bucket depth is future work. Full SAI scheduler hierarchy, shared-buffer accounting across ports, headroom, and hardware-specific threshold behavior remain outside this design. ### 7.11 Counters -The VPP plugin maintains packet-trim counters in the dataplane and exposes them -through the binary API (`sonic_ext_trim_counters_get`). The **target** design -maps them onto the existing SAI statistics and serves them from `getStatsExt`, -kept at three scopes so the SAI switch, port, and queue stat IDs can all be -sourced: +The VPP plugin currently maintains three switch-global summary counters and +exposes them through `sonic_ext_trim_counters_get` and `show sonic-ext trim`: + +- `trim_admit_fail` — eligible original-queue admission failures. +- `trim_sent` — shortened packets transmitted. +- `trim_drop` — shortened packets rejected by the trim queue. + +The **target** design adds the per-port/per-queue accounting needed to map these +events onto the existing SAI statistics and serve them from `getStatsExt`: | Event | Counter attribution | |---|---| @@ -551,22 +590,19 @@ sourced: Counter reads must be monotonic and safe while workers update them, and a clear operation resets only the requested scope and statistics. -The exact queue-index attribution must match the `sonic-mgmt` counter +The target queue-index attribution must match the `sonic-mgmt` counter assertions: the suite verifies that the switch-level trim-sent counter equals the sum of the per-port counters and that each port's counter is consistent with its per-queue counters, and the feature-toggle test reads the queue-level `trimpacket` counter on the *trim* queue index (`UC` + configured trim queue). -The plugin's per-`{port, queue}` counter model is defined to satisfy those -cross-checks directly. - -**Delivered scope (initial enablement).** The plugin maintains the counters and -serves them over the binary API, but SAI-VPP does **not** yet source them through -`getStatsExt` — `SwitchVpp::getStatsExt` still delegates trim stat IDs to the -shared virtual-switch base, which returns zero. SAI stat sourcing is deferred -(see [13.1](#131-integration-status)), and the `sonic-mgmt` trim-counter cases -are skipped on `vpp` via conditional_mark until it lands. Raising the base's -zero-valued trim stats to real plugin values is future work, not part of this -enablement. + +**Delivered scope (initial enablement).** The global plugin summaries are +available through the binary API/CLI, but SAI-VPP does **not** source them +through `getStatsExt`, and the plugin does not yet maintain the per-port and +per-queue breakdown required by the SAI contract. `SwitchVpp::getStatsExt` +delegates trim stat IDs to the shared virtual-switch base, which returns zero. +SAI stat sourcing and scoped accounting are deferred, and the `sonic-mgmt` +trim-counter cases are skipped on `vpp`. ### 7.12 Capability Advertisement @@ -595,8 +631,9 @@ the advertised *enum values* to exactly what the software admission shim honors: Because the capability stays `true`, the symmetric `packet_trimming` PTF suite runs on sonic-vpp. Cases that exercise unimplemented behavior — asymmetric per-port DSCP (`FROM_TC`), `DYNAMIC` queue resolution, ACL disable-trim, trim -counters, port mirroring with trim, and reload/reboot persistence — are deferred -in `sonic-mgmt` through conditional_mark skips keyed on `asic_type == vpp` +counters, GCU config validation, feature/port toggles, port mirroring, SRv6, and +reload/reboot persistence — are deferred in `sonic-mgmt` through +conditional_mark skips keyed on `asic_type == vpp` ([14.3](#143-enablement-gating)), rather than by gating the switch capability to `false`. This keeps the supported symmetric core enabled while excluding the out-of-scope cases from the run. @@ -607,21 +644,27 @@ covered directly by a SAI-VPP unit test ([14.1](#141-unit-and-component-tests)). ### 7.13 Update and Remove Ordering -For create or set operations: - -1. Validate SAI input and object references. -2. Build the complete replacement VPP policy. -3. Apply it to VPP. -4. Commit the SAI virtual object state. +For set operations on a trim-relevant object, SAI-VPP: -For remove operations: +1. Receives the metadata-validated SAI attribute and resolves available object + references. +2. Commits the SAI virtual object state. +3. Rebuilds the affected VPP policy from the committed state (the global policy, + or the full per-`{port, queue}` admission/eligibility set) and pushes it. +4. If the VPP push fails, returns the failure so orchagent retries the set. The + committed SAI state is intentionally left in place; because each push is a + full idempotent re-send, the retry re-pushes the same state and converges. The + switch-global trim attributes program VPP first and then commit, but likewise + surface a push failure to the caller. -1. Disable or detach dependent VPP policy. -2. Remove the VPP object or mapping. -3. Remove the SAI virtual object state. +For create operations, the SAI object is created unconditionally and a trim +re-program failure is **not** propagated (the object exists regardless); the +subsequent set path is where a dataplane push failure is reported. -If VPP programming fails, the SAI operation fails and the previous stored state -is retained. +For remove operations, the generic `remove_internal` path removes only the +virtual object state and does not invoke a trim refresh. Normal orchagent +sequencing must first unbind trim-relevant references through a set operation, +which refreshes the VPP policy, and then remove the unreferenced object. ## 8. SAI API Mapping @@ -630,11 +673,11 @@ is retained. | SAI attribute | VPP mapping | |---|---| | `SAI_SWITCH_ATTR_PACKET_TRIM_SIZE` | Global `trim_size` | -| `SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE` | Global DSCP mode | +| `SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE` | Stored globally; only `DSCP_VALUE` is advertised and honored | | `SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_VALUE` | Symmetric DSCP value | -| `SAI_SWITCH_ATTR_PACKET_TRIM_TC_VALUE` | Asymmetric trim TC | -| `SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE` | Accept `STATIC`; reject `DYNAMIC` with `SAI_STATUS_NOT_SUPPORTED` and omit it from the advertised enum | -| `SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_INDEX` | Global static trim queue | +| `SAI_SWITCH_ATTR_PACKET_TRIM_TC_VALUE` | Stored for the deferred asymmetric path; not used by the delivered trim node | +| `SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE` | Accept `STATIC`; `DYNAMIC` is omitted from the advertised enum ([7.12](#712-capability-advertisement)) so orchagent never programs it. A stored `DYNAMIC` value is not honored by the datapath (an explicit set is accepted as a no-op) | +| `SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_INDEX` | Global static trim queue; the plugin stores the low three bits (`queue & 7`). The validated configuration uses queue 6 | ### 8.2 Buffer Profile and ACL @@ -642,12 +685,18 @@ is retained. |---|---| | `SAI_BUFFER_PROFILE_ATTR_PACKET_ADMISSION_FAIL_ACTION=DROP` | Disable trim eligibility for queues using the profile | | `SAI_BUFFER_PROFILE_ATTR_PACKET_ADMISSION_FAIL_ACTION=DROP_AND_TRIM` | Enable trim eligibility for queues using the profile | -| `SAI_ACL_ENTRY_ATTR_ACTION_PACKET_TRIM_DISABLE` | Set per-buffer trim-disable metadata for matching packets | +| `SAI_ACL_ENTRY_ATTR_ACTION_PACKET_TRIM_DISABLE` | **Deferred** — the ACL trim-disable path is not implemented in this increment ([7.9](#79-acl-disable-trim), [13.1](#131-integration-status)); the corresponding `sonic-mgmt` case is skipped on `vpp` | ### 8.3 Statistics -The implementation maps the existing switch, port, and queue trim statistics, -including: +The trim statistics below are listed as supported by the shared virtual-switch +stats capability, so `sonic-swss` reads them. The VPP plugin maintains the +global summary counters in the dataplane and exposes them over its binary API +and debug CLI, but **SAI sourcing through `getStatsExt` is deferred** +([7.11](#711-counters), +[13.1](#131-integration-status)): trim stat IDs currently delegate to the shared +virtual-switch base, which returns zero, and the `sonic-mgmt` trim-counter cases +are skipped on `vpp` until real sourcing lands. - `SAI_SWITCH_STAT_DROPPED_TRIM_PACKETS` - `SAI_SWITCH_STAT_TX_TRIM_PACKETS` @@ -666,71 +715,79 @@ This design introduces no new CLI, Config DB, APP DB, State DB, YANG, REST, or gNMI schema. SONiC-VPP uses the configuration and capability fields defined by the generic packet-trimming HLD. -The VPP plugin adds diagnostic commands for: +The VPP plugin adds `show sonic-ext trim`, which reports: -- Current global trim configuration. -- Effective eligible egress queues. -- Port TC-to-DSCP map resolution. -- Admission-provider status. -- Switch, port, and queue trim counters. +- The current global trim configuration. +- Configured per-port/per-queue admission buckets, including eligibility, + binary rate/capacity, and current tokens. +- The three global plugin counters (`sent`, `drop`, and `admit-fail`). + +The CLI does not expose per-port TC-to-DSCP resolution or SAI-scoped counters in +this increment. These commands are for serviceability and do not replace the standard SONiC CLI. ## 10. Warmboot and Fastboot -Packet-trimming policy is rebuilt from normal SONiC configuration replay. +Reload, warmboot, and fastboot persistence are **not validated in this +increment**; `test_trimming_with_reload_and_reboot` is skipped on `vpp`. -- Global configuration, object relationships, QoS maps, ACL rules, and queue - eligibility are reprogrammed through SAI. -- Transient queue occupancy and per-buffer metadata are not restored. -- Trim counters follow the existing SAI-VPP counter persistence behavior. -- A packet in the trim retry path during restart may be dropped. +The expected replay behavior is that switch attributes, queue/profile bindings, +scheduler bindings, and QoS maps trigger the same full-state programming used +at runtime. ACL trim-disable state is deferred and therefore is not rebuilt. +Plugin counters and token-bucket state are process-local and reset when VPP +restarts; no SAI counter persistence is provided. A packet in flight during a +restart may be dropped. -The feature adds no sleeps, file I/O, or CPU-heavy processing to the boot -critical path when unused. Initialization creates only the plugin state and -capability check. Fastboot behavior is otherwise unchanged. +The implementation adds no sleeps or file I/O to the boot path. Broader +warmboot/fastboot behavior remains future validation work. ## 11. Memory and Performance -Persistent state is proportional to configured ports, queues, buffer-profile -bindings, and QoS maps: +The per-port state is a vector indexed by VPP `sw_if_index`, with eight fixed +queue slots per entry, plus one switch-wide DSCP-to-queue table: ```text -O(number of ports * queues per port + configured maps + ACL policy) +O((maximum programmed sw_if_index + 1) * SONIC_EXT_TRIM_MAX_QUEUES + 64) ``` -The per-buffer trim metadata (the resolved original queue, and the ACL -trim-disable flag when that path is used) reuses existing VPP buffer opaque -space; the one-shot guarantee is structural (arc-end re-injection), not a stored -flag. The dataplane performs no heap allocation. +The per-buffer trim metadata currently stores only the resolved original queue +in existing VPP buffer opaque space. The target ACL trim-disable flag is not +implemented. The one-shot guarantee is structural (arc-end re-injection), not a +stored flag, and the dataplane performs no per-packet heap allocation. -When trimming is disabled or no eligible profile is bound, the additional -dataplane cost is one predictable eligibility check at the admission-failure -path. Packets admitted to their original queue do not enter packet mutation. +When no eligible profile is bound, the admission feature is disabled on that +port, so there is no per-packet feature-node cost. If eligible queues remain but +the global trim policy is disabled, the node executes one early configuration +check and bypasses. Packets admitted to their original queue do not enter packet +mutation. -The software admission shim, if required for the KVM backend, must use bounded -queues and worker-local state. It must not introduce unbounded buffering or a -global lock in the packet path. +The software admission shim does not buffer packets; it only accounts byte +credits and immediately admits or rejects each buffer. Each `{port, queue}` has +one shared bucket with no synchronization. This is safe for the supported +single-worker topology; per-worker buckets or atomic accounting are deferred. ## 12. Error Handling | Error case | Handling | |---|---| -| Invalid trim size, DSCP, TC, or queue index | Return `SAI_STATUS_INVALID_PARAMETER`; do not update VPP or stored SAI state | -| Unsupported dynamic queue mode | Return `SAI_STATUS_NOT_SUPPORTED` | -| Referenced queue, port, buffer profile, or QoS map is missing | Return an appropriate SAI object/reference failure | -| VPP plugin or admission provider is unavailable | Keep trimming capability false and reject trimming configuration | -| VPP binary API update fails | Return failure and retain previous SAI object state | -| Asymmetric DSCP cannot be resolved at runtime | Drop the trim packet and increment a diagnostic error counter | +| Out-of-range scalar values reaching the vendor layer | The vendor code performs no additional rejection: trim size is narrowed to `u16`, DSCP is masked to six bits by the plugin, and the static trim queue is masked to three bits. The supported control path programs valid values (size 256/4084, DSCP 48, queue 6) | +| Queue is multicast or has an out-of-range unicast index | Multicast queues are skipped by `SAI_QUEUE_ATTR_TYPE` so a colliding multicast index cannot overwrite the corresponding unicast admission slot. Unicast indices at or above `SONIC_EXT_TRIM_MAX_QUEUES` (8) are skipped as SUCCESS. Every eligible lossy queue in the supported configuration is unicast and below the cap ([13.2](#132-design-limitations)) | +| `DYNAMIC` queue-resolution mode | Omitted from the advertised enum so orchagent never programs it; a stored value is not honored by the datapath ([7.12](#712-capability-advertisement)) | +| Queue attributes or bindings are not present during replay | Skip the incomplete queue for that refresh; a later trim-relevant set triggers another full recompute | +| No front-panel port currently has both DSCP-to-TC and TC-to-queue maps | Keep the plugin's last-good switch-wide DSCP-to-queue table rather than replacing it with an all-zero table | +| VPP plugin/API programming is unavailable | Capability advertisement is not dynamically probed. A set reports the VPP API failure for orchagent retry; create refresh remains best effort | +| VPP binary API update fails on a set | Commit the SAI object state and return the failure so orchagent retries; the next retry re-pushes the same full (idempotent) policy ([7.13](#713-update-and-remove-ordering)) | +| Asymmetric DSCP cannot be resolved at runtime (deferred `FROM_TC`) | Target design: drop the trim packet and increment a diagnostic error counter. Not reachable in this increment — only symmetric `DSCP_VALUE` is advertised and honored ([7.5](#75-dscp-resolution)) | | Egress metadata is missing at admission failure | Use the normal drop path; do not guess an interface or queue | -| Trim queue rejects the packet | Drop once, increment trim-drop counters, and do not retry | -| Counter read fails | Return the SAI failure; do not return a success-shaped zero | +| Trim queue rejects the packet | Drop once, increment the plugin trim-drop counter, and do not retry | +| SAI trim counter read | Trim stat IDs currently delegate to the shared virtual-switch base and return zero; SAI sourcing through `getStatsExt` is deferred ([7.11](#711-counters)) | ## 13. Limitations and Future Work ### 13.1 Integration status -The datapath in [6](#6-architecture)–[9](#9-behavioral-details) — the software +The datapath in [6](#6-architecture)–[9](#9-configuration-and-management) — the software admission shim, the trim action node, the binary API, and the debug CLI — is implemented in the `sonic_ext` plugin and validated on standalone VPP (happy-path trim plus the recycled-buffer regression that confirms the arc-end @@ -746,25 +803,26 @@ trim`) after pushing configuration through CONFIG_DB: queue↔buffer-profile binding. **Validated:** with `egress_lossy_profile` set to `DROP_AND_TRIM`, VPP reports the lossy queues (`0,1,2,5,6`) eligible and the lossless queues (`3,4,7`) bypassed on every front-panel port. -2. **Scheduler rate and buffer-profile capacity** map onto the admission shim's - token bucket — unlimited when the queue has no rate limit, closed when a - blocking scheduler holds it ([7.10](#710-scheduler-and-capacity-inputs)). - **Validated:** unlimited eligible queues report an always-admitting bucket in - VPP; the closed-queue branch is the one the `packet_trimming` suite's blocking - scheduler drives to force the trim. -3. **The global trim policy and DSCP-to-queue table** are pushed and confirmed in - VPP. **Validated:** `show sonic-ext trim` reports `size=256, dscp=48 - (symmetric), queue=6`. +2. **Scheduler state** maps onto the admission shim as binary unlimited/blocked; + the buffer profile controls eligibility but does not provide bucket depth + ([7.10](#710-scheduler-and-capacity-inputs)). **Validated:** unlimited + eligible queues report `UINT64_MAX` rate/capacity and always admit; a queue + with any nonzero scheduler `PIR` reports zero rate/capacity and drives the + admission-failure branch. +3. **The global trim policy and switch-wide DSCP-to-queue table** are pushed and + confirmed in VPP. **Validated:** `show sonic-ext trim` reports `size=256, + dscp=48 (symmetric), queue=6`. The remaining integration work, tracked by the feature story, is: 4. Source the switch/port/queue trim counters through `getStatsExt` ([7.11](#711-counters)) instead of returning the base's zero values, and enable the deferred `sonic-mgmt` trim-counter cases. -5. Extend the datapath to the deferred modes — asymmetric per-port DSCP - (`FROM_TC`), `DYNAMIC` queue resolution, ACL disable-trim, port mirroring with - trim, and reload/reboot persistence — and remove the corresponding - conditional_mark skips ([14.3](#143-enablement-gating)). +5. Complete or validate the deferred surfaces — asymmetric per-port DSCP + (`FROM_TC`), `DYNAMIC` queue resolution, ACL disable-trim, GCU config, + feature/port toggles, port mirroring, SRv6, and reload/reboot persistence — + and remove the corresponding conditional_mark skips + ([14.3](#143-enablement-gating)). Capability is advertised as supported (`SWITCH_TRIMMING_CAPABLE=true`) and the symmetric `packet_trimming` suite is enabled now that its end-to-end PTF cases @@ -775,16 +833,19 @@ pass on the `t1-lag` testbed; the out-of-scope cases above remain skipped on - Dynamic trim-queue resolution is not supported in the initial implementation; only `STATIC` queue resolution is advertised and honored. +- The plugin masks the configured static trim queue to the range 0–7. The + supported configuration uses queue 6; explicit values above 7 are not rejected + by the vendor path. - The admission shim models only the token-bucket behavior needed to produce a recoverable admission failure; it is not full hardware-MMU or multi-level HQoS emulation. -- SAI-VPP programs eligibility to the admission shim only for queue indices below - the plugin's `SONIC_EXT_TRIM_MAX_QUEUES` (8). sonic-vpp creates additional - per-port unicast/multicast queue objects at indices ≥ 8; these are never - trim-eligible in the supported configuration — the trim queue and every - eligible lossy queue are below the cap — so they are intentionally not pushed - to the shim, which also avoids per-queue programming errors for out-of-range - indices. +- SAI-VPP programs only unicast (or `ALL`) queue objects into the admission + shim. Multicast queues are skipped by type regardless of index so a colliding + multicast index cannot overwrite the same-indexed unicast admission slot. + Unicast queue indices at or above the plugin's + `SONIC_EXT_TRIM_MAX_QUEUES` (8) are also skipped. The configured trim queue + and every eligible lossy queue in the supported topology are unicast and below + the cap. - Eligibility is recomputed on each trim-relevant attribute change rather than cached at initialization ([7.8](#78-buffer-profile-and-queue-relationships)), so a binding that lands after an earlier recompute (for example while buffer @@ -823,10 +884,10 @@ framework tests and SAI-VPP unit tests: preservation; ineligible buffer profiles; ACL trim disable; original-queue and trim-queue admission failure; one-shot retry behavior; physical and LAG-member egress attribution; chained-buffer truncation; counter read and clear behavior. -- SAI-VPP: capability query results; switch attribute validation and update +- SAI-VPP: capability query results; switch attribute handling and update ordering; buffer-profile-to-queue relationship changes; QoS map create, replace, and remove; ACL action create, update, and remove; VPP failure - rollback; switch, port, and queue statistic mapping. + propagation/retry; switch, port, and queue statistic mapping. **Delivered in this enablement.** The datapath itself was validated on standalone VPP and on the `t1-lag` dev VM by reading the plugin state directly (`show @@ -844,8 +905,9 @@ decision logic that gates the enablement: edits. - `getLagMemberEgressDisableAction` — pre-existing LAG-member egress logic. -The remaining target coverage (VPP framework tests, counter/rollback/QoS-map SAI -tests) is future work tracked with the deferred datapath modes +The remaining target coverage (VPP framework tests and +counter/failure-propagation/QoS-map SAI tests) is future work tracked with the +deferred datapath modes ([13.1](#131-integration-status)). ### 14.2 System Tests @@ -853,7 +915,8 @@ tests) is future work tracked with the deferred datapath modes The packet-trimming suite is enabled on the VPP `t1-lag` KVM topology in stages: -1. Configuration and capability tests. +1. Runtime configuration and capability tests (not the deferred GCU config + modules). 2. Symmetric packet size and DSCP tests. 3. Asymmetric `FROM_TC` tests. 4. Feature and port-state toggles. @@ -863,8 +926,9 @@ stages: 8. Reload and reboot persistence. 9. Mirror and SRv6 interactions. -Regression coverage includes normal forwarding, LAG hashing and failover, QoS -mapping, ACL actions, and existing VPP plugin tests. +Target regression coverage includes normal forwarding, LAG hashing and +failover, QoS mapping, ACL actions, and the existing SONiC-VPP regression +suites. **Validation status (2026-07-30).** Stages 1–2 are validated end to end on the live `vms-kvm-vpp-t1-lag` testbed with the delivered `sonic_ext` datapath and the @@ -878,13 +942,14 @@ SAI-VPP capability raised to `true`: | `test_dscp_remapping_after_trimming` (trimmed and small-untrimmed) | pass | The jumbo case exercised the multi-segment DPDK mbuf fix in -[7.4](#74-truncation-and-header-handling). Stages 3–9 (asymmetric `FROM_TC`, -counters, ACL disable-trim, reload/reboot persistence, mirror, SRv6) remain -out of scope for this increment and are tracked as future work in +[7.4](#74-truncation-and-header-handling). The asymmetric module, both GCU +config modules, counters, ACL disable-trim, feature/port toggles, reload/reboot +persistence, mirror, and SRv6 remain out of scope for this increment and are +tracked as future work in [13.1](#131-integration-status). **Test-layer self-sufficiency (2026-07-30).** The suite now runs unattended on -VPP with no manual `redis-cli` preparation. Two `sonic-mgmt` gaps surfaced on the +VPP with no manual `redis-cli` preparation. Three `sonic-mgmt` gaps surfaced on the minimal `Force10-S6000` config and were closed in the test helpers: - The per-block-queue `queue{1,3}_{uplink,downlink}_lossy_profile` BUFFER_PROFILEs @@ -896,8 +961,11 @@ minimal `Force10-S6000` config and were closed in the test helpers: `BUFFER_QUEUE||` reference is not removed on platforms whose base config lacks it (VPP). Teardown now clears those references before deleting `trim_queue_test_profile`, so post-test YANG validation stays clean. +- The blocking-queue setup can also create lossy buffer profiles and + `BUFFER_QUEUE` bindings on VPP. Teardown records those bindings, removes them, + and deletes only profiles created by the fixture before restoring the backup. -With both fixes the three in-scope cases pass with zero setup/teardown errors. +With these fixes the three in-scope cases pass with zero setup/teardown errors. ### 14.3 Enablement Gating @@ -934,6 +1002,8 @@ rule is updated so exactly the three in-scope symmetric cases run on VPP: behavior. - The deferred cases are skipped on VPP with per-test / per-file rules keyed on `asic_type in ['vpp']`: the whole `test_packet_trimming_asymmetric.py` module, + both `test_packet_trimming_config_asymmetric.py` and + `test_packet_trimming_config_symmetric.py`, and the symmetric `test_acl_action_with_trimming`, `test_trimming_with_srv6`, `test_stability_during_feature_toggles`, `test_trimming_during_port_admin_toggle`, @@ -967,17 +1037,18 @@ trim action on top of it. The former open question — whether the backend could supply recoverable admission directly or needed a software shim — is answered: the shim approach is implemented and validated on standalone VPP. -The remaining items are integration details, tracked by the feature story and -resolved during end-to-end validation ([13.1](#131-integration-status)): - -1. **Resolved.** SAI-VPP maps the SONiC scheduler `PIR` onto the shim's token - bucket as open/closed — `PIR=0` (unlimited) admits, any nonzero `PIR` (the - `SCHEDULER_BLOCK_DATA_PLANE` close) rejects — with buffer-profile capacity as - the bucket depth ([7.10](#710-scheduler-and-capacity-inputs)). A proportional - sub-line-rate `PIR` is not modeled. -2. Confirm the queue-index attribution expected by the `sonic-mgmt` counter - assertions (which read `trimpacket` on the trim-queue index) against the - plugin's per-`{port, queue}` counters and `getStatsExt` sourcing +The remaining integration details and their current status are tracked by the +feature story ([13.1](#131-integration-status)): + +1. **Resolved.** SAI-VPP maps the SONiC scheduler onto the shim as open/closed: + no effective rate limit admits, while any nonzero + `MAX_BANDWIDTH_RATE` (including `SCHEDULER_BLOCK_DATA_PLANE`) programs a + zero-rate, zero-capacity bucket and rejects. The buffer profile controls + eligibility only. A proportional sub-line-rate `PIR` and real buffer capacity + are not modeled ([7.10](#710-scheduler-and-capacity-inputs)). +2. Add the target per-`{port, queue}` counters and `getStatsExt` sourcing, then + confirm the queue-index attribution expected by the `sonic-mgmt` counter + assertions (which read `trimpacket` on the trim-queue index) ([7.11](#711-counters)). 3. **Resolved.** The [7.12](#712-capability-advertisement) enum-narrowing override is in place: `SWITCH_TRIMMING_CAPABLE` is advertised `true` for the From 200f26141b21e1142228a769c514098e26693322 Mon Sep 17 00:00:00 2001 From: Aaron Bernardino Date: Fri, 31 Jul 2026 00:04:44 +0000 Subject: [PATCH 4/7] [doc] Collapse packet-trimming HLD revision history to a single entry Replace the incremental v0.1-v0.7 revision log with one v1.0 entry; the working history is not needed in the published design. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Aaron Bernardino --- doc/vpp/vpp-packet-trimming-HLD.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/doc/vpp/vpp-packet-trimming-HLD.md b/doc/vpp/vpp-packet-trimming-HLD.md index babe60c6b72..df7781352e7 100644 --- a/doc/vpp/vpp-packet-trimming-HLD.md +++ b/doc/vpp/vpp-packet-trimming-HLD.md @@ -23,13 +23,7 @@ | Rev | Date | Author(s) | Changes | |---|---|---|---| -| v0.1 | 2026-07-23 | Aaron Bernardino | Initial SONiC-VPP packet-trimming design | -| v0.2 | 2026-07-23 | Aaron Bernardino | Corrected current-state analysis: SAI-VPP already advertises trimming capability; clarified that advertisement must be *reduced* to match the datapath; identified KVM egress backend and refined counter and enablement details | -| v0.3 | 2026-07-23 | Aaron Bernardino | Feasibility spike (Gate 0) on the live `vms-kvm-vpp-t1-lag` testbed: confirmed VPP has no egress QoS / queue-admission substrate, so the test's blocking scheduler is a dataplane no-op and trimming cannot occur. Corrected the KVM egress backend to DPDK virtio + LCP TAP. Scoped this increment to **capability truthfulness** (VPP advertises trimming as *not* supported); retained the datapath design as the target architecture and a tracked prerequisite (future work) | -| v0.4 | 2026-07-25 | Aaron Bernardino | Gate 0 resolved **positively**: instead of deferring the datapath, this increment supplies the missing admission substrate in software. The `sonic_ext` plugin gains a generic per-`{port, queue}` token-bucket admission shim on the `interface-output` arc, plus a trim action node (truncate → DSCP rewrite → static trim-queue retry → counters), validated end to end on standalone VPP. Reframed the datapath from *tracked prerequisite* to *delivered design*; SAI-VPP raises the advertised capability to `SWITCH_TRIMMING_CAPABLE=true` once the translation is wired and validated. Corrected the header-checksum (§7.4) and one-shot guard (§7.6, now an `interface-output-arc-end` bypass) descriptions to match the implementation | -| v0.5 | 2026-07-30 | Aaron Bernardino | Root-caused and fixed a multi-segment (jumbo) trim defect on the KVM/DPDK backend: truncation cleared the VLIB chain flag but left the backing `rte_mbuf` `->next`/`nb_segs` stale, so the virtio PMD re-appended the freed tail (5000→256 egressed as 1208 = 256 + 952). Fix clears `VLIB_BUFFER_EXT_HDR_VALID` on the severed segment (§7.4). Validated end to end on `vms-kvm-vpp-t1-lag`: `test_packet_size_after_trimming` passes for single-segment (400→256) and jumbo/multi-segment (5000→4084, 3000→256). Bumped `VPP_VERSION` suffix for the plugin content change | -| v0.6 | 2026-07-30 | Aaron Bernardino | Made the `sonic-mgmt` suite self-sufficient and enabled it on VPP. Test helpers now create the `queue{1,3}_{uplink,downlink}_lossy_profile` BUFFER_PROFILEs when absent (they ship only in real SN5640/7060X6 QoS templates) and clear test-created `BUFFER_QUEUE` trim-queue refs in teardown so post-test YANG validation stays clean — the three in-scope cases pass with zero setup/teardown errors and no manual `redis-cli` (§14.2). Implemented the `conditional_mark` enablement (§14.3): exempted `asic_type == 'vpp'` from the hwsku skip and added `asic_type in ['vpp']` skips for the deferred asymmetric module and symmetric cases (ACL, SRv6, counters ×2, mirror, reload/reboot, stability/port-admin toggles). Validated the rule against the plugin's own decision logic with the DUT's real facts across VPP / real-SKU / non-listed-SKU / `vs` | -| v0.7 | 2026-07-30 | Aaron Bernardino | Reconciled the full document with the delivered code after the review-hardening commits. Distinguished the pre-change baseline, delivered symmetric core, and deferred target behavior throughout. Corrected the admission model (buffer profiles select eligibility; SAI-VPP maps scheduler state to binary blocked/unlimited buckets rather than deriving proportional rate/capacity), DSCP-to-queue classification, global-only plugin counters, update/create/remove ordering, capability behavior, CLI output, warmboot status, and the exact `sonic-mgmt` enablement and teardown changes. Marked asymmetric `FROM_TC`, `DYNAMIC`, ACL disable-trim, SAI counter sourcing, GCU config validation, toggles, persistence, mirroring, and SRv6 as deferred | +| v1.0 | 2026-07-31 | Aaron Bernardino | Initial SONiC-VPP packet-trimming design | ## 2. Scope From e4e00e14b9105f1221bbc606c2f6ef4eca637e2a Mon Sep 17 00:00:00 2001 From: Aaron Bernardino Date: Mon, 3 Aug 2026 18:47:52 +0000 Subject: [PATCH 5/7] [doc] Clarify packet-trim passthrough semantics in HLD (no shim-level original drop) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Multi-agent review flagged that the HLD overstated the datapath as performing a shim-level "normal original-packet drop" for non-eligible queues. The delivered admission node never polices a non-eligible or unconfigured queue -- it passes the packet straight through on the interface-output arc to normal port TX -- so forwarding is unchanged and the shim adds no drop of its own. - REQ-3 status: clarify that DROP/unbound queues are simply never made trim-eligible (forwarding unchanged), while DROP_AND_TRIM marks the queue eligible and invokes trim. - §6.2: annotate the flowchart's 'Normal original-packet drop' node as the conceptual/hardware admission model, not shim behavior. - §12: reword the missing-egress-metadata row to passthrough/bypass semantics. - §13.2: document the last-good DSCP-to-queue table retained by SAI-VPP when no port currently binds both QoS maps, and why a stale mapping is benign. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Aaron Bernardino --- doc/vpp/vpp-packet-trimming-HLD.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/doc/vpp/vpp-packet-trimming-HLD.md b/doc/vpp/vpp-packet-trimming-HLD.md index df7781352e7..c7bdf82d22d 100644 --- a/doc/vpp/vpp-packet-trimming-HLD.md +++ b/doc/vpp/vpp-packet-trimming-HLD.md @@ -208,7 +208,7 @@ programs an unimplemented mode — rather than gating the switch capability off |---|---|---| | REQ-1 | VPP must trim only after admission to the original queue fails | Delivered | | REQ-2 | Trimming eligibility must follow the buffer profile attached to the original queue | Delivered | -| REQ-3 | `DROP` must retain normal drop behavior; `DROP_AND_TRIM` must invoke trim policy | Delivered | +| REQ-3 | `DROP` must retain normal drop behavior; `DROP_AND_TRIM` must invoke trim policy | Delivered — a `DROP` (or unbound) queue is never made trim-eligible, so the shim does not police it and existing forwarding is unchanged; `DROP_AND_TRIM` marks the queue eligible and invokes trim policy | | REQ-4 | The trim size must be runtime configurable | Delivered | | REQ-5 | Symmetric mode must write the configured DSCP value | Delivered | | REQ-6 | Asymmetric mode must resolve DSCP from the configured trim TC and the selected egress port's TC-to-DSCP map | Deferred | @@ -301,7 +301,12 @@ applies symmetric `DSCP_VALUE` only and does not yet honor an ACL trim-disable flag ([7.5](#75-dscp-resolution), [7.9](#79-acl-disable-trim), [13.1](#131-integration-status)). The delivered counters are switch-global plugin summaries; the port/queue increments shown are target SAI attribution -([7.11](#711-counters)). +([7.11](#711-counters)). The `Normal original-packet drop` node likewise +represents the conceptual/hardware admission model: on the delivered VPP +datapath a non-eligible (or unconfigured) queue is never policed by the shim — +the admission node passes it straight through on the `interface-output` arc to +normal port TX — so the shim implements no separate original-packet drop of its +own, and existing forwarding is preserved unchanged. ### 6.3 Component Responsibilities @@ -773,7 +778,7 @@ single-worker topology; per-worker buckets or atomic accounting are deferred. | VPP plugin/API programming is unavailable | Capability advertisement is not dynamically probed. A set reports the VPP API failure for orchagent retry; create refresh remains best effort | | VPP binary API update fails on a set | Commit the SAI object state and return the failure so orchagent retries; the next retry re-pushes the same full (idempotent) policy ([7.13](#713-update-and-remove-ordering)) | | Asymmetric DSCP cannot be resolved at runtime (deferred `FROM_TC`) | Target design: drop the trim packet and increment a diagnostic error counter. Not reachable in this increment — only symmetric `DSCP_VALUE` is advertised and honored ([7.5](#75-dscp-resolution)) | -| Egress metadata is missing at admission failure | Use the normal drop path; do not guess an interface or queue | +| Egress metadata is missing at admission failure | Pass the packet through unpoliced on the normal `interface-output` arc rather than guessing an interface or queue; the shim adds no drop of its own | | Trim queue rejects the packet | Drop once, increment the plugin trim-drop counter, and do not retry | | SAI trim counter read | Trim stat IDs currently delegate to the shared virtual-switch base and return zero; SAI sourcing through `getStatsExt` is deferred ([7.11](#711-counters)) | @@ -855,6 +860,13 @@ pass on the `t1-lag` testbed; the out-of-scope cases above remain skipped on - The global trim policy and the DSCP-to-queue table are switch-wide; per-port QoS-map variation is not modeled in the initial implementation, which matches the uniform testbed configuration. +- When no front-panel port currently has both a `DSCP_TO_TC` and a `TC_TO_QUEUE` + map bound, SAI-VPP keeps the plugin's last-good switch-wide DSCP-to-queue table + rather than pushing an all-zero table (which would collapse every DSCP onto + queue 0). A stale mapping only changes behavior if a misclassified queue is + both trim-eligible and blocking, and normal orchagent sequencing removes the + QoS maps together with the eligibility that would make the mapping matter + ([12](#12-error-handling)). - The first implementation targets the DPDK virtio egress backend used by the supported VPP KVM topology. Additional backends (for example the AF_PACKET `host-interface` path used for veth ports) may reuse the same generic admission From 97b35f2f23b609a7cab78729c740d3a2fd784de5 Mon Sep 17 00:00:00 2001 From: Aaron Bernardino Date: Mon, 3 Aug 2026 20:53:09 +0000 Subject: [PATCH 6/7] [doc] Replace HLD mermaid flowcharts with sized committed PNG images MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two §6 flowcharts were mermaid fenced blocks, which only render in GitHub's rendered-file view (not in the PR diff) and not in editors/wikis without a mermaid plugin. Match the VXLAN HLD format by committing pre-rendered PNG diagrams under doc/vpp/images/ and embedding them with sized, centered tags (width-constrained so they don't dominate the page) plus descriptive alt text. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Aaron Bernardino --- .../packet-trimming-control-plane-flow.png | Bin 0 -> 131856 bytes .../images/packet-trimming-dataplane-flow.png | Bin 0 -> 307003 bytes doc/vpp/vpp-packet-trimming-HLD.md | 34 +++++------------- 3 files changed, 8 insertions(+), 26 deletions(-) create mode 100644 doc/vpp/images/packet-trimming-control-plane-flow.png create mode 100644 doc/vpp/images/packet-trimming-dataplane-flow.png diff --git a/doc/vpp/images/packet-trimming-control-plane-flow.png b/doc/vpp/images/packet-trimming-control-plane-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..62bf488042ebed6b0415fb9655c593be61526135 GIT binary patch literal 131856 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 literal 0 HcmV?d00001 diff --git a/doc/vpp/images/packet-trimming-dataplane-flow.png b/doc/vpp/images/packet-trimming-dataplane-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..707f0a285bf38bbb6ac5bd5f8b8d930fc317c079 GIT binary patch literal 307003 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

rZe5Vb@RW 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�=zDrY#% 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 dY@jwcGsCK B[SONiC orchagent] - B --> C[SAI switch, buffer, QoS, ACL objects] - C --> D[syncd] - D --> E[SAI-VPP] - E --> F[VPP packet-trim binary API] - F --> G[Packet-trim plugin policy] - E --> H[Egress admission provider configuration] - E --> I[Capability mapping; SAI counter sourcing deferred] -``` +

+ Control-plane flow: Config DB packet-trimming configuration flows through SONiC orchagent, SAI switch/buffer/QoS/ACL objects, syncd, and SAI-VPP, which fans out to the VPP packet-trim binary API and plugin policy, egress admission provider configuration, and capability mapping (SAI counter sourcing deferred). +

SAI-VPP owns object relationships and translates the platform-independent SAI contract into compact VPP policy: @@ -279,21 +272,10 @@ counter sourcing are deferred. ### 6.2 Dataplane Flow -```mermaid -flowchart TD - A[Packet reaches final egress classification] --> B[Resolve physical egress and original queue] - B --> C{Original queue admits packet?} - C -->|Yes| D[Transmit original packet] - C -->|No| E{Eligible and not ACL disabled?} - E -->|No| F[Normal original-packet drop] - E -->|Yes| G[Increment trim-attempt counters on original queue and port] - G --> H[Truncate to configured size when needed] - H --> I[Apply symmetric or asymmetric DSCP] - I --> J[Select configured static trim queue on same physical egress] - J --> K{Trim queue admits packet?} - K -->|Yes| L[Transmit and increment trim-sent counters] - K -->|No| M[Drop and increment trim-drop counters] -``` +

+ Dataplane flow: after a packet reaches final egress classification and the physical egress and original queue are resolved, the original queue is checked for admission. If it admits, the original packet is transmitted. If not, and the queue is trim-eligible and not ACL-disabled, trim-attempt counters increment, the packet is truncated to the configured size, DSCP is applied, and the configured static trim queue on the same physical egress is selected; if that trim queue admits, the packet is transmitted and trim-sent counters increment, otherwise it is dropped and trim-drop counters increment. Non-eligible queues take the normal original-packet path. +

This flowchart is the full conceptual design. In the delivered increment the "ACL disabled" branch and the asymmetric-DSCP step are deferred: the datapath From a89bf404ab4b4b9b988354332bd70a9f3e48418c Mon Sep 17 00:00:00 2001 From: Aaron Bernardino Date: Mon, 3 Aug 2026 20:54:32 +0000 Subject: [PATCH 7/7] [doc] Enlarge HLD flow diagrams (control-plane 680px, dataplane 520px) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Aaron Bernardino --- doc/vpp/vpp-packet-trimming-HLD.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/vpp/vpp-packet-trimming-HLD.md b/doc/vpp/vpp-packet-trimming-HLD.md index 2700151b003..e5676a43d72 100644 --- a/doc/vpp/vpp-packet-trimming-HLD.md +++ b/doc/vpp/vpp-packet-trimming-HLD.md @@ -253,7 +253,7 @@ programs an unimplemented mode — rather than gating the switch capability off ### 6.1 Control-Plane Flow

- Control-plane flow: Config DB packet-trimming configuration flows through SONiC orchagent, SAI switch/buffer/QoS/ACL objects, syncd, and SAI-VPP, which fans out to the VPP packet-trim binary API and plugin policy, egress admission provider configuration, and capability mapping (SAI counter sourcing deferred).

@@ -273,7 +273,7 @@ counter sourcing are deferred. ### 6.2 Dataplane Flow

- Dataplane flow: after a packet reaches final egress classification and the physical egress and original queue are resolved, the original queue is checked for admission. If it admits, the original packet is transmitted. If not, and the queue is trim-eligible and not ACL-disabled, trim-attempt counters increment, the packet is truncated to the configured size, DSCP is applied, and the configured static trim queue on the same physical egress is selected; if that trim queue admits, the packet is transmitted and trim-sent counters increment, otherwise it is dropped and trim-drop counters increment. Non-eligible queues take the normal original-packet path.

L-Vj>U;5ehjxP|>1FDiP{NOiIu9JIH-= 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