チェックサム:CC_BASE、CC_EXT、CC_DMI、CMIS ページ
どの管理仕様も、識別ブロックを1つ以上のチェックサムで保護しています。これは、ホストが内容を信頼する前に破損または書きかけの EEPROM を検出できるようにする1バイトの値です。計算は簡単ですが忘れやすく、編集後にチェックサムを更新し忘れることが、コーディングしたばかりのモジュールがinvalidと報告される最も多い原因です。
アルゴリズム
すべて同じ規則に従います。対象範囲のバイトを符号なし8ビット値として加算し、合計の下位8ビットを保持する(合計を256で割った余り)。CRC も多項式も使いません。
sum = 0
for each byte b in range:
sum = (sum + b) & 0xFF
checksum = sum
例 — 10GBASE-SR SFP の最初の5バイト:03 04 07 10 00 → 3 + 4 + 7 + 16 + 0 = 30 = 1Eh。バイト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 のページ 03h のしきい値、CMIS のレーンページです。ベンダーは独自の整合性フィールドをベンダー領域に追加することがありますが、それらは仕様の一部ではありません。
ホストの挙動
| 挙動 | チェックサム不正時の結果 |
|---|---|
| CC_BASE を検証する(ほとんどのスイッチとルーター) | モジュールが invalid、unsupported、EEPROM checksum error のいずれかとして表示される。ポートが errdisable になることがある。レーザーが無効のままになることが多い |
| CC_EXT も検証する | 同様、またはプラットフォームによってはログに記録されるだけ |
| CC_DMI を検証する | DDM が not supported と表示されるか、値が無視される。リンク自体には影響しない |
| チェックサムを無視する(多くの 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)。