校驗和:CC_BASE、CC_EXT、CC_DMI 與 CMIS 頁面
每份管理規範都會用一個或多個校驗和來保護自己的身份資訊塊,校驗和是一個位元組,讓主機在信任 EEPROM 內容之前,先判斷它是否損壞或寫了一半。校驗和的計算很簡單,卻很容易被遺忘:編輯之後忘記更新校驗和,是剛編碼完的模組被判定為無效最常見的原因。
算法
所有校驗和都遵循同一規則:把覆蓋範圍內的位元組當作無符號 8 位數值相加,只保留和的低 8 位 (對 256 取模)。不使用 CRC,也不涉及多項式。
sum = 0
對範圍內的每個字節 b:
sum = (sum + b) & 0xFF
checksum = sum
示例:某 10GBASE-SR SFP 的前五個位元組為 03 04 07 10 00 → 3 + 4 + 7 + 16 + 0 = 30 = 1Eh。一直加到 byte 62,結果就是 CC_BASE。
各校驗和的位置
| 規範 | 校驗和 | 位置 | 覆蓋範圍 |
|---|---|---|---|
| SFF-8472 (SFP) | CC_BASE | A0h 位元組 63 | A0h 位元組 0–62 |
| SFF-8472 | CC_EXT | A0h 位元組 95 | A0h 位元組 64–94 |
| SFF-8472 | CC_DMI | A2h 位元組 95 | A2h 位元組 0–94(閾值和校準常數) |
| SFF-8636 (QSFP) | CC_BASE | 位元組 191 | 上層頁面 00h 位元組 128–190 |
| SFF-8636 | CC_EXT | 位元組 223 | 位元組 192–222 |
| INF-8077i (XFP) | CC_BASE | 位元組 191 | 位元組 128–190 |
| INF-8077i | CC_EXT | 位元組 223 | 位元組 192–222 |
| CMIS | 頁校驗和 | 頁面 00h 位元組 222 | 頁面 00h 位元組 128–221 |
| CMIS | 頁校驗和 | 頁面 01h 位元組 255 | 頁面 01h 位元組 130–254(128–129 保存備用固件版本,不計入校驗) |
| CMIS | 頁校驗和 | 頁面 02h 位元組 255 | 頁面 02h 位元組 128–254 |
| CMIS | 頁校驗和 | 頁面 04h 位元組 255 | 頁面 04h 位元組 128–254 |
沒有任何校驗和覆蓋的區域:廠商自定義區(SFP A0h 96–127、QSFP 224–255、CMIS 223–255)、用戶 EEPROM、即時監測值和旗標、QSFP page 03h 的閾值,以及 CMIS 通道頁。廠商可以在廠商自定義區中加入自己的完整性校驗欄位,但那些不屬於規範的一部分。
主機如何處理校驗和
| 行為 | 校驗和錯誤時的結果 |
|---|---|
| 校驗 CC_BASE(大多數交換機和路由器) | 模組顯示為無效、不支援或EEPROM 校驗和錯誤;端口可能被 errdisable;激光器通常保持關閉 |
| 同時校驗 CC_EXT | 結果相同,或者只記錄日誌,取決於具體平台 |
| 校驗 CC_DMI | DDM 顯示為不支援,或數值被忽略;鏈路本身不受影響 |
| 忽略校驗和(許多 NIC,部分開放式交換機) | 模組可以正常工作;錯誤只會在工具中顯示 |
校驗和錯誤和身份資訊問題會一起報告,因此如果模組同時存在策略限制問題,兩個消息會互相掩蓋,分不清究竟是哪一個;先檢查校驗和,這是成本最低的排查步驟。故障現象對照表: 故障現象索引。
甚麼時候必須重新計算
- 編輯覆蓋範圍內的任何內容之後:廠商名稱、型號、序號、日期代碼、合規代碼、波長、長度、選項、功率等級。
- 在 SFP 上應用閾值或校準常數之後(CC_DMI)。
- 從另一個模組恢復部分鏡像之後。
- 廠商自定義區、用戶 EEPROM 或 A2h 控制位元組的更改不需要重新計算。
操作順序:編輯 → 重新計算所有受影響的校驗和 → 寫入 → 回讀 → 校驗。如果在數據寫入之前 先寫入校驗和位元組,就會留下一段時間窗口,一旦在此期間斷電,模組就會變成無效狀態。
校驗和與廠商鎖定
校驗和正確是必要條件,但不是充分條件。嚴格的平台還會檢查廠商資訊塊,在鎖定設計中,還會檢查廠商自定義區裏的一段專有簽名,而這段簽名是規範定義的校驗和完全不知道的。CC_BASE 校驗通過、但身份資訊仍被拒絕,這種情況屬於廠商鎖定問題,而不是校驗和問題,參見: 廠商鎖定, 廠商欄位。
在 CodingBox 中
CodingBox 會在每次寫入時自動重新計算 CC_BASE、CC_EXT、CC_DMI 和 CMIS 頁校驗和,並在讀取模組時高亮顯示不匹配的情況:Check transceiver 或 EEPROM editor 中出現紅色的校驗和欄位,說明模組在別處被編輯過但沒有修正校驗和,或者 EEPROM 已損壞。
各校驗和在相鄰位元組中的具體位置: SFF-8472 A0h(63、95), A2h(95), SFF-8636 上層頁(191、223), CMIS 上層頁(222、255), XFP(191、223)。