ISIS – MTU and Hello Padding
1. Intro
ISIS has a rather indirect method of checking the interface MTU to establish if it meets the adjacency requirements.
As an OSI Layer 2 protocol, IS-IS does not support data fragmentation. Therefore, maximum packet sizes must be established and supported between two routers. During adjacency establishment, the IS-IS protocol makes sure that the link supports a packet size of 1492 bytes by padding outgoing hello packets up to the maximum packet size of 1492 bytes.
During neighbor discovery, the ISIS router will send normal and small ISIS Hello (IIH) packets
Frame 28: Packet, 115 bytes on wire (920 bits), 115 bytes captured (920 bits)
IEEE 802.3 Ethernet
Logical-Link Control
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
ISIS HELLO
.... ..01 = Circuit type: Level 1 only (0x1)
0000 00.. = Reserved: 0x00
SystemID {Sender of PDU}: 0001.1100.0001
Holding timer: 27
PDU length: 98
.100 0000 = Priority: 64
0... .... = Reserved: 0
SystemID {Designated IS}: 0001.1100.0001.00
> Protocols Supported (t=129, l=2)
> IP Interface address(es) (t=132, l=4)
> IPv6 Global Interface Address (t=233, l=16)
> IPv6 Interface address(es) (t=232, l=16)
> Area address(es) (t=1, l=18)
> Restart Signaling (t=211, l=3)
Only after the router discovers a neighbor, it will do 2 things:
- it will add the neighbor in a dedicated TLV
- it will add padding to the hello packet to test the end-to-end MTU on the link
Frame 30: Packet, 1509 bytes on wire (12072 bits), 1509 bytes captured (12072 bits)
IEEE 802.3 Ethernet
Logical-Link Control
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
ISIS HELLO
.... ..01 = Circuit type: Level 1 only (0x1)
0000 00.. = Reserved: 0x00
SystemID {Sender of PDU}: 0001.1100.0001
Holding timer: 27
PDU length: 1492
.100 0000 = Priority: 64
0... .... = Reserved: 0
SystemID {Designated IS}: 0001.1100.0001.00
> IS Neighbor(s) (t=6, l=6)
Type: 6
Length: 6
IS Neighbor: 56:04:0d:00:75:8b (56:04:0d:00:75:8b)
Protocols Supported (t=129, l=2)
IP Interface address(es) (t=132, l=4)
> IPv6 Global Interface Address (t=233, l=16)
> IPv6 Interface address(es) (t=232, l=16)
> Area address(es) (t=1, l=18)
> Restart Signaling (t=211, l=3)
> Padding (t=8, l=255)
> Padding (t=8, l=255)
> Padding (t=8, l=255)
> Padding (t=8, l=255)
> Padding (t=8, l=255)
> Padding (t=8, l=99)
Type: 8
Length: 99
After a few packets padded to the default maximum value of 1492 are exchanged, and the adjacency is established, then routers continue to exchange IIH packets at the normal smaller size to preserve bandwidth.
To conclude, each ISIS router should have a minimum MTU of 1492 bytes. This documentation statement seems straightforward enough, but let’s put it to the test.
2. Interface MTU 1400
In this scenario we are testing a lower than default MTU, so let’s try to establish an ISIS adjacency with an interface MTU of 1400.
We have two directly connected routers, R1 and R3, and both have interface MTU set to 1400:
root@R1# show interfaces ge-0/0/2 | display set
set interfaces ge-0/0/2 description "R1 to R3"
set interfaces ge-0/0/2 mtu 1400
set interfaces ge-0/0/2 unit 0 family inet address 17.8.1.1/24
set interfaces ge-0/0/2 unit 0 family iso
root@R1# show protocols isis | display set
set protocols isis interface ge-0/0/2.0
set protocols isis interface lo0.0 passive
set protocols isis level 2 disable
### Both routers have similar configuration and the ISIS adjacency is down
But, with this 1400 MTU configured (both ends), the routers are no longer exchanging IIH packets. This happens silently with no logs to indicate the MTU issue. The only logs related to these interfaces are confusing and rather seem to indicate the interface is down (!) instead of indicating that ISIS is not ok with the MTU.
So, to use a lower MTU, we need to use the ISIS process to send small packets. But how small? While the interface MTU is 1400, the ISO MTU is 1383, this is the max value we can set for ISIS packets. The solution is to set max-hello-size, max-lsp-size and max-snp-size to 1380:
### Check the ISO MTU:
root@R1# run show interfaces ge-0/0/2 | match MTU
Link-level type: Ethernet, MTU: 1400, MRU: 1408, LAN-PHY mode, Speed: 1000mbps, BPDU Error: None, Loop Detect PDU Error: None,
Protocol inet, MTU: 1386
Protocol iso, MTU: 1383
### We will set the max hello size to 1380:
root@R1# set protocols isis max-hello-size 1380
root@R1# set protocols isis max-lsp-size 1380
root@R1# set protocols isis max-snp-size 1380
[edit]
root@R1# show |compare
[edit protocols isis]
+ max-hello-size 1380;
+ max-lsp-size 1380;
+ max-snp-size 1380;
[edit]
root@R1# commit
commit complete
### Only now we see IIH packets being exchanged:
root@R1# run monitor traffic interface ge-0/0/2
[...]
05:42:23.798682 Out IS-IS, L1 Lan IIH, src-id 0001.1100.0001, lan-id 0001.1100.0001.00, prio 64, length 57
05:42:23.802742 In IS-IS, L1 Lan IIH, src-id 0001.1100.0003, lan-id 0001.1100.0003.02, prio 64, length 57
### And the sessions are UP:
root@R1# run show isis adjacency
Interface System L State Hold (secs) SNPA
ge-0/0/2.0 R3 1 Up 7 56:4:d:0:75:8b
[edit]
root@R1# run show isis interface extensive
IS-IS interface database:
ge-0/0/1.0
Index: 335, State: 0x6, Circuit id: 0x2, Circuit type: 1
LSP interval: 100 ms, CSNP interval: 10 s, Loose Hello padding, IIH max size: 1380
Adjacency advertisement: Advertise, Layer2-map: Disabled
Interface Group Holddown Delay: 20 s, remaining: 0 s
Level 1
Adjacencies: 1, Priority: 64, Metric: 10
Hello Interval: 3.000 s, Hold Time: 9 s
Designated Router: R1.02 (us)
lo0.0
Index: 322, State: 0x6, Circuit id: 0x1, Circuit type: 1
LSP interval: 100 ms, CSNP interval: disabled, Loose Hello padding, IIH max size: 1380
Adjacency advertisement: Advertise, Layer2-map: Disabled
Interface Group Holddown Delay: 20 s, remaining: 0 s
Level 1
Adjacencies: 0, Priority: 64, Metric: 0
Passive
### Note: Only R1 output is showed, but R3 is similar:
To conclude, the ISIS process is using the default 1492 MTU even if there is a lower MTU on the interface. This means that if we set a lower than default 1500 MTU (which translates to 1497 iso MTU) on the interface, then the adjacency will fail without additional steps.
Now, let’s rollback by deleting the interface MTU and max-*-size knobs so we can proceed to next scenario.
3. Interface MTU 2000
In this scenario we are testing a higher than default MTY, so we will set the interface MTU to 2000, one router at a time:
root@R1# set interfaces ge-0/0/2 mtu 2000
root@R3# set interfaces ge-0/0/1 mtu 2000
root@R3# run show isis adjacency
Interface System L State Hold (secs) SNPA
ge-0/0/1.0 R1 1 Up 26
Same as in the previous section, irrespective of the interface configuration, the ISIS process will use the default 1492 value, we can see this in the IIH padding (PDU length: 1492). In this case, a higher than default 1500 MTU on the interface will not impact the ISIS adjacency and it will remain UP.
You may say that we can increase the max size for ISIS packets as we did in the previous section, but take a look at this:
root@R3# set protocols isis max-hello-size 1980
root@R3# set protocols isis max-lsp-size 1980
error: Value 1980 is not within range (512..1492): 1980
root@R3# set protocols isis max-snp-size 1980
error: Value 1980 is not within range (512..1400): 1980
As we can see, there are limitations. Here we are entering a territory where we need asses which platform supports this, and even if the platform supports this then we may have vendor interoperability issues.
In a nut shell, for ISIS keep the interface MTU at the default 1500 value (which translates to 1497 iso MTU) or higher, and remember it is not recommended to change the max size values for ISIS packets (lowering them or increasing them).
4. ISIS adjacency over a l2circuit
This is an important use case, we will establish an ISIS adjacency between R1 and R5. But, these routers are not directly connected, instead the connection is over a MPLS L2 Circuit.

For testing purposes, the MPLS interfaces have the default MTU of 1500, so because of the L2Circuit encapsulation in the MPLS core, padded ISIS Hello packets between R1 and R5 will not pass:
### The default ISIS 1492 size requirement is not met by the MPLS core:
root@R2# run show interfaces ge-0/0/3 | match mtu
Link-level type: Ethernet, MTU: 1514, MRU: 1522, LAN-PHY mode, Speed: 1000mbps, BPDU Error: None, Loop Detect PDU Error: None,
Protocol inet, MTU: 1500
Protocol iso, MTU: 1497
Protocol inet6, MTU: 1500
Protocol mpls, MTU: 1488, Maximum labels: 3
Protocol multiservice, MTU: Unlimited
### Hence the ISIS adjacency is down:
root@R1# run show isis adjacency
Interface System L State Hold (secs) SNPA
ge-0/0/1.0 R5 1 Initializing 24
ge-0/0/2.0 R3 1 Up 24
The sensible solution is to increase the MTU in the core:
### Increase the MTU in the MPLS core:
root@R2# set interfaces ge-0/0/3 mtu 9000
root@R4# set interfaces ge-0/0/3 mtu 9000
### After the commit the ISIS adjacency comes UP:
root@R1# run show isis adjacency
Interface System L State Hold (secs) SNPA
ge-0/0/1.0 R5 1 Up 25
ge-0/0/2.0 R3 1 Up 22
What we are highlighting here is the fact that ISIS with the hello padding will actually test the end-to-end MTU on the link, so the inconsistency that we have described in this section is captured.
Interesting, OSPF may seem to be more rigid when checking the MTU during neighborship establishment, but OSPF will fail to capture the MTU missmatch in a similar case. This is because OSPF is checking only the interface MTU, not the end to end MTU on a link.
External Resources: