Skip to content

Links that come up: breakout, FEC and auto-negotiation

S1·E3Twenty-four up, eight refusing · Dell lab, Round Rock, 02:10 on the pilot-rack bring-up

S1·E3Apply~30 minsources checked todaylab mutates hardwareverified against Cumulus Linux 5.18 Switch Port Attributes (re-fetched 2026-09-07), Cumulus Linux 5.13 Switch Port Attributes, NVUE interface reference, Cumulus Linux 5.18 What's New

Builds on: Choosing the switch: SN2201 through SN6800-LD

Before you read: what do you already know?

3 quick questions. Wrong answers are fine and expected; trying first makes the lesson stick.

After this lesson you can

  • Configure a breakout port with NVUE and predict the sub-port names and the resulting usable port count.
  • Apply the adjacent-even-port rule and write the /etc/cumulus/ports.conf equivalent of an NVUE breakout.
  • Choose an FEC mode from the media type and the peer ASIC and justify it from the documented rule.
  • Decide when auto-negotiation must be enabled and when speed must be forced instead.
  • Verify a link with the NVUE status, BER and transceiver views.

Episode 3 — Twenty-four up, eight refusing

The situation · Dell lab, Round Rock, 02:10 on the pilot-rack bring-up

The night-shift operator meets you at the cage door with a label maker in one hand and the rack elevation in the other. Handover to the customer’s network lead is at 08:00 and eight of the thirty-two host links will not come up. The rest of the rack is clean, which is the detail that matters: same optics, same cage type, different configuration path. Somebody has already started swapping transceivers, and you ask them to stop.

The failing ports came from an 8x breakout of one cage, and on an SN5600 an 8x breakout requires the adjacent even-numbered port to be disabled - which is exactly why the documented maximum is 256 ports at 100G rather than 512.[1] The inherited runbook also pins fec auto explicitly on every port, and the documentation warns that doing so causes a link flap on every commit.[2] On the two spine links you find auto-negotiation forced off: a reflex from SN4700 QSFP-DD ports, where the speed must be forced, applied to a Spectrum-4 to Spectrum-4 PAM4 link, where auto-negotiation must be enabled.[2][1]

Layer 1 has rules like these because a modern link negotiates far more than speed. FEC mode, precoding and equalisation are settled during training between two ASICs that each hold several valid options, and if the two ends do not agree the link either never trains or trains and then errors.[1]

Swap the configuration before you swap the optic.

Segment 1 starts at the cage.

1Breakout: one cage, many ports

A breakout splits the lanes of one cage into several logical ports. In NVUE it is one setting: nv set interface <interface-id> link breakout <mode-id> where the mode is 1x, 2x, 4x or 8x, with 1x as the default; this syntax replaced the older 4x10G style in Cumulus Linux 5.4.0.[3][2] The sub-ports that appear are named by suffix - a 4x breakout of swp1 yields swp1s0, swp1s1, swp1s2 and swp1s3.[2]

The canonical sequence stages both the split and the port state, then applies once:

nv set interface swp1 link breakout 4x
nv set interface swp1s0-3 link state up
nv config apply
[1]

Without NVUE the same change is a file edit: put 1=4x in /etc/cumulus/ports.conf, disable the adjacent port where the platform requires it, then systemctl reload switchd.service.[1] The adjacent-port rule is the part that bites: “Certain switches, such as the SN2700, SN4600, and SN4600c, require that you disable the subsequent even-numbered port when you configure a breakout port for 4x or 8x”, and the SN5600 shares that requirement for 8x.[1] NVUE performs the disable automatically, and SN3700, SN3700c, SN2201, SN2010 and SN2100 do not have the restriction at all.[2]

That rule explains the port maths. An SN5600 gives 64 ports at 800G native, 128 at 400G with 2x, 256 at 200G with 4x, and 256 at 100G or 50G using 8x on only 32 cages because each 8x consumes its neighbour.[1] An SN5400 gives 64x400G native, 128x200G, 256x100G and 256x50G from 32 odd ports, plus its two SFP28 bonus ports at 25G and 10G.[1] An SN2201 gives 4x100G native, 8x50G, 4x40G and 16x25G or 16x10G from its four QSFP28 cages.[9][1] On Spectrum-6, Cumulus Linux 5.18 notes that on the new SN6600_LD platform “1x break out at 800G” is unsupported and “interfaces are 2x split by default”.[6]

Spectrum-4 · 64 × OSFP 800G · 1 × SFP28 bonus portSN5600 series datasheet (JUL25)
SN5600 · swp1 · OSFP 800G · 8 lanes (100G PAM4)cage swp18 laneslink breakout4x4 sub-portsswp1s0 · 200Gswp1s1 · 200Gswp1s2 · 200Gswp1s3 · 200Glink layer 1fec unsetauto-neg onmax 256 × 200G on the SN560064 ports × 4
SN5600 · swp1 · 200G · DAC CA-25G-L (long, ≥5 m)

link breakout 1x | 2x | 4x | 8x

  • nv set interface <interface-id> link breakout <mode-id>, with mode-id one of 1x, 2x, 4x, 8x. Default is 1x.
  • This syntax arrived in Cumulus Linux 5.4.0. Older releases used forms like 4x10G — a customer config that still says 4x10G predates 5.4.0 and will not paste in.
  • The mode is a count, not a speed: 4x on an 800G OSFP cage gives 4 × 200G, 4x on a 400G QSFP-DD cage gives 4 × 100G.
  • nv unset interface <id> link breakout returns the cage to 1x.

FAE angle: "the port disappeared after breakout" is usually the mode arriving without the sub-ports being brought up — swp1 stops existing the moment swp1s0-3 exist.

NVUE interface set/unset reference · Switch Port Attributes, Cumulus Linux 5.18

Plan for swp14x
Sub-ports: swp1s0 swp1s1 swp1s2 swp1s3
Link layer 1: fec unset (default = auto) · auto-negotiate on
Fabric ceiling: 256 × 200G per SN5600 (64 ports × 4)
NVUE
nv set interface swp1 link breakout 4x
nv set interface swp1s0-3 link state up
# leave FEC unset — do NOT run: nv set interface swp1s0 link fec auto  (link flap on commit)
# media: DAC CA-25G-L (long, ≥5 m) — IEEE 802.3by long DAC class. Requires RS FEC.
nv set interface swp1s0 link mtu 9216   # 552-9216, the one setting you must set manually
nv config diff
nv config apply
Linux equivalent
# /etc/cumulus/ports.conf
1=4x

sudo systemctl reload switchd.service
Then verify (layer-1 triage)
nv show interface
nv show interface swp1s0 link          # speed, FEC, auto-negotiate state
nv show interface status
nv show interface --view ber           # effective BER, raw BER, symbol errors
nv show interface swp1s0 link phy health   # per-lane SNR, lane0..lane7
nv show platform transceiver
nv action reset platform transceiver <transceiver-id>

--view ber gives effective BER, raw BER and symbol errors; nv show interface --ber and the Beta --dom view are new in 5.18.0. Monitoring Interfaces and Transceivers with NVUE 5.18

Start at 200G on an SN5600 - a clean 4x with no adjacent-port cost - then switch the target speed to 100G and watch the cage count halve. Compare the NVUE and ports.conf forms side by side.

2FEC: let the default do its job

Forward error correction on Spectrum switches has four settings - auto (the default), rs, baser and off.[2][3] The standards behind the names: RS FEC is “IEEE 802.3 Clause 108 (CL108) on individual 25G channels and Clause 91 on 100G”, and Base-R or FireCode follows “IEEE 802.3 Clause 74 (CL74)”.[1] IEEE 802.3by defines three 25G direct-attach classes with a FEC requirement each: CA-25G-L (long, requires RS FEC), CA-25G-S (short, requires Base-R) and CA-25G-N (no FEC).[1]

Three documented rules do most of the work in the field. First, the trap: “Do not explicitly configure the fec auto option on the switch as this leads to a link flap whenever you run net commit or ifreload -a.”[2] Auto is already the default, so a runbook line setting it turns every routine commit into a flap. Second, optics that override you: on 100GBASE-DR1 “you must either set the FEC setting to off or leave it unset for the link to function”, while on 400GBASE-DR4 “the switch automatically enables FEC if it is set to off”.[1] Third, the pairing rule: “If auto-negotiation is disabled on 100G and 25G interfaces, you must set FEC to off, RS, or BaseR to match the neighbor.”[1]

3Auto-negotiation: the reflex that has to be unlearned

Auto-negotiation is on by default and is disabled with nv set interface swp1 link auto-negotiate off.[2][3] Two platform rules point in opposite directions and both are documented. On Spectrum-4: “When you connect an NVIDIA Spectrum-4 switch to another NVIDIA Spectrum-4 switch with PAM4 modulation, you must enable auto-negotiation.”[1] On Spectrum-3: the SN4700 and SN4410 do “not support auto-negotiation on QSFP-DD 400G transceiver modules. You need to force set the speed.”[2] An engineer whose muscle memory comes from forcing 400G ports on an SN4700 will apply the same habit on an SN5600 spine link and break it.

When you do force, the SN5600 adds a caveat on ports 10 through 50: “Rx precoding setting must be the same between local and peer ports to get the optimal Signal-Integrity of the link”.[1] Two other settings round out the interface surface: nv set interface <id> link duplex accepts full or half with full the default, and nv set interface <id> link mtu accepts a value “between 552 and 9216. The default setting is 9216”.[3] MTU is called out as “the only interface setting that you must set manually”, eth0 defaults to 1500, and a VNI must be 50 bytes below the physical MTU.[1][4]

Finally, know what a protected port looks like. Link flap protection is on by default and logs a string of the form “link flapped more than 3 times in the last 60 seconds, setting protodown”, surfaced as protodown_reason <linkflap>.[4] A port in that state was not killed by the switch at random; something below it is flapping.

Spectrum-4 · 64 × OSFP 800G · 1 × SFP28 bonus portSN5600 series datasheet (JUL25)
SN5600 · swp1 · OSFP 800G · 8 lanes (100G PAM4)cage swp18 laneslink breakout8x8 sub-portsswp1s0 · 100Gswp1s1 · 100Gswp1s2 · 100Gswp1s3 · 100Gswp1s4 · 100Gswp1s5 · 100Gswp1s6 · 100Gswp1s7 · 100Glink layer 1fec rsauto-neg offswp2 — cage consumed by 8xmax 256 × 100G on the SN560032 ports × 8 — disables the adjacent port
SN5600 · swp1 · 100G · 100GBASE-DR1 optic

FEC and auto-negotiation

  • FEC default is auto; the modes are rs (Reed-Solomon, IEEE 802.3 Clause 108/91), baser (Base-R / FireCode, Clause 74) and off.
  • Do not explicitly configure fec auto: it flaps the link on every net commit / ifreload -a. Leave it unset instead.
  • Auto-negotiation default is on; nv set interface swp1 link auto-negotiate off turns it off. With it off on 100G and 25G you must set FEC to off, RS or BaseR to match the neighbor.
  • 100GBASE-DR1: FEC off or unset. 400GBASE-DR4: the switch enables FEC even if you set off.
  • Spectrum-4 to Spectrum-4 over PAM4 requires auto-negotiation enabled — the opposite of the SN4700/SN4410 QSFP-DD 400G habit, where auto-negotiation is unsupported and you force the speed.
  • MTU: 552-9216, default 9216 (eth0 is 1500), and the only interface setting you must set manually. A VXLAN VNI MTU must be 50 bytes below the physical MTU.

FAE angle: the OS10/SONiC reflex — force speed, force FEC — is the exact wrong move on a Spectrum-4 PAM4 switch-to-switch link. Check order: breakout/adjacent port, then explicit fec auto, then FEC matching with auto-negotiation off, then the PAM4 auto-negotiation rule, then Rx precoding on SN5600 ports 10-50.

Switch Port Attributes, Cumulus Linux 5.18 · Switch Port Attributes, Cumulus Linux 5.13 · NVUE interface set/unset reference · Interface Configuration and Management 5.13

Plan for swp18x
Sub-ports: swp1s0 swp1s1 swp1s2 swp1s3 swp1s4 swp1s5 swp1s6 swp1s7
Link layer 1: fec rs — RS FEC, IEEE 802.3 Clause 108/91 · auto-negotiate off
Fabric ceiling: 256 × 100G per SN5600 (32 ports × 8 — disables the adjacent port)
8x on the SN5600 consumes the adjacent cage: only 32 of the 64 ports can run 8x (256 = 32 × 8). Plan swp1, swp3, swp5 … and leave the even port free.
NVUE
nv set interface swp1 link breakout 8x
nv set interface swp1s0-7 link state up
nv set interface swp1s0 link auto-negotiate off
nv set interface swp1s0 link speed 100G   # ⚠ speed token form not verified in the fetched docs
nv set interface swp1s0 link fec rs
# media: 100GBASE-DR1 optic — Set FEC to off, or leave it unset — anything else keeps the link down.
nv set interface swp1s0 link mtu 9216   # 552-9216, the one setting you must set manually
nv config diff
nv config apply
Linux equivalent
# /etc/cumulus/ports.conf
1=8x
2=disabled   # adjacent even port — NVUE does this for you

sudo systemctl reload switchd.service
Then verify (layer-1 triage)
nv show interface
nv show interface swp1s0 link          # speed, FEC, auto-negotiate state
nv show interface status
nv show interface --view ber           # effective BER, raw BER, symbol errors
nv show interface swp1s0 link phy health   # per-lane SNR, lane0..lane7
nv show platform transceiver
nv action reset platform transceiver <transceiver-id>

--view ber gives effective BER, raw BER and symbol errors; nv show interface --ber and the Beta --dom view are new in 5.18.0. Monitoring Interfaces and Transceivers with NVUE 5.18

A deliberately wrong combination: a DR1 optic with RS FEC forced and auto-negotiation off. Read the verdict, then fix one input at a time until the planner is clean.

4Proving the link, not assuming it

Cumulus Linux 5.18 gives a layer 1 view that ends most arguments.[5]

nv show interface status
nv show interface --view counters
nv show interface --view ber
nv show interface swp1s0 link phy health
nv show platform transceiver
nv show interface swp1s0 transceiver
nv action clear interface counters

[5] The --view ber output is a tabular summary with effective BER, raw BER and symbol errors; link phy health reports per-lane SNR across lane0 to lane7; the transceiver views give temperature, voltage, rx-power, tx-power, tx-bias-current and alarm thresholds.[5] The --ber PHY-health statistics and the --dom transceiver view (Beta) are new NVUE surfaces in 5.18.0.[6] On the SN5610 only, you can even set an optic temperature setpoint between 30 and 80 C with nv set platform transceiver <transceiver-id> temperature setpoint.[5]

One planning note that belongs here rather than in the telemetry module: high-frequency telemetry does not work on ports using 8 lanes, so on Spectrum-4 the native 800G ports swp1-swp64 need breakout before HFT can watch them.[7] Breakout is therefore not only a port-count decision; it decides what you can instrument later.[8]

Bring up eight 100G host links from one SN5600 cage

Goal: an SN5600 leaf must present eight 100G ports to hosts using a CA-25G-class-equivalent copper break-out cable from cage swp1, with auto-negotiation left at its default.

  1. Decide the mode. 100G from an 800G OSFP cage is 8x, which on the SN5600 consumes the adjacent cage - so plan on odd cages only (swp1, swp3, swp5 …) and expect a maximum of 256 such ports across the switch.[1]
  2. Stage the change:
    nv set interface swp1 link breakout 8x
    nv set interface swp1s0-7 link state up
    nv config apply
    NVUE disables the adjacent even port for you; the equivalent by hand would be 1=8x in /etc/cumulus/ports.conf with port 2 set to disabled, followed by systemctl reload switchd.service.[1]
  3. Leave FEC alone. The default is auto and explicitly writing fec auto would flap these ports on every future commit.[2] Leave auto-negotiation at its default on as well, since nothing here is an SN4700 QSFP-DD port.[2]
  4. Verify:
    nv show interface status
    nv show interface --view ber
    nv show platform transceiver
    Expect eight swp1sN entries up at 100G, low effective BER, and a transceiver entry for cage 1.[5]
  5. If a sub-port stays down, check the peer’s FEC first: with auto-negotiation disabled on the host side, “you must set FEC to off, RS, or BaseR to match the neighbor”, and a DAC in class CA-25G-L requires RS while CA-25G-S requires Base-R.[1]

Rollback: nv unset interface swp1 link breakout then nv config apply returns the cage to a single 800G port and removes the sub-ports.[3]

One change at a time, then read

How it ended

The fec auto line comes out of the runbook - auto is the default and writing it converts every future commit into a flap.[2] Auto-negotiation goes back on for the Spectrum-4 spine links.[1] The port map is rebuilt on odd cages only, so each 8x has its neighbour to spend.[1] Then nv show interface --view ber before anyone declares victory, because a link can be up and still correcting symbol errors.[5] What you say at handover: “No part was faulty. The configuration described a switch that cannot exist.” The operator labels each disabled cage NOT A PORT. ASK THE FAE. and goes home. At 08:04 the network lead looks up from a full page of notes: which software version is this rack running, and can we upgrade just the switches?

Lab

Mutating steps ahead. Needs a maintenance window, out-of-band access (BMC/iDRAC/rshim console) and a rollback path. Record the pre-flight inventory before changing anything. Never on a production host.

Mutating on the host side. Every step names its rollback; do not touch switch firmware.

  1. Pre-flight inventory on the Dell lab host. Record before changing anything:
    ip -br link
    sudo ethtool ens1f0np0 | head -20
    sudo ethtool -i ens1f0np0
    sudo ethtool --show-fec ens1f0np0
    Expected: current speed, duplex, auto-negotiation state, driver and firmware version, and the active FEC encoding. Save this output - it is the rollback reference for step 3.
  2. Read the installed optic and classify it:
    sudo ethtool -m ens1f0np0 | head -30
    Expected: identifier, connector, vendor name and part number, and for a DAC the cable length. Write down which 25G DAC class it corresponds to - CA-25G-L requires RS FEC, CA-25G-S requires Base-R, CA-25G-N requires none - and therefore which FEC a 25G peer would need.[1]
  3. Optional and mutating: change the FEC mode on one host interface that is not carrying lab traffic, and put it back.
    sudo ethtool --set-fec ens1f0np0 encoding rs
    sudo ethtool --show-fec ens1f0np0
    Expected: the link drops and re-trains. Rollback: re-apply the exact encoding you recorded in step 1, for example sudo ethtool --set-fec ens1f0np0 encoding auto, and confirm the interface returns to its original state with ethtool ens1f0np0. If the link does not come back, the peer is now mismatched - restore first, investigate second.[1]
  4. Optional, customer or partner lab with a live SN5600 and a 400G breakout port. Read only:
    nv show interface --view ber
    nv show interface swp1s0 link phy health
    nv show platform transceiver
    Expected: effective and raw BER, per-lane SNR for lane0 to lane7, and module temperature and power. Compare the per-lane SNR spread across the four sub-ports; one outlying lane is a cable or connector story, all four equally poor is a media or FEC story.[5]

Retrieval check

10 questions from memory. Answer before looking anything up; misses become flashcards.

Explain it to a Dell SE

Explain to a Dell lab technician in five sentences why forcing speed and FEC - the habit that works on OS10 - is the wrong first move on a Spectrum-4 link that will not come up.

14 flashcards for this lesson — 0 in deck. Spaced review lives at /review.

Sources

Facts in this lesson were checked against Cumulus Linux 5.18 Switch Port Attributes (re-fetched 2026-09-07), Cumulus Linux 5.13 Switch Port Attributes, NVUE interface reference, Cumulus Linux 5.18 What's New. Dates are when each page was fetched.

  1. Switch Port Attributes | Cumulus Linux 5.18 · fetched 2026-09-07
  2. Switch Port Attributes | Cumulus Linux 5.13 · fetched 2026-09-07
  3. NVUE Reference: Interface set/unset commands · fetched 2026-09-07
  4. Interface Configuration and Management | Cumulus Linux 5.13 · fetched 2026-09-07
  5. Monitoring Interfaces and Transceivers with NVUE | Cumulus Linux 5.18 · fetched 2026-09-07
  6. What's New | Cumulus Linux 5.18 · fetched 2026-09-07
  7. High Frequency Telemetry | Cumulus Linux 5.18 · fetched 2026-09-07
  8. NVIDIA Spectrum SN5600 Series Switches Datasheet (Dell-hosted) · fetched 2026-09-07
  9. NVIDIA Spectrum SN2201 Switch Datasheet (Dell-hosted) · fetched 2026-09-07
  10. Cumulus Linux 5.18 Release Notes · fetched 2026-09-07

The same idea elsewhere

Other lessons that cover this ground, sometimes from another course's angle.