Checksum: CC_BASE, CC_EXT, CC_DMI, pagine CMIS
Ogni specifica di gestione protegge il proprio blocco di identità con uno o più checksum — un singolo byte che permette all’host di rilevare una EEPROM corrotta o scritta a metà prima di fidarsi del contenuto. Sono banali da calcolare e facili da dimenticare: un checksum non aggiornato dopo una modifica è la causa più comune per cui un modulo appena codificato viene segnalato come invalid.
L’algoritmo
Usano tutti la stessa regola: sommare i byte dell’intervallo coperto come valori senza segno a 8 bit e conservare gli 8 bit bassi della somma (somma modulo 256). Nessun CRC, nessun polinomio.
sum = 0
per ogni byte b nell’intervallo:
sum = (sum + b) & 0xFF
checksum = sum
Esempio — i primi cinque byte di un SFP 10GBASE-SR: 03 04 07 10 00 → 3 + 4 + 7 + 16 + 0 = 30 = 1Eh. Continua fino al byte 62 e il risultato è CC_BASE.
Dove vive ciascun checksum
| Specifica | Checksum | Posizione | Copre |
|---|---|---|---|
| SFF-8472 (SFP) | CC_BASE | A0h byte 63 | A0h byte 0–62 |
| SFF-8472 | CC_EXT | A0h byte 95 | A0h byte 64–94 |
| SFF-8472 | CC_DMI | A2h byte 95 | A2h byte 0–94 (soglie e costanti di calibrazione) |
| SFF-8636 (QSFP) | CC_BASE | byte 191 | pagina superiore 00h byte 128–190 |
| SFF-8636 | CC_EXT | byte 223 | byte 192–222 |
| INF-8077i (XFP) | CC_BASE | byte 191 | byte 128–190 |
| INF-8077i | CC_EXT | byte 223 | byte 192–222 |
| CMIS | checksum di pagina | pagina 00h byte 222 | pagina 00h byte 128–221 |
| CMIS | checksum di pagina | pagina 01h byte 255 | pagina 01h byte 130–254 (128–129 contengono la versione del firmware inattivo e sono esclusi) |
| CMIS | checksum di pagina | pagina 02h byte 255 | pagina 02h byte 128–254 |
| CMIS | checksum di pagina | pagina 04h byte 255 | pagina 04h byte 128–254 |
Non coperti da alcun checksum: le aree specifiche del produttore (SFP A0h 96–127, QSFP 224–255, CMIS 223–255), l’EEPROM utente, i monitor e i flag in tempo reale, le soglie della pagina 03h di QSFP e le pagine di lane di CMIS. I produttori possono aggiungere propri campi di integrità nello spazio del produttore — questi non fanno parte della specifica.
Cosa fanno gli host con essi
| Comportamento | Risultato di un checksum errato |
|---|---|
| Convalidano CC_BASE (la maggior parte di switch e router) | il modulo viene mostrato come invalid, unsupported o EEPROM checksum error; la porta può passare a errdisable; il laser spesso resta spento |
| Convalidano anche CC_EXT | lo stesso, oppure solo una voce di log, a seconda della piattaforma |
| Convalidano CC_DMI | il DDM viene mostrato come not supported oppure i valori sono ignorati; il collegamento in sé non ne risente |
| Ignorano i checksum (molte NIC, alcuni switch aperti) | il modulo funziona; l’errore emerge solo negli strumenti |
Un errore di checksum viene segnalato insieme all’identità, quindi un modulo che ha anche un problema di policy mostra un messaggio che ne nasconde un altro — verifica prima i checksum, è la correzione più economica. Mappa dei sintomi: Indice dei sintomi.
Quando devi ricalcolare
- Dopo aver modificato qualsiasi cosa negli intervalli coperti — nome del produttore, numero di parte, numero di serie, date code, codici di conformità, lunghezza d’onda, lunghezze, opzioni, classe di potenza.
- Dopo aver applicato soglie o costanti di calibrazione su SFP (CC_DMI).
- Dopo aver ripristinato un’immagine parziale da un altro modulo.
- Non necessario per modifiche nello spazio del produttore, nell’EEPROM utente o nei byte di controllo A2h.
Ordine delle operazioni: modificare → ricalcolare ogni checksum interessato → scrivere → rileggere → verificare. Scrivere il byte di checksum prima dei dati che copre lascia una finestra in cui un’interruzione di corrente produce un modulo non valido.
Checksum e blocchi del produttore
I checksum corretti sono necessari, ma non sufficienti. Una piattaforma rigorosa verifica anche il blocco del produttore e, sui progetti bloccati, una firma proprietaria nello spazio del produttore di cui i checksum della specifica non sanno nulla. Superare CC_BASE con un’identità rifiutata sembra un caso di blocco del produttore, non un caso di checksum — Blocco del produttore, Campi del produttore.
In CodingBox
CodingBox ricalcola automaticamente CC_BASE, CC_EXT, CC_DMI e i checksum di pagina CMIS a ogni scrittura ed evidenzia una discrepanza durante la lettura di un modulo — un campo checksum rosso su Check transceiver o nell’EEPROM editor significa che il modulo è stato modificato altrove senza correggerlo, oppure che l’EEPROM è corrotta.
Dove si colloca ciascun checksum tra i byte vicini: SFF-8472 A0h (63, 95), A2h (95), SFF-8636 superiore (191, 223), pagine superiori CMIS (222, 255), XFP (191, 223).