EIGRP is easy to configure, but has a lot of options and can end up being very complex. Keep in mind that even though it looks and feels like a link state protocol, it is a distance vector protocol.

Here’s the network for the next few examples (pardon the hand drawing):

In addition, R2 and R4 will be having some /24 networks hanging off of them to demonstrate summarization at a later time.

The configuration of the routers is remarkably simple, as described in Configuring Enhanced EIGRP:

router eigrp 1
 network 0.0.0.0
 no auto-summary

EIGRP uses the concept of an Autonomous System, which is a grouping of EIGRP routers. It is not like an OSPF area, since routes aren’t passed between ASes without explicit redistribution. All routers must belong to the same AS (in this case, it is specified as 1).

Next, all the networks are specified. The network command(s) (there can be many) select the interfaces that will participate in EIGRP. The command takes a network, and wildcard bits. Thus, to turn EIGRP on for all interfaces, “network 0.0.0.0 0.0.0.0″ does the trick. If you only want it on interfaces in the 10/8 network, it would be “network 10.0.0.0 255.0.0.0″. This command does not tell EIGRP what to advertise! It gets that information from the interface itself.

By default EIGRP summarizes all networks into their major components. Since we generally want to do summarization manually, “no auto-summary” turns this behaviour off.

The first thing EIGRP must do is establish adjacencies. It sends out HELLO packets

r0#debug eigrp packets hello
EIGRP Packets debugging is on
    (HELLO)
r0#
1d18h: EIGRP: Received HELLO on Ethernet0 nbr 192.168.1.136
1d18h:   AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
1d18h: EIGRP: Received HELLO on Ethernet0 nbr 192.168.1.93
1d18h:   AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
1d18h: EIGRP: Sending HELLO on Ethernet0
1d18h:   AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0

The adjacencies are established:

r0#show ip eigrp neighbors
IP-EIGRP neighbors for process 1
H   Address                 Interface   Hold Uptime   SRTT   RTO  Q  Seq Type
                                        (sec)         (ms)       Cnt Num
1   192.168.1.136           Et0           12 07:11:55   21   200  0  77
0   192.168.1.93            Et0           12 07:11:58   19   200  0  84

A couple of things to watch out for here are the uptime and sequence number. A low uptime and increasing sequence number shows that you have flapping.

Finally, you have routes in the table:

r0#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 192.168.1.1 to network 0.0.0.0

     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback99
     172.16.0.0/24 is subnetted, 1 subnets
D       172.16.0.0 [90/2211584] via 192.168.1.136, 00:00:03, Ethernet0
                   [90/2211584] via 192.168.1.93, 00:00:03, Ethernet0
     172.19.0.0/24 is subnetted, 1 subnets
D       172.19.0.0 [90/2195456] via 192.168.1.93, 00:00:03, Ethernet0
     172.18.0.0/24 is subnetted, 1 subnets
D       172.18.0.0 [90/2195456] via 192.168.1.136, 00:00:09, Ethernet0
     10.0.0.0/24 is subnetted, 2 subnets
D       10.0.1.0 [90/2339584] via 192.168.1.136, 00:00:04, Ethernet0
                 [90/2339584] via 192.168.1.93, 00:00:04, Ethernet0
D       10.0.4.0 [90/2339584] via 192.168.1.136, 00:00:04, Ethernet0
                 [90/2339584] via 192.168.1.93, 00:00:04, Ethernet0
C    192.168.1.0/24 is directly connected, Ethernet0
S*   0.0.0.0/0 [254/0] via 192.168.1.1

A few notes… The D in the left column indicates that the route is learned from EIGRP. The Administrative Distance is 90, and for the 10 networks on R4, and the 172.16/24 network on the token ring, we can see two ways to get there from R0. By default, EIGRP load balances routes with equal metrics (if you want to do it for routes with different metrics, see How Does Unequal Cost Path Load Balancing (Variance) Work in IGRP and EIGRP?)

Looking closer at the 172.19.0.0/24 route requires diving into the EIGRP topology table (remember from before that EIGRP has multiple tables)

r0# show ip eigrp topology 172.19.0.0/24
IP-EIGRP (AS 1): Topology entry for 172.19.0.0/24
  State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2195456
  Routing Descriptor Blocks:
  192.168.1.93 (Ethernet0), from 192.168.1.93, Send flag is 0x0
      Composite metric is (2195456/2169856), Route is Internal
      Vector metric:
        Minimum bandwidth is 1544 Kbit
        Total delay is 21000 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 1

Some more helpful information that will let us reverse-engineer the composite metric:

r3#show int s0.121 | include BW
  MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,
r3#show int e0 | include BW
  MTU 1500 bytes, BW 10000 Kbit, DLY 1000 usec,
r0#show int e0 | include BW
  MTU 1500 bytes, BW 10000 Kbit, DLY 1000 usec,

The minimum bandwidth along the R0->R3->172.19.0.0 is 1544Kbit, which is the default value for a serial interface on R3. The total delay is 21,000usec from R1:s0.121 and r0:e0 (the delay is added by the end that receives the route, not the one that originates it)

Using the formula metric = ((1E7/minbw)+(sum of delays))*256
= (1E7/1544 + 2100)*256 = 2195456.

172.16/24 shows up twice because the metric is the same. I said in a previous article that if the feasible distance to a route is less than the advertised distance by the successor, then the route will be listed as a feasible successor a router advertises a worse route with an advertised distance that’s less than the feasible distance of the successor, then it’s kept as a feasible successor . That is, if the route comes in second place, but is close, it is kept on warm standby. I’ll demonstrate that on R3 by jacking up the delay slightly, from the default of 2000 tens of microseconds (20000 us) to 2001.

r3(config)#int s0.121
r3(config-subif)#delay 2001

r0#show ip route 172.16.0.0
Routing entry for 172.16.0.0/24, 1 known subnets
Redistributing via eigrp 1

D 172.16.0.0 [90/2211584] via 192.168.1.136, 00:00:37, Ethernet0

The topology table shows two entries, though:

r0#show ip eigrp topology 172.16.0.0/24
IP-EIGRP (AS 1): Topology entry for 172.16.0.0/24
  State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2211584
  Routing Descriptor Blocks:
  192.168.1.136 (Ethernet0), from 192.168.1.136, Send flag is 0x0
      Composite metric is (2211584/2185984), Route is Internal
      Vector metric:
        Minimum bandwidth is 1544 Kbit
        Total delay is 21630 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 2
  192.168.1.93 (Ethernet0), from 192.168.1.93, Send flag is 0x0
      Composite metric is (2211840/2186240), Route is Internal
      Vector metric:
        Minimum bandwidth is 1544 Kbit
        Total delay is 21640 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 2

To get it to fall out of the routing table, I know I’ll have to make the feasible distance of the second route greater than the advertised distance of the good route, ie 2185984. Only using delay, I have to increase it by (2211840-2185984)/256, or 101 tens of microseconds, or 102 above the default:

r3(config)#int s0.121
r3(config-subif)#delay 2103
r0#show ip eigrp topology 172.16.0.0/24
IP-EIGRP (AS 1): Topology entry for 172.16.0.0/24
  State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2211584
  Routing Descriptor Blocks:
  192.168.1.136 (Ethernet0), from 192.168.1.136, Send flag is 0x0
      Composite metric is (2211584/2185984), Route is Internal
      Vector metric:
        Minimum bandwidth is 1544 Kbit
        Total delay is 21630 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 2

With a feasible successor in place, EIGRP will use it immediately if it loses the primary route. Without one, it has to “go active” on the route by running the DUAL algorithm. I’ll pull R3’s S0 to demonstrate:

r0#show debugging
IP routing:
  IP-EIGRP Route Events debugging is on
  IP-EIGRP Event notification debugging is on
EIGRP:
  EIGRP FSM Events/Actions debugging is on

2d02h: IP-EIGRP: Processing incoming QUERY packet
2d02h: IP-EIGRP: Int 172.18.0.0/24 M 4294967295 - 0 4294967295 SM 4294967295 - 0 4294967295
2d02h: DUAL: rcvquery: 172.18.0.0/24 via 192.168.1.136 metric 4294967295/4294967295, RD is 2195456
2d02h: DUAL: Find FS for dest 172.18.0.0/24. FD is 2195456, RD is 2195456
2d02h: DUAL:    192.168.1.136 metric 4294967295/4294967295 not found Dmin is 4294967295
2d02h: DUAL: Dest 172.18.0.0/24 (Split Horizon) not entering active state.
2d02h: DUAL: send REPLY(r1/n1) about 172.18.0.0/24 to 192.168.1.136
2d02h: IP-EIGRP: 172.18.0.0/24 routing table not updated
2d02h: IP-EIGRP: Int 10.0.1.0/24 M 4294967295 - 1657856 4294967295 SM 4294967295 - 1657856 4294967295
2d02h: DUAL: rcvquery: 10.0.1.0/24 via 192.168.1.136 metric 4294967295/4294967295, RD is 2339584
2d02h: DUAL: Find FS for dest 10.0.1.0/24. FD is 2339584, RD is 2339584
2d02h: DUAL:    192.168.1.136 metric 4294967295/4294967295 not found Dmin is 4294967295
2d02h: DUAL: Dest 10.0.1.0/24 (Split Horizon) not entering active state.
2d02h: DUAL: send REPLY(r1/n1) about 10.0.1.0/24 to 192.168.1.136
2d02h: IP-EIGRP: 10.0.1.0/24 routing table not updated
2d02h: IP-EIGRP: Int 10.0.4.0/24 M 4294967295 - 1657856 4294967295 SM 4294967295 - 1657856 4294967295
2d02h: DUAL: rcvquery: 10.0.4.0/24 via 192.168.1.136 metric 4294967295/4294967295, RD is 2339584
2d02h: DUAL: Find FS for dest 10.0.4.0/24. FD is 2339584, RD is 2339584
2d02h: DUAL:    192.168.1.136 metric 4294967295/4294967295 not found Dmin is 4294967295
2d02h: DUAL: Dest 10.0.4.0/24 (Split Horizon) not entering active state.
2d02h: DUAL: send REPLY(r1/n1) about 10.0.4.0/24 to 192.168.1.136
2d02h: IP-EIGRP: 10.0.4.0/24 routing table not updated
2d02h: IP-EIGRP: Int 172.16.0.0/24 M 4294967295 - 1657856 4294967295 SM 4294967295 - 1657856 4294967295
2d02h: DUAL: rcvquery: 172.16.0.0/24 via 192.168.1.136 metric 4294967295/4294967295, RD is 2211584
2d02h: DUAL: Find FS for dest 172.16.0.0/24. FD is 2211584, RD is 2211584
2d02h: DUAL:    192.168.1.136 metric 4294967295/4294967295 not found Dmin is 4294967295
2d02h: DUAL: Dest 172.16.0.0/24 (Split Horizon) not entering active state.
2d02h: DUAL: send REPLY(r1/n1) about 172.16.0.0/24 to 192.168.1.136
2d02h: IP-EIGRP: 172.16.0.0/24 routing table not updated
2d02h: IP-EIGRP: 172.18.0.0/24 - not in IP routing table
2d02h: IP-EIGRP: Int 172.18.0.0/24 metric 4294967295 - 1657856 4294967295
2d02h: IP-EIGRP: 10.0.1.0/24 - not in IP routing table
2d02h: IP-EIGRP: Int 10.0.1.0/24 metric 4294967295 - 1657856 4294967295
2d02h: IP-EIGRP: 10.0.4.0/24 - not in IP routing table
2d02h: IP-EIGRP: Int 10.0.4.0/24 metric 4294967295 - 1657856 4294967295
2d02h: IP-EIGRP: 172.16.0.0/24 - not in IP routing table
2d02h: IP-EIGRP: Int 172.16.0.0/24 metric 4294967295 - 1657856 4294967295
2d02h: IP-EIGRP: Processing incoming UPDATE packet
2d02h: IP-EIGRP: Int 172.18.0.0/24 M 2733824 - 1657856 1075968 SM 2708224 - 1657856 1050368
2d02h: DUAL: dest(172.18.0.0/24) not active
2d02h: DUAL: rcvupdate: 172.18.0.0/24 via 192.168.1.93 metric 2733824/2708224
2d02h: DUAL: Find FS for dest 172.18.0.0/24. FD is 4294967295, RD is 4294967295 found
2d02h: DUAL: RT installed 172.18.0.0/24 via 192.168.1.93
2d02h: IP-EIGRP: 172.18.0.0/24 routing table not updated
2d02h: DUAL: Send update about 172.18.0.0/24.  Reason: metric chg
2d02h: DUAL: Send update about 172.18.0.0/24.  Reason: new if
2d02h: IP-EIGRP: Int 10.0.1.0/24 M 2365952 - 1657856 708096 SM 2340352 - 1657856 682496
2d02h: DUAL: dest(10.0.1.0/24) not active
2d02h: DUAL: rcvupdate: 10.0.1.0/24 via 192.168.1.93 metric 2365952/2340352
2d02h: DUAL: Find FS for dest 10.0.1.0/24. FD is 4294967295, RD is 4294967295 found
2d02h: DUAL: RT installed 10.0.1.0/24 via 192.168.1.93
2d02h: IP-EIGRP: 10.0.1.0/24 routing table not updated
2d02h: DUAL: Send update about 10.0.1.0/24.  Reason: metric chg
2d02h: DUAL: Send update about 10.0.1.0/24.  Reason: new if
2d02h: IP-EIGRP: Int 10.0.4.0/24 M 2365952 - 1657856 708096 SM 2340352 - 1657856 682496
2d02h: DUAL: dest(10.0.4.0/24) not active
2d02h: DUAL: rcvupdate: 10.0.4.0/24 via 192.168.1.93 metric 2365952/2340352
2d02h: DUAL: Find FS for dest 10.0.4.0/24. FD is 4294967295, RD is 4294967295 found
2d02h: DUAL: RT installed 10.0.4.0/24 via 192.168.1.93
2d02h: IP-EIGRP: 10.0.4.0/24 routing table not updated
2d02h: DUAL: Send update about 10.0.4.0/24.  Reason: metric chg
2d02h: DUAL: Send update about 10.0.4.0/24.  Reason: new if
2d02h: IP-EIGRP: Int 172.16.0.0/24 M 2237952 - 1657856 580096 SM 2212352 - 1657856 554496
2d02h: DUAL: dest(172.16.0.0/24) not active
2d02h: DUAL: rcvupdate: 172.16.0.0/24 via 192.168.1.93 metric 2237952/2212352
2d02h: DUAL: Find FS for dest 172.16.0.0/24. FD is 4294967295, RD is 4294967295 found
2d02h: DUAL: RT installed 172.16.0.0/24 via 192.168.1.93
2d02h: IP-EIGRP: 172.16.0.0/24 routing table not updated
2d02h: DUAL: Send update about 172.16.0.0/24.  Reason: metric chg
2d02h: DUAL: Send update about 172.16.0.0/24.  Reason: new if
2d02h: DUAL: Removing dest 172.18.0.0/24, nexthop 192.168.1.136
2d02h: DUAL: Removing dest 10.0.1.0/24, nexthop 192.168.1.136
2d02h: DUAL: Removing dest 10.0.4.0/24, nexthop 192.168.1.136
2d02h: DUAL: Removing dest 172.16.0.0/24, nexthop 192.168.1.136
2d02h: IP-EIGRP: Processing incoming UPDATE packet
2d02h: IP-EIGRP: Int 172.18.0.0/24 M 4294967295 - 1657856 4294967295 SM 4294967295 - 1657856 4294967295
2d02h: IP-EIGRP: Int 10.0.1.0/24 M 4294967295 - 1657856 4294967295 SM 4294967295 - 1657856 4294967295
2d02h: IP-EIGRP: Int 10.0.4.0/24 M 4294967295 - 1657856 4294967295 SM 4294967295 - 1657856 4294967295
2d02h: IP-EIGRP: Int 172.16.0.0/24 M 4294967295 - 1657856 4294967295 SM 4294967295 - 1657856 4294967295
2d02h: IP-EIGRP: Int 172.18.0.0/24 metric 2733824 - 1657856 1075968
2d02h: IP-EIGRP: Int 10.0.1.0/24 metric 2365952 - 1657856 708096
2d02h: IP-EIGRP: Int 10.0.4.0/24 metric 2365952 - 1657856 708096
2d02h: IP-EIGRP: Int 172.16.0.0/24 metric 2237952 - 1657856 580096

Filtering that out a bit for 172.16/24

2d02h: IP-EIGRP: Int 172.16.0.0/24 M 4294967295 - 1657856 4294967295 SM 4294967295 - 1657856 4294967295
2d02h: DUAL: rcvquery: 172.16.0.0/24 via 192.168.1.136 metric 4294967295/4294967295, RD is 2211584
2d02h: DUAL: Find FS for dest 172.16.0.0/24. FD is 2211584, RD is 2211584
2d02h: DUAL:    192.168.1.136 metric 4294967295/4294967295 not found Dmin is 4294967295
2d02h: DUAL: Dest 172.16.0.0/24 (Split Horizon) not entering active state.
2d02h: DUAL: send REPLY(r1/n1) about 172.16.0.0/24 to 192.168.1.136
2d02h: IP-EIGRP: 172.16.0.0/24 routing table not updated
2d02h: IP-EIGRP: 172.16.0.0/24 - not in IP routing table
2d02h: IP-EIGRP: Int 172.16.0.0/24 metric 4294967295 - 1657856 4294967295
2d02h: DUAL: dest(172.16.0.0/24) not active
2d02h: DUAL: rcvupdate: 172.16.0.0/24 via 192.168.1.93 metric 2237952/2212352
2d02h: DUAL: Find FS for dest 172.16.0.0/24. FD is 4294967295, RD is 4294967295 found
2d02h: DUAL: RT installed 172.16.0.0/24 via 192.168.1.93
2d02h: IP-EIGRP: 172.16.0.0/24 routing table not updated
2d02h: DUAL: Send update about 172.16.0.0/24.  Reason: metric chg
2d02h: DUAL: Send update about 172.16.0.0/24.  Reason: new if
2d02h: DUAL: Removing dest 172.16.0.0/24, nexthop 192.168.1.136
2d02h: IP-EIGRP: Processing incoming UPDATE packet
2d02h: IP-EIGRP: Int 172.16.0.0/24 M 4294967295 - 1657856 4294967295 SM 4294967295 - 1657856 4294967295
2d02h: IP-EIGRP: Int 172.16.0.0/24 metric 2237952 - 1657856 580096

While a lot of the debug information doesn’t make sense, it shows how EIGRP goes through the DUAL process to find the new route.

More on manipulating EIGRP next…

References

  1. Configuring Enhanced EIGRP
  2. How Does Unequal Cost Path Load Balancing (Variance) Work in IGRP and EIGRP?