CodingBox 說明文件

校驗和: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_BASEA0h 位元組 63A0h 位元組 0–62
SFF-8472CC_EXTA0h 位元組 95A0h 位元組 64–94
SFF-8472CC_DMIA2h 位元組 95A2h 位元組 0–94(閾值和校準常數)
SFF-8636 (QSFP)CC_BASE位元組 191上層頁面 00h 位元組 128–190
SFF-8636CC_EXT位元組 223位元組 192–222
INF-8077i (XFP)CC_BASE位元組 191位元組 128–190
INF-8077iCC_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_DMIDDM 顯示為不支援,或數值被忽略;鏈路本身不受影響
忽略校驗和(許多 NIC,部分開放式交換機)模組可以正常工作;錯誤只會在工具中顯示

校驗和錯誤和身份資訊問題會一起報告,因此如果模組同時存在策略限制問題,兩個消息會互相掩蓋,分不清究竟是哪一個;先檢查校驗和,這是成本最低的排查步驟。故障現象對照表: 故障現象索引

甚麼時候必須重新計算

  • 編輯覆蓋範圍內的任何內容之後:廠商名稱、型號、序號、日期代碼、合規代碼、波長、長度、選項、功率等級。
  • 在 SFP 上應用閾值或校準常數之後(CC_DMI)。
  • 從另一個模組恢復部分鏡像之後。
  • 廠商自定義區、用戶 EEPROM 或 A2h 控制位元組的更改不需要重新計算。

操作順序:編輯 → 重新計算所有受影響的校驗和 → 寫入 → 回讀 → 校驗。如果在數據寫入之前 先寫入校驗和位元組,就會留下一段時間窗口,一旦在此期間斷電,模組就會變成無效狀態。

校驗和與廠商鎖定

校驗和正確是必要條件,但不是充分條件。嚴格的平台還會檢查廠商資訊塊,在鎖定設計中,還會檢查廠商自定義區裏的一段專有簽名,而這段簽名是規範定義的校驗和完全不知道的。CC_BASE 校驗通過、但身份資訊仍被拒絕,這種情況屬於廠商鎖定問題,而不是校驗和問題,參見: 廠商鎖定廠商欄位

在 CodingBox 中

CodingBox 會在每次寫入時自動重新計算 CC_BASE、CC_EXT、CC_DMI 和 CMIS 頁校驗和,並在讀取模組時高亮顯示不匹配的情況:Check transceiverEEPROM editor 中出現紅色的校驗和欄位,說明模組在別處被編輯過但沒有修正校驗和,或者 EEPROM 已損壞。

各校驗和在相鄰位元組中的具體位置: SFF-8472 A0h(63、95), A2h(95), SFF-8636 上層頁(191、223), CMIS 上層頁(222、255), XFP(191、223)。


如果您發現本文有不準確之處或錯誤,請選取相應片段並按 Ctrl+Enter,即可