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
| Mechanism | Where | How it works |
|---|---|---|
| Classic bit fields | SFF-8472 bytes 3–10; SFF-8636 bytes 131–138 and 164 | one bit per standard; several may be set (dual-rate, multi-protocol) |
| Extended specification compliance | SFF-8472 byte 36; SFF-8636 byte 192 | one value from SFF-8024 Table 4-4: 25G, 100G, 200G, 400G, MSA PMDs |
| Applications | CMIS descriptors | host 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)
| Byte | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|---|---|---|---|---|---|---|---|---|
| 3 — 10G Ethernet / InfiniBand | 10GBASE-ER | 10GBASE-LRM | 10GBASE-LR | 10GBASE-SR | IB 1X SX | IB 1X LX | IB 1X copper active | IB 1X copper passive |
| 4 — ESCON / SONET | ESCON MMF 1310 LED | ESCON SMF 1310 laser | OC-192 short reach | SONET reach bit 1 | SONET reach bit 2 | OC-48 long | OC-48 intermediate | OC-48 short |
| 5 — SONET | reserved | OC-12 SM long | OC-12 SM intermediate | OC-12 short | reserved | OC-3 SM long | OC-3 SM intermediate | OC-3 short |
| 6 — Ethernet | BASE-PX | BASE-BX10 | 100BASE-FX | 100BASE-LX/LX10 | 1000BASE-T | 1000BASE-CX | 1000BASE-LX | 1000BASE-SX |
| 7 — FC link length / technology | very long (V) | short (S) | intermediate (I) | long (L) | medium (M) | reserved | shortwave laser, linear Rx (SA) | longwave laser (LC) |
| 8 — FC technology / cable | electrical inter-enclosure (EL) | shortwave laser w/o OFC (SN) | shortwave laser with OFC (SL) | longwave laser (LL) | active cable | passive cable | reserved | reserved |
| 9 — FC media | twin axial (TW) | twisted pair (TP) | miniature coax (MI) | video coax (TV) | multimode 62.5 µm (M6) | multimode 50 µm (M5/M5E) | reserved | single mode (SM) |
| 10 — FC speed | 1200 MB/s | 800 MB/s | 1600 MB/s | 400 MB/s | 3200 MB/s | 200 MB/s | see byte 62 | 100 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
| Module | Byte 3 | Byte 6 | Byte 8 | Byte 36 | Byte 12 | Byte 11 | Wavelength |
|---|---|---|---|---|---|---|---|
| 1000BASE-SX | 00h | 01h | 00h | 00h | 0Dh (1.3 Gb/s) | 01h 8B/10B | 850 nm |
| 1000BASE-LX | 00h | 02h | 00h | 00h | 0Dh | 01h | 1310 nm |
| 1000BASE-T copper | 00h | 08h | 00h | 00h | 0Dh | 01h | 0 (n/a) |
| 10GBASE-SR | 10h | 00h | 00h | 00h | 67h (10.3 Gb/s) | 06h 64B/66B | 850 nm |
| 10GBASE-LR | 20h | 00h | 00h | 00h | 67h | 06h | 1310 nm |
| 10G passive DAC | 00h | 00h | 04h | 00h | 67h | 06h | 0, byte 60 = cable compliance |
| 25GBASE-SR | 00h | 00h | 00h | 02h | FFh (byte 66 = 67h → 25.75 Gb/s) | 06h | 850 nm |
| 25GBASE-LR | 00h | 00h | 00h | 03h | FFh / 67h | 06h | 1310 nm |
| 25G passive DAC CA-25G-N | 00h | 00h | 04h | 0Dh | FFh / 67h | 06h | 0 |
| 10G/25G dual-rate SR | 10h | 00h | 00h | 02h | FFh / 67h | 06h | 850 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)
| Byte | Contents |
|---|---|
| 131 — 10/40G Ethernet | bit 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 — SONET | OC-48 long / intermediate / short reach, 40G OTN |
| 133 — SAS/SATA | SAS 6 / 12 / 24 Gb/s |
| 134 — Gigabit Ethernet | bit 3 1000BASE-T, 2 1000BASE-CX, 1 1000BASE-LX, 0 1000BASE-SX |
| 135 — FC link length & technology | same bit meanings as SFP byte 7 |
| 136 — FC transmitter technology | EL, SN, SL, LL bits as SFP byte 8 |
| 137 — FC media | TW, TP, MI, TV, M6, M5, OM3, SM |
| 138 — FC speed | 100 … 3200 MB/s, extended flag |
| 164 — Extended module | InfiniBand rates: SDR, DDR, QDR, FDR, EDR |
| 192 — Extended compliance | Table 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
- Set only bits the hardware truly satisfies; declaring 10GBASE-LR on an SR module turns "no link" into "link with errors".
- Keep the whole identity consistent: compliance ↔ wavelength ↔ lengths ↔ encoding ↔ nominal rate ↔ connector ↔ transmitter technology.
- For 25G+ fill byte 36 / 192 and set byte 12 / 140 to FFh with the ×250 Mb/s rate in byte 66 / 222.
- For DAC, code the cable technology bits, the length in metres, connector 23h and the attenuation/compliance bytes instead of a wavelength.
- 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.