ISIS Attached Bit
1. Intro
In Junos, the IS-IS Attached Bit (ATT-bit) is a flag automatically set by Level-1/Level-2 (L1/L2) routers in their Level-1 Link State Packets (LSPs). It signals to pure Level-1 (L1) routers in an area that the L1/L2 router is connected to another area or the backbone, allowing the L1 routers to install a default route to exit the area.
In other words, with the default L1/L2 redistribution rules, L1 routes are advertised to L2, but the vice versa is not true, L2 are not redistributed to L1. So, if L1 is not receiving any routes, how it will have connectivity? Well, the attached bit will install a default route in the routing table on L1 routers and so we have end to end connectivity.
We will see the ATT-bit in action on the following topology:

In this topology we can observe how the ISIS Areas are configured, and how they define the L1/L2 ISIS database on the routers.
2. ATT-bit
The attached bit will be set by an ISIS L1/L2 router, in our case we will check this on R6:
### R6 has the ATT bit set:
root@R6# run show isis database
IS-IS level 1 link-state database:
LSP ID Sequence Checksum Lifetime Attributes
R7.00-00 0x75 0x610f 1069 L1
R8.00-00 0x71 0x40de 450 L1
R8.02-00 0x6e 0xc660 996 L1
R6.00-00 0x71 0xb66 1010 L1 L2 Attached
R6.03-00 0x71 0x5784 896 L1 L2
5 LSPs
IS-IS level 2 link-state database:
LSP ID Sequence Checksum Lifetime Attributes
R3.00-00 0x7a 0xeee6 520 L1 L2
R3.03-00 0x6e 0xffd7 805 L1 L2
R4.00-00 0x79 0x5f15 901 L1 L2
R5.00-00 0x83 0xb425 1074 L1 L2
R5.02-00 0x70 0 0 L1 L2
R5.03-00 0x72 0x7a47 867 L1 L2
R6.00-00 0x81 0x10ed 1191 L1 L2
7 LSPs
root@R6# run show isis database R6.03-00 extensive
[...]
Packet: LSP ID: R6.00-00, Length: 330 bytes, Lifetime : 1198 secs
Checksum: 0xb66, Sequence: 0x71, Attributes: 0xb <L1 L2 Attached>
NLPID: 0x83, Fixed length: 27 bytes, Version: 1, Sysid length: 0 bytes
Packet type: 18, Packet version: 1, Max area: 0
[...]
R6 will set the ATT bit, but R7 and R8 will use it and they will generate the default route:
### No default route on R6 (L1/L2 router):
root@R6# run show route 0/0 exact
[edit]
root@R6#
### But on R7 and R8 (L1 routers) we can see the default route:
root@R7# run show route 0/0 exact
inet.0: 34 destinations, 34 routes (34 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[IS-IS/15] 22:49:47, metric 10
> to 17.8.14.1 via ge-0/0/2.0
root@R8# run show route 0/0 exact
inet.0: 33 destinations, 33 routes (33 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[IS-IS/15] 03:50:46, metric 20
> to 17.8.17.1 via ge-0/0/3.0
We can capture this default route and redistribute it to other protocols if we need it:
### R7 is configured to redistribute the default route to R9 (not on the diagram):
set policy-options policy-statement TO-RIP term 1 from route-filter 0.0.0.0/0 exact
set policy-options policy-statement TO-RIP term 1 from route-filter 17.0.0.7/32 exact
set policy-options policy-statement TO-RIP term 1 then tag 777
set policy-options policy-statement TO-RIP term 1 then accept
set protocols rip group RIP export TO-RIP
set protocols rip group RIP neighbor ge-0/0/4.0
### On R9 we see the received default route:
root@R9> show route protocol rip
inet.0: 23 destinations, 23 routes (23 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[RIP/100] 00:00:17, metric 2, tag 777
> to 17.8.18.1 via ge-0/0/5.0
17.0.0.7/32 *[RIP/100] 00:00:17, metric 2, tag 777
> to 17.8.18.1 via ge-0/0/5.0
224.0.0.9/32 *[RIP/100] 1d 00:01:09, metric 1
MultiRecv
But, does this means that every L1/L2 router will just set the ATT bit every time? Not quite. A L1/L2 route will set the ATT bit only if there are other valid destinations reachable in the L2 database.
In our case, if we disable the link between R5 and R6, then R6 becomes an isolated L1/L2 router, and will remove the ATT bit:
### Disable the link between R5 and R6:
root@R5# show | compare
[edit interfaces ge-0/0/4]
- disable;
[edit]
root@R5# commit
commit complete
## Now the ATT bit is no longer set:
root@R6# run show isis database
IS-IS level 1 link-state database:
LSP ID Sequence Checksum Lifetime Attributes
R7.00-00 0x77 0x5d11 1108 L1
R8.00-00 0x73 0x3ce0 461 L1
R8.02-00 0x70 0xc262 823 L1
R6.00-00 0x76 0xf551 698 L1 L2
R6.03-00 0x71 0x5784 403 L1 L2
5 LSPs
IS-IS level 2 link-state database:
LSP ID Sequence Checksum Lifetime Attributes
R3.00-00 0x7a 0xeee6 27 L1 L2
R3.03-00 0x6e 0xffd7 312 L1 L2
R4.00-00 0x79 0x5f15 408 L1 L2
R5.00-00 0x83 0xb425 581 L1 L2
R5.02-00 0x70 0 0 L1 L2
R5.03-00 0x72 0x7a47 374 L1 L2
R6.00-00 0x81 0x10ed 698 L1 L2'
### And no more default route in the routing table for R7/R8:
root@R7# run show route 0/0 exact
[edit]
root@R7#
So, the L1/L2 router must be able to provide some meaningful connectivity before setting the ATT bit.
3. ignore-attached-bit
If for some reason we don’t want the attached bit, we can use the ignore-attached-bit knob and remove it. Let’s test this on R8:
### The default route is there:
root@R8# run show route 0/0 exact
inet.0: 32 destinations, 32 routes (32 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[IS-IS/15] 00:17:45, metric 20
> to 17.8.17.1 via ge-0/0/3.0
### Configure the ignore-attached-bit knob:
[edit]
root@R8# show | compare
[edit protocols isis]
+ ignore-attached-bit;
[edit]
root@R8# commit
commit complete
### The default route was removed:
[edit]
root@R8# show | compare
[edit]
root@R8#
External Resources: