Skip to content

Optimized Forwarding Header - #2297

Open
JaiOCP wants to merge 44 commits into
opencomputeproject:masterfrom
JaiOCP:ofh
Open

JaiOCP wants to merge 44 commits into
opencomputeproject:masterfrom
JaiOCP:ofh

Conversation

@JaiOCP

@JaiOCP JaiOCP commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

New PR is opened.
Old one where most of the review comments are there is closed
#2285

Comment thread inc/saihash.h
SAI_NATIVE_HASH_FIELD_RDMA_BTH_DEST_QP = 0x00000023,

/** Native hash field RDMA packet BTH destination queue pair */
SAI_NATIVE_HASH_FIELD_OFH_FLOW_LABEL = 0x00000024,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix the comments cut and paste error.

Comment thread inc/saiacl.h Outdated
* @flags CREATE_ONLY
* @default false
*/
SAI_ACL_TABLE_ATTR_FIELD_ACL_OFH_TYPE = SAI_ACL_TABLE_ATTR_FIELD_START + 0x167,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add match for version field

@BYGX-wcr

Copy link
Copy Markdown
Contributor

It will be good to draw an abstract SAI pipeline to illustrate the forwarding model of OFH in the documentation.

Comment thread inc/saiacl.h
* @default false
*/
SAI_ACL_TABLE_ATTR_FIELD_OFH_COS = SAI_ACL_TABLE_ATTR_FIELD_START + 0x168,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add TTL decrement for action as well as match on TTL

Comment thread inc/saiacl.h
* @brief End of Rule Actions
*/
SAI_ACL_ENTRY_ATTR_ACTION_END = SAI_ACL_ENTRY_ATTR_ACTION_TAM_OBJECT,
SAI_ACL_ENTRY_ATTR_ACTION_END = SAI_ACL_ENTRY_ATTR_ACTION_SET_OFH_COS,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SAI_ACL_ACTION_TYPE_SET_ECN = 0x00000017,

Set ECN also supported for normal IP packet.

Comment thread inc/saiswitch.h
/**
* @brief OFH header max size
*
* @type sai_int8_t

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should it be sai_uint8_t ?

Comment thread inc/saitypes.h

SAI_OFH_ADDR_FAMILY_AFH,

SAI_OFH_ADDR_FAMILY_UFH,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add doxygen comments

Comment thread inc/saitypes.h

/** @validonly meta->attrvaluetype == SAI_ATTR_VALUE_TYPE_UINT64_RANGE_LIST */
sai_u64_range_list_t u64rangelist;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the corresponding sai_ofh_addr_and_mask_t to SAI_ATTR_VALUE_TYPE_OFH_ADDR_AND_MASK type be added here?

Comment thread inc/saiofh.h
/**
* @brief Set OFH attribute value(s).
*
* @param[in] ofh_id TAM id

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please correct TAM to OFH

Comment thread inc/saiofhroute.h
* @param[out] object_statuses List of status for every object. Caller needs to
* allocate the buffer
*
* @return #SAI_STATUS_SUCCESS on success when all objects are removed or

@rdasari-upscaleai rdasari-upscaleai Jun 23, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Appear to be cut and paste error from route remove entry.
sairoute.h appear to have same cut and paste error.

Comment thread inc/saiofhroute.h
* @param[out] object_statuses List of status for every object. Caller needs to
* allocate the buffer
*
* @return #SAI_STATUS_SUCCESS on success when all objects are removed or

@rdasari-upscaleai rdasari-upscaleai Jun 23, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Appear to be cut and paste error from route remove entry.
sairoute.h appear to have same cut and paste error.

Comment thread inc/saiofh.h
*
* @type sai_uint8_t
* @flags CREATE_AND_SET
* @default 6

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

while other *_WIDTH fields are default to '0', This seems to be special.

@hzheng5

hzheng5 commented Jun 25, 2026 •

Copy link
Copy Markdown
Contributor

Hi @JaiOCP , thanks for the OFH contribution. It aligns well with UEC Scale-Up goals.

A few points before merge:
• Naming: Standardize to SAI_OFH_ATTR_* for OFH objects and SAI_ROUTING_ATTR_OFH_* for forwarding behavior.
• Capability Query: Add sai_query_ofh_capability() to expose max size, supported address families, and hash limits before config.
• Counters: Define SAI_PORT_STAT_OFH_* counters to enable silicon-level verification.
• OFH Size: Clarify units for @default 6 (bytes vs DW) and add validation range.

LGTM overall.

Comment thread inc/saidebugcounter.h
/** OFH VLAN drop */
SAI_IN_DROP_REASON_OFH_VLAN_DROP,

/** OFH VLAN to virtual router id drop */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Please explain this drop reason either as comments in the header file or in the markdown file to be created.
  2. Which of the below drops are accounted under this drop reason?
  • SAI_ROUTER_INTERFACE_ATTR_ADMIN_OFH_STATE is false
  • SAI_VIRTUAL_ROUTER_ATTR_ADMIN_OFH_STATE is false

Comment thread inc/saidebugcounter.h
SAI_IN_DROP_REASON_OFH_DISCARD,

/** OFH VLAN drop */
SAI_IN_DROP_REASON_OFH_VLAN_DROP,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I understand correctly, SAI_IN_DROP_REASON_OFH_VLAN_DROP is meant to account the drops when RIF of type SAI_ROUTER_INTERFACE_TYPE_VLAN is not created for the given ingress port + packet.VID. Ideally, this would be accounted under SAI_IN_DROP_REASON_INGRESS_VLAN_FILTER. We do not have IPv4/IPv6 specific VLAN drops. I am trying to understand as to why we need OFH specific VLAN drops.

Comment thread inc/saiofh.h
* @type sai_ofh_sub_type_t
* @flags CREATE_ONLY
* @default SAI_OFH_SUB_TYPE_NONE
*/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I presume this is to identify UFH1/2, AFH1/2 and is not valid for ESUN. Please add appropriate @validonly

Comment thread inc/saiofh.h
SAI_OFH_ATTR_SUB_TYPE,

/**
* @brief OFH Version number

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@brief Version/Revision number

Comment thread inc/saiofh.h
* @type sai_ofh_ver_t
* @flags CREATE_AND_SET
* @default SAI_OFH_VER_1
* @validonly SAI_OFH_ATTR_TYPE == SAI_OFH_TYPE_AFH or SAI_OFH_ATTR_TYPE == SAI_OFH_TYPE_ESUN

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Version is valid for UHF also. If the idea is to add UHF as a separate PR, then we could remove SAI_OFH_TYPE_UFH from sai_ofh_type_t.

Comment thread inc/saiqosmap.h
SAI_QOS_MAP_TYPE_QUEUE_TO_VC = 0x00000011,

/** QOS Map to set OFH COS to Traffic class */
SAI_QOS_MAP_TYPE_OFH_COS_TO_TC = 0x00000012,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to extend sai_qos_map_params_t to include a new field: sai_uint8_t ofh_cos.
Note that increases the size of the struct and needs handling in sairedis serialization/deserialization.

@tjchadaga tjchadaga added the reviewed PR is discussed in SAI Meeting label Jul 24, 2026
Comment thread inc/saitypes.h

/** Dot1p value */
sai_uint8_t dot1p;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need ofh_cos here.

MaksymPry and others added 18 commits October 9, 2026 13:32
…pencomputeproject#2296)

Signed-off-by: Maksym Prytoliuk <maksympr@nvidia.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…puteproject#2274)

This PR introduces two new ACL match fields to the SAI ACL headers:

SAI_ACL_TABLE_ATTR_FIELD_ACL_MIRROR_COPY_TYPE: Allows ACL rules to match packets based on whether they are mirror copies and their specific type (Ingress, Egress, or Ingress Or Egress).

SAI_ACL_TABLE_ATTR_FIELD_ACL_MIRROR_SESSION_ID: Allows ACL rules to match based on a specific mirror session ID.

Signed-off-by: Mobin Mohan <mobinmohan@google.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…opencomputeproject#2308)

Fixes opencomputeproject#2307

Two fixes in the SAI_STATUS_IS_* helpers in inc/saistatus.h:

Compare on the magnitude (SAI_STATUS_CODE(x)) before masking, so the range
check is correct for negative status codes on Linux. Previously a non-zero
attribute index borrowed across the 16-bit boundary and matched the wrong
range (e.g. INVALID_ATTR_VALUE index 3 classified as ATTR_NOT_IMPLEMENTED).
No-op on Windows, where SAI_STATUS_CODE is identity.
Fix SAI_STATUS_IS_UNKNOWN_ATTRIBUTE, which compared against
SAI_STATUS_INVALID_ATTRIBUTE_0 instead of SAI_STATUS_UNKNOWN_ATTRIBUTE_0
(wrong on all platforms).

Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
… fixes (opencomputeproject#2299)

Context / motivation

This PR is part of the SAIVPP unit-test framework: a Docker harness (docker-sai-test-vpp) that runs the upstream OCP sai_test PTF suite against the real VPP SAI backend (libsaivs) in one container — VPP + saiserver + PTF + veth/AF_PACKET topology. That work is documented in our devdocs under sonic-sairedis/.azure-pipelines/docker-sai-test-vpp/devdocs/ (see progress.md).

To run the suite, saiserver (saithriftv2) must build and link against the VPP SAI backend on a bookworm/python3 toolchain. Upstream saithriftv2 only has a vs link line and a python2.7 install path, so it does not build for the vpp platform on bookworm. This is Phase 1, Task 2 of the SAIVPP UT HLD (the saithriftv2 Makefile work).

What this change does

Build/packaging only, no test logic:

test/saithriftv2/Makefile — add a platform=vpp link line that pulls in the 5 VPP libraries SaiVppXlate.c requires (-lvlib -lvlibapi -lvppapiclient -lvlibmemoryclient -lvppinfra) plus -lswsscommon; also add -lswsscommon to the vs line.
test/saithriftv2/src/saiserver.cpp — enable SWSS debug logging at startup (swss::Logger to STDOUT), so the harness captures a high-level SAI RPC trace in saiserver.log (used throughout our debugging).
debian/python-saithrift.install — install the Python bindings from the python3 dist-packages path so the package builds on bookworm (was hardcoded to python2.7/site-packages).
test/saithriftv2/convert_header.py — fix an enum __str__ that did split(".")[1] and threw an IndexError on some enum names; use self.name instead.
Scope / risk

4 files, +11/−3 — build flags, a packaging path, a logging init, and a one-line stringification fix.
No change to SAI semantics, RPC surface, or test logic.
The vpp link line is new (additive); the vs line only gains -lswsscommon.

Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…pencomputeproject#2300)

Context / motivation

Part of the SAIVPP unit-test framework (see PR 1 / our docker-sai-test-vpp/devdocs/). When running the OCP sai_test suite against the VPP SAI backend, neighbor- and route-create tests failed at create time with SAI_STATUS_INVALID_PARAMETER (-5):

ERROR: meta_generic_validation_create: switch id is NULL for SAI_OBJECT_TYPE_NEIGHBOR_ENTRY
Root cause

sai_thrift_neighbor_entry_t / sai_thrift_route_entry_t carry a switch_id, but many OCP tests build these entries with only rif_id (+ ip_address / destination) and omit switch_id. The saithriftv2 RPC server copied the thrift switch_id straight through, so meta validation received switch_id == 0 and rejected the create. (Tests that pass through the common-config path, which sets switch_id explicitly, succeeded — only entries that omit it failed.)

What this change does

meta/templates/sai_rpc_server_helper_functions.tt — custom sai_thrift_parse_neighbor_entry() / sai_thrift_parse_route_entry() that, when the thrift switch_id is 0, fall back to the RPC-global switch_id (the OID returned by sai_thrift_create_switch) and then gSwitchId. (The auto-generated struct copies for these two entry types are skipped in favor of these.)
test/saithrift/src/switch_sai.thrift, switch_sai_rpc_server.cpp — the same switch_id field + fallback in the legacy v1 thrift server, for parity.
test/sai_test/config/route_configer.py — pass switch_id=self.dut.switch_id explicitly on the route entries the common config builds, so the persisted T0 config is consistent regardless of the fallback.
This mirrors how a real ASIC SAI shim behaves (the switch is unambiguous), and unblocks the neighbor/route-create-on-RIF tests.

Scope / risk

4 files, +79/−18 — RPC-server parsing for two entry types (+ v1 parity) and explicit switch_id in the test common config.
No change to SAI behavior for callers that already pass switch_id — the fallback only triggers when it is 0/omitted.
Server-side only; no packet-path or test-logic change.
Dependencies
None. Related to opencomputeproject#2299, however, their edits are isolated and each target master.

Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…tdevs for standalone benches (opencomputeproject#2316)

Context / motivation
Part of the SAIVPP unit-test framework (see the sonic-sairedis docker-sai-test-vpp harness). When the OCP sai_test T0 suite runs against a SAI backend on a standalone bench with no SONiC control plane, there is no teamd to create PortChannel netdevs and no IntfMgr to assign LAG/SVI interface IPs — which some backends (e.g. the VPP virtual switch) rely on for LAG bring-up and routed-to-LAG/SVI forwarding. This adds an opt-in way for the test setup to emulate that.

What this change does

test/sai_test/config/simulate_sonic.py (new). Opt-in helper, active only when SIMULATE_SONIC=1; every entry point is a no-op otherwise.
test/sai_test/config/lag_configer.py — create_lag(). When enabled, create the PortChannel<N> netdev teamd would provide, before the SAI LAG create.
test/sai_test/config/route_configer.py — create_router_interface(). When enabled, assign the connected IPs IntfMgr would set on a LAG or VLAN(SVI) router interface.
Vendor-neutral by construction. PortChannel netdevs use generic Linux ip … type bond; LAG RIF IPs use ip addr add. A VLAN SVI has no host-interface netdev to mirror from, so its address is programmed via command templates supplied by the caller (SVI_RIF_SET_IP_CMD / SVI_RIF_PROBE_CMD, with {ifname}/{addr} placeholders) — no backend-specific tooling is hardcoded in sai_test. All interface-name prefixes and address patterns are env-overridable.
Scope / risk

3 files (one new module + two setUp-path hooks) — test-config helpers only; no change to SAI/backend code or packet semantics.
Fully opt-in with default-off: with SIMULATE_SONIC unset, all entry points no-op, so real-HW and other OCP consumers are unchanged unless they opt in.
Dependencies
None. Independent of opencomputeproject#2299 / opencomputeproject#2300 / opencomputeproject#2301 (edits different functions); targets master.

Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…ix v4/v6 NHG port-list aliasing (opencomputeproject#2301)

Context / motivation

Part of the SAIVPP unit-test framework (see PR 1 / our docker-sai-test-vpp/devdocs/, esp. the 6-19 entry). Three independent correctness/robustness fixes in the OCP sai_test config helpers that the suite needs when run against the VPP SAI backend.

What this change does

test/sai_test/config/port_configer.py — drop bridge_id on create_bridge_port. Passing bridge_id to sai_thrift_create_bridge_port caused a create failure in our backend; the default 1Q bridge is used, so the argument is redundant. Removing it lets bridge-port creation succeed.

test/sai_test/config/port_configer.py — env-gated, bounded port bring-up wait. turn_up_and_get_checked_ports() waited per port, serially (retries × sleep) for oper-status UP. On a 32-port topology where oper-status is slow to settle, this is ~60s+ of dead time per common-config build. The wait is now tunable via env (SAI_PORT_UP_RETRIES, SAI_PORT_UP_POLL_INTERVAL, SAI_PORT_UP_SHARED_WAIT) and can poll all ports together in one bounded window. Defaults preserve the original behavior (per-port wait), so real-HW/other OCP consumers are unchanged unless they opt in; only our harness sets the fast values.

test/sai_test/config/route_configer.py — give v4/v6 NHGs independent member_port_indexs. create_nexthop_group_by_nexthops() constructed the v4 and v6 NexthopGroup objects sharing one Python list object for member_port_indexs. A mutation on one group (member remove/re-add tests) then corrupted the other's port list (ValueError: list.remove(x): x not in list). Each group now gets its own list(...) copy. (Latent aliasing bug, independent of any harness specifics.)

Scope / risk

2 files, +64/−25 — test-config helpers only; no change to SAI/backend code or packet semantics.
The port-up change is opt-in via env with original defaults, so it does not alter timing for existing consumers.
The bridge_id removal relies on the default 1Q bridge (already how these tests are used).
Dependencies
None. Related to opencomputeproject#2299 and opencomputeproject#2300, however, their edits are isolated and each target master.

Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: Prince George <prgeor@microsoft.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…uteproject#2321)

Context / motivation

Part of the SAIVPP unit-test framework. When OCP sai_test runs on a standalone bench with SIMULATE_SONIC=1, the bench emulates SONiC control-plane setup for LAG/SVI router interfaces. During that setup, a simulated router can emit IPv6 lifecycle frames such as Router Solicitations and MLDv2 reports. These frames share PTF dataplane queues with test traffic and can make strict verify_no_other_packets() assertions fail even though the test's TCP/UDP forwarding behavior is correct.

The sonic-sairedis harness previously used PTF --relax globally, which disabled all unexpected-packet checks and masked this issue. The harness now scopes --relax to positive flooding tests only, so the shared simulation helper needs a narrow, opt-in way to isolate known startup control traffic without suppressing actual dataplane failures.

What this change does

test/sai_test/config/simulate_sonic.py. Adds an opt-in PTF filter enabled only when SIMULATE_SONIC=1 and a caller provides SIMULATE_SONIC_IPV6_CONTROL_SRC_MAC.
Exact filtering. Discards only IPv6 ICMP Router Solicitations (type 133 to ff02::2) and MLDv2 reports (type 143 to ff02::16, including the standard Hop-by-Hop header) emitted from that configured source MAC.
No vendor hardcoding. The caller supplies the source MAC. The shared helper does not contain VPP-specific MAC addresses or commands.
Linux IPv6 setup ordering. Configures accept_dad=0, accept_ra=0, autoconf=0, and router_solicitations=0 before re-enabling IPv6 on a simulated LAG host interface, preventing a DAD/router-discovery race.
Scope / risk

One shared test-config helper. No SAI headers, backend code, or production SONiC runtime behavior changes.
Default-off: with SIMULATE_SONIC unset, or without a valid source MAC, the helper installs no filter and retains existing behavior.
Narrow by construction: ordinary IPv4/IPv6 traffic, other ICMPv6 types, and matching control frames from other source MACs stay visible to PTF strict verification.
Validated behavior: unit-level boundary checks used captured Router Solicitation and MLDv2 frames and confirmed that ordinary traffic is retained. A standalone VPP harness rerun recovered all eleven classes previously failing solely on background IPv6 lifecycle traffic.
Dependencies

None. The change extends the existing SIMULATE_SONIC helper implemented in opencomputeproject#2316 and is independent of the prior SIMULATE_SONIC PR once that PR is merged. The sonic-sairedis VPP harness enables the option only in its separate Phase 3 integration branch.

Signed-off-by: Nicholas Ching <nicholaslching@gmail.com>z
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
* add SAI definitions for optical circuit switch

Signed-off-by: Nathan Ni <nathan.ni@coherent.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Summary:

This is similar to opencomputeproject#1158, opencomputeproject#1407, opencomputeproject#1430.

Those PRs added label attribute for LAG/virtual router, counter, ACL Counter. This PR adds similar label attribute for ACL entries.

Adding a label attribute that can be used to uniquely identify ACL entry object during warmboot. This attribute is considered as user data attached to the object.

Signed-off-by: Shrikrishna (Shri) Khare <skhare@meta.com>
Signed-off-by: Jasmeet Bagga <jasmeetbagga@meta.com>
Signed-off-by: Ron He <zecheng@meta.com>
Co-authored-by: Ron He <zecheng@meta.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…uteproject#2327)

Summary:

This is similar to opencomputeproject#1158, opencomputeproject#1407, opencomputeproject#1430, opencomputeproject#2322.

SAI label attributes are of type char, which maps to sai_attribute_value_t::chardata[32]. That is 32 bytes including the NUL terminator, so 31 usable characters. That can be too small for real identifiers.

Add a LABEL_WIDE attribute of type sai_s8_list_t alongside each existing char label attribute. A list keeps the label length open, so the NOS can choose the length it needs instead of being constrained by an arbitrary limit in the SAI spec. Each new attribute is appended at the end of its attribute enum so that no existing attribute is renumbered.

Objects covered: counter, ACL counter, LAG, mirror session, prefix compression table, policer, scheduler, next hop group, virtual router, UDF group and router interface.

The existing char attributes are marked deprecated. Exactly one of the two attributes may be set to a non-default value; setting both is invalid.

Signed-off-by: Shrikrishna (Shri) Khare <skhare@meta.com>
Signed-off-by: Jasmeet Bagga <jasmeetbagga@meta.com>
Signed-off-by: Ron He <zecheng@meta.com>
Co-authored-by: Ron He <zecheng@meta.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Link Debounce

Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…pencomputeproject#2333)

Extend the `sai_in_drop_reason_t` enum with `SAI_IN_DROP_REASON_EGRESS_LINK_DOWN` to support tracking packets dropped at ingress when the target egress port/interface is down.

While `SAI_IN_DROP_REASON_L3_EGRESS_LINK_DOWN` specifically targets routed (L3) packets, certain ASIC architectures and pipelines drop traffic at ingress whenever the destination egress link is down regardless of packet type, or do not distinguish between L2 and L3 drops for this condition.

Adding `SAI_IN_DROP_REASON_EGRESS_LINK_DOWN` enables debug counters to generically capture egress link down drops across both L2 (bridged) and L3 (routed) traffic.

Change-Id: Ifb3b440f79f0eacccb6138b4d02410dcb0d02ebd

Signed-off-by: Tommy Smail <tommysmail@google.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: Chikkegowda Chikkaiah <cchikkai@cisco.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: Tejaswini Chadaga <tchadaga@microsoft.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
j-bos and others added 25 commits October 9, 2026 13:32
* Add support for ACL destination match

Signed-off-by: Jason Bos <jbos@cisco.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
What I did
Clarified the HFT IPFIX enterprise-number wire layout and corrected the example value:

the first 16 bits on the wire encode the SAI object type;
the following 16 bits encode the SAI stats ID;
multi-byte values use network byte order.
For queue type 0x0015 and stat ID 0x0022, this gives 0x00150022, or wire bytes 00 15 00 22.

Why I did it
The previous formula placed the stat ID in the high 16 bits and contradicted both the adjacent bit diagram and the current SONiC countersyncd HFT IPFIX decoder.

How I verified it
This is a one-line documentation correction. git diff --check passes and the old example value no longer appears in the document.

The matching sonic-net/SONiC HLD change is submitted separately.

Matching SONiC HLD PR: sonic-net/SONiC#2537

Signed-off-by: Ze Gan <ganze718@gmail.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…eproject#2286)

Signed-off-by: James Andrew <jaandrew@nvidia.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Support for Multiple Firmwares

Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…pencomputeproject#2345)

Signed-off-by: grangaswamy <grangaswamy@marvell.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…teproject#2354)

Introduce SAI_IN_DROP_REASON_LPM_ANY to support ingress drop counting for L3 route lookup drops across various forwarding implementations and routing modes.

Signed-off-by: Tommy Smail <tommysmail@google.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: Jason Bos <jbos@cisco.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
- Add SAI_VLAN_ATTR_MLD_SNOOPING_ENABLE
- Define MLD snooping behavior

Signed-off-by: Anandhi Dhanabalan <adhanabalan@marvell.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: Anandhi Dhanabalan <adhanabalan@marvell.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: Vaibhav Srivastava <vaibhavsri1712@gmail.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…eproject#2325)

Signed-off-by: Dhruvkumar Patel <pdhruvkumarr@marvell.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…teproject#2276)

* Added new attribute SAI_MIRROR_SESSION_ATTR_GUARANTEE_RATE

Signed-off-by: milos moskovljevic <milosmoskovljevic.moskva@gmail.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…t#2324)

Adds the headers and design specification for the PTP Pdelay configuration object, expanding SAI capabilities to configure localized hardware measurement profiles for link propagation delays.

This incorporates the v3 struct simplifications, utilizing standard sai_u8_list_t mappings to preserve SAI ABI compatibility.

Signed-off-by: gurprem <gurprem@google.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…oject#2344)

Signed-off-by: Nipun Joy <njoy@marvell.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
)

Signed-off-by: Jason Bos <jbos@cisco.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…t#2340)

Signed-off-by: Komal Shah <kshah2@marvell.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…tal credits (opencomputeproject#2358)

Signed-off-by: pullarao <pullarao.gunda@broadcom.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…#2350)

* initial PON HLD + header files

Signed-off-by: David Pelton <dpelton@ciena.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…eproject#2323)

Signed-off-by: Anandhi Dhanabalan <adhanabalan@marvell.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…ject#2318)

Add SAI_ACL_ENTRY_ATTR_ACTION_REDIRECT_ORIGINAL_PACKET action
to support redirecting packets to a physical Port or LAG destination
same as received by the switch.

This action sends packets to a Port or LAG without modifying them. It
skips the egress stages like L2/L3 rewrite and VLAN editing, so the
headers stay exactly the same as when they were first received by the
switch.

Signed-off-by: Mobin Mohan <mobinmohan@google.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
…ject#2332)

Signed-off-by: Manas Kumar Mandal <manamand@cisco.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Signed-off-by: JaiOCP <jai.kumar@broadcom.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

reviewed PR is discussed in SAI Meeting

Projects

None yet

Development

Successfully merging this pull request may close these issues.