CodingBox Documentation

Thresholds, alarms & flags

A module does not just report values — it also carries the limits those values are judged against and raises flags when a limit is crossed. The switch reads all of this from module memory; it invents none of it. That is why two identical-looking modules can behave differently on the same link.

Four thresholds per parameter

Every DDM parameter has four factory-programmed limits:

ThresholdMeaning
High alarmvalue above this → module may be failing or link unusable
High warningapproaching the high limit
Low warningapproaching the low limit
Low alarmvalue below this → e.g. Rx below receiver sensitivity

They define three zones: normal (between the warnings), warning (between a warning and the matching alarm) and alarm (beyond an alarm). A healthy 10 km module might ship with Rx thresholds of roughly +0.5 / −2 / −18 / −22 dBm (HA / HW / LW / LA) — but every vendor sets its own.

Where they are stored — SFF-8472

A2h bytes 0–39, two bytes per threshold, same units as the monitors (Parameters & units):

BytesParameter (HA, LA, HW, LW)
0–7Temperature
8–15Vcc
16–23Tx bias
24–31Tx power
32–39Rx power
40–55optional extended thresholds (laser temp, TEC)

Order within each group is high alarm, low alarm, high warning, low warning.

Flags — what the host actually acts on

A2h bytesContents
110status/control: TX_DISABLE state, RS0/RS1 state, TX_FAULT, RX_LOS, data-ready
112–113alarm flags — one bit per parameter, high and low
116–117warning flags — one bit per parameter, high and low

The module sets a flag when a value crosses its threshold and clears it when it returns. A host that shows "Rx power low alarm" is reading bit 1 of byte 113 — nothing more. Whether flags are implemented at all is declared in A0h byte 93 bit 7.

QSFP and CMIS

The same model applies, with per-lane flags:

  • SFF-8636 — module thresholds on upper page 03h bytes 128–175 (temperature, Vcc), channel thresholds bytes 176–223 (Rx power, Tx bias, Tx power); flags in the lower page bytes 3–14 (LOS/fault/LOL in 3–5, temperature and Vcc alarms in 6–7, per-lane power and bias alarms in 9–14).
  • CMIS — module thresholds on page 02h, lane thresholds further on the same page; module flags in lower bytes 8–13, lane flags on page 11h bytes 134–153.

See Per-lane diagnostics.

Why "no alarm" is not "healthy"

Thresholds are the module maker's opinion of its own limits, not the link's. Common consequences:

  • Generous thresholds — a module whose low-Rx alarm sits at −24 dBm will stay silent on a receiver that already errors at −20 dBm.
  • Fictitious Tx — a constant Tx value can never cross a threshold.
  • Link budget is about margin, not limits: a link at −17 dBm with a −18 dBm warning has 1 dB of margin and will fail on the first dirty connector.

Operational alerting should therefore use your own baselines and deltas (Monitoring), with module flags as a backstop.

Editing thresholds

Because thresholds live in module memory, they can be read and rewritten. Legitimate uses: restoring sane limits on a module coded with zeros, aligning a fleet, or setting a tighter warning to get earlier notice. The protected A2h area normally requires the module's password.

In CodingBox

The DDM screen draws the module's alarm and warning thresholds directly on the charts and colours values by zone. Threshold bytes 0–39 and flags 112–117 are visible and editable in the EEPROM editor with checksum CC_DMI (byte 95) recalculated on write.