CodingBox Документация

Контрольные суммы: CC_BASE, CC_EXT, CC_DMI, страницы CMIS

Каждая спецификация управления защищает блок идентификации одной или несколькими контрольными суммами — одним байтом, по которому хост распознаёт испорченную или недописанную EEPROM, прежде чем поверить содержимому. Их тривиально вычислить и легко забыть: устаревшая сумма после правки — самая частая причина, по которой свежезакодированный модуль объявляется invalid.

Алгоритм

Все используют одно правило: сложить байты покрываемого диапазона как беззнаковые 8-битные значения и оставить младшие 8 бит суммы (сумма по модулю 256). Никакого CRC, никакого полинома.

sum = 0
для каждого байта b в диапазоне:
    sum = (sum + b) & 0xFF
checksum = sum

Пример — первые пять байтов SFP 10GBASE-SR: 03 04 07 10 00 → 3 + 4 + 7 + 16 + 0 = 30 = 1Eh. Продолжите до байта 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, живые мониторы и флаги, пороги страницы 03h QSFP и канальные страницы CMIS. Вендоры могут добавлять свои поля целостности в вендорском пространстве — к спецификации они не относятся.

Что делают с ними хосты

ПоведениеРезультат плохой суммы
Проверяют CC_BASE (большинство коммутаторов и маршрутизаторов)модуль показан как invalid, unsupported или EEPROM checksum error; порт может уйти в errdisable; лазер часто остаётся выключенным
Проверяют и CC_EXTто же или только запись в лог, в зависимости от платформы
Проверяют CC_DMIDDM показан как not supported или значения игнорируются; сам линк не затронут
Игнорируют суммы (многие NIC, часть открытых коммутаторов)модуль работает; ошибка всплывает только в утилитах

Отказ по сумме сообщается вместе с идентификацией, поэтому у модуля, у которого есть и проблема политики, одно сообщение скрывает другое — проверяйте суммы первыми, это дешёвое лечение. Карта симптомов: Индекс по симптомам.

Когда нужно пересчитывать

  • После правки чего угодно в покрываемых диапазонах — имени вендора, партномера, серийника, кода даты, кодов соответствия, длины волны, длин, опций, класса мощности.
  • После применения порогов или констант калибровки у SFP (CC_DMI).
  • После восстановления частичного образа с другого модуля.
  • Не нужно при изменениях в вендорском пространстве, пользовательской EEPROM или байтах управления A2h.

Порядок операций: правка → пересчёт всех затронутых сумм → запись → обратное чтение → проверка. Запись байта суммы до данных, которые он покрывает, оставляет окно, в котором пропадание питания даёт невалидный модуль.

Контрольные суммы и вендор-локи

Верные суммы необходимы, но недостаточны. Строгая платформа проверяет ещё блок вендора, а у залоченных конструкций — проприетарную сигнатуру в вендорском пространстве, о которой суммы спецификации ничего не знают. Пройденный CC_BASE при отвергнутой идентификации — случай вендор-лока, а не сумм — Вендор-лок, Поля вендора.

В CodingBox

CodingBox автоматически пересчитывает CC_BASE, CC_EXT, CC_DMI и суммы страниц CMIS при каждой записи и подсвечивает несовпадение при чтении модуля — красное поле суммы на Check transceiver или в редакторе EEPROM означает, что модуль правили в другом месте без исправления суммы, либо EEPROM повреждена.