Skip to content

Layer 2 that survives a reload: bridges, bonds, MLAG and VRR

S2·E3Both bonds down, one host, 02:40 · Bridge call with the customer's NOC, you at the kitchen table, six days from acceptance

S2·E3Apply~35 minsources checked todaylab mutates hardwareverified against Cumulus Linux 5.18 documentation, fetched 2026-09-07

Builds on: The NVUE object model, revisions and snippets

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

  • Build a VLAN-aware bridge with access ports and SVIs, respecting the reserved VLAN ranges.
  • Configure an 802.3ad bond and an MLAG pair with a legal system MAC, peer link and backup IP.
  • Diagnose a protodown bond from the LACP partner MAC mismatch symptom and clear it.
  • Explain why VRR is the anycast gateway for an MLAG pair and what it cannot coexist with.

Episode 3 — Both bonds down, one host, 02:40

The situation · Bridge call with the customer's NOC, you at the kitchen table, six days from acceptance

One GPU host is isolated: both members of its bond are protodown on an MLAG pair, every other host on that pair is fine, and a server engineer is already on the bridge running tcpdump on the switch and getting nothing for it. Nobody changed anything, they say, except that the second MLAG pair went in on Saturday — cabled beautifully, every port tagged, because the night-shift operator had the label maker out again. The labels are perfect. What is underneath one of them is a copy.

Two facts end the call quickly. The switch log carries “lacp partner mac mismatch”, and the recovery is nv action clear mlag lacp-conflict — but clearing before you fix the duplicate MLAG system MAC just protodowns the bonds again seconds later.[4] And the capture is not evidence: on a Cumulus switch tcpdump sees only control-plane traffic to and from the CPU, never the data plane.[9]

MLAG exists because a server team wants two switches for redundancy and one bond for simplicity, and those wishes contradict each other. The pair answers a host as a single LACP identity, using a system MAC from a reserved range, and it synchronizes dynamic state while never synchronizing configuration.[4] Everything protective in that design, protodown included, is there to stop two switches answering as two different partners on one host bond — which is what a duplicated system MAC quietly creates.

One pair, one identity: the reserved-range MAC is per pair, never per template.

Layer 2 that survives a reload is what the rest of this lesson builds.

1One bridge, many VLANs

NVIDIA is unambiguous: “NVIDIA recommends that you use VLAN-aware mode bridges instead of traditional mode bridges.”[2] The default bridge is br_default and it ships “with no ports assigned”, so nothing is bridged until you say so.[1] The canonical block is four lines:[1]

nv set interface swp1-2 bridge domain br_default
nv set bridge domain br_default vlan 10,20
nv set bridge domain br_default untagged 1
nv config apply

An access port is nv set interface swp1 bridge domain br_default access 10; an SVI on the single default bridge is nv set interface vlan10 ip address 10.1.10.2/24.[1] When more than one VLAN-aware bridge exists you must name the SVI explicitly with type svi, vlan, base-interface and an address - but note the two hard limits that usually end that idea: “You cannot use MLAG with multiple VLAN-aware bridges” and “You cannot use the same port with multiple VLAN-aware bridges.”[1]

Three VLAN ranges get confused constantly, so learn them as a set. User VLANs are 2-4094. The internal reserved range defaults to 3725-3999 and moves with nv set system global reserved vlan internal range 4064-4094. L3 VNI VLANs default to 4000-4064. And VLAN 4094 belongs to the MLAG peer link.[1][4] Scale is per ASIC generation: “Spectrum 1: 10,000 VLAN elements maximum”; “Spectrum 2 & later: 15,996 elements (warm reboot off) or 7,934 (warm reboot on)”.[1]

MTU is the one interface setting the documentation says “you must set manually”, with a range of 552 to 9216 and a default of 9216 on switch ports; eth0 defaults to 1500.[8][7] Two other facts save time later: “A bridge cannot contain multiple subinterfaces of the same port”; and the MAC table view is nv show bridge domain br_default mac-table.[2] Cumulus Linux 5.18 adds nv set bridge default-vlan <vlan-id> and nv set bridge domain <domain-id> arp-inspection.[12]

2Bonds, and the LACP details that decide whether a host boots

nv set interface bond1 bond member swp1-4 builds a bond, where swp1-4 is range notation for swp1 through swp4.[3] The defaults are sensible for an AI fabric and worth quoting from memory: mode is “IEEE 802.3ad link aggregation mode” (bond mode static selects balance-xor instead), LACP rate is fast, MII monitor interval is 100 ms, minimum active links is 1, and transmit hash policy is layer3+4.[3]

LACP bypass is disabled by default and exists for one real case: it “allows a bond configured in 802.3ad mode to become active and forward traffic even when there is no LACP partner” - a server PXE-booting before its OS bonding driver exists.[6] With MLAG and all-active bonds, “all the slaves of the bond are active on both the primary and secondary MLAG nodes”, and NVIDIA recommends pinning PXE to one physical NIC in the boot configuration so simultaneous boot requests do not fail.[6] All-active mode “is only supported on bonds specified as bridge ports on the switch”.[6]

Rendering diagram…
Diagram source (Mermaid)
flowchart TB
  H["host bond0 - LACP fast - layer3+4 hash"]
  H --- L1["leaf01 bond1 - mlag id 1"]
  H --- L2["leaf02 bond1 - mlag id 1"]
  L1 === PL["peerlink bond carrying peerlink.4094"]
  PL === L2
  L1 -. backup IP over eth0 .- L2
  L1 --- S["spine01"]
  L2 --- S
  V["vlan10 SVI with VRR virtual MAC live on both leaves"] --- L1
  V --- L2
One host bond, one MLAG id on both leaves, the peer link carrying peerlink.4094, and the backup IP deliberately taking a different path from the peer link. VRR makes the vlan10 gateway live on both leaves at once.

3MLAG: the six settings and the one that is not obvious

MLAG makes two switches present one LACP identity to a dual-attached host. Six settings do the work:[4]

nv set mlag mac-address 44:38:39:FF:00:AA
nv set mlag backup 10.10.10.2
nv set mlag peer-ip linklocal
nv set mlag priority 2084
nv set mlag init-delay 100
nv set interface bond1 bond mlag id 1
nv config apply

The system MAC must come from the reserved range 44:38:39:ff:00:00 - 44:38:39:ff:ff:ff, must differ per MLAG pair, and cannot be multicast.[4] The peer link must be the bond named peerlink carrying the subinterface peerlink.4094, and “Do not add VLAN 4094 to the bridge VLAN list”.[4] The MLAG id (clag-id) runs 1-65535, 0 disables MLAG on that bond, and it must match on both peers for the same dual-connected bond.[4] Priority defaults to 32768 over a 0-65535 range, lower wins primary, and if priorities tie the role is decided by MAC comparison.[4] init-delay defaults to 180 seconds with “Recommendation for scaled environments: 300 seconds”, and it resets to 0 when the peer is unreachable past the reload timeout, when the peer sends a goodbye, or when both MLAG sessions start simultaneously.[4]

The setting that surprises people migrating from Dell OS10 VLT is the backup IP. It “must differ from peer link IP address”, should be a loopback or management address, and takes an optional VRF form nv set mlag backup 10.10.10.2 vrf mgmt.[4] A VLT engineer expects the keepalive to be a routed link near the peer link; in Cumulus the backup path exists precisely so that it fails independently of the peer link.

Verify with nv show mlag, which returns state, peer-ip, local-role, peer-alive, backup-active and mac-address.[4] Two operational rules complete the picture: “MLAG synchronizes dynamic state… but does not synchronize switch configurations”, and “Always enable STP in your layer 2 network and BPDU Guard on host-facing bond interfaces.”[4] For sizing: “Determine how much bandwidth is traveling across single-connected interfaces and set half of that bandwidth to the peer link.”[4]

4The two calls you will actually take

Call one: my bonds are protodown. The log strings are “lacp partner mac mismatch”, duplicate-partner-mac and partner-mac-mismatch, and the recovery action is nv action clear mlag lacp-conflict.[4] The clear is the last step, not the first: the two causes are a host bonded into two different MLAG pairs, and one MLAG system MAC reused across two pairs. Clear before fixing and the bonds protodown again in seconds.

Call two: traffic black-holed for three minutes after a reload. That is init-delay, 180 seconds by default, doing its job.[4] The fix is a scheduling conversation, not a configuration change - and at scale the documented recommendation moves it up to 300 seconds, not down.[4]

VRR is the anycast gateway that makes the pair usable at layer 3. It works by “activating the virtual MAC on both MLAG devices, allowing either device to handle frames it receives”.[5] Configuration is two lines per SVI:[5]

nv set interface vlan10 ipv4 vrr address 10.1.10.1/24
nv set interface vlan10 ipv4 vrr state enabled
nv config apply

The default virtual MAC is 00:00:5E:00:01:01, custom values must sit inside 00:00:5E:00:01:00-00:00:5E:00:01:FF, and there is one absolute constraint: “You cannot configure both VRR and VRRP on the same switch.”[5]

SymptomBlueField-3 on a Dell Pow…SymptomBring-up: card, rshim, B…SymptomDev / environment: build…SymptomDell platform: POST, iDR…SymptomSRv6: a SID is configure…
Symptom

BlueField-3 on a Dell PowerEdge: what is the symptom?

Walk a symptom to a cause. If the tree opens on the BlueField root rather than an MLAG branch, use the printed order in this segment instead: protodown bonds go partner MAC first, black holes after a reload go init-delay first, and a one-sided VLAN goes to the fact that MLAG never synchronizes configuration.

5Building it, and the SONiC contrast a Dell account will ask for

Worked -> faded -> problem: an MLAG pair with a dual-attached host

Design. leaf01 and leaf02, host server01 dual-attached with one LACP bond. VLAN 10 with a VRR gateway at 10.1.10.1/24. Peer link swp49-50. Backup over eth0.

Step 1 - both switches, identically except for addresses. MLAG never synchronizes configuration, so every line below runs twice.[4]

# leaf01
nv set interface swp49-50 bond member peerlink            # build the peer-link bond
nv set mlag mac-address 44:38:39:FF:00:AA                 # reserved range, unique per pair
nv set mlag peer-ip linklocal
nv set mlag backup 192.0.2.42                             # leaf02 eth0 - NOT the peerlink address
nv set mlag priority 2084                                 # lower wins primary
nv set mlag init-delay 180

Step 2 - the bridge and the host bond, same MLAG id on both peers.[1][3][4]

nv set interface bond1 bond member swp1
nv set interface bond1 bond mlag id 1
nv set interface bond1 bridge domain br_default access 10
nv set bridge domain br_default vlan 10,20

Step 3 - the anycast gateway.[5]

nv set interface vlan10 ip address 10.1.10.2/24           # .3/24 on leaf02
nv set interface vlan10 ipv4 vrr address 10.1.10.1/24     # identical on both
nv set interface vlan10 ipv4 vrr state enabled
nv config apply

Step 4 - verify in the documented order. nv show mlag for state, local-role, peer-alive and backup-active; then nv show bridge domain br_default mac-table to confirm the host MAC is learned; then a ping from the host to 10.1.10.1 from each member in turn.[4][2]

Step 5 - break it deliberately. Configure the same 44:38:39:FF:00:AA on a second pair the host also touches. Expected: bonds protodown with “lacp partner mac mismatch”. Fix the MAC on the second pair, then nv action clear mlag lacp-conflict.[4]

Rollback for each mutating step. nv config apply --confirm <time> for the whole block, plus the explicit inverses: nv unset mlag mac-address, nv unset interface bond1 bond mlag id, nv unset interface vlan10 ipv4 vrr state.

Franco’s own lab runs Dell Enterprise SONiC 4.5.1, and the mapping question comes up on every Dell account. Three concepts port directly: a peer link, a keepalive, and a LAG id per dual-attached host. One does not: Cumulus’s backup IP is deliberately out of band on the management or loopback path, whereas a VLT engineer expects a routed keepalive adjacent to the peer link.[4] Two commercial facts belong in the same conversation. Dell’s Enterprise SONiC compatibility matrix for release 4.4.0 lists only Broadcom-NPU PowerSwitch platforms - Tomahawk 5, Tomahawk 4, Trident 4 and older - with no NVIDIA Spectrum platform on the list.[11] And Dell Enterprise SONiC is bundle-gated: VXLAN and VXLAN EVPN appear only in the Enterprise Standard, Enterprise Premium and Lite bundles, not the Cloud bundles.[11] So “we will just run SONiC on the Spectrum box” is a question about which box and which bundle, not a preference about CLI.

What the NOC writes in the ticket

How it ended

The duplicate system MAC on the new pair goes first; only then nv action clear mlag lacp-conflict, and the bonds come back and stay back.[4] You ask for nv show mlag from both peers rather than one, because local-role, peer-alive and backup-active from a single side is half a picture.[4] The three-minute black hole they saw after last week’s reload was init-delay working as designed, and at scale the documented number moves up to 300 seconds, not down.[4]

What you say: “Your gateway was never at risk — VRR keeps it live on both leaves. The bond was the only thing failing.”[5]

Monday the hosts run their first full training job. By the afternoon the network lead has a chart: spine01 near 80 percent, spine02 near 20.

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.

Goal. There is no MLAG pair in the Dell lab, so verify the host half of the contract: the LACP partner MAC that the switch side depends on.

Pre-flight inventory:

ip -br link ; ip -br addr                 > before.txt
nmcli connection show 2>/dev/null        >> before.txt   # or your distro's equivalent
cat /proc/net/bonding/* 2>/dev/null      >> before.txt
  1. On a host with two ConnectX ports, create an 802.3ad bond across both, matching the switch defaults you learned: LACP rate fast, transmit hash policy layer3+4.[3] Expected: ip -br link shows the bond and both members. Rollback: delete the bond and restore the two interfaces from before.txt.
  2. Read the host’s view: cat /proc/net/bonding/bond0. Expected: an aggregator id and, for each member, a partner MAC. If your switch ports are on the same MLAG pair, the partner MAC is identical on both members - that is the exact condition whose absence protodowns the switch side.[4]
  3. Now create the failure in the safe direction: move one member to a port on a different switch that is not in the same MLAG pair. Expected: /proc/net/bonding/bond0 shows two different partner MACs and the aggregator splits. Rollback: move the cable back.
  4. Write the one-paragraph explanation you would give a customer’s server team about why the switch protodowns a bond it could technically forward on.
  5. Bonus, no mutation: ethtool <iface> and ip -d link show bond0 to record speed, duplex and the bonding parameters actually in force, so you can compare them with what the switch believes.

Optional, customer lab. Bond the same host to a real MLAG pair and compare nv show mlag on both peers - state, local-role, peer-alive, backup-active - against the host’s partner MAC view.[4] Read-only on the switches; take no action beyond nv show.

Retrieval check

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

Explain it to a Dell SE

Explain to a Dell engineer who knows VLT, in five sentences, how a Cumulus MLAG pair keeps a dual-attached host alive, and which single mistake protodowns both bonds.

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 documentation, fetched 2026-09-07. Dates are when each page was fetched.

  1. VLAN-aware Bridge Mode | Cumulus Linux 5.18 · fetched 2026-09-07
  2. Ethernet Bridging - VLANs | Cumulus Linux 5.18 · fetched 2026-09-07
  3. Bonding - Link Aggregation | Cumulus Linux 5.18 · fetched 2026-09-07
  4. Multi-Chassis Link Aggregation - MLAG | Cumulus Linux 5.18 · fetched 2026-09-07
  5. Virtual Router Redundancy - VRR | Cumulus Linux 5.18 · fetched 2026-09-07
  6. LACP Bypass | Cumulus Linux 5.18 · fetched 2026-09-07
  7. Interface Configuration and Management | Cumulus Linux 5.13 · fetched 2026-09-07
  8. Switch Port Attributes | Cumulus Linux 5.18 · fetched 2026-09-07
  9. Network Troubleshooting | Cumulus Linux 5.18 · fetched 2026-09-07
  10. Upgrading Cumulus Linux | Cumulus Linux 5.18 · fetched 2026-09-07
  11. Dell Enterprise SONiC Distribution Compatibility Matrix Release 4.4.0 · fetched 2026-09-07
  12. New and Removed NVUE Commands | Cumulus Linux 5.18 · fetched 2026-09-07
  13. NVIDIA DSX Air User Guide · fetched 2026-09-07

The same idea elsewhere

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