When should FEC be enabled or disabled on 100G optics?
Symptoms
After inserting a 100G transceiver, you might see:
- •Interface stuck in “down” or “err-disabled” state
- •Link flapping repeatedly
- •High CRC or FCS error counters
- •Elevated bit error rate (BER)
- •Packet loss on a link that shows “up”
Nine times out of ten, this is an FEC mismatch between the transceiver and the host device.
Background
Forward Error Correction (FEC) adds redundant data to a signal so the receiver can detect and fix bit errors without asking for retransmission. On 100G links, whether you enable FEC on the host depends on whether the transceiver already handles it internally.
Why some transceivers have built-in FEC
Single-lambda transceivers (FR1, DR1, LR1, ER1) push the full 100G over one wavelength using PAM4 modulation. PAM4 has four signal levels instead of two, which makes it noisier. To deal with that, these transceivers have a DSP with FEC baked in. If you also turn on host FEC, you get double correction, and that actually introduces errors instead of fixing them.
Multi-lambda transceivers (CWDM4, ER4, ZR4, ZR+) split 100G across four wavelengths at 25G each using NRZ modulation. NRZ is simpler, and these transceivers don’t have their own FEC. The host device has to provide it (typically RS-FEC).
The short version
Transceiver has built-in FEC → disable FEC on the host
Transceiver does not have built-in FEC → enable FEC on the host
Both ends of the link must use the same FEC setting. A mismatch (one side enabled, the other disabled) will keep the link down. This is the single most common misconfiguration we see.
FEC configuration by transceiver type
| Type | Form Factor | Modulation | Built-in FEC? | Reach | FEC on host | IEEE Standard |
|---|---|---|---|---|---|---|
| 100G FR1 | QSFP28, SFP-DD | PAM4 | Yes | 2 km | Disabled | 802.3cd |
| 100G DR1 | QSFP28 | PAM4 | Yes | 500 m | Disabled | 802.3cd |
| 100G LR1 | QSFP28, SFP-DD | PAM4 | Yes | 10 km | Disabled | 802.3cd |
| 100G ER1 | QSFP28 | PAM4 | Yes | 40 km | Disabled | 802.3cd |
| 100G CWDM4 | QSFP28 | NRZ (4x25G) | No | 2 km | Enabled | 802.3bm |
| 100G ER4 | QSFP28 | NRZ (4x25G) | No | 40 km | Enabled | 802.3ba |
| 100G ZR4 | QSFP28 | NRZ (4x25G) | No | 80 km | Enabled | OIF |
| 100G ZR+ | QSFP28 | NRZ (4x25G) | No | 120+ km | Enabled | Proprietary |
Troubleshooting
| Scenario | Symptom | What’s happening | Fix |
|---|---|---|---|
| Host FEC enabled on a transceiver with built-in FEC | Link is up but CRC/FCS errors climb, intermittent packet loss | Double error correction is corrupting data | Disable FEC on the host |
| Host FEC disabled on a transceiver without built-in FEC | Link won’t come up, or keeps flapping | Nothing is correcting errors on a link that needs it | Enable FEC on the host |
| FEC mismatch between link ends | Link stays down on both sides | One side has FEC on, the other has it off | Match FEC settings on both ends |
How to verify
- Figure out your transceiver type. Run show inventory or show interfaces transceiver on the device.
- Look it up in the table above.
- Check FEC status on both ends of the link, not just one.
- If you changed FEC, bounce the interface (shut / no shut). The change won’t take effect otherwise.
CLI examples by platform
Cisco NX-OS
! Enable FEC
interface Ethernet1/1fec rs-fec! Disable FEC
interface Ethernet1/1no fecArista EOS
! Enable FEC
interface Ethernet1error-correction encoding reed-solomon! Disable FEC
interface Ethernet1no error-correction encodingJuniper Junos
# Enable FEC
set interfaces et-0/0/0 gigether-options fec fec91# Disable FEC
set interfaces et-0/0/0 gigether-options fec noneSONiC
# Enable FEC
sudo config interface fec Ethernet0 rs# Disable FEC
sudo config interface fec Ethernet0 noneChecking current FEC state
| Platform | Command |
|---|---|
| Cisco NX-OS | show interface Ethernet1/1 fec |
| Arista EOS | show interfaces Ethernet1 status |
| Juniper Junos | show interfaces et-0/0/0 extensive |
| SONiC | show interfaces status |
FAQ:
What happens if FEC is enabled on both the host and the transceiver?
Transceivers like FR1, DR1, LR1, and ER1 already run FEC internally on their DSP. If you also turn on host FEC, the signal gets corrected twice — and that second pass actually introduces errors instead of fixing them. You'll see CRC/FCS counters climbing and intermittent packet loss, even though the link shows as up. Disable host FEC and the problem goes away.
Do both ends of the link need the same FEC setting?
Yes, always. If one end has FEC on and the other has it off, the link stays down. We see this constantly — someone swaps a transceiver, forgets to check the remote side, and spends hours troubleshooting what turns out to be a one-command fix. Check both ends first. It will save you time.
How do I know if my 100G transceiver has built-in FEC?
Look at the modulation. Single-lambda PAM4 optics (FR1, DR1, LR1, ER1) have a DSP that handles FEC internally — leave the host alone. Multi-lambda NRZ optics (CWDM4, ER4, ZR4, ZR+) split the signal across four 25G wavelengths and have no built-in correction, so the host needs to provide RS-FEC. If you're unsure, check the transceiver type with show inventory and match it against the table in this article.