OMP looks like BGP and is frequently explained by that comparison, which gets you about half way. Both distribute reachability from many speakers through a reflector, both carry attributes, both run a deterministic selection algorithm. The difference that matters is that OMP does not advertise a prefix with a next hop — it advertises a prefix with a tunnel endpoint identity, and that identity has to be independently reachable before the prefix is usable at all.
That indirection is the source of most confusion. A prefix can be present, valid and correctly chosen, and still not be installed, because the tunnel endpoint it points at cannot be reached. The route table and the tunnel table are two separate things that have to agree, and reading one without the other produces a confident and wrong conclusion. Anyone who has stared at a route that is clearly there while traffic clearly does not flow has met this.
This article covers what OMP actually advertises — three distinct kinds of thing, not one — what a tunnel endpoint identity is made of and why it is the unit of path selection, the selection algorithm in order, how centralised policy changes what an edge receives, and the failures that read as routing problems and are resolution problems. It is written for the lab rather than for the written exam, and sits alongside the rest of the CCIE Enterprise Infrastructure lab certification track.
OMP advertises prefixes, tunnel endpoints and services as three separate things. A prefix points at a tunnel endpoint rather than a next hop, and that endpoint must be independently reachable.
What Does OMP Actually Advertise?
What are the three kinds?
Prefixes from the service side, each pointing at a tunnel endpoint rather than at a next hop. Tunnel endpoint identities themselves, which is what those prefixes point at. And service advertisements, saying that a particular kind of appliance is available at a site, which is what service chaining consumes. They are separate advertisement types with separate tables, and a problem in one does not necessarily show in the others.
A Deeper Dive into the Advertisements
What gets advertised, and what does not
An edge advertises what it has been told to advertise, per protocol and per service context. This is not automatic: routes learned from a branch's routing protocol do not enter the overlay unless the configuration says to include that protocol. A branch whose prefixes are missing from everyone else's tables, with a healthy control connection, is nearly always missing one line of this.
! Nothing enters the overlay unless it is advertised
sdwan
omp
no shutdown
graceful-restart
advertise connected
advertise static
advertise ospf external
address-family ipv4
advertise bgp
exit
exit
!
! Confirm what this edge is putting into the overlay
Edge# show sdwan omp routes advertised
Edge# show sdwan omp summary | include advertised|received
Reading the route table properly
The output carries a status field, and it is the field that answers most questions. Chosen means selection picked it. Installed means it reached the forwarding table. Resolved means the tunnel endpoint it names was found. A route that is chosen and not installed has failed at resolution, and that single distinction separates a policy question from a tunnel question.
! The status letters are the whole diagnosis
Edge# show sdwan omp routes vpn 10
PATH ATTRIBUTE
VPN PREFIX FROM PEER ID LABEL STATUS TLOC IP COLOR
--------------------------------------------------------------------------------
10 10.10.20.0/24 10.255.0.2 12 1002 C,I,R 10.255.1.12 mpls
10 10.10.20.0/24 10.255.0.2 13 1002 R 10.255.1.12 biz-internet
10 10.10.30.0/24 10.255.0.2 14 1003 C,R 10.255.1.13 mpls
! ^ chosen and resolved,
! but NOT installed
!
! Full detail for one prefix, including every attribute
Edge# show sdwan omp routes vpn 10 10.10.20.0/24 detail
The tunnel endpoint table
Separate from the routes, and the place to look the moment a route is chosen and not installed. It lists every endpoint the edge knows about, with its addresses, its preference and weight, and — critically — whether it is up. An endpoint present but not up means the control plane knows about a site the data plane cannot currently reach.
! Every tunnel endpoint this edge has learned
Edge# show sdwan omp tlocs
ADDRESS PUBLIC PUBLIC
FAMILY TLOC IP COLOR ENCAP IP PORT STATUS
-----------------------------------------------------------------------
ipv4 10.255.1.12 mpls ipsec 10.1.12.1 12386 C,I,R
ipv4 10.255.1.12 biz-internet ipsec 203.0.113.42 12386 C,I,R
ipv4 10.255.1.13 mpls ipsec 10.1.13.1 12386 C,R
!
! And whether a live tunnel exists to it
Edge# show sdwan bfd sessions
! ^ A TLOC without a BFD session is why a route stays
! chosen and uninstalled.
Labels and how a prefix reaches the right context
Each service-side routing context is identified by a label carried with the advertisement, which is what allows one pair of tunnels between two sites to carry traffic for many isolated contexts without them mixing. The tunnel is shared; the label keeps the contexts apart. This is the same idea as a label-switched VPN and it has the same consequence: two sites need one tunnel pair regardless of how many isolated networks they exchange.
Practically, this matters when a prefix arrives in the wrong context or not at all. The context identifier has to match at both ends for traffic to land where it should, and a mismatch produces a prefix that is present in the overlay and absent from the context somebody is looking in. Checking which context a route was received into is a distinct step from checking whether it was received.
Service advertisements
A site can announce that it hosts a firewall or another inspection service, and central policy can then direct traffic through it. The advertisement is what makes the service addressable by policy rather than by address, which is what allows a policy to say "send this through the firewall" without naming where the firewall is. It is a separate table again, and an empty one on a site that should be offering a service is the first thing to check when a service chain does not engage.
! Advertising a service from the site that hosts it
vrf definition 10
!
sdwan
service FW address 10.10.10.250
!
! What services the overlay knows about
Edge# show sdwan omp services
ADDRESS PATH
FAMILY VPN SERVICE ORIGINATOR FROM PEER ID LABEL STATUS
---------------------------------------------------------------------
ipv4 10 FW 10.255.1.11 10.255.0.2 22 1005 C,I,R
The three tables side by side
| Table | Holds | Command | Empty means |
|---|---|---|---|
| OMP routes | Prefixes and the endpoint each points at | show sdwan omp routes |
Nothing advertised, or policy filtered it |
| TLOCs | Tunnel endpoint identities | show sdwan omp tlocs |
No transports learned — check the control plane |
| Services | Services offered per site | show sdwan omp services |
No site advertised one |
| BFD sessions | Which tunnels are actually alive | show sdwan bfd sessions |
No data plane, whatever the routes say |
What Is a TLOC and Why Is It the Unit of Path Selection?
What is it made of?
Three values: the router's system address, a colour naming the transport, and the encapsulation. Change any one of them and it is a different endpoint. A router with two circuits therefore advertises two endpoints that share a system address and differ in colour, and a policy that prefers one circuit over another is selecting between those two — not between routers, and not between prefixes.
A Deeper Dive into TLOCs
Why selection happens at the endpoint rather than the prefix
Every prefix from a site points at that site's endpoints, so preferring a transport is a statement about the endpoint and applies automatically to every prefix behind it. That is a considerable simplification: expressing "prefer the private circuit to this branch" is one value on one endpoint, not a policy applied to each of the branch's prefixes. It also explains why a transport failure withdraws everything behind it at once rather than prefix by prefix.
! Preference on the endpoint, not on the prefixes
sdwan
interface GigabitEthernet2
tunnel-interface
color mpls
preference 200
! ^ higher wins; every prefix behind this site
! now prefers the private circuit
exit
exit
interface GigabitEthernet1
tunnel-interface
color biz-internet
preference 100
exit
exit
!
Edge# show sdwan omp tlocs | include preference
Weight, which is a different mechanism from preference
Preference selects: the higher value wins and the other endpoint is not used while it is up. Weight distributes: among endpoints that survived selection, traffic is shared in proportion to the weight. A site with two equal circuits that should both carry traffic wants equal preference and weights reflecting their capacity, and a site with a primary and a standby wants different preferences. Using preference where weight was meant produces an idle circuit somebody is paying for.
! Same preference, unequal weights = both used, 2:1
sdwan
interface GigabitEthernet1
tunnel-interface
color biz-internet
preference 100
weight 2
exit
exit
interface GigabitEthernet3
tunnel-interface
color public-internet
preference 100
weight 1
exit
exit
!
! Confirm both are chosen, not just one
Edge# show sdwan omp tlocs | include biz-internet|public-internet
Edge# show sdwan omp routes vpn 10 10.10.20.0/24 detail | include tloc|weight|status
Why an endpoint identity has to include the colour
If an endpoint were just the router, a site with two circuits would have one identity and there would be no way to express a preference between its circuits — the whole point of having two would be lost to the control plane. Including the colour makes each circuit separately addressable by policy, separately preferable, and separately withdrawable when it fails. That last property matters most: a circuit failing withdraws one endpoint and leaves the other advertising normally.
Including the encapsulation serves the same purpose one level down. Two endpoints that differ only in encapsulation are genuinely different tunnels with different properties, and treating them as one would make it impossible to prefer between them. The three-part identity is the minimum that lets policy address what operators actually want to address.
Colour restriction
By default an endpoint will attempt a tunnel to endpoints of any colour, which is what allows a branch on broadband to reach a hub on a private circuit through whatever path exists. Marking a colour as restricted limits it to endpoints of the same colour, which is how a private circuit is prevented from attempting tunnels across the internet. It is a small keyword with a large effect on the resulting tunnel count.
! Restrict: only build tunnels to the same colour
sdwan
interface GigabitEthernet2
tunnel-interface
color mpls restrict
exit
exit
!
! Without restrict, this endpoint would also try to reach
! biz-internet endpoints at other sites - usually pointless
! on a private circuit and a source of failed tunnel attempts.
!
Edge# show sdwan bfd sessions | include mpls
Edge# show sdwan control local-properties | include restrict
Preference and weight compared
| Attribute | Effect | Higher value | Use for |
|---|---|---|---|
| TLOC preference | Selects — the loser is unused | Wins | Primary and standby circuits |
| TLOC weight | Distributes among survivors | Gets proportionally more | Two active circuits of unequal size |
| OMP route preference | Selects, and is compared first | Wins | Preferring a whole site or prefix set |
restrict |
Limits which colours may pair | — | Keeping a private circuit private |
show sdwan omp tlocs shows different preference values; show sdwan bfd sessions shows both up. Fix: set equal preference and use weight to express the intended ratio.How Does OMP Choose Between Paths?
What is the order?
Validity first — a path whose endpoint cannot be resolved is not a candidate. Then route preference, then endpoint preference, then origin type with the most direct sources winning, then the metric carried from the original protocol, and finally an identity-based tie-break. The first three are the ones anybody configures; the rest exist so that the outcome is deterministic rather than because they are usually the deciding factor.
A Deeper Dive into Selection
Validity, which eliminates most confusion
Before any attribute is compared, the path has to resolve to a usable endpoint. This is why the algorithm appears to be ignored in the cases people actually bring to it: the preferred path was eliminated at step one for a reason that has nothing to do with preference, and the comparison everybody is arguing about never happened. Checking resolution before reasoning about attributes saves the argument.
! Step one, before any attribute matters
Edge# show sdwan omp routes vpn 10 10.10.20.0/24 detail | include status|tloc
tloc 10.255.1.12, mpls, ipsec
status C,I,R
tloc 10.255.1.12, biz-internet, ipsec
status Inv,U
! ^ invalid, TLOC unresolved. Never a candidate,
! whatever its preference says.
!
Edge# show sdwan omp tlocs | include 10.255.1.12
Edge# show sdwan bfd sessions | include 10.255.1.12
Origin type, which decides more than people expect
When preference is left at its default everywhere — which is common — origin type becomes the deciding comparison, and it prefers the most directly connected source. A prefix that is connected at one site and redistributed from an interior protocol at another will always prefer the connected one, regardless of which is topologically better. That is usually right and it is worth knowing, because it explains outcomes that look arbitrary when only preference is being considered.
! Origin order, most preferred first:
! connected
! static
! eBGP
! OSPF intra-area
! OSPF inter-area
! OSPF external
! iBGP
! unknown
!
Edge# show sdwan omp routes vpn 10 10.10.20.0/24 detail | include origin
origin-proto connected
origin-metric 0
How many paths are reflected
vSmart does not necessarily pass on every path it knows for a prefix — there is a limit, and it is low by default. A site with four transports advertising to a controller that reflects fewer than four paths means some edges never learn about some of those transports and cannot use them. Raising the limit is a controller-side change and it is one of the few tuning knobs that genuinely changes what the data plane can do.
! On vSmart - how many paths per prefix are reflected
omp
send-path-limit 8
!
! And on the edge, how many it will accept and install
sdwan
omp
ecmp-limit 8
exit
!
! Verify the edge is really seeing all the transports
Edge# show sdwan omp routes vpn 10 10.10.20.0/24 | count
Edge# show sdwan omp summary | include received|installed
Equal paths and what happens to them
When several paths survive the whole comparison unbroken, they are all installed and traffic is shared across them. That is usually the desired outcome for a site with two equivalent circuits, and it is worth confirming rather than assuming, because two limits govern it: how many paths the controller was willing to send and how many the edge is willing to install. Either being lower than the number of transports silently reduces the result.
The related subtlety is that equal-cost sharing here operates per flow rather than per packet, so a single large transfer does not spread across both circuits. A site reporting that one transfer only ever achieves the speed of one circuit is observing correct behaviour, and the fix if more is needed is application-level parallelism rather than anything in the overlay. Explaining that distinction early tends to prevent a capacity conversation that was never about capacity.
Graceful restart, which is why an outage is survivable
An edge that loses its controller sessions holds the routes it already learned rather than discarding them, for a period governed by a timer that is long by default. That is the mechanism behind the architecture's tolerance of a control-plane outage, and the timer value is the answer to "how long can we run without controllers". It is worth knowing the configured value rather than assuming, because it defines the window in which a controller failure is not yet a traffic problem. Reading this once is not the same as being able to do it under time pressure, which is what repetition against realistic CCIE lab practice scenarios is for.
! The timer that decides how long an outage stays harmless
sdwan
omp
graceful-restart
timers
graceful-restart-timer 43200
holdtime 60
advertisement-interval 1
exit
exit
!
Edge# show sdwan omp summary | include graceful|hold|timer
How Does Policy Change What an Edge Learns?
Where is policy applied?
In the middle of the reflection, on the controller, before the edge ever sees the advertisement. That is the important structural fact: an edge does not receive everything and then filter it — it receives an already-filtered view. Comparing what one edge holds against what another holds is therefore comparing two different policy outcomes, and comparing either against the controller's own table shows what policy removed.
A Deeper Dive into Policy
Topology policy, which is really tunnel-count control
A full mesh is the default because every endpoint learns every other endpoint. Restricting that — hub and spoke, or regional meshes — is done by filtering which endpoints are reflected to whom, which reduces the tunnel count on every edge. This is the main lever for scale, and its effect is visible as endpoints simply not appearing in a branch's table.
! On vSmart - what a branch is allowed to learn
policy
control-policy BRANCH-TO-HUB
sequence 10
match tloc
site-list HUBS
action accept
!
sequence 20
match route
site-list HUBS
action accept
!
default-action reject
!
lists
site-list BRANCHES
site-id 100-999
site-list HUBS
site-id 1-10
!
!
apply-policy
site-list BRANCHES
control-policy BRANCH-TO-HUB out
!
!
! ^ 'out' = applied as vSmart advertises TO those sites
Seeing what policy removed
The edge can show what it received after policy, and the controller can show what it holds before applying it. The difference between those two is exactly what the policy did, which turns "the policy is not working" into a concrete comparison rather than a reading of intent. This is the single most useful technique for control policy and it takes two commands on two devices.
! What the edge received, post-policy
Edge# show sdwan policy from-vsmart
Edge# show sdwan omp routes vpn 10 | count
Edge# show sdwan omp tlocs | count
!
! What vSmart holds, pre-policy, for the same thing
vSmart# show omp routes vpn 10 | count
vSmart# show omp tlocs | count
!
! And which policy is attached to this site
vSmart# show running-config apply-policy
Why central policy beats per-edge configuration
Everything a control policy does could in principle be achieved by configuring each edge, and the reason not to is consistency rather than effort. A policy expressed once cannot disagree with itself between sites; the same intent expressed on two hundred devices can and eventually will. When a branch behaves differently from its peers, the first question in a per-edge design is what is different about that branch, and in a central design that question does not arise.
The trade is that the policy becomes a single object whose blast radius is the whole estate, so a mistake in it affects everything at once. That argues for the same discipline any central control deserves: review before activation, a known previous version, and a verification step that checks what a representative edge actually received rather than what the policy was meant to do.
Direction, which is easy to get backwards
A control policy applied outbound governs what the controller advertises to those sites; applied inbound it governs what the controller accepts from them. Both are useful and they solve different problems — outbound shapes what a branch can see, inbound shapes what a branch is allowed to inject. Applying the wrong direction produces a policy that appears to do nothing, because it is filtering a flow that was never the one in question.
| Direction | Governs | Use to | Symptom if reversed |
|---|---|---|---|
out |
What the controller sends to those sites | Limit what a branch learns | Branch still learns everything |
in |
What the controller accepts from those sites | Limit what a branch can inject | Bad prefixes still propagate |
Changing attributes rather than filtering
Policy can also rewrite the attributes the algorithm compares, which is how a central decision about path preference is expressed without touching any edge. Setting preference in policy is generally preferable to setting it per tunnel interface, for the same reason central policy exists at all: it is one place to read and one place to change.
! Prefer the private transport for one VPN, centrally
policy
control-policy PREFER-MPLS
sequence 10
match route
vpn 10
site-list BRANCHES
action accept
set
preference 200
tloc-list MPLS-TLOCS
!
!
!
default-action accept
!
!
! Confirm the edge received the modified attribute
Edge# show sdwan omp routes vpn 10 10.10.20.0/24 detail | include preference
Which OMP Failures Look Like Routing Problems?
What are the failures worth memorising?
Four. The prefix that is chosen and not installed because its endpoint is unresolved. The prefix that was never advertised because the source protocol was not included. The path that is missing because the controller's reflection limit is lower than the number of transports. And the policy applied in the wrong direction, which filters a flow nobody was asking about.
A Deeper Dive into the Failure Catalogue
Chosen but not installed
show sdwan bfd sessions has no session to that endpoint. Fix: resolve the tunnel, not the route — the route was never the problem and no amount of policy will change the outcome.Never advertised in the first place
show sdwan omp routes advertised on that edge is empty or missing the expected prefixes. Fix: add the protocol to the advertisement configuration, and check the whole estate rather than the one site, because a template omission affects every site built from it.Paths lost to the reflection limit
A diagnostic order that works
! Advertised, reflected, received, resolved, installed
!
! 1. Is the source site advertising it?
EdgeA# show sdwan omp routes advertised | include 10.10.20.0
!
! 2. Does the controller hold it?
vSmart# show omp routes vpn 10 10.10.20.0/24
!
! 3. Did the destination site receive it?
EdgeB# show sdwan omp routes vpn 10 10.10.20.0/24
!
! 4. Did it resolve to a usable endpoint?
EdgeB# show sdwan omp routes vpn 10 10.10.20.0/24 detail | include status|tloc
EdgeB# show sdwan omp tlocs | include 10.255.1.12
!
! 5. Is there a live tunnel to that endpoint?
EdgeB# show sdwan bfd sessions | include 10.255.1.12
!
! 6. And finally, the forwarding table
EdgeB# show ip route vrf 10 10.10.20.0
The policy applied in the wrong direction
What to monitor
Three numbers per edge. The count of routes received, which falling is a policy or advertisement change rather than a link event. The count of tunnel sessions up against the expected peer count. And the count of routes chosen but not installed, which should normally be zero and is the direct measure of the resolution failures described above. That third one is not a standard metric anywhere and it is the most informative of the three.
Comparing two sites as a technique
Most questions of the form "why does this site behave differently" are answered fastest by diffing it against a site that behaves correctly. Route count, endpoint count, tunnel session count and the received policy are four numbers that should be comparable between two branches built from the same template, and the one that differs points directly at the cause.
It works because the architecture makes sites genuinely uniform: two branches built from one template and covered by one policy should hold near-identical state, differing only in their own prefixes and addresses. Anything else that differs is either a policy exception somebody added or a fault, and both are worth knowing about. This is a considerably faster route to the answer than reasoning forward from the configuration.
Blueprint framing
The CCIE Enterprise Infrastructure v1.1 blueprint covers SD-WAN control plane operation within the software-defined infrastructure domain. The questions concentrate on the model: what OMP advertises, what a tunnel endpoint identity is composed of, the order of the selection algorithm, and where policy is applied. Being able to state the three advertisement types and the first three selection steps covers most of it.
Conclusion
OMP resembles BGP closely enough that the comparison is useful and differs in one structural way that matters more than all the similarities. A prefix does not carry a next hop; it carries the identity of a tunnel endpoint, and that endpoint has to be independently reachable before the prefix is usable. Everything confusing about SD-WAN routing traces back to that indirection, and the status letters in the route table exist precisely to expose it.
Selection happens at the endpoint rather than at the prefix, which is why preferring a circuit is one attribute on one endpoint and applies to everything behind it. Preference selects and weight distributes — two mechanisms that sound similar and produce opposite outcomes, and choosing the wrong one is how a site ends up paying for a circuit it never uses. Validity is compared before either of them, which is why the algorithm so often appears to ignore the configuration.
Policy is applied on the controller during reflection, so an edge receives a view that has already been shaped and cannot report what was removed from it. Diagnosing control policy therefore always means comparing two ends: what the controller holds and what the edge received. That comparison, and the chosen-but-not-installed count, are the two techniques that resolve the large majority of what gets reported as an SD-WAN routing problem. More CCIE Enterprise Infrastructure material — labs, protocol breakdowns and study guides — is collected on the SPOTO CCIE site.
External Links
- RFC 4271 — A Border Gateway Protocol 4 (BGP-4)
- RFC 4456 — BGP Route Reflection
- RFC 5880 — Bidirectional Forwarding Detection (BFD)
- RFC 4301 — Security Architecture for the Internet Protocol
- Cisco — Cisco SD-WAN Routing Configuration Guide
- Cisco — Cisco SD-WAN Policies Configuration Guide
- Cisco Learning Network — CCIE Enterprise Infrastructure
Reference Notes
- Cisco SD-WAN documentation describes OMP as advertising three types of information: OMP routes, TLOC routes and service routes.
- Cisco documentation defines a TLOC as the combination of system IP address, colour and encapsulation, and states that OMP routes reference a TLOC rather than a conventional next hop.
- Cisco documentation describes the OMP best-path selection order, beginning with the validity of the route and the resolution of its TLOC.
- Cisco documentation lists OMP route preference and TLOC preference as the first two configurable comparisons, with the higher value preferred in both cases.
- Cisco documentation gives the origin type preference order as connected, static, eBGP, OSPF intra-area, OSPF inter-area, OSPF external, iBGP, then unknown.
- Cisco documentation describes TLOC weight as distributing traffic among selected TLOCs in proportion to the configured value, distinct from preference which selects between them.
- Cisco documentation describes the
restrictkeyword on a colour, which limits tunnel establishment to TLOCs of the same colour. - Cisco documentation describes the send-path-limit setting on vSmart, which bounds how many paths per prefix are advertised to OMP peers.
- Cisco documentation describes OMP graceful restart, which allows a WAN Edge to continue using previously learned routes while its control connections are down.
- Cisco documentation describes centralised control policy applied on vSmart in the inbound or outbound direction relative to a site list, filtering or modifying advertisements during reflection.
- RFC 4456 defines BGP route reflection, the model vSmart follows in reflecting OMP advertisements between WAN Edge devices that do not peer directly.
- The CCIE Enterprise Infrastructure v1.1 unified exam topics include SD-WAN control plane operation within the software-defined infrastructure domain.