L3 · igp · reviewed

EIGRP

Enhanced Interior Gateway Routing Protocol

A distance-vector protocol that keeps a proven loop-free backup ready, so most failures are a switch rather than a recomputation — and asks the network only when it has none.

Presenter modeEmbed this figure

Feasibility ConditionRFC 7868 · INFORMATIONAL · May 2016DUAL Finite State Machine (FSM)RFC 7868 · INFORMATIONAL · May 2016Active Duration (SIA)RFC 7868 · INFORMATIONAL · May 2016EIGRP Packet HeaderRFC 7868 · INFORMATIONAL · May 2016

Why it exists

Distance-vector protocols converge by rumour, and the classic ones spend their convergence time waiting out timers designed to make loops unlikely. Link-state protocols avoid that by giving every router the whole map, at the cost of flooding and running a shortest-path computation.

EIGRP takes a third route. It stays distance-vector — a router knows only what its neighbours report — but it keeps a backup it can *prove* is loop-free, so most failures are a table switch with no messages exchanged at all. Feasibility ConditionRFC 7868 · INFORMATIONAL · May 2016

RFC 7868 is an Informational publication of Cisco’s protocol, not a standards-track specification. It documents what exists so others can implement it; it does not mean the protocol went through the IETF standards process.

A backup you can prove is safe

The feasibility condition is one comparison, and it is the whole reason EIGRP can switch paths instantly without risking a loop.

Every neighbour reports one number: its own distance to the destination. R1 adds the cost of the link and gets a total. R1. R2 · successor: Reports RD 20. R3: Reports RD 10. R4: Reports RD 40. 10.0.0.0/8.

R1R2 · successorReports: RD 20R3Reports: RD 10R4Reports: RD 4010.0.0.0/8
  • Link
  • Blocking
  • Packet in flight
  • Discarded
  • Emphasis
Select a device to read its state. Arrow keys walk the topology.
Text equivalent of this diagram
Devices and links at this step
ElementKindState
R1router
R2 · successorrouterReports: RD 20
R3routerReports: RD 10
R4routerReports: RD 40
10.0.0.0/8cloud
R1R2 · successorlinkup
R1R3linkup
R1R4linkup
R2 · successor10.0.0.0/8linkup
R310.0.0.0/8linkup
R410.0.0.0/8linkup
1 / 6

Every neighbour reports one number: its own distance to the destination. R1 adds the cost of the link and gets a total.

What changed

  • R2 · successor: Reports → RD 20
  • R3: Reports → RD 10
  • R4: Reports → RD 40

How it works

Each neighbour reports its own distance to a destination — the reported distance. Add the link cost and the best total becomes the feasible distance. A neighbour is a usable backup only if its reported distance is strictly less than that feasible distance. Feasibility ConditionRFC 7868 · INFORMATIONAL · May 2016

That comparison is a proof rather than a heuristic: a neighbour closer than my own best cannot be routing through me, because then its distance would include mine. It is deliberately conservative — it rejects some safe paths so it never accepts an unsafe one silently.

With no feasible successor the route goes Active and the router queries its neighbours. A neighbour that can answer does; one that cannot goes Active itself and asks onward, so the question spreads until it meets routers that can reply. DUAL Finite State Machine (FSM)RFC 7868 · INFORMATIONAL · May 2016

The metric by default uses only bandwidth and delay — the minimum bandwidth along the path and the cumulative delay. Load and reliability have coefficients and they are zero, because a metric that changes with traffic makes the topology change with traffic. Coefficients K1 and K2RFC 7868 · INFORMATIONAL · May 2016

Try it

Test feasibility

Change reported distances. A neighbor is a feasible successor only when RD is strictly less than FD.

Feasible distance
Reported distance

Successor: R2 · stays Passive

  1. successorR2 has the lowest total distance (30) toward 10.0.0.0/8.
  2. feasibilityR3 advertised RD 10, which is strictly less than FD 30, so it is a feasible successor.
  3. feasibilityR4 advertised RD 40, which is not strictly less than FD 30. Using it could loop.
Neighbor roles
NeighborRDTotalRole
R22030successor
R31040feasible-successor
R44050infeasible

On the wire

Constructed examples, encoded from the field table below them — not captured traffic.

Sequence and acknowledgement both zero, which is what makes this an unreliable multicast hello rather than something the neighbour has to confirm.

IPv4
Protocol 88. Multicast to 224.0.0.10 for discovery and flooding; unicast for retransmissions and acknowledgements. RFC 7868
EIGRP header
Version, opcode, checksum, flags, sequence and acknowledgement numbers, VRID and AS. RFC 7868
TLV area
A sequence of type/length/value triplets carrying parameters, authentication, and route information. Variable length, so it is not laid out here. RFC 7868

Configure it

Named-mode EIGRP with the query domain bounded on purpose.

Cisco IOS-XE 17.12 · Catalyst 9300, ISR 4451draft

  1. router eigrp CORE
     address-family ipv4 unicast autonomous-system 100

    Named mode still needs an autonomous system number, because that number travels in every packet header and a receiver with a different one discards the packet before looking at it.

    RFC 7868 §6.5

  2. router eigrp CORE
     address-family ipv4 unicast autonomous-system 100
      af-interface default
       passive-interface
      af-interface GigabitEthernet1/0/1
       no passive-interface

    Passive by default and enabled explicitly. The reverse — enabling everything and remembering to turn off the access ports — is how a printer VLAN ends up with an EIGRP neighbour.

  3. ! on every access router:
    ! router eigrp CORE
    !  address-family ipv4 unicast autonomous-system 100
    !   eigrp stub connected summary

    The highest-value setting in the protocol. A stub router is never queried, because its neighbours already know it has no transit path to offer.

    Common mistake: Adding `eigrp stub receive-only` on a router that has connected subnets other routers need. It stops advertising them, which is a different outage from the one being prevented.

    RFC 7868 §4.2

  4. router eigrp CORE
     address-family ipv4 unicast autonomous-system 100
      af-interface GigabitEthernet1/0/1
       summary-address 10.1.0.0 255.255.0.0

    The other way to bound a query: a router advertising a summary answers for everything inside it, so a query about a component never crosses this interface.

  5. ip route 10.1.0.0 255.255.0.0 Null0 254

    The discard route that makes the summary safe. Without it, traffic for an unallocated part of the block follows a default back out and loops.

  6. key chain EIGRP-KEYS
     key 1
      key-string <configured out of band>
      cryptographic-algorithm hmac-sha-256
    router eigrp CORE
     address-family ipv4 unicast autonomous-system 100
      af-interface default
       authentication mode hmac-sha-256
       authentication key-chain EIGRP-KEYS

    The AS number is sometimes described as an authentication value. It is not — it stops accidents, not attackers. This is the mechanism that stops attackers.

    RFC 7868 §6.5

Verify

show ip eigrp topology active
Which prefixes are Active and which neighbours have not replied.
show ip eigrp topology 10.0.0.0/8
Reported distance against feasible distance for every neighbour.
show ip eigrp neighbors detail
Stub flags, retransmissions, and the hold time in effect.
show ip protocols
K-values, AS number and configured summaries in one place.

Caveats

  • The AS number is compared before any routing logic; a mismatch produces no error, just silence.
  • A summary needs a discard route, or traffic for an unallocated part of the block follows a default back out.
  • Raising the active timer delays a stuck-in-active event without making it less likely.

When it breaks

Symptom first, because that is what you have when it happens.

  1. A route logs stuck-in-active and an adjacency resets, taking every prefix learned through that neighbour with it.

    Narrow it down

    1. Look at the active topology on the router that logged it and find which neighbours have not replied.
    2. Run the same command on that neighbour and see whether it is also waiting, and on whom.
    3. Follow the chain until a router is not waiting — the cause is at or next to it.

    Cause

    A query went unanswered for the whole active duration. The router reporting it is the one that waited; the cause is further along the chain, usually congestion or a wedged process on a distant router.

    Fix

    Bound the query domain with stub routers and summarisation so the question never travels that far. Raising the timer delays the symptom and changes nothing.

    Active Duration (SIA)RFC 7868 · INFORMATIONAL · May 2016
  2. An obviously usable alternate path is never installed, and increasing variance does not help.

    Narrow it down

    1. Compare the neighbour’s reported distance against the feasible distance, not against the total.
    2. Check whether the feasible distance is a stale low-water mark from a better path that has gone.
    3. Confirm the route is Passive — feasibility is only re-evaluated properly when it goes Active.

    Cause

    Reported distance is not strictly less than the feasible distance, so DUAL will not use the path. Variance selects among paths that are already feasible; it does not relax the condition.

    Fix

    Change the metric so the reported distance falls below the feasible distance, or accept that the path cannot be proven safe and will only be used after a query.

    Feasibility ConditionRFC 7868 · INFORMATIONAL · May 2016
  3. Two routers on the same segment never become neighbours, and both can ping each other.

    Narrow it down

    1. Compare the autonomous system number configured on each — it is in every packet header and compared before anything else.
    2. Compare the K-values; a mismatch refuses the adjacency outright.
    3. Check for an authentication key or key-chain on one side only.

    Cause

    The header carries the AS number, and a receiver must have the same one or the packet is ignored entirely. A K-value mismatch is refused a step later, during parameter negotiation.

    Fix

    Match the AS number and the K-values. Neither produces a routing error, because the packets are discarded before any routing logic runs.

    EIGRP Packet HeaderRFC 7868 · INFORMATIONAL · May 2016
  4. A neighbour comes up, exchanges some routes, and drops repeatedly.

    Narrow it down

    1. Check the hold time each side advertises and whether hellos are being lost.
    2. Compare the interface MTU on both ends.
    3. Look for retransmissions in the neighbour table — EIGRP runs its own reliable transport.

    Cause

    Either hellos are not arriving within the hold time, or a large update cannot cross an MTU mismatch. EIGRP acknowledges its own packets, so an update that never fits is retransmitted until the adjacency gives up.

    Fix

    Fix the MTU, and check for loss on the segment. Timers rarely need changing — losing hellos is a symptom, not a tuning problem.

    Neighbor Hold TimeRFC 7868 · INFORMATIONAL · May 2016
  5. On a hub-and-spoke topology every spoke reaches the hub and no spoke reaches another.

    Narrow it down

    1. Check whether the hub’s interface toward the spokes is multipoint.
    2. Confirm whether split horizon is enabled on it.
    3. Look at whether the hub is receiving the spoke routes but not re-advertising them.

    Cause

    Split horizon stops a router advertising a route back out of the interface it learned it on. On a multipoint interface every spoke shares that interface, so the hub learns from one spoke and refuses to tell the others.

    Fix

    Disable split horizon on the hub’s multipoint interface, or use point-to-point subinterfaces so each spoke is on its own. The first is one command and the second is the better design.

    Split Horizon and Poison ReverseRFC 7868 · INFORMATIONAL · May 2016

Design notes

Make every access-layer router a stub. It is never a transit path, so querying it is pure cost with no possibility of a useful answer — and query scope is the only thing that bounds how bad a stuck-in-active event can get.

Summarise at distribution boundaries, with a discard route for the summary. A router advertising a summary answers queries for anything inside it, which stops the question at the boundary.

Do not raise the active timer to fix stuck-in-active. It delays the same failure without making it less likely, and by the time it fires more has changed, so the resulting outage is larger. The fix is always scope. Active Duration (SIA)RFC 7868 · INFORMATIONAL · May 2016

Leave the K-values alone. They must match for an adjacency to form, and enabling load or reliability makes the metric vary with traffic — which makes the topology vary with traffic, which is the oscillation the defaults exist to prevent. Coefficients K1 and K2RFC 7868 · INFORMATIONAL · May 2016

Misconceptions

EIGRP is a hybrid of distance vector and link state.
It is distance vector throughout. There is no shared database, no flooding of topology, and no shortest-path computation — a router knows only what its neighbours report. What is unusual is the feasibility condition, which lets it act on that limited knowledge safely. Feasibility ConditionRFC 7868 · INFORMATIONAL · May 2016
Variance lets a router use any higher-metric backup.
Variance selects among paths that already satisfy the feasibility condition. A neighbour whose reported distance is not less than the feasible distance is unusable no matter what variance is set to. Feasibility ConditionRFC 7868 · INFORMATIONAL · May 2016
The metric is computed from bandwidth, delay, load, reliability and MTU.
By default only bandwidth and delay — the others have coefficients set to zero, and MTU is not an input at all despite appearing beside them in every output. Enabling load or reliability makes the metric vary with traffic, and therefore the topology vary with traffic. Classic Composite FormulationRFC 7868 · INFORMATIONAL · May 2016
RFC 7868 makes EIGRP an IETF standard.
It is an Informational publication describing Cisco’s protocol so that others can implement it. Useful, and not the same as standards-track — the document records a design rather than specifying one agreed through the process.

More walkthroughs

How far a question travelsdesign-choice

With no feasible successor, DUAL asks. The design question is how many routers hear the question, and the answer is topology, not timers.

A prefix loses its successor and has no feasible successor. It goes Active, and the router asks every neighbour except the one it lost. Core. Distribution: Route Active. Access 1. Access 2. Access 3.

CoreDistributionRoute: ActiveAccess 1Access 2Access 3
  • Link
  • Blocking
  • Packet in flight
  • Discarded
  • Emphasis
Select a device to read its state. Arrow keys walk the topology.
Text equivalent of this diagram
Devices and links at this step
ElementKindState
Corerouter
DistributionrouterRoute: Active
Access 1router
Access 2router
Access 3router
CoreDistributionlinkup
DistributionAccess 1linkup
DistributionAccess 2linkup
DistributionAccess 3linkup
1 / 5

A prefix loses its successor and has no feasible successor. It goes Active, and the router asks every neighbour except the one it lost.

What changed

  • Distribution: Route → Active
  • Emphasis on Distribution

One unanswered question, several dropped neighboursfailure

A route that stays Active too long tears down the adjacency it was waiting on — and the router that suffers is rarely the one at fault.

R1 goes Active and queries R2. R2 has no feasible successor either, so it queries R3, and R1 now waits on a chain it cannot see. R1 · waiting: Route Active, waiting. R2. R3 · slow link. Beyond.

R1 · waitingRoute: Active, waitingR2R3 · slow linkBeyondQueryQuerycongested
  • Link
  • Blocking
  • Packet in flight
  • Discarded
  • Emphasis
Select a device to read its state. Arrow keys walk the topology.
Text equivalent of this diagram
Devices and links at this step
ElementKindState
R1 · waitingrouterRoute: Active, waiting
R2router
R3 · slow linkrouter
Beyondcloud
R1 · waitingR2linkup
R2R3 · slow linklinkup
R3 · slow linkBeyondlinkup · congested
1 / 6

R1 goes Active and queries R2. R2 has no feasible successor either, so it queries R3, and R1 now waits on a chain it cannot see.

What changed

  • R1 · waiting: Route → Active, waiting
  • Emphasis: Query

Terms

Feasible successor
An EIGRP neighbor whose reported distance is strictly less than the feasible distance through the successor. That inequality is the loop-free test.
Reported distance
A neighbour’s own distance to a destination, before this router adds the link cost. Strictly less than the feasible distance is what proves the neighbour is not routing back through here.
Stuck-in-active
A query unanswered for the whole active duration, which resets the adjacency and loses every prefix behind it. The router that reports it is the one that waited; the cause is further along the chain it queried.

Check yourself

  • When is a neighbour a feasible successor?
  • The successor is lost and no feasible successor exists. What happens?
  • Does variance let a router use a path that fails the feasibility condition?
  • What happens when two routers have different K-values?
  • Two routers can ping each other and never become EIGRP neighbours. What is in the header?
  • Which inputs does the default metric actually use?
  • Why does making an access router a stub help convergence?
  • What does an SIA-Query ask?