EIGRP Offset Lists Logic

EIGRP Offset Lists allow to add a value (an offset) to the calculated integer metric (RD/FD) for a given prefix. How does this fit into the composite metric’s concept? We know EIGRP’s Update messages contain the following metric components – cumulative delay, least bandwidth, load and reliability; as well as non-metric components – hop count and MTU. So, where’s offset?

It’s simple – offset is being added to the cumulative delay value. You may think how this is possible.

Let’s review the following example.

Routers are configured as follows

R1
interface FastEthernet0/0
 ip address 10.180.10.1 255.255.255.252
 duplex auto
 speed auto
router eigrp 100
 network 10.180.10.0 0.0.0.3
 no auto-summary

R2
interface Loopback10
 ip address 10.150.0.1 255.255.0.0
interface FastEthernet0/0
 ip address 10.180.10.2 255.255.255.252
 duplex auto
 speed auto
router eigrp 100
 network 10.150.0.0 0.0.255.255
 network 10.180.10.0 0.0.0.3
 no auto-summary

EIGRP neighborship is up. R1 can reach R2’s loopback subnet. According to the EIGRP metric formula (where bandwidth represents the least bandwidth along the route in kbps, and delay is a cumulative delay in tens-of-microseconds),

or simplified, default, behavior

composite metric values can be divided by 256 without the remainder. That’s true as long as offsets are not implemented.

R1#sh ip eigrp topology 10.150.0.0/16
IP-EIGRP (AS 100): Topology entry for 10.150.0.0/16
  State is Passive, Query origin flag is 1, 1 Successor(s), FD is 409600
  Routing Descriptor Blocks:
  10.180.10.2 (FastEthernet0/0), from 10.180.10.2, Send flag is 0x0
      Composite metric is (409600/128256), Route is Internal
      Vector metric:
        Minimum bandwidth is 10000 Kbit
        Total delay is 6000 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 1

Both, RD (128256) and FD (409600) represent certain values multiplied by 256. Once an offset is configured, you may, or may not, notice some odd composite metric values. Let’s configure an offset list on R2.

  1. Create an appropriate ACL where permit lines list prefixes to which we want to apply an offset. Use standard ACL to match prefixes or extended ACL to match prefixes and length (permit ip host PREFIX host MASK);
  2. Apply an offset list under EIGRP instance using offset-list acl in|out offset_value [interface] command. Note, offset lists can be applied to outbound or inbound updates and, if required, limited by the specific interface.
access-list 10 remark Offset list
access-list 10 permit 10.150.0.0 0.0.255.255
router eigrp 100
 offset-list 10 out 55 FastEthernet0/0

EIGRP neighborship will be reset immediately after offset-list was applied. Now, check R1’s EIGRP topology table for 10.150.0.0/16.

R1#sh ip eigrp topology 10.150.0.0/16
IP-EIGRP (AS 100): Topology entry for 10.150.0.0/16
  State is Passive, Query origin flag is 1, 1 Successor(s), FD is 409600
  Routing Descriptor Blocks:
  10.180.10.2 (FastEthernet0/0), from 10.180.10.2, Send flag is 0x0
      Composite metric is (409655/128311), Route is Internal
      Vector metric:
        Minimum bandwidth is 10000 Kbit
        Total delay is 6002 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 1

RD and FD have been incremented by offset value of 55. While bandwidth value has not changed, total delay is now 2 microseconds greater! How could it be? We know that EIGRP formula uses tens of microseconds, moreover there’s no way to configure a delay value on the interface which is not multiple of 10-microseconds! Here’s how…

Even though EIGRP topology table lists metric components in a readable format, it doesn’t store them like this, nor it sends it to the neighbors in a human-friendly format. It operates with reference values.

If you capture some EIGRP Update packets with Wireshark and look inside, you’ll notice that metric values are not easy to interpret.

See, EIGRP Update packet doesn’t list bandwidth or delay in a readable format but some Scaled Delay and Scaled Bandwidth instead (the reference values I mentioned above). Use the following formula to derive human-friendly value for bandwidth.

In our case you will get 10Gbps, which is right and not. Remember, 10.150.0.0/16 is “located” behind a loopback interface on R2. By default, loopback’s bandwidth is 8Gbps. If you calculate Reference Bandwidth using this value, you’ll get 10000000/8000000 * 256 = 1,25 * 256. EIGRP will use integer value, ignoring the remainder of 0,25. That’s why a value of 1 * 256 or 256 is seen in the EIGRP Update packet. You will be right, if you think that discrepancies are possible. For example, if you configure R2’s loopback BW as 5432kbps, R1 will show you that least bandwidth is 5434kbps.

This is how EIGRP works and you can do nothing here.

Delay is way different. EIGRP permits remainders here and effectively uses them to transport offsets (even if they are not multiple of 256). Take Scaled Delay value from the EIGRP Update message shown above – 128055. Subtract the offset’s value (55) and you’ll have loopback’s delay in tens-of-microseconds multiplied by 256. It turns out that it is not possible to figure out if there are any offsets applied in the network if those are multiple by 256. In this case cumulative delay will look as normal value, like there are no any offsets configured at all. For instance, consider the following example where we configure new offset value of 512 (multiple of 256).

R2(config-router)#no offset-list 10 out 55 FastEthernet0/0
*Mar  1 02:37:44.315: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 10.180.10.1 (FastEthernet0/0) is resync: route configuration changed
R2(config-router)#offset-list 10 out 512 FastEthernet0/0
*Mar  1 02:39:08.971: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 10.180.10.1 (FastEthernet0/0) is resync: route configuration changed

R1#sh ip eigrp topology 10.150.0.0/16
IP-EIGRP (AS 100): Topology entry for 10.150.0.0/16
  State is Passive, Query origin flag is 1, 1 Successor(s), FD is 617783
  Routing Descriptor Blocks:
  10.180.10.2 (FastEthernet0/0), from 10.180.10.2, Send flag is 0x0
      Composite metric is (625152/599552), Route is Internal
      Vector metric:
        Minimum bandwidth is 5434 Kbit
        Total delay is 6020 microseconds
        Reliability is 255/255
        Load is 1/255
        Minimum MTU is 1500
        Hop count is 1

From R1’s perspective you can’t tell if any offsets have been used (delay is presented in tens-of-microseconds and RD/FD values are multiple of 256).

Questions?

Leave a Reply

%d bloggers like this: