CodingBox Documentation

Compliance codes: bytes 3–10, 36 & extended tables

A host does not know what a module is from its vendor name — it knows from the compliance codes: bit fields that say "I am 10GBASE-LR" or "I am a 1000BASE-T copper SFP", plus a single extended code for everything invented after the bit fields ran out of room. Hosts use them to name the module type, decide which speeds to offer, choose FEC and breakout, and — on strict platforms — to refuse a module whose codes do not match the port. Getting them right is the single most important part of coding a module.

Two generations of coding

MechanismWhereHow it works
Classic bit fieldsSFF-8472 bytes 3–10; SFF-8636 bytes 131–138 and 164one bit per standard; several may be set (dual-rate, multi-protocol)
Extended specification complianceSFF-8472 byte 36; SFF-8636 byte 192one value from SFF-8024 Table 4-4: 25G, 100G, 200G, 400G, MSA PMDs
ApplicationsCMIS descriptorshost interface ID + media interface ID + lane counts, several per module — see CMIS

A 25G or 100G module leaves most classic bits clear and puts its identity into byte 36 or 192; a 10G/1G module does the opposite. Dual-rate 10G/25G modules use both.

SFF-8472 bytes 3–10 (SFP family)

ByteBit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
3 — 10G Ethernet / InfiniBand10GBASE-ER10GBASE-LRM10GBASE-LR10GBASE-SRIB 1X SXIB 1X LXIB 1X copper activeIB 1X copper passive
4 — ESCON / SONETESCON MMF 1310 LEDESCON SMF 1310 laserOC-192 short reachSONET reach bit 1SONET reach bit 2OC-48 longOC-48 intermediateOC-48 short
5 — SONETreservedOC-12 SM longOC-12 SM intermediateOC-12 shortreservedOC-3 SM longOC-3 SM intermediateOC-3 short
6 — EthernetBASE-PXBASE-BX10100BASE-FX100BASE-LX/LX101000BASE-T1000BASE-CX1000BASE-LX1000BASE-SX
7 — FC link length / technologyvery long (V)short (S)intermediate (I)long (L)medium (M)reservedshortwave laser, linear Rx (SA)longwave laser (LC)
8 — FC technology / cableelectrical inter-enclosure (EL)shortwave laser w/o OFC (SN)shortwave laser with OFC (SL)longwave laser (LL)active cablepassive cablereservedreserved
9 — FC mediatwin axial (TW)twisted pair (TP)miniature coax (MI)video coax (TV)multimode 62.5 µm (M6)multimode 50 µm (M5/M5E)reservedsingle mode (SM)
10 — FC speed1200 MB/s800 MB/s1600 MB/s400 MB/s3200 MB/s200 MB/ssee byte 62100 MB/s

Byte 62 (Fibre Channel speed 2) continues the speed list for 64GFC and above. Byte 36 holds the extended code. Byte 12 gives the nominal rate in ×100 Mb/s (FFh → byte 66 in ×250 Mb/s), byte 11 the encoding, byte 13 the rate identifier for rate select.

Typical SFP codings

ModuleByte 3Byte 6Byte 8Byte 36Byte 12Byte 11Wavelength
1000BASE-SX00h01h00h00h0Dh (1.3 Gb/s)01h 8B/10B850 nm
1000BASE-LX00h02h00h00h0Dh01h1310 nm
1000BASE-T copper00h08h00h00h0Dh01h0 (n/a)
10GBASE-SR10h00h00h00h67h (10.3 Gb/s)06h 64B/66B850 nm
10GBASE-LR20h00h00h00h67h06h1310 nm
10G passive DAC00h00h04h00h67h06h0, byte 60 = cable compliance
25GBASE-SR00h00h00h02hFFh (byte 66 = 67h → 25.75 Gb/s)06h850 nm
25GBASE-LR00h00h00h03hFFh / 67h06h1310 nm
25G passive DAC CA-25G-N00h00h04h0DhFFh / 67h06h0
10G/25G dual-rate SR10h00h00h02hFFh / 67h06h850 nm

The length bytes 14–19 must agree: an SR module declares OM3/OM4 reach, an LR module kilometres, a DAC metres in byte 18.

SFF-8636 bytes 131–138, 164 (QSFP family)

ByteContents
131 — 10/40G Ethernetbit 7 extended (use byte 192), 6 10GBASE-LRM, 5 10GBASE-LR, 4 10GBASE-SR, 3 40GBASE-CR4, 2 40GBASE-SR4, 1 40GBASE-LR4, 0 40G active cable (XLPPI)
132 — SONETOC-48 long / intermediate / short reach, 40G OTN
133 — SAS/SATASAS 6 / 12 / 24 Gb/s
134 — Gigabit Ethernetbit 3 1000BASE-T, 2 1000BASE-CX, 1 1000BASE-LX, 0 1000BASE-SX
135 — FC link length & technologysame bit meanings as SFP byte 7
136 — FC transmitter technologyEL, SN, SL, LL bits as SFP byte 8
137 — FC mediaTW, TP, MI, TV, M6, M5, OM3, SM
138 — FC speed100 … 3200 MB/s, extended flag
164 — Extended moduleInfiniBand rates: SDR, DDR, QDR, FDR, EDR
192 — Extended complianceTable 4-4 value

Typical: 40GBASE-SR4 → byte 131 = 04h, byte 192 = 00h; 100GBASE-SR4 → byte 131 = 80h (extended), byte 192 = 02h; 100G CWDM4 → 80h / 06h; 100GBASE-CR4 DAC → 80h / 0Bh with connector 23h.

CMIS — applications instead of bits

A CMIS module lists up to 15 applications, each pairing a host electrical interface with a media interface (both SFF-8024 codes) and stating lane counts. A 400G DR4 module might advertise 400GAUI-8 ↔ 400GBASE-DR4 (8:4) and 100GAUI-2 ↔ 100GBASE-DR (2:1, for 4×100G breakout). The host selects one per data path; whatever is not advertised cannot be configured. Details and the selection flow: CMIS.

How hosts use the codes

  • Naming — the type string on the CLI (10GBASE-LR, QSFP-100G-SR4) is derived from these bytes, often the first set bit found in a fixed order.
  • Speed offering — a host lists only rates whose code is present; a 25G module with byte 36 = 02h but no byte 3 bit will not be offered 10G (Speed & rate).
  • FEC selection — extended codes carry the FEC assumption (CA-25G-L/S/N; CAUI-4 with or without RS-FEC) and some hosts set FEC from them (FEC & link training).
  • Copper vs optical — byte 8 bits 2–3, connector 23h and byte 147 copper technologies switch the host to DAC handling (auto-negotiation, link training).
  • Policy — strict platforms compare codes with the port's mode and with their compatibility database; a mismatch yields unsupported or speed and type not supported even when the vendor block is accepted (Vendor lock).

Coding rules

  1. Set only bits the hardware truly satisfies; declaring 10GBASE-LR on an SR module turns "no link" into "link with errors".
  2. Keep the whole identity consistent: compliance ↔ wavelength ↔ lengths ↔ encoding ↔ nominal rate ↔ connector ↔ transmitter technology.
  3. For 25G+ fill byte 36 / 192 and set byte 12 / 140 to FFh with the ×250 Mb/s rate in byte 66 / 222.
  4. For DAC, code the cable technology bits, the length in metres, connector 23h and the attenuation/compliance bytes instead of a wavelength.
  5. Recalculate the checksums afterwards (Checksums).

In CodingBox

The Check transceiver screen decodes every bit above into plain names and lists CMIS applications; the EEPROM editor edits the code bytes field by field, shows the resulting type string, and fixes CC_BASE and CC_EXT on write.