Anybody else being as masochistic as I am to attempt using FRR's IS-IS with unnumbered interfaces? It works "like a charm" with IPv6, but IPv4 isn't routed if no IPv4 IPs on the IS-IS connected interfaces. Using Openfabric (based on and in the isisd code), it all just works... correctly (So why am I not using Openfabric? as I want to use it with multi node links/networks which Openfabric doesn't support/do, and I'm interested in interfacing with other network kit, so IS-IS is the beterer choice as openfabric is "dead" in IETF, replaced by the dist-opt-flood extensions to IS-IS)
Though Openfabric will happily insert onlink routes on unnumbered interfaces, it seems that IS-IS "needs" to have an IPv4 address on the interface(s), else it doesn't have next hops to insert.
I've searched high and low, and couldn't find any setting I've missed, and the source code hasn't been too helpful to see/understand if I'm missing something or if the needs haven't been coded into IS-IS yet.
``` Current configuration: ! frr version 10.0 frr defaults datacenter hostname margherita log syslog informational service integrated-vtysh-config ! interface enp67s0f1 ip router isis 1 ipv6 router isis 1 isis csnp-interval 2 isis hello-interval 1 isis hello-multiplier 2 isis network point-to-point exit ! interface enp67s0f2 ip router isis 1 ipv6 router isis 1 isis csnp-interval 2 isis hello-interval 1 isis hello-multiplier 2 isis network point-to-point exit ! interface enp67s0f3 ip router isis 1 ipv6 router isis 1 isis csnp-interval 2 isis hello-interval 1 isis hello-multiplier 2 isis network point-to-point exit ! interface lo ip address 10.4.127.1/32 ip router isis 1 ipv6 address 2c0f:dead:beef:feed:2:0:4:1/128 ipv6 router isis 1 isis passive exit ! router isis 1 is-type level-1 net 49.1004.feed.feed.0004.0001.00 lsp-timers gen-interval 1 refresh-interval 180 max-lifetime 600 redistribute ipv4 connected level-1 redistribute ipv6 connected level-1 topology ipv4-multicast topology ipv4-mgmt topology ipv6-unicast topology ipv6-multicast topology ipv6-mgmt topology ipv6-dstsrc log-adjacency-changes exit ! end ```
``` root@margherita:~# vtysh -c "show isis route" Area 1: IS-IS paths to level-1 routers that speak IP Vertex Type Metric Next-Hop Interface Parent margherita 10.4.127.1/32 IP internal 0 margherita(4) pu.bl.ic1.0/24 IP internal 0 margherita(4)
IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s) ------------------------------------------------------- 10.4.127.1/32 0 - - - pu.bl.ic1.0/24 0 - - -
IS-IS paths to level-1 routers that speak IPv6 Vertex Type Metric Next-Hop Interface Parent margherita 2c0f:dead:beef:feed:2:0:4:1/128 IP6 internal 0 margherita(4) quesadilla TE-IS 10 quesadilla enp67s0f1 margherita(4) guacamole TE-IS 10 guacamole enp67s0f2 margherita(4) tequila TE-IS 10 tequila enp67s0f3 margherita(4) 2c0f:dead:beef:feed:2:0:4:2/128 IP6 internal 10 quesadilla enp67s0f1 quesadilla(4) 2c0f:dead:beef:feed:2:0:4:3/128 IP6 internal 10 guacamole enp67s0f2 guacamole(4) 2c0f:dead:beef:feed:2:0:4:4/128 IP6 internal 10 tequila enp67s0f3 tequila(4)
IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s) ---------------------------------------------------------------------------------------- 2c0f:dead:beef:feed:2:0:4:1/128 0 - - - 2c0f:dead:beef:feed:2:0:4:2/128 10 enp67s0f1 fe80::7777:55ff:fe31:6648 - 2c0f:dead:beef:feed:2:0:4:3/128 10 enp67s0f2 fe80::7777:55ff:fe31:6664 - 2c0f:dead:beef:feed:2:0:4:4/128 10 enp67s0f3 fe80::7777:55ff:fe31:663c -
IS-IS paths to level-1 routers that support IPv6 dst-src routing Vertex Type Metric Next-Hop Interface Parent margherita quesadilla TE-IS 10 quesadilla enp67s0f1 margherita(4) guacamole TE-IS 10 guacamole enp67s0f2 margherita(4) tequila TE-IS 10 tequila enp67s0f3 margherita(4)
IS-IS L1 IPv6 (dst-src routing) routing table: ```
adding the "loopback" IP to all connected interfaces:
``` root@margherita:~# for i in 0 1 2 3; do ip a add dev enp67s0f$i 10.4.127.1 ;done root@margherita:~# vtysh -c "show isis route" Area 1: IS-IS paths to level-1 routers that speak IP Vertex Type Metric Next-Hop Interface Parent margherita 10.4.127.1/32 IP internal 0 margherita(4) pu.bli.c1.0/24 IP internal 0 margherita(4) quesadilla TE-IS 10 quesadilla enp67s0f1 margherita(4) guacamole TE-IS 10 guacamole enp67s0f2 margherita(4) tequila TE-IS 10 tequila enp67s0f3 margherita(4) 10.4.127.2/32 IP TE 10 quesadilla enp67s0f1 quesadilla(4) pu.bli.c1.0/24 IP TE 10 quesadilla enp67s0f1 quesadilla(4) guacamole enp67s0f2 guacamole(4) tequila enp67s0f3 tequila(4) 10.4.127.3/32 IP TE 10 guacamole enp67s0f2 guacamole(4) 10.4.127.4/32 IP TE 10 tequila enp67s0f3 tequila(4)
IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s) ---------------------------------------------------------- 10.4.127.1/32 0 - - - 10.4.127.2/32 10 enp67s0f1 10.4.127.2 - 10.4.127.3/32 10 enp67s0f2 10.4.127.3 - 10.4.127.4/32 10 enp67s0f3 10.4.127.4 - pu.bli.c1.0/24 10 enp67s0f1 10.4.127.2 - enp67s0f2 10.4.127.3 - enp67s0f3 10.4.127.4 -
IS-IS paths to level-1 routers that speak IPv6 Vertex Type Metric Next-Hop Interface Parent margherita 2c0f:dead:beef:feed:2:0:4:1/128 IP6 internal 0 margherita(4) quesadilla TE-IS 10 quesadilla enp67s0f1 margherita(4) guacamole TE-IS 10 guacamole enp67s0f2 margherita(4) tequila TE-IS 10 tequila enp67s0f3 margherita(4) 2c0f:dead:beef:feed:2:0:4:2/128 IP6 internal 10 quesadilla enp67s0f1 quesadilla(4) 2c0f:dead:beef:feed:2:0:4:3/128 IP6 internal 10 guacamole enp67s0f2 guacamole(4) 2c0f:dead:beef:feed:2:0:4:4/128 IP6 internal 10 tequila enp67s0f3 tequila(4)
IS-IS L1 IPv6 routing table:
Prefix Metric Interface Nexthop Label(s) ---------------------------------------------------------------------------------------- 2c0f:dead:beef:feed:2:0:4:1/128 0 - - - 2c0f:dead:beef:feed:2:0:4:2/128 10 enp67s0f1 fe80::7777:55ff:fe31:6648 - 2c0f:dead:beef:feed:2:0:4:3/128 10 enp67s0f2 fe80::7777:55ff:fe31:6664 - 2c0f:dead:beef:feed:2:0:4:4/128 10 enp67s0f3 fe80::7777:55ff:fe31:663c -
IS-IS paths to level-1 routers that support IPv6 dst-src routing Vertex Type Metric Next-Hop Interface Parent margherita quesadilla TE-IS 10 quesadilla enp67s0f1 margherita(4) guacamole TE-IS 10 guacamole enp67s0f2 margherita(4) tequila TE-IS 10 tequila enp67s0f3 margherita(4)
IS-IS L1 IPv6 (dst-src routing) routing table:
root@margherita:~# ```
On 5/15/24 22:00, Hendrik Visage via zanog-discuss wrote:
Anybody else being as masochistic as I am to attempt using FRR's IS-IS with unnumbered interfaces? It works "like a charm" with IPv6, but IPv4 isn't routed if no IPv4 IPs on the IS-IS connected interfaces. Using Openfabric (based on and in the isisd code), it all just works... correctly (So why am I not using Openfabric? as I want to use it with multi node links/networks which Openfabric doesn't support/do, and I'm interested in interfacing with other network kit, so IS-IS is the beterer choice as openfabric is "dead" in IETF, replaced by the dist-opt-flood extensions to IS-IS)
Though Openfabric will happily insert onlink routes on unnumbered interfaces, it seems that IS-IS "needs" to have an IPv4 address on the interface(s), else it doesn't have next hops to insert.
I've searched high and low, and couldn't find any setting I've missed, and the source code hasn't been too helpful to see/understand if I'm missing something or if the needs haven't been coded into IS-IS yet.
My experience with IS-IS is only on Cisco and Juniper, so can't say much about FRR. I tried to get IS-IS on FRR on FreeBSD going a few years ago, but that ended in tears, so I abandoned it.
Unnumbered IS-IS interfaces will work for IPv6 because IPv6 always has a Link-Local address anyway.
In Cisco, unnumbered IS-IS interfaces work as long as the interface is in "point-to-point" mode. I see you have that mode in your configuration, so what it sounds like to me is that it is currently unsupported, or support is incomplete, on FRR.
As a hack, can you try routing a static IPv4 address via your unnumbered interfaces, without a next-hop target? I know that was a hack to create ARP glue for unnumbered interfaces on Cisco back in the day.
Mark.
On Thu, May 16, 2024 at 9:39 AM Mark Tinka via zanog-discuss zanog-discuss@lists.nog.net.za wrote:
On 5/15/24 22:00, Hendrik Visage via zanog-discuss wrote:
Anybody else being as masochistic as I am to attempt using FRR's IS-IS with unnumbered interfaces? It works "like a charm" with IPv6, but IPv4 isn't routed if no IPv4 IPs on the IS-IS connected interfaces. Using Openfabric (based on and in the isisd code), it all just works... correctly (So why am I not using Openfabric? as I want to use it with multi node links/networks which Openfabric doesn't support/do, and I'm interested in interfacing with other network kit, so IS-IS is the beterer choice as openfabric is "dead" in IETF, replaced by the dist-opt-flood extensions to IS-IS)
My experience with IS-IS is only on Cisco and Juniper, so can't say much about FRR. I tried to get IS-IS on FRR on FreeBSD going a few years ago, but that ended in tears, so I abandoned it.
IT (and especially networking?) is full of tears ;(
Unnumbered IS-IS interfaces will work for IPv6 because IPv6 always has a Link-Local address anyway.
Correct - yet another reason to switch to IPv6 only ASAP :)=)
In Cisco, unnumbered IS-IS interfaces work as long as the interface is in "point-to-point" mode. I see you have that mode in your configuration, so what it sounds like to me is that it is currently unsupported, or support is incomplete, on FRR.
I'm going with "support is incomplete" ... now to find the right places in the code to augment and give a pull request.... the bucketlist just grew by another lifetime
As a hack, can you try routing a static IPv4 address via your unnumbered interfaces, without a next-hop target? I know that was a hack to create ARP glue for unnumbered interfaces on Cisco back in the day.
Yes, at the bottom I did just that, added the loopback IPv4 to each interface and things worked (TM), but I guess I could, and will check that adding a Link-local 169.254.0.x IP should also work.... now to "automate" that... how do I add a link-local type IPv4 address without a DHCP client...
zanog-discuss@lists.nog.net.za