Skip to main content
  1. Network Articles/
  2. IS-IS Articles/

The IS-IS Overload Bit

Table of Contents

The IS-IS Overload Bit

An IS-IS router can declare that its own database is not to be trusted. Setting a single bit in the LSP header is enough for every other router to stop using it as a transit. It stays alive as a destination, though: networks attached to it remain reachable.

This article works through what the bit was created for and how it changes route computation, checking each against ISO/IEC 10589:2002 and against IOS XR.

It began as a way to report an accident

Clause 7.3.19 of ISO/IEC 10589:2002 (second edition) introduces the bit as a memory problem:

As a result of network mis-configuration, or certain transitory conditions, it is possible that there may be insufficient memory resources available to store a received Link State PDU. When this occurs, an IS needs to take certain steps to ensure that if its LSP database becomes inconsistent with the other ISs’, that these ISs do not rely on forwarding paths through the overloaded IS.

Clause 7.3.19.1 then defines what happens:

When an LSP cannot be stored, the LSP shall be ignored and Waiting State shall be entered. […] the Intermediate System shall generate and flood its own LSP with zero LSP number with the LSP Database Overload Bit set. This prevents this Intermediate system from being considered as a forwarding path by other Intermediate Systems.

A router with an incomplete database that still takes part in route computation produces a different answer from everyone else, and that builds loops. This bit lets the broken router say “do not route through me”.

Where the bit sits

Clause 9.8 divides one byte of the LSP header into four fields.

Bits Name Meaning
8 P Whether partition repair is supported
7-4 ATT Whether attached to other areas (one bit per metric type)
3 LSPDBOL Whether the LSP database is overloaded
2-1 IS Type Level 1, or Level 1 and 2

LSPDBOL – Bit 3 – A value of 0 indicates no LSP Database Overload, and a value of 1 indicates that the LSP […]

Because the byte belongs to the LSP header, the bit exists per level. A router running both levels originates two kinds of LSP, each with its own overload bit, so transit can be refused at one level while it continues at the other — which is what the level argument in IOS XR selects.

IOS XR prints this byte as the three-digit ATT/P/OL column of show isis database, and the third digit is this bit. The ATT bit itself is covered in The IS-IS ATT Bit and the Level 1 Default Route.

What setting it does

Clause 7.2.8.1 governs the computation, and the treatment is deliberately asymmetric.

The Decision Process shall not utilise a link to an Intermediate system neighbour from an IS whose LSPs have the LSP Database Overload indication set. Such paths may introduce loops since the overloaded IS does not have a complete routeing information base. The Decision Process shall, however utilise the link to reach End system neighbours since these paths are guaranteed to be non-looping.

Kind of link Treatment In IP terms
To an IS (router) neighbour Not used Paths through that router disappear
To an End system neighbour Used Destinations hanging off that router stay reachable

So the router is no longer somewhere to pass through, but it is still somewhere to arrive at. Its loopbacks and connected networks remain reachable from everywhere else.

Links to End system neighbours are safe because the path ends there. A packet that reaches the overloaded router and is handed to a directly attached destination is never forwarded onwards on the strength of a database that may be wrong. Loops are made of packets going round, and a dead end cannot produce one.

The overloaded router’s own computation does not change. The bit acts on how other routers compute; the router that set it still works out every path as usual.

From reporting an accident to a tool of operations

Setting the bit deliberately is now the more common use.

Taking a router out for maintenance. Set the bit on a router you are about to work on, and the traffic that was passing through it moves away first. Unlike shutting down links, management traffic to that router keeps working.

Avoiding a blackhole right after a reboot. This is the problem RFC 3277 (IS-IS Transient Blackhole Avoidance) addresses. A rebooted router brings its IS-IS adjacencies straight back up while its BGP routes are not there yet. If IS-IS picks it as the shortest path, the packets that arrive are discarded.

If RtrB were to temporarily set its LSP Overload bit while synchronizing BGP tables with its neighbors, RtrA would continue to use the working RtrA->RtrC->RtrD path.

The same RFC leaves the clearing condition to implementations:

Triggers for setting the Overload bit as described are left to the implementer. Some potential triggers could perhaps include “N seconds after booting”, or “N number of BGP prefixes in the BGP Loc-RIB”.

IOS XR offers both through set-overload-bit on-startup: a number of seconds, or wait-for-bgp.

What stays and what goes

Setting the bit does not drop adjacencies. Hellos keep flowing and LSPs keep being exchanged; the only thing that changes is how other routers compute. That is why, unlike shutting links down, the router itself stays reachable and manageable.

On the other hand, destinations with no alternative path do disappear. Clause 7.2.8.1 only says the link shall not be used; it does not conjure up a replacement. Anything reachable solely through the overloaded router drops out of the routing table, so before setting the bit for maintenance, check that the traffic crossing that router has somewhere else to go.

IOS XR offers arguments that narrow what goes away.

Argument Meaning
advertise external Keep advertising IP prefixes learned from other protocols while the bit is set
advertise interlevel Keep advertising IP prefixes learned from another IS-IS level while the bit is set
level <1-2> Apply the bit to one level only

These matter when redistributed routes, or routes carried across levels, must not disappear along with everything else. The test below uses plain set-overload-bit with no arguments.

Verification on real devices

The test setup

Four routers in a single area, 49.0001, all level-2-only, wired into a square. Keeping levels out of it leaves only the bit itself to look at.

Router Lo0 Links
R1 1.1.1.1/32 Gi0/0/0/0 10.1.2.1 (to R2, metric 10), Gi0/0/0/1 10.1.3.1 (to R3, metric 20)
R2 2.2.2.2/32 Gi0/0/0/0 10.1.2.2, Gi0/0/0/1 10.2.4.2 (to R4, metric 10)
R3 3.3.3.3/32 Gi0/0/0/0 10.1.3.3, Gi0/0/0/1 10.3.4.3 (to R4, metric 10)
R4 4.4.4.4/32 Gi0/0/0/0 10.2.4.4, Gi0/0/0/1 10.3.4.4

From R4 there are two ways to 1.1.1.1/32: 20 through R2 and 30 through R3. With the bit set on R2, what matters is what happens to that path and to the path to R2’s own 2.2.2.2/32.

The STEPs

STEP Operation What it confirms
0 Defaults 1.1.1.1/32 on R4 is 20 through R2; every router shows 0/0/0
1 set-overload-bit on R2 R2 turns to 0/0/1, 1.1.1.1/32 moves to 30 through R3, and 2.2.2.2/32 stays through R2
2 Remove it from R2 Back to STEP 0
3 Add set-overload-bit on-startup 300 and process restart isis R2 comes back up as 0/0/1
4 Wait for the timer, changing nothing Back to 0/0/0 with the configuration still in place
5 Revert everything (final state) Matches STEP 0

STEP 3 restarts the IS-IS process, so the adjacencies drop once. That is deliberate; no other STEP touches them.

STEP 0: every bit is zero

The database as R4 sees it:

STEP 0 R4: show isis database
RP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:21:19.605 UTC

IS-IS 1 (Level-2) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00              0x00000007   0x2361        860  /1200         0/0/0
R2.00-00              0x00000008   0x3238        1066 /1200         0/0/0
R3.00-00              0x00000007   0xbc6d        1101 /1200         0/0/0
R4.00-00            * 0x00000006   0xaf62        973  /*            0/0/0

 Total Level-2 LSP count: 4     Local Level-2 LSP count: 1

All four rows read 0/0/0 in the ATT/P/OL column, whose third digit is the overload bit.

STEP 1: set the bit on R2

One line on R2 — this is what was actually committed:

STEP 1 R2: show configuration commit changes last 1
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sat Sep 12 08:21:37.379 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
 set-overload-bit
!
end
STEP 1 R4: show isis database
RP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:23:55.774 UTC

IS-IS 1 (Level-2) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00              0x00000007   0x2361        704  /1200         0/0/0
R2.00-00              0x00000009   0x3431        1062 /1200         0/0/1
R3.00-00              0x00000007   0xbc6d        945  /1200         0/0/0
R4.00-00            * 0x00000006   0xaf62        817  /*            0/0/0

 Total Level-2 LSP count: 4     Local Level-2 LSP count: 1

Only R2’s row has become 0/0/1. R2 rebuilt its LSP — the sequence number is now 0x00000009 — and flooding carried it to everyone.

Now the routes. First a destination through R2:

STEP 1 R4: show route 1.1.1.1
RP/0/RP0/CPU0:R4#show route 1.1.1.1
Sat Sep 12 08:23:54.996 UTC

Routing entry for 1.1.1.1/32
  Known via "isis 1", distance 115, metric 30, type level-2
  Installed Sep 12 08:21:38.922 for 00:02:16
  Routing Descriptor Blocks
    10.3.4.3, from 1.1.1.1, via GigabitEthernet0/0/0/1
      Route metric is 30
  No advertising protos. 

Metric 30, next hop 10.3.4.3, which is R3. It was 20 through R2 at STEP 0, so the path moved to the longer one because paths through R2 left the computation.

Then R2’s own address:

STEP 1 R4: show route 2.2.2.2
RP/0/RP0/CPU0:R4#show route 2.2.2.2
Sat Sep 12 08:23:55.134 UTC

Routing entry for 2.2.2.2/32
  Known via "isis 1", distance 115, metric 10, type level-2
  Installed Sep 12 08:05:49.223 for 00:18:05
  Routing Descriptor Blocks
    10.2.4.2, from 2.2.2.2, via GigabitEthernet0/0/0/0
      Route metric is 10
  No advertising protos. 

This one is still metric 10 with 10.2.4.2 — R2 — as the next hop, exactly as 7.2.8.1 requires when it says the links to End system neighbours are still used. R2 remains a destination. That is why management traffic to a router taken out this way keeps working.

It is worth looking at what the LSP still carries.

STEP 1 R4: show isis database detail (R2's LSP, excerpt)
R2.00-00              0x00000009   0x3431        1062 /1200         0/0/1
  Area Address:   49.0001
  LSP MTU:        1492
  NLPID:          0xcc
  IP Address:     2.2.2.2
  Hostname:       R2
  Metric: 10         IS-Extended R1.00
  Metric: 10         IS-Extended R4.00
  Metric: 0          IP-Extended 2.2.2.2/32
  Metric: 10         IP-Extended 10.1.2.0/24
  Metric: 10         IP-Extended 10.2.4.0/24

Nothing has been removed — not a link, not a prefix. R2 goes on saying “I have a link to R1” and “I have a link to R4”. The only difference is the 0/0/1 on the first line, and the routers reading it are the ones deciding not to use those links. The bit does not trim the advertisement; it changes how the advertisement is read.

The same thing in a packet

No.32 of the R1 - R2 capture is the LSP R2 sent right after the bit was set. tshark expands the byte as the standard defines it.

No.32 R2's LSP (excerpt from tshark -V)
ISO 10589 ISIS Link State Protocol Data Unit
    PDU length: 113
    Remaining lifetime: 1200
    LSP-ID: 0020.0200.2002.00-00
    Sequence number: 0x00000009
    Checksum: 0x3431 [correct]
    [Checksum Status: Good]
    Type block(0x07): Partition Repair:0, Attached bits:0, Overload bit:1, IS type:3
        0... .... = Partition Repair: Not supported
        .000 0... = Attachment: 0
            .0.. .... = Error metric: Not set
            ..0. .... = Expense metric: Not set
            ...0 .... = Delay metric: Not set
            0... .... = Default metric: Not set
        .... .1.. = Overload bit: Set
        .... ..11 = Type of Intermediate System: Level 2 (3)
Download the pcap of the packet in the tshark output above (No.32 LSP)

The breakdown of Type block(0x07) is the layout from clause 9.8: 0... .... is P, .000 0... is ATT (four bits, one per metric type), .... .1.. is the overload bit, and .... ..11 is the IS Type. The three digits 0/0/1 in show isis database are that one byte, rounded into three.

What the receiving router did

R4’s SPF log:

STEP 1 R4: show isis spf-log
RP/0/RP0/CPU0:R4#show isis spf-log
Sat Sep 12 08:23:56.835 UTC

  IS-IS 1  Level 2  IPv4 Unicast  Route Calculation Log
                                                   Capacity: 210, Size: 8
                    Time Total Trig.
Timestamp    Type   (ms) Nodes Count First Trigger LSP    Triggers
------------ ----- ----- ----- ----- -------------------- ----------------------
--- Sat Sep 12 2026 ---
08:05:29.972  FSPF     0     0     2                      CONFIG
08:05:40.778  FSPF     0     1     7             R4.00-00 CONFIG NEWNODE NEWLSP OVLSET PREFIXGOOD AREAADDR IPADDR
08:05:42.935  FSPF     0     1     1             R4.00-00 OVLCLR
08:05:44.421   PRC     0     1     1             R4.00-00 PREFIXGOOD
08:05:46.021  FSPF     0     4    19             R1.00-00 NEWNODE NEWLSP LINKGOOD PREFIXGOOD AREAADDR IPADDR
08:05:49.223  FSPF     3     4     2             R2.00-00 LINKGOOD
08:20:49.277  FSPF     0     4     1                      PERIODIC
08:21:38.921  FSPF     2     4     1             R2.00-00 OVLSET

The trigger on the last line, OVLSET, is the bit going up in R2’s LSP. R4 reran SPF because of it — four nodes, two milliseconds — and swapped the path over. A change of this bit drives a recomputation exactly as a link appearing or disappearing would.

The lines from startup show OVLSET and OVLCLR as well: R4’s own bit went up at 08:05:40 and came down two seconds later at 08:05:42. This implementation briefly sets the bit on itself while it is coming up.

STEP 2: removing it puts everything back

no set-overload-bit took it away again.

STEP 2 R4: show isis database
RP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:26:38.997 UTC

IS-IS 1 (Level-2) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00              0x00000007   0x2361        541  /1200         0/0/0
R2.00-00              0x0000000a   0x2e3a        1057 /1200         0/0/0
R3.00-00              0x00000007   0xbc6d        782  /1200         0/0/0
R4.00-00            * 0x00000006   0xaf62        654  /*            0/0/0

 Total Level-2 LSP count: 4     Local Level-2 LSP count: 1

R2’s row is back to 0/0/0 with the sequence number up at 0x0000000a, and 1.1.1.1/32 on R4 is once more 20 through R2. Raising and lowering the bit is available at any time and costs exactly one LSP regeneration.

STEP 3: set it only right after startup

set-overload-bit on-startup 300 went in, and then the IS-IS process was restarted.

STEP 3 R2: show configuration commit changes last 1
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sat Sep 12 08:26:57.353 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
 set-overload-bit on-startup 300
!
end

The restart itself:

STEP 3 R2: show logging (excerpt)
RP/0/RP0/CPU0:Sep 12 08:27:01.011 UTC: sysmgr_control[66082]: %OS-SYSMGR-4-PROC_RESTART_NAME : User cisco (vty0) requested a restart of process isis at 0/RP0/CPU0 
RP/0/RP0/CPU0:Sep 12 08:27:01.856 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[8692]: Received disconnect from 10.100.3.1 port 54833:11: disconnected by user 
RP/0/RP0/CPU0:Sep 12 08:27:01.856 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[8692]: Disconnected from user cisco 10.100.3.1 port 54833 
RP/0/RP0/CPU0:Sep 12 08:27:02.348 UTC: isis[1003]: %ROUTING-ISIS-5-PM_HA_ROLE_CHG : ISIS (1): ISIS HA role change: Active 
RP/0/RP0/CPU0:Sep 12 08:27:02.348 UTC: isis[1003]: %ROUTING-ISIS-5-PM_ISSU_ROLE_CHG : ISIS (1): ISIS ISSU role change: Primary 
RP/0/RP0/CPU0:Sep 12 08:27:02.990 UTC: isis[1003]: %ROUTING-ISIS-6-INFO_STARTUP_START : ISIS (1): Cold controlled start beginning 
RP/0/RP0/CPU0:Sep 12 08:27:04.356 UTC: isis[1003]: %ROUTING-ISIS-5-ADJCHANGE : ISIS (1): Adjacency to 49.0001.0040.0400.4004 (GigabitEthernet0/0/0/1) (L2) Up, New adjacency 
RP/0/RP0/CPU0:Sep 12 08:27:04.361 UTC: isis[1003]: %ROUTING-ISIS-5-ADJCHANGE : ISIS (1): Adjacency to 49.0001.0010.0100.1001 (GigabitEthernet0/0/0/0) (L2) Up, New adjacency 
RP/0/RP0/CPU0:Sep 12 08:27:13.095 UTC: isis[1003]: %ROUTING-ISIS-6-INFO_STARTUP_FINISH : ISIS (1): Cold controlled start completed 

The process came back and the adjacencies returned about a second later. The database at that moment:

STEP 3 R4: show isis database
RP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:29:11.749 UTC

IS-IS 1 (Level-2) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00              0x00000009   0x1f63        1076 /1200         0/0/0
R2.00-00              0x0000000b   0x3033        1073 /1200         0/0/1
R3.00-00              0x00000007   0xbc6d        629  /1200         0/0/0
R4.00-00            * 0x00000008   0xab64        1076 /*            0/0/0

 Total Level-2 LSP count: 4     Local Level-2 LSP count: 1

R2 came back as 0/0/1. For the 300 seconds in the configuration it keeps saying “do not route through me”, and 1.1.1.1/32 on R4 stays at 30 through R3 throughout.

STEP 4: the timer drops it

Nothing was changed; the 300 seconds simply passed.

STEP 4 R4: show isis database
RP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:34:00.884 UTC

IS-IS 1 (Level-2) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00              0x00000009   0x1f63        786  /1200         0/0/0
R2.00-00              0x0000000c   0x2a3c        1084 /1200         0/0/0
R3.00-00              0x00000008   0xba6e        1081 /1200         0/0/0
R4.00-00            * 0x00000008   0xab64        786  /*            0/0/0

 Total Level-2 LSP count: 4     Local Level-2 LSP count: 1

0/0/1 has become 0/0/0 while set-overload-bit on-startup 300 is still configured. R2 cleared the bit by itself and rebuilt its LSP, as the rising sequence number shows.

The capture caught that moment too.

No.201 R2's LSP (excerpt from tshark -V)
ISO 10589 ISIS Link State Protocol Data Unit
    PDU length: 113
    Remaining lifetime: 1200
    LSP-ID: 0020.0200.2002.00-00
    Sequence number: 0x0000000c
    Checksum: 0x2a3c [correct]
    [Checksum Status: Good]
    Type block(0x03): Partition Repair:0, Attached bits:0, Overload bit:0, IS type:3
        0... .... = Partition Repair: Not supported
        .000 0... = Attachment: 0
            .0.. .... = Error metric: Not set
            ..0. .... = Expense metric: Not set
            ...0 .... = Delay metric: Not set
            0... .... = Default metric: Not set
        .... .0.. = Overload bit: Not set
        .... ..11 = Type of Intermediate System: Level 2 (3)
Download the pcap of the packet in the tshark output above (No.201 LSP)

Same LSP from R2, with Type block down from 0x07 to 0x03 and .... .0.. = Overload bit: Not set. 1.1.1.1/32 on R4 goes back to 20 through R2.

STEP 5: revert

no set-overload-bit on-startup 300 removed the configuration. The running-config of all four routers matches STEP 0.

Verification configs and show output

The whole test was captured on the R1 - R2 link. The LSPs quoted above are No.32 and No.201 in that file.

Download the capture of the whole test (R1 - R2, about 18 minutes)

Each STEP was captured from all four routers as three files per router. The verification config is the ..._run.txt (the final state is the one from the last STEP). STEPs that changed the configuration also carry a ..._commit.cfg holding only what that STEP committed.

File Contents
..._show.txt show version, show interface description, show route, the show isis set (interface brief, neighbors, database detail, topology, route, adjacency-log, spf-log, lsp-log, statistics), and show route 1.1.1.1 / show route 2.2.2.2
..._log.txt show logging narrowed to that STEP. A logmsg marker is placed at the start of each STEP and its timestamp passed to show logging start
..._run.txt show running-config at that STEP (the verification config for that STEP)
..._commit.cfg What that STEP committed (show configuration commit changes last 1). Absent from STEPs that changed nothing

STEP 0: Initial state (no overload)

Router show syslog running-config commit
R1 show log run -
R2 show log run -
R3 show log run -
R4 show log run -

STEP 1: set-overload-bit on R2

Router show syslog running-config commit
R1 show log run -
R2 show log run commit
R3 show log run -
R4 show log run -

STEP 2: Remove it from R2

Router show syslog running-config commit
R1 show log run -
R2 show log run commit
R3 show log run -
R4 show log run -

STEP 3: set-overload-bit on-startup 300 and process restart isis

Router show syslog running-config commit
R1 show log run -
R2 show log run commit
R3 show log run -
R4 show log run -

STEP 4: Wait for the timer (no configuration change)

Router show syslog running-config commit
R1 show log run -
R2 show log run -
R3 show log run -
R4 show log run -

STEP 5: Revert everything (final state)

Router show syslog running-config commit
R1 show log run -
R2 show log run commit
R3 show log run -
R4 show log run -

References

Standard Title Summary
ISO/IEC 10589:2002 (second edition) Intermediate System to Intermediate System intra-domain routeing information exchange protocol The IS-IS specification itself. This article draws on 7.2.8.1 for computing routes through an overloaded IS, 7.3.19 / 7.3.19.1 for the memory exhaustion and Waiting State the bit came from, and 9.8 for the layout of the LSP header byte.
RFC 3277 Intermediate System to Intermediate System (IS-IS) Transient Blackhole Avoidance The problem of a just-rebooted router being chosen as the IS-IS shortest path before it holds any BGP routes, and the use of a temporary overload bit to avoid it (Informational, April 2002).
RFC 1195 Use of OSI IS-IS for Routing in TCP/IP and Dual Environments The extension that carries IP routes over IS-IS.
Cisco ASR 9000 Routing Command Reference IS-IS Commands The IOS XR set-overload-bit command, which takes advertise, level and on-startup.

Related articles