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:
| Threshold | Meaning |
|---|---|
| High alarm | value above this → module may be failing or link unusable |
| High warning | approaching the high limit |
| Low warning | approaching the low limit |
| Low alarm | value 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):
| Bytes | Parameter (HA, LA, HW, LW) |
|---|---|
| 0–7 | Temperature |
| 8–15 | Vcc |
| 16–23 | Tx bias |
| 24–31 | Tx power |
| 32–39 | Rx power |
| 40–55 | optional 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 bytes | Contents |
|---|---|
| 110 | status/control: TX_DISABLE state, RS0/RS1 state, TX_FAULT, RX_LOS, data-ready |
| 112–113 | alarm flags — one bit per parameter, high and low |
| 116–117 | warning 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.