MRC packet structure — SRv6 path + 32-bit entropy value (EV)
IPv6-in-IPv6 encapsulation. The 32-bit EV is striped across the outer IPv6 flow label and UDP source port. ECMP is disabled — the SRv6 uN uSID stack statically encodes the path; the EV is carried only to be echoed back in SACK/NACK feedback.
EV generation. At QP startup, the NIC generates a set of 128–256 entropy values, equally split across the 8 MRC planes. A different EV is selected for every packet, spraying all traffic from a single QP across many paths automatically — no application changes needed.
SRv6 forwarding. Each switch compares the first 48 bits of the destination address to its configured locator + uSID. On match, it left-shifts the uSID portion by 16 bits — moving the next-hop uSID into position — then does a static forwarding table lookup. Tables are set once at install and never change; dynamic routing (BGP) and ECMP are both disabled.
Why the EV still rides along. Since the path is statically encoded in the uSID stack, the EV plays no role in forwarding. It exists purely so the receiving NIC can echo it back in SACK/NACK packets — telling the sender's MRC engine which EV (and therefore which path) is healthy, congested, or has failed.
Loss vs. trim. A genuinely dropped packet signals path failure — its EV is retired immediately and not reused. A trimmed packet (payload stripped, header forwarded) signals congestion only — it triggers a SACK-based selective retransmit of just the missing data, not a full resend.