isisd: SR-MPLS transport labels not exchanged without IPv4 loopback address
Description
I have an SR-MPLS setup with PE-P-PE routers using IS-IS as IGP. With the IGP I want to exchange /128 IPv6 loopback addresses and their MPLS transport labels. Unfortunately MPLS labels does not exchanged within this IPv6-only setup. If I add a /32 IPv4 address to the loopback interface, that fixes the transport label exchange for the IPv6 addresses as well.
Version
I tried it with 10.3, 10.4.1 and 10.5 maybe older versions affected too.
How to reproduce
lo: 1::1/128 lo: a::a/128 lo: 2::2/128
┌──────────┐ ┌──────────┐ ┌──────────┐
│ │ │ │ │ │
│ PE1 ├──────┤ P ├──────┤ PE2 │
│ │ │ │ │ │
└──────────┘ └──────────┘ └──────────┘
- Create a PE1-P-PE2 topology (similar to above)
- Configure IPv6 /128 loopback address
- Configure IS-IS with MPLS and segment routing
- Enabe IPv6 IS-IS and MPLS on the interfaces including the loopback
- On PE1 check IPv6 IS-IS routes
sh ipv6 ro isis, the output will be:
I>* 2::2/128 [115/30] via fe80::8044:d4ff:feb0:3bec, to-p, weight 1, 00:00:28
I>* a::a/128 [115/20] via fe80::8044:d4ff:feb0:3bec, to-p, label IPv6 Explicit Null, weight 1, 00:00:29
- Now add /32 IPv4 loopback addresses
- Check the IS-IS routes again (transport label 20022 appeared):
I>* 2::2/128 [115/30] via fe80::8044:d4ff:feb0:3bec, to-p, label 20022, weight 1, 00:00:06
I>* a::a/128 [115/20] via fe80::8044:d4ff:feb0:3bec, to-p, label IPv6 Explicit Null, weight 1, 00:03:28
For example here is the full config of PE1 (with the fix commented):
interface to-p
ipv6 router isis ISIS_CORE
isis circuit-type level-2-only
mpls enable
exit
!
interface lo
! ip address 1.1.1.1/32 ! <--- uncomment it for label fix
ipv6 address 1::1/128
ipv6 router isis ISIS_CORE
isis circuit-type level-2-only
isis passive
mpls enable
exit
!
router isis ISIS_CORE
is-type level-2-only
net 49.0001.0000.0000.aaaa.00
lsp-mtu 1300
segment-routing on
segment-routing global-block 20000 25000
segment-routing node-msd 8
segment-routing prefix 1::1/128 index 11 explicit-null
exit
Please find mininet reproducer in the attached zip, including full config of PE1, P and PE2:
Expected behavior
In step 5. the sh ipv6 ro isis command verify the transport labels exchanged even if no /32 IPv4 address:
I>* 2::2/128 [115/30] via fe80::8044:d4ff:feb0:3bec, to-p, label 20022, weight 1, 00:00:06
I>* a::a/128 [115/20] via fe80::8044:d4ff:feb0:3bec, to-p, label IPv6 Explicit Null, weight 1, 00:03:28
Actual behavior
The IPv4 loopback address is mandatory even if not used for anything. Without it the transport labels for the 2::2 address below are not exchanged/created:
I>* 2::2/128 [115/30] via fe80::8044:d4ff:feb0:3bec, to-p, weight 1, 00:00:28
I>* a::a/128 [115/20] via fe80::8044:d4ff:feb0:3bec, to-p, label IPv6 Explicit Null, weight 1, 00:00:29
Additional context
For OSPF I would expect such behavior if no router-id configured, since it borrows the IPv4 loopback address for the router-id (both 32 bits). This behavior above is expected for IS-IS as well, just not documented?
Checklist
- [x] I have searched the open issues for this bug.
- [x] I have not included sensitive information in this report.