IS-IS Multiple Area Addresses (Multihoming), Merging and Splitting Areas
An IS-IS router is configured with a NET (Network Entity Title), the ISO-style address (see IS-IS NSAP Addresses and the NET). A router can hold several of them. That is the mechanism for reshaping areas without an outage, and merging or splitting areas is done with it.
The standard allows several synonymous area addresses per area
Clause 7.1.5 of ISO/IEC 10589:2002 (second edition) permits an area to have several area addresses. Two reasons are given.
- More than one addressing authority may be involved in a routeing domain, and giving each one its own area is not efficient
- A domain sometimes has to be reconfigured: an area split in two, or several areas combined into one. With only one address per area, that reconfiguration could not be done while the domain is running
The addresses are held in the management parameter manualAreaAddresses, and all of an IS’s
manualAreaAddresses combined with its System ID are valid NETs for that IS.
| Constraint | Detail |
|---|---|
| System ID | Must be the same in every NET. Only the Area ID may differ |
| How many | The management parameter maximumAreaAddresses. All ISs shall support a value of at least 3 (7.1.5) |
| Agreement | maximumAreaAddresses is carried in the protocol’s PDUs and checked for agreement within an area. A mismatch can keep adjacencies from initialising or partition the area |
A Level 1 adjacency needs just one address in common
Clause 7.1.5 states that two Level 1 ISs need at least one area address in common between their
manualAreaAddresses lists. Clause 7.1.4 d) says the same for an End system becoming a neighbour of a
Level 1 IS: its area address must match the IS’s own NET, or one of the other entries in that IS’s
manualAreaAddresses.
Two things follow.
- A router does not belong to several areas at once. Configuring several addresses merges those areas into one
- A merge starts from one side alone. Add the other area’s address to a border router and a common address exists from that moment, so a Level 1 adjacency forms
The procedure for merging and splitting
Reshaping an area is done by giving the border routers both addresses first and removing the unwanted one afterwards.
| Operation | Procedure |
|---|---|
| Merge | Add B’s address on the border of area A, then add A’s address on the border of area B |
| Split | Remove only the other area’s address from the side being separated, then from the other side |
Getting the order wrong splits the area in an unintended place. When the common address disappears first, that router loses the adjacencies that were supposed to be inside its own area. The lab below shows that failure.
Lab setup
Six XRd 26.1.1 routers, with two border routers (R2 and R3). Two borders make it possible to observe the state where an area address has been added or removed on one side only.
| Router | is-type | NET | Lo0 |
|---|---|---|---|
| R1 | level-1 | 49.0001.0010.0100.1001.00 | 1.1.1.1/32 |
| R5 | level-1 | 49.0001.0050.0500.5005.00 | 5.5.5.5/32 |
| R2 | level-1-2 | 49.0001.0020.0200.2002.00 | 2.2.2.2/32 |
| R3 | level-1-2 | 49.0002.0030.0300.3003.00 | 3.3.3.3/32 |
| R4 | level-1 | 49.0002.0040.0400.4004.00 | 4.4.4.4/32 |
| R6 | level-1 | 49.0002.0060.0600.6006.00 | 6.6.6.6/32 |
Overview of the STEPs
| STEP | Action | What it shows |
|---|---|---|
| 0 | Initial state | R2-R3 is Level 2 only. Each area’s Level 1 LSDB holds three LSPs |
| 1 | Add 49.0002 on R2 (one side only) | A common address appears; does a Level 1 adjacency form on R2-R3 |
| 2 | Add 49.0001 on R3 (both sides) | The areas merge into one and the LSDB grows to six |
| 3 | Remove 49.0001 from R2 (the wrong way to split) | The common address with R1 and R5 is gone; do those adjacencies drop |
| 4 | Restore 49.0001 on R2 | Recovery |
| 5 | Remove 49.0001 from R3 | Correct split, first half |
| 6 | Remove 49.0002 from R2 | Split complete, back to the initial state |
| 7 | Give R2 three NETs, then try a fourth | Is it rejected by maximumAreaAddresses |
| 8 | Remove the two extra NETs (final state) | Same as the initial state |
One side is enough for a Level 1 adjacency
In the initial state R2 and R3 have different Area IDs, so only a Level 2 adjacency exists.
RP/0/RP0/CPU0:R2#show isis neighbors
Sun Oct 4 06:30:07.424 UTC
IS-IS 1 neighbors:
System Id Interface SNPA State Holdtime Type IETF-NSF
R1 Gi0/0/0/0 *PtoP* Up 25 L1 Capable
R5 Gi0/0/0/2 *PtoP* Up 22 L1 Capable
R3 Gi0/0/0/1 *PtoP* Up 29 L2 Capable
Total neighbor count: 3A NET for 49.0002 is added on R2 alone. The System ID is unchanged.
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sun Oct 4 06:32:27.761 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
net 49.0002.0020.0200.2002.00
!
endR2 now holds two area addresses.
RP/0/RP0/CPU0:R2#show isis
Sun Oct 4 06:34:59.510 UTC
IS-IS Router: 1
System Id: 0020.0200.2002
Hostname: R2
IS Levels: level-1-2
Manual area address(es):
49.0001
49.0002
Routing for area address(es):
49.0001
49.0002
Multi-Instance Id: 0Although nothing was changed on R3, the R2-R3 adjacency becomes L1L2.
RP/0/RP0/CPU0:R2#show isis neighbors
Sun Oct 4 06:35:00.422 UTC
IS-IS 1 neighbors:
System Id Interface SNPA State Holdtime Type IETF-NSF
R1 Gi0/0/0/0 *PtoP* Up 24 L1 Capable
R5 Gi0/0/0/2 *PtoP* Up 24 L1 Capable
R3 Gi0/0/0/1 *PtoP* Up 28 L1L2 Capable
Total neighbor count: 3One address (49.0002) is now in common, exactly as 7.1.5 says. With R1 and R5, 49.0001 is still in common,
so those stay Level 1. R2 has become the router that joins the two areas into one.
Adding it on both sides merges the areas
Adding 49.0001 on R3 gives both borders two addresses.
RP/0/RP0/CPU0:R2#show isis
Sun Oct 4 06:39:56.718 UTC
IS-IS Router: 1
System Id: 0020.0200.2002
Hostname: R2
IS Levels: level-1-2
Manual area address(es):
49.0001
49.0002
Routing for area address(es):
49.0001
49.0002
Multi-Instance Id: 0RP/0/RP0/CPU0:R3#show isis
Sun Oct 4 06:40:23.665 UTC
IS-IS Router: 1
System Id: 0030.0300.3003
Hostname: R3
IS Levels: level-1-2
Manual area address(es):
49.0002
49.0001
Routing for area address(es):
49.0002
49.0001
Multi-Instance Id: 0The Level 1 LSDB now holds six LSPs: what were two areas is now one.
RP/0/RP0/CPU0:R2#show isis database
Sun Oct 4 06:39:58.688 UTC
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000006 0xdcb5 545 /1200 0/0/0
R2.00-00 * 0x0000000b 0xe2e0 756 /* 0/0/0
R3.00-00 0x0000000d 0x917d 1044 /1200 0/0/0
R4.00-00 0x00000006 0x2cab 756 /836 0/0/0
R5.00-00 0x00000006 0xce0a 543 /1200 0/0/0
R6.00-00 0x00000005 0x1868 756 /1001 0/0/0
Total Level-1 LSP count: 6 Local Level-1 LSP count: 1
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R2.00-00 * 0x0000000c 0xd845 757 /* 0/0/0
R3.00-00 0x0000000c 0x34e4 757 /1200 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1Splitting in the wrong order breaks the area apart
Attempting to split by removing 49.0001 from R2 first — the address it had in common with R1 and R5.
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sun Oct 4 06:42:17.245 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
no net 49.0001.0020.0200.2002.00
!
endR2 is left with R3 as its only neighbour.
RP/0/RP0/CPU0:R2#show isis neighbors
Sun Oct 4 06:47:09.199 UTC
IS-IS 1 neighbors:
System Id Interface SNPA State Holdtime Type IETF-NSF
R3 Gi0/0/0/1 *PtoP* Up 22 L1L2 Capable
Total neighbor count: 1R1’s syslog gives the reason.
RP/0/RP0/CPU0:Oct 4 06:42:22.912 UTC: isis[1003]: %ROUTING-ISIS-5-ADJCHANGE : ISIS (1): Adjacency to R2 (GigabitEthernet0/0/0/0) (L1) Down, Area addr/level differ In this state all six ping paths stop. R1 and R5 are cut off from the area, so everything that goes through R2 is lost.
| STEP | R1→R4 | R1→R6 | R1→R5 | R4→R1 | R6→R1 | R5→R4 |
|---|---|---|---|---|---|---|
| 0 (initial state) | 100% | 100% | 100% | 100% | 100% | 100% |
| 1 (merged on one side) | 100% | 100% | 100% | 100% | 100% | 100% |
| 2 (merged) | 100% | 100% | 100% | 100% | 100% | 100% |
| 3 (wrong way to split) | 0% | 0% | 0% | 0% | 0% | 0% |
| 4 (restored) | 100% | 100% | 100% | 100% | 100% | 100% |
| 5 and 6 (correct split) | 100% | 100% | 100% | 100% | 100% | 100% |
The correct order is to remove only the other area’s address from the side being separated. STEP 5 removed
49.0001 from R3 and STEP 6 removed 49.0002 from R2; reachability stayed at 100% throughout.
After a split, the other area’s LSPs do not disappear at once
Right after the split, R2’s Level 1 LSDB still holds the LSPs of R3, R4 and R6 that arrived while the areas were merged. They are not purged: they simply stop being refreshed and age out at MaxAge.
RP/0/RP0/CPU0:R2#show isis database
Sun Oct 4 07:01:58.416 UTC
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000009 0xd6b8 456 /1199 0/0/0
R2.00-00 * 0x00000013 0x443d 1047 /* 1/0/0
R3.00-00 0x0000000f 0x73ea 746 /1200 0/0/0
R4.00-00 0x00000008 0x28ad 825 /1200 0/0/0
R5.00-00 0x00000008 0xca0c 453 /1199 0/0/0
R6.00-00 0x00000007 0x146a 836 /1200 0/0/0
Total Level-1 LSP count: 6 Local Level-1 LSP count: 1
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R2.00-00 * 0x00000013 0xe24a 1047 /* 0/0/0
R3.00-00 0x00000013 0xe110 1047 /1199 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1RP/0/RP0/CPU0:R2#show isis database
Sun Oct 4 07:12:23.984 UTC
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x0000000a 0xd4b9 693 /1200 0/0/0
R2.00-00 * 0x00000015 0x403f 1046 /* 1/0/0
R3.00-00 0x0000000f 0x73ea 120 /1200 0/0/0
R4.00-00 0x00000008 0x28ad 199 /1200 0/0/0
R5.00-00 0x00000009 0xc80d 598 /1200 0/0/0
R6.00-00 0x00000007 0x146a 211 /1200 0/0/0
Total Level-1 LSP count: 6 Local Level-1 LSP count: 1
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R2.00-00 * 0x00000015 0xde4c 1046 /* 0/0/0
R3.00-00 0x00000014 0xdf11 1149 /1200 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1The LSPs of R3, R4 and R6 keep the same sequence numbers while their LSP Holdtime falls
(R3 goes from 746 to 120). R1 and R5, in the same area, have advancing sequence numbers and refreshed holdtimes.
Three area addresses is the limit
With two more NETs added to R2, making three, a fourth is rejected.
RP/0/RP0/CPU0:R2(config-isis)#show configuration failed
Sun Oct 4 07:04:47.014 UTC
!! SEMANTIC ERRORS: This configuration was rejected by
!! the system due to semantic errors. The individual
!! errors with each failed configuration command can be
!! found below.
router isis 1
net 49.0005.0020.0200.2002.00
!!% Maximum area address count exceeded: maximum number of area addresses is 3
!
endThe message says maximum number of area addresses is 3. This is the implementation of “all ISs shall support
a value of at least 3” from 7.1.5, and XRd 26.1.1 has no command to raise it.
The System ID cannot change
Only the Area ID may differ between NETs. A NET with a different System ID is rejected.
RP/0/RP0/CPU0:R1(config-isis)#show configuration failed
Sun Oct 4 06:20:49.138 UTC
!! SEMANTIC ERRORS: This configuration was rejected by
!! the system due to semantic errors. The individual
!! errors with each failed configuration command can be
!! found below.
router isis 1
net 49.0001.0099.0999.9999.00
!!% System ID must not change: 0010.0100.1001
!
endVerification configs and show output
Collected from all six routers in every STEP. The verification config is the ..._run.txt file
(the final state is the one from STEP 8).
| File | Contents |
|---|---|
..._show.txt | The show set (30 to 32 commands depending on the role): show isis / show isis neighbors detail / show isis database detail / show isis database level 1 / level 2 / show isis adjacency-log / show route isis and more |
..._ping.txt | ping (20 packets) and traceroute |
..._clear.txt | Record of the interface counters cleared in that STEP |
..._commit.cfg | Only the configuration committed in that STEP |
..._failed.cfg | The rejected configuration (the fourth NET in STEP 7) |
..._log.txt | show logging limited to the range of that STEP |
..._run.txt | show running-config at that STEP (the verification config for the STEP) |
..._trace.txt | show isis trace standard | include ADJ |
STEP 0: Initial state (two areas)
| Router | show | ping / traceroute | clear | Config committed | Config rejected | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | — | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 1: A NET for 49.0002 added on R2 only
| Router | show | ping / traceroute | clear | Config committed | Config rejected | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 2: A NET for 49.0001 added on R3 as well (merged)
| Router | show | ping / traceroute | clear | Config committed | Config rejected | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | — | — | log | run | trace |
| R3 | show | — | clear | commit | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 3: 49.0001 removed from R2 (the wrong way to split)
| Router | show | ping / traceroute | clear | Config committed | Config rejected | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 4: 49.0001 restored on R2
| Router | show | ping / traceroute | clear | Config committed | Config rejected | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 5: 49.0001 removed from R3 (correct split, first half)
| Router | show | ping / traceroute | clear | Config committed | Config rejected | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | — | — | log | run | trace |
| R3 | show | — | clear | commit | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 6: 49.0002 removed from R2 (split complete)
| Router | show | ping / traceroute | clear | Config committed | Config rejected | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 7: R2 given three NETs, then a fourth attempted
| Router | show | ping / traceroute | clear | Config committed | Config rejected | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | failed | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 8: The two extra NETs removed from R2 (final state)
| Router | show | ping / traceroute | clear | Config committed | Config rejected | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
Packet captures were taken per STEP on two links.
| STEP | R1-R2 | R2-R3 (between the border routers) |
|---|---|---|
| 0 | pcap | pcap |
| 1 | pcap | pcap |
| 2 | pcap | pcap |
| 3 | pcap | pcap |
| 4 | pcap | pcap |
| 5 | pcap | pcap |
| 6 | pcap | pcap |
| 7 | pcap | pcap |
| 8 | pcap | pcap |
References
| Standard | Title | Summary |
|---|---|---|
| ISO/IEC 10589:2002 (second edition) | Intermediate System to Intermediate System intra-domain routeing information exchange protocol | 7.1.5 for several synonymous area addresses, manualAreaAddresses and maximumAreaAddresses (“all ISs shall support a value of at least 3”, the value being carried in PDUs and checked for agreement), 7.1.4 d) for the condition on adjacencies, and 7.1.3.2 for the structure of the System ID. |
| RFC 1195 | Use of OSI IS-IS for Routing in TCP/IP and Dual Environments | The extension that carries IP routes in IS-IS (Integrated IS-IS). |
Related articles
- What is IS-IS
- IS-IS NSAP Addresses and the NET (System ID)
- IS-IS Multiple Area Addresses (Multihoming), Merging and Splitting Areas
- IS-IS Level 1 and Level 2 (the hierarchy)
- IS-IS Packet Types and Header Format
- IS-IS Adjacency Formation and States
- IS-IS DIS and the Pseudonode
- IS-IS Network Types (broadcast / point-to-point)
- IS-IS Metrics (narrow and wide)
- IS-IS Authentication (hello-password and lsp-password)
- IS-IS LSPs and the Link-State Database
- The Main IS-IS TLVs
- IS-IS Flooding and LSDB Synchronisation
- IS-IS SPF Computation and Route Selection
- IS-IS ECMP (Equal-Cost Multipath)
- The IS-IS ATT Bit and the Level 1 Default Route
- IS-IS Route Leaking and the Up/Down Bit
- IS-IS Route Summarization
- The IS-IS Overload Bit
- IS-IS IPv6 Support and Multi-Topology (TLV 236 / MT ID 2)
- IS-IS Hello and Holding Time
- IS-IS Convergence Timers (SPF / LSP Generation)
- IS-IS Flooding Timers (LSP Interval, Retransmission, CSNP / PSNP)
- IS-IS Link Failure and Path Switchover
- IS-IS Redistribution (connected / static)
- IS-IS Redistribution of BGP Routes