Checksum: CC_BASE, CC_EXT, CC_DMI, các trang CMIS
Mọi đặc tả quản lý đều bảo vệ khối nhận dạng của mình bằng một hoặc nhiều checksum — một byte duy nhất giúp host phát hiện một EEPROM bị hỏng hoặc ghi dở trước khi tin vào nội dung của nó. Chúng tầm thường để tính nhưng dễ quên: một checksum lỗi thời sau khi chỉnh sửa là lý do phổ biến nhất khiến một module vừa được mã hóa lại bị báo là invalid.
Thuật toán
Tất cả đều dùng chung một quy tắc: cộng các byte trong phạm vi được bao phủ như các giá trị 8-bit không dấu và giữ lại 8 bit thấp của tổng (tổng theo modulo 256). Không CRC, không đa thức.
sum = 0
với mỗi byte b trong phạm vi:
sum = (sum + b) & 0xFF
checksum = sum
Ví dụ — năm byte đầu tiên của một SFP 10GBASE-SR: 03 04 07 10 00 → 3 + 4 + 7 + 16 + 0 = 30 = 1Eh. Tiếp tục đến hết byte 62 thì kết quả chính là CC_BASE.
Mỗi checksum nằm ở đâu
| Đặc tả | Checksum | Vị trí | Phạm vi |
|---|---|---|---|
| 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 (ngưỡng và các hằng số hiệu chuẩn) |
| SFF-8636 (QSFP) | CC_BASE | byte 191 | trang trên 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 trang | trang 00h byte 222 | trang 00h byte 128–221 |
| CMIS | checksum trang | trang 01h byte 255 | trang 01h byte 130–254 (128–129 chứa phiên bản firmware không hoạt động và bị loại trừ) |
| CMIS | checksum trang | trang 02h byte 255 | trang 02h byte 128–254 |
| CMIS | checksum trang | trang 04h byte 255 | trang 04h byte 128–254 |
Không được checksum nào bao phủ: các vùng riêng nhà sản xuất (SFP A0h 96–127, QSFP 224–255, CMIS 223–255), EEPROM người dùng, các giám sát và cờ trực tiếp, ngưỡng trang 03h của QSFP, và các trang làn của CMIS. Nhà sản xuất có thể thêm các trường toàn vẹn riêng của họ trong vùng nhà sản xuất — những trường đó không phải một phần của đặc tả.
Host làm gì với chúng
| Hành vi | Kết quả khi checksum sai |
|---|---|
| Kiểm tra CC_BASE (hầu hết switch và router) | module hiển thị là invalid, unsupported hoặc EEPROM checksum error; cổng có thể vào errdisable; laser thường bị giữ tắt |
| Kiểm tra cả CC_EXT | như trên, hoặc chỉ ghi log, tùy nền tảng |
| Kiểm tra CC_DMI | DDM hiển thị là not supported hoặc giá trị bị bỏ qua; bản thân liên kết không bị ảnh hưởng |
| Bỏ qua checksum (nhiều NIC, một số switch mở) | module vẫn hoạt động; lỗi chỉ lộ ra trong các công cụ |
Lỗi checksum được báo cáo cùng với thông tin nhận dạng, nên một module vừa có vấn đề checksum vừa có vấn đề chính sách sẽ chỉ hiện một thông báo che khuất thông báo kia — hãy kiểm tra checksum trước, đó là cách khắc phục rẻ nhất. Bản đồ triệu chứng: Chỉ mục triệu chứng.
Khi nào cần tính lại
- Sau khi chỉnh sửa bất cứ điều gì trong các phạm vi được bao phủ — tên nhà sản xuất, mã sản phẩm, số sê-ri, mã ngày, mã tuân thủ, bước sóng, các chiều dài, tùy chọn, cấp công suất.
- Sau khi áp dụng ngưỡng hoặc các hằng số hiệu chuẩn trên SFP (CC_DMI).
- Sau khi khôi phục một ảnh một phần từ module khác.
- Không cần thiết đối với thay đổi trong vùng nhà sản xuất, EEPROM người dùng hoặc các byte điều khiển A2h.
Thứ tự thao tác: chỉnh sửa → tính lại mọi checksum bị ảnh hưởng → ghi → đọc lại → xác minh. Ghi byte checksum trước dữ liệu mà nó bao phủ sẽ để lại một khoảng hở, nơi mất điện có thể tạo ra một module không hợp lệ.
Checksum và khóa nhà sản xuất
Checksum đúng là điều kiện cần, không phải điều kiện đủ. Một nền tảng nghiêm ngặt còn kiểm tra khối riêng của nhà sản xuất và, trên các thiết kế bị khóa, một chữ ký độc quyền trong vùng nhà sản xuất mà các checksum của đặc tả hoàn toàn không biết tới. CC_BASE đúng nhưng thông tin nhận dạng bị từ chối trông giống một trường hợp khóa nhà sản xuất, không phải trường hợp checksum — Khóa nhà sản xuất, Trường của nhà sản xuất.
Trong CodingBox
CodingBox tự động tính lại CC_BASE, CC_EXT, CC_DMI và các checksum trang của CMIS ở mỗi lần ghi, và tô sáng khi phát hiện sai lệch lúc đọc một module — một trường checksum màu đỏ trên Check transceiver hoặc trong EEPROM editor nghĩa là module đã bị chỉnh sửa ở nơi khác mà không sửa lại checksum, hoặc EEPROM bị hỏng.
Mỗi checksum nằm ở đâu giữa các byte lân cận: SFF-8472 A0h (63, 95), A2h (95), SFF-8636 trang trên (191, 223), các trang trên của CMIS (222, 255), XFP (191, 223).