reference thanks to https://mellowd.co.uk/ccie/?p=5487
Basic LSPs
In OSPF we use the term LSA, Link-State Advertisement. In IS-IS we
use the term LSP – Link-State PDUs. Further expanded into Link-State
Protocol Data Units. Not to be confused with Label Switched Paths.
This is the topology we’ll start with:

Like OSPF, IS-IS will treat ethernet links as broadcast by default. In
OSPF a DR and BDR will be elected. In IS-IS a single DIS (Designated
Intermediate System) is elected with no backup DIS. This DIS election is
also pre-emtptive, unlike OSPF. The DIS will originate an LSP
representing the DIS. This means I should have three LSPs in the
database currently:
RP/0/0/CPU0:XR1#show isis database
Tue Aug 12 17:34:21.594 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR1.00-00 * 0x00000003 0x8577 736 0/0/0
XR1.01-00 0x00000002 0x1fba 931 0/0/0
XR2.00-00 0x00000005 0x856b 806 0/0/0
Total Level-2 LSP count: 3 Local Level-2 LSP count: 1
XR2 has a single LSP with XR1 has two. The XR1.01 LSP is the DIS LSP. Dig deeper into the LSPs to see their current content:
RP/0/0/CPU0:XR1#show isis database XR1.00-00 detail
Tue Wed 12 17:38:23.307 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR1.00-00 * 0x00000003 0x8577 494 0/0/0
Area Address: 49.0001
NLPID: 0xcc
Hostname: XR1
IP Address: 1.1.1.1
Metric: 10 IS XR1.01
Metric: 10 IP 1.1.1.1/32
Metric: 10 IP 10.0.12.0/24
XR1 has originated an LSP stating what area it’s in and hostname.
Notice the NLPID value. This means Network Layer Protocol IDentifier.
The value of 0xcc translates to IPv4. Further down the LSP contains the
IS of XR1 itself, plus two IP ranges. All these with metrics to those IS
and IPs. I’ll get onto the ATT/P/OL bits later so ignore those for now.
It’s important to note that an LSP is made up of several TLVs. On the
wire multiple TLVs can be grouped together in a single frame. If large
enough, IS-IS will fragment these frames.
As XR1 is the DIS, there is a separate DIS LSP, let’s take a look at that:
RP/0/0/CPU0:XR1#show isis database XR1.01-00 detail
Tue Aug 12 17:43:00.448 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR1.01-00 0x00000003 0x1dbb 1161 0/0/0
Metric: 0 IS XR1.00
Metric: 0 IS XR2.00
The DIS LSP advertises all the IS’ that are on the segment in which the DIS sits.
If I change the segment to point-to-point, this removes the need of a DIS and as such there will be no DIS LSP.
router isis 1
!
interface GigabitEthernet0/0/0/1
point-to-point
RP/0/0/CPU0:XR1#show isis database
Tue Aug 12 18:46:50.566 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR1.00-00 * 0x0000000b 0x7480 674 0/0/0
XR2.00-00 0x0000000d 0x5297 543 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1
Externals
I’m going to add another loopback interface on XR1 and redistribute that loopback into IS-IS. This will make the route external
interface Loopback100
ipv4 address 100.100.100.100 255.255.255.255
!
prefix-set LOOPBACK100
100.100.100.100/32
end-set
!
route-policy RP-100
if destination in LOOPBACK100 then
done
else
drop
endif
end-policy
!
router isis 1
address-family ipv4 unicast
redistribute connected level-2 route-policy RP-100
As I mentioned above, IS-IS has separate TLVs that make up the LSP. Therefore there is still only a single LSP from XR1:
RP/0/0/CPU0:XR2#sh isis database
Tue Aug 12 19:03:31.569 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR1.00-00 0x0000000d 0x6be5 1043 0/0/0
XR2.00-00 * 0x00000010 0x9c8f 1094 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1
The external route can be seen in the detailed output under that LSP:
RP/0/0/CPU0:XR2#sh isis database XR1.00-00 detail
Tue Aug 12 19:03:58.637 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR1.00-00 0x0000000d 0x6be5 1016 0/0/0
Area Address: 49.0001
NLPID: 0xcc
Hostname: XR1
IP Address: 1.1.1.1
Metric: 10 IS XR2.00
Metric: 10 IP 1.1.1.1/32
Metric: 10 IP 10.0.12.0/24
Metric: 0 IP-External 100.100.100.100/32
Inter-Area
XR3 has now been added to the topology. I’ve had to move XR2 into the
same area as XR3 otherwise they will not be able to form a L1
adjacency:

the R2-R3 link has not been changed to point-to-point, and as such I would expect to see three LSPs in XR3s database:
RP/0/0/CPU0:XR3#show isis database
Tue Aug 12 09:44:40.660 UTC
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR2.00-00 0x00000008 0xd230 1107 1/0/0
XR3.00-00 * 0x00000008 0xf1be 1105 0/0/0
XR3.07-00 0x00000003 0xfcd3 1105 0/0/0
Total Level-1 LSP count: 3 Local Level-1 LSP count: 1
If you look at XR2’s L1 LSP in detail you now see the ATT bit set.
Also note it’s advertising only it’s directly connected interfaces:
RP/0/0/CPU0:XR3#show isis database XR2.00-00 detail
Tue Aug 12 19:45:51.025 UTC
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR2.00-00 0x00000008 0xd230 1037 1/0/0
Area Address: 49.0023
NLPID: 0xcc
Hostname: XR2
IP Address: 2.2.2.2
Metric: 10 IS XR3.07
Metric: 10 IP 2.2.2.2/32
Metric: 10 IP 10.0.12.0/24
Metric: 10 IP 10.0.23.0/24
XR2 has set the ATT bit which is the attached bit. An L1/L2 router
will set this bit in the LSP inside the L1 area it’s connected to. This
is to inform the L1 routers that it is attached to the L2 domain. No
actual default route is advertised, but L1 routers can create their own
defaults pointing towards the attached routers:
RP/0/0/CPU0:XR3#sh ip route 0.0.0.0
Tue Aug 12 19:47:07.839 UTC
Routing entry for 0.0.0.0/0
Known via "isis 1", distance 115, metric 10, candidate default path, type level-1
Installed Aug 12 19:43:09.476 for 00:03:58
Routing Descriptor Blocks
10.0.23.2, from 2.2.2.2, via GigabitEthernet0/0/0/0.23
Route metric is 10
No advertising protos.
Notice from XR1’s persepctive, that any routes coming from an L1 area is simple flooded from the L1/L2 router as normal routes:
RP/0/0/CPU0:XR1#show isis database XR2.00-00 detail
Tue Aug 12 19:50:08.676 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR2.00-00 0x0000001b 0x5b3d 778 0/0/0
Area Address: 49.0023
NLPID: 0xcc
Hostname: XR2
IP Address: 2.2.2.2
Metric: 10 IS XR1.00
Metric: 10 IP 2.2.2.2/32
Metric: 20 IP 3.3.3.3/32
Metric: 10 IP 10.0.12.0/24
Metric: 10 IP 10.0.23.0/24
Metric: 10 IP 200.200.200.200/32
IS-IS gives you the ability to leak L2 prefixes into the L1 domain.
This is handy when you have two L1/L2 border routers and want to
engineer destiations to go on particular paths. From XR2 I’ll leak XR1’s
loopback into the L1 domain. The database now shows:
RP/0/0/CPU0:XR3#show isis database XR2.00-00 detail
Tue Aug 12 21:53:13.981 UTC
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR2.00-00 0x0000002f 0x4e13 1193 1/0/0
Area Address: 49.0023
NLPID: 0xcc
Hostname: XR2
IP Address: 2.2.2.2
Router Cap: 2.2.2.2, D:0, S:0
Metric: 10 IS XR3.07
Metric: 20 IP-Interarea 1.1.1.1/32
Metric: 10 IP 2.2.2.2/32
Metric: 10 IP 10.0.23.0/24
1.1.1.1/32 shows up in LSP as an IP-Interarea route. Again a TLV is used for this.
IPv6
When running both IPv4 and IPv6 at the same time, IS-IS can be run in
single-topology or multi-topolgy mode. In single topology, all your
IS-IS links need to have both v4 and v6 addresses as the SPF tree is run
indenpently of prefix information. If the SPF tree is calculated to use
a link without a v6 address, IPv6 traffic will be blackholed over that
link.
For now I’ve added an IPv6 loopback and interface address. I’ve got
IS-IS running in multi topology mode. I should still only see two LSPs
from XR1’s perspective:
RP/0/0/CPU0:XR1#show isis database
Tue Aug 12 23:47:02.152 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR1.00-00 * 0x0000001e 0x9683 1115 0/0/0
XR2.00-00 0x0000002b 0x62fa 1117 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1
IPv6 information is carried inside another TLV. Note also that there
is a new NLPID value of 0x8e in the LSP. As you would guess this value
represents IPv6:
RP/0/0/CPU0:XR1#show isis database detail XR2.00-00
Tue Aug 12 23:47:50.899 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR2.00-00 0x0000002b 0x62fa 1068 0/0/0
Area Address: 49.0023
NLPID: 0xcc
NLPID: 0x8e
MT: Standard (IPv4 Unicast)
MT: IPv6 Unicast 0/0/0
Hostname: XR2
IP Address: 2.2.2.2
IPv6 Address: 2001:db8:2:2::2
Metric: 10 IS XR1.00
Metric: 10 IP 2.2.2.2/32
Metric: 20 IP 3.3.3.3/32
Metric: 10 IP 10.0.12.0/24
Metric: 10 IP 10.0.23.0/24
Metric: 10 IP 200.200.200.200/32
Metric: 10 MT (IPv6 Unicast) IS-Extended XR1.00
Metric: 10 MT (IPv6 Unicast) IPv6 2001:db8:2:2::2/128
Metric: 10 MT (IPv6 Unicast) IPv6 2001:db8:12::/64
When running multi-topology mode, you’ll see MT: plus the address
families configured for multi-topology. If I change this to single
topology:
RP/0/0/CPU0:XR1#show isis database XR2.00-00 detail
Tue Aug 12 23:11:20.989 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR2.00-00 0x00000023 0xd22a 1196 0/0/0
Area Address: 49.0023
NLPID: 0xcc
NLPID: 0x8e
Hostname: XR2
IP Address: 2.2.2.2
IPv6 Address: 2001:db8:2:2::2
Metric: 10 IS XR1.00
Metric: 10 IP 2.2.2.2/32
Metric: 10 IP 10.0.12.0/24
Metric: 10 IP 10.0.23.0/24
Metric: 10 IP 200.200.200.200/32
Metric: 10 IPv6 2001:db8:2:2::2/128
Metric: 10 IPv6 2001:db8:12::/64
MT no longer shows up, and all TLVs are added as-is to the LSP.
Traffic Engineering
To enable TE, wide-metrics need to be enabled. Up until this point
I’ve been using narrow metrics. Once enabled You can see the TE
information in the LSP by doing a verbose output:
RP/0/0/CPU0:XR1#show isis database verbose XR2.00-00
Tue Aug 12 23:42:09.932 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR2.00-00 0x00000026 0x2dd8 910 0/0/0
Area Address: 49.0023
NLPID: 0xcc
NLPID: 0x8e
Hostname: XR2
IP Address: 2.2.2.2
IPv6 Address: 2001:db8:2:2::2
Router ID: 2.2.2.2
Metric: 10 IS-Extended XR1.00
Affinity: 0x00000000
Interface IP Address: 10.0.12.2
Neighbor IP Address: 10.0.12.1
Physical BW: 1000000 kbits/sec
Reservable Global pool BW: 0 kbits/sec
Global Pool BW Unreserved:
[0]: 0 kbits/sec [1]: 0 kbits/sec
[2]: 0 kbits/sec [3]: 0 kbits/sec
[4]: 0 kbits/sec [5]: 0 kbits/sec
[6]: 0 kbits/sec [7]: 0 kbits/sec
Admin. Weight: 167772160
Ext Admin Group: Length: 32
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
Metric: 10 IP-Extended 2.2.2.2/32
Metric: 10 IP-Extended 10.0.12.0/24
Metric: 10 IP-Extended 10.0.23.0/24
Metric: 10 IP-Extended 200.200.200.200/32
Metric: 10 IPv6 2001:db8:2:2::2/128
Metric: 10 IPv6 2001:db8:12::/64
Notice there there is no new NLPID value for TE. TE extensions are
enabled under address-family ipv4 and hence it uses the 0xcc id. If/when
RSVP-TE can use IPv6 natively, I could expect to see only the IPv6 ID.
Overload
IS-IS has the ability to set the overload bit in an LSP. This could
be originated by the router itself if it was overwhelmed, but it can
also be hard set when doing planned works for example. If the overload
bit is set, other routers will route around the router.
router isis 1
set-overload-bit
Note that OL bit set in the LSP:
RP/0/0/CPU0:XR1#show isis database
Tue Aug 12 23:32:58.107 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR1.00-00 * 0x0000001f 0x9484 947 0/0/0
XR2.00-00 0x0000002e 0x97a4 1151 0/0/1
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1
I no longer have access to R3 now as R2 is the only router connecting these two devices:
RP/0/0/CPU0:XR1#ping 3.3.3.3
Tue Aug 12 23:08:44.083 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)
I am still able to ping XR2 itself though:
RP/0/0/CPU0:XR1#ping 2.2.2.2
Tue Aug 12 23:09:32.870 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
We’ve now seen the purpose of both the ATT and OL bits, so what is
the P bit for? that bit is for the Partition Repair Bit which no vendor
has implemented. i.e. it should always show 0.
Segment Routing
IS-IS is easily extended using new TLVs. If I enable segment routing
under my IS-IS process, I see it added as a new TLV in the LSP:
RP/0/0/CPU0:XR1#show isis database verbose XR2.00-00
Tue Aug 12 23:50:35.855 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
XR2.00-00 0x00000036 0x252b 954 0/0/0
Area Address: 49.0023
NLPID: 0xcc
NLPID: 0x8e
MT: Standard (IPv4 Unicast)
MT: IPv6 Unicast 0/0/0
Hostname: XR2
IP Address: 2.2.2.2
IPv6 Address: 2001:db8:2:2::2
Router Cap: 2.2.2.2, D:0, S:0
Segment Routing: I:1 V:0, SRGB Base: 900000 Range: 65535
Metric: 10 IS XR1.00
Metric: 10 IP 2.2.2.2/32
Metric: 20 IP 3.3.3.3/32
Metric: 10 IP 10.0.12.0/24
Metric: 10 IP 10.0.23.0/24
Metric: 10 IP 200.200.200.200/32
Metric: 10 MT (IPv6 Unicast) IS-Extended XR1.00
Metric: 10 MT (IPv6 Unicast) IPv6 2001:db8:2:2::2/128
Metric: 10 MT (IPv6 Unicast) IPv6 2001:db8:12::/64