OVERLAY · mpls · reviewed
VPLS
Virtual Private LAN Service
Emulates one Ethernet segment across a provider network by meshing pseudowires between sites and learning MAC addresses from them.
Presenter modeEmbed this figure
Why it exists
An L3VPN gives a customer routing between sites. Some customers want the sites in one broadcast domain instead — for a cluster heartbeat, a protocol that will not route, or simply because the application was built that way.
VPLS emulates a single Ethernet segment. Each provider edge behaves like a bridge whose ports are pseudowires to the other sites, learning MAC addresses from traffic and flooding what it has not learned. Topological Model for VPLSRFC 4762 · PROPOSED STANDARD · January 2007
EVPN has largely replaced it for new deployments, because advertising MAC addresses in BGP removes the need to learn them by flooding — and with them the all-active multihoming problem VPLS never solved.
A switch made of tunnels
Each provider edge behaves like a bridge whose ports are pseudowires. Split horizon on the mesh does the job spanning tree would otherwise have to.
The customer wants one broadcast domain across three sites. Not routing between them — one segment, as though the sites were patched into the same switch. Site A: Wants one L2 domain. PE1. PE2. PE3. Site B.
- Link
- Blocking
- Packet in flight
- Discarded
- Emphasis
Text equivalent of this diagram
| Element | Kind | State |
|---|---|---|
| Site A | zone | Wants: one L2 domain |
| PE1 | router | — |
| PE2 | router | — |
| PE3 | router | — |
| Site B | zone | — |
| Site A — PE1 | link | up · attachment circuit |
| PE1 — PE2 | link | up · pseudowire |
| PE1 — PE3 | link | up · pseudowire |
| PE2 — PE3 | link | up · pseudowire |
| PE2 — Site B | link | up · attachment circuit |
The customer wants one broadcast domain across three sites. Not routing between them — one segment, as though the sites were patched into the same switch.
What changed
- Site A: Wants → one L2 domain
- Emphasis on Site A
How it works
The pseudowires between participating PEs form a full mesh. A frame arriving on one pseudowire is never forwarded out another — split horizon on the mesh is the entire loop-prevention design, and it works only because every PE already received the frame directly. Loop free VPLSRFC 4762 · PROPOSED STANDARD · January 2007
Learning is in the data plane. A PE records the source MAC of every frame against the circuit or pseudowire it arrived on, floods unknown unicast and broadcast to every pseudowire, and ages entries out. Address LearningRFC 4762 · PROPOSED STANDARD · January 2007
Signalling comes in two forms with one data plane. LDP names each pseudowire explicitly; BGP auto-discovers members and advertises label blocks, so adding a site is a change on that site alone. Auto-DiscoveryRFC 4761 · PROPOSED STANDARD · January 2007
MAC withdrawal lets a PE tell the others to flush specific addresses after a topology change, rather than waiting out the ageing timer with traffic going to the wrong site. MAC Address WithdrawalRFC 4762 · PROPOSED STANDARD · January 2007
On the wire
Constructed examples, encoded from the field table below them — not captured traffic.
- MPLS
- Stacked after the link-layer header, before the inner IP or Ethernet payload. RFC 3032
Configure it
set routing-instances CUST-A instance-type vpls set routing-instances CUST-A interface ge-0/0/1.0 set routing-instances CUST-A route-distinguisher 65000:100 set routing-instances CUST-A vrf-target target:65000:100The route target is what defines membership. Every PE with the same target discovers the others through BGP — no peer is named anywhere.
RFC 4761 §3.1
set routing-instances CUST-A protocols vpls site SITE-A site-identifier 1 set routing-instances CUST-A protocols vpls site-range 32The site identifier is the VE ID. It must be unique in the instance and reasonably dense: the label block is sized by the range, so a sparse allocation wastes label space at every PE.
Common mistake: Reusing a site identifier at two PEs. The two sites then compute each other’s labels wrongly and the pseudowire between them never carries traffic correctly.
RFC 4761 §3.2.1
set forwarding-options storm-control-profiles PROTECT all bandwidth-percentage 1 set routing-instances CUST-A interface ge-0/0/1.0 forwarding-options storm-control-profile PROTECTThe line that decides whether one customer’s bridging loop becomes twenty sites’ outage. There is no spanning tree in the core to stop it.
RFC 4762 §4.1
set routing-instances CUST-A protocols vpls mac-table-size 500 set routing-instances CUST-A protocols vpls interface ge-0/0/1.0 mac-limit 100Every PE holds every MAC in the instance, so one customer’s large or misbehaving domain fills the table for everyone on that PE. The limit is a service parameter, not a safety net.
RFC 4762 §4.2
set routing-instances CUST-A protocols vpls mac-flushSends an explicit flush after a topology change instead of waiting out the ageing timer with traffic going to the site the host has left.
RFC 4762 §6.2
Verify
show vpls connections- Every pseudowire and its state — a partial mesh is visible here and nowhere else.
show vpls mac-table- What this PE has learned, and against which circuit or pseudowire.
show vpls statistics- Flood volume, which is what rises before an incident.
show route table CUST-A.l2vpn.0- The BGP advertisements that discovered the members.
Caveats
- Split horizon assumes a full mesh. Two PEs that reach a third but not each other simply cannot communicate, and every other check looks healthy.
- Site identifiers must be unique and dense; the label block is sized from the range.
- Without storm control at the edge a customer loop is replicated to every site.
When it breaks
Symptom first, because that is what you have when it happens.
Every site of one customer degrades at once, and the provider core shows a large rise in broadcast traffic.
Narrow it down
- Find the attachment circuit with the highest broadcast rate — the storm has one origin.
- Check whether MAC tables at remote PEs are churning between pseudowires.
- Confirm whether storm control is configured on that circuit.
Cause
A bridging loop inside one customer site. VPLS replicates broadcast to every pseudowire because that is what an emulated LAN does, so one site’s loop becomes every site’s loop.
Fix
Rate-limit broadcast and unknown unicast per attachment circuit, and set a MAC limit. Containment is at the edge; there is nothing in the core to stop it.
Flooding and ForwardingRFC 4762 · PROPOSED STANDARD · January 2007Two sites cannot reach each other while both reach every other site normally.
Narrow it down
- List the pseudowires at each PE and compare against the membership list.
- Look for a pseudowire configured at one end only.
- Check whether a third PE has both as neighbours, which is what makes it look healthy.
Cause
The mesh is not full. Split horizon forbids forwarding between pseudowires, so a PE that can reach both cannot relay between them.
Fix
Complete the mesh, or move to BGP auto-discovery so membership is advertised rather than configured.
Loop free VPLSRFC 4762 · PROPOSED STANDARD · January 2007A PE stops learning new addresses and traffic for known hosts starts flooding.
Narrow it down
- Check the MAC table size against the platform limit.
- Group the entries by attachment circuit to find which customer is responsible.
- Look for MAC churn, which inflates the table with the same addresses.
Cause
Every PE holds every customer MAC in the instance. One customer with a large or misbehaving layer-two domain fills the table for everyone on that PE.
Fix
Set a per-circuit MAC limit, and treat the limit as a service parameter rather than a safety net.
A host moves between sites and traffic keeps going to the old one for minutes.
Narrow it down
- Check whether MAC withdrawal is enabled and being sent.
- Compare the ageing timer against the observed delay.
- Look for a gratuitous ARP that would have corrected it and did not arrive.
Cause
Without MAC withdrawal the old entry has to age out. Data-plane learning cannot know a move happened until something arrives from the new location.
Fix
Enable MAC withdrawal so a topology change flushes the affected addresses deliberately.
MAC Address WithdrawalRFC 4762 · PROPOSED STANDARD · January 2007A pseudowire is signalled and shown as up, and no traffic crosses it.
Narrow it down
- Check whether a transport LSP exists to the remote provider edge’s loopback.
- Confirm the LDP session that signalled the pseudowire is targeted rather than link-local.
- Look at whether the pseudowire label is being imposed on a stack with nothing underneath it.
Cause
A pseudowire needs two labels: its own, and a transport label to reach the far PE. Signalling establishes the first, and the second comes from the underlying MPLS network — which can be missing entirely while the pseudowire reports itself healthy.
Fix
Verify the transport LSP to the far loopback separately from the pseudowire. They fail independently and only one of them says so.
LDP-Based Signaling of DemultiplexersRFC 4762 · PROPOSED STANDARD · January 2007
Design notes
Put storm control and a MAC limit on every attachment circuit before the service is turned up. A loop inside one customer site is replicated to every other site by design, and the provider core has no spanning tree to save it.
A partial mesh is worse than a missing site. Split horizon assumes a full mesh, so two PEs that peer with a third but not with each other simply cannot reach each other — and every other check looks healthy.
Prefer BGP signalling where BGP is already deployed. The data plane is identical, and the difference is whether adding a site is one change or one change per existing site.
For a new build, look at EVPN first. Learning MACs in the control plane removes the flooding, gives all-active multihoming, and turns MAC mobility into an advertisement rather than a race between ageing timers.
Misconceptions
- “Spanning tree protects a VPLS from loops.”
- There is no spanning tree in the core. Loop prevention is split horizon on the pseudowire mesh, which handles loops between pseudowires and nothing else. Customer BPDUs are carried as data, not acted upon. Loop free VPLSRFC 4762 · PROPOSED STANDARD · January 2007
- “BGP-signalled and LDP-signalled VPLS are different services.”
- The data plane is the same Ethernet-over-MPLS pseudowire. What differs is how members find each other and how labels are allocated — a provisioning difference, not a forwarding one. Auto-DiscoveryRFC 4761 · PROPOSED STANDARD · January 2007
- “EVPN is VPLS with BGP signalling.”
- BGP-signalled VPLS already exists and still learns MACs by flooding. EVPN advertises MAC addresses in BGP, which is what removes the flooding, enables all-active multihoming, and makes mobility an advertisement instead of a race between ageing timers.
- “A VPLS instance is just a VLAN stretched over the WAN.”
- It behaves like one and is built completely differently: a mesh of pseudowires, per-PE MAC tables learned from tunnelled traffic, and no shared spanning tree. The differences surface exactly when something goes wrong.
More walkthroughs
Two ways to build the same meshdesign-choice
LDP signals each pseudowire and needs every peer named. BGP discovers the peers and hands out label blocks, so adding a site touches one device.
With LDP signalling each pseudowire is configured at both ends. A twenty-first PE means twenty new configurations on twenty existing routers. New PE: LDP 20 neighbours to configure. Route reflector. Twenty existing PEs.
- Link
- Blocking
- Packet in flight
- Discarded
- Emphasis
Text equivalent of this diagram
| Element | Kind | State |
|---|---|---|
| New PE | router | LDP: 20 neighbours to configure |
| Route reflector | router | — |
| Twenty existing PEs | zone | — |
| New PE — Route reflector | link | up |
| Route reflector — Twenty existing PEs | link | up |
| New PE — Twenty existing PEs | link | standby |
With LDP signalling each pseudowire is configured at both ends. A twenty-first PE means twenty new configurations on twenty existing routers.
What changed
- New PE: LDP → 20 neighbours to configure
- Emphasis: 20 touches
The customer looped their switch and took out the WANfailure
A broadcast storm in one site is replicated to every other site, because that is what an emulated LAN is for.
Someone patches two access switches together at Site A. The customer’s own spanning tree should catch it; it has been disabled on that VLAN. Site A · looped: Broadcast rate rising. PE1. Provider core. Every other site.
- Link
- Blocking
- Packet in flight
- Discarded
- Emphasis
Text equivalent of this diagram
| Element | Kind | State |
|---|---|---|
| Site A · looped | zone | Broadcast rate: rising |
| PE1 | router | — |
| Provider core | cloud | — |
| Every other site | zone | — |
| Site A · looped — PE1 | link | up |
| PE1 — Provider core | link | up |
| Provider core — Every other site | link | up |
Someone patches two access switches together at Site A. The customer’s own spanning tree should catch it; it has been disabled on that VLAN.
What changed
- Emphasis: Bridging loop
- Site A · looped: Broadcast rate → rising
Terms
- Pseudowire
- An emulated point-to-point circuit over an MPLS tunnel. In VPLS the pseudowires between provider edges are the ports of an emulated switch.
- VPLS split horizon
- The rule that a frame arriving on one pseudowire is never sent out another. It is the only loop prevention in a VPLS core, and it works only because the mesh is full.
- MAC withdrawal
- A message telling other provider edges to flush specific addresses after a topology change, instead of waiting out the ageing timer while traffic goes to the site a host has left.