The FRR project recent changelog entries suggest to take a look at the router appliance. Segment routing in kernel is already working, what would be needed would be a control plane for segment routing using FRR? The first implementation is already there in FRR7.x, but at the moment I would rather not to write about it because it is not ready yet. To use segment routing a link-state routing protocol is needed, like OSPF or IS-IS.

To try out FRR version 5 grab a tinycore FRR appliance distributed by Brezular. Thanks to him making suckless virtual appliance using tinycore Linux. Otherwise build a tinycore FRR appliance from scratch.

The networking lab scenario is easy. Two directly connected FRR routers, via the eth1 interface. A direct point to point connection. Each router has additionally configured an IPv6 loopback address. No dedicated physical interface addressing is used, the default link-local addressing only.

    loopback                                    loopback  
2001:db8:1111::/128                         2001:db8:2222::/128
    +-------+                                   +-------+
    |       | eth1                         eth1 |       |
    |  R1   |-----------------------------------|  R2   |
    |       |                                   |       |
    +-------+                                   +-------+

At the end of the networking lab scenario both routers will have a running IS-IS routing instance, and propagate IPv6 routes using the IS-IS routing protocol.

Login to Core Linux
Username "tc", password is not set
box login:

First step, login to the router. Use the vtysh command:

tc@box:~$ vtysh
  • add IPv6 addresses to loopback lo interface

Enter following configuration commands on R1:

conf t
!
interface lo
 ipv6 address 2001:db8:1111::/128
end

Enter configuration commands on R2:

conf t
!
interface lo
 ipv6 address 2001:db8:2222::/128
end

Now configure following on both routers:

  • Create IS-IS routing process with ISO Routing area tag 1
  • Configure a NET - Network Entity Title for this process 49.0001.xxxx.xxxx.xxxx.00
  • Set topology type to ipv6-unicast
  • Enable IS-IS routing on directly connected interfaces
  • Advertise loopback address into the dynamic routing

Configuration for R1:

conf t
!
router isis 1
 net 49.0001.1111.1111.1111.00
 topology ipv6-unicast
exit
!
interface eth0
 ipv6 router isis 1
exit
!
interface lo
 ipv6 router isis 1
    end
!

Configuration for router R2:

conf t
!
router isis 1
 net 49.0001.2222.2222.2222.00
 topology ipv6-unicast
exit
!
interface eth0
 ipv6 router isis 1
exit
!
interface lo
 ipv6 router isis 1
end
!

Verify the routing table, using the show ipv6 route command:

box# show ipv6 route 
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR,
       > - selected route, * - FIB route

C>* 2001:db8:1111::/128 is directly connected, lo, 00:01:23
I>* 2001:db8:2222::/128 [115/20] via fe80::ef2:72ff:fefa:2b00, eth0, 00:00:21
C * fe80::/64 is directly connected, eth1, 00:05:36
C * fe80::/64 is directly connected, eth3, 00:05:37
C * fe80::/64 is directly connected, eth2, 00:05:38
C>* fe80::/64 is directly connected, eth0, 00:05:39

R2's loopback interface address 2001:db8:2222::/128 is in the routing table of R1, via IS-IS

box# sh isis neighbor 
Area 1:
  System Id           Interface   L  State        Holdtime SNPA
  box                 eth0        1  Up           28       0cf2.72ca.7500
  box                 eth0        2  Up           28       0cf2.72ca.7500   

The directly connected IS-IS neighbors, have established 2 connections. One on L1 - Level 1 and the second connection at L2 - Level 2:

box# show isis neighbor detail 
Area 1:
  box                 
    Interface: eth0, Level: 1, State: Up, Expires in 29s
    Adjacency flaps: 1, Last: 7s ago
    Circuit type: L1L2, Speaks: 0
    Topologies:
      ipv6-unicast
    SNPA: 0cf2.72d8.2b00, LAN id: box.05
    LAN Priority: 64, is DIS, DIS flaps: 1, Last: 2s ago
    Area Address(es):
      49.0001
    IPv6 Address(es):
      fe80::ef2:72ff:fed8:2b00

  box                 
    Interface: eth0, Level: 2, State: Up, Expires in 29s
    Adjacency flaps: 1, Last: 7s ago
    Circuit type: L1L2, Speaks: 0
    Topologies:
      ipv6-unicast
    SNPA: 0cf2.72d8.2b00, LAN id: box.05
    LAN Priority: 64, is DIS, DIS flaps: 1, Last: 2s ago
    Area Address(es):
      49.0001
    IPv6 Address(es):
      fe80::ef2:72ff:fed8:2b00

Both routers have established a L1-L2 neighbourship. This is the default setting in IS-IS. Since only 2 routers are directly connected and there is no need for 2 level area design. Both routers should be IS-IS configured as level-2-only routers, for R1 and R2 add the following:

conf t
!
router isis 1
 is-type level-2-only
end

Verify the neighborship, using show isis neigbhor command:

box# sh isis neighbor 
Area 1:
  System Id           Interface   L  State        Holdtime SNPA
  box                 eth0        2  Up           29       0cf2.72ca.7500

The Level 1 neighborship has timed out, after the holdtime of 30 seconds. Now only the Level 2 neighborship exists. The correct IS-IS level has been set. Verify setting using show isis neighbor detail command:

box# show isis neighbor detail 
Area 1:
  box                 
    Interface: eth0, Level: 2, State: Up, Expires in 30s
    Adjacency flaps: 1, Last: 12m22s ago
    Circuit type: L2, Speaks: 0
    Topologies:
      ipv6-unicast
    SNPA: 0cf2.72d8.2b00, LAN id: box.05
    LAN Priority: 64, is DIS, DIS flaps: 1, Last: 12m17s ago
    Area Address(es):
      49.0001
    IPv6 Address(es):
      fe80::ef2:72ff:fed8:2b00

Verify now the isis interfaces configuration setting type with show isis interface command:

box# sh isis interface 
Area 1:
  Interface   CircId   State    Type     Level
  eth0        0x5      Up       lan      L2       
  lo          0x0      Up       loopback L2 

Interface eth0 is set to type lan. When both routers are directly connected it should display p2p. Configure directly connected interfaces on both routers to point-to-point network type:

conf t
!
interface eth0
 isis network point-to-point
end

Verify now the isis interface output and notice the type changed to p2p on interface eth0:

box# show isis interface 
Area 1:
  Interface   CircId   State    Type     Level
  eth0        0x0      Up       p2p      L2       
  lo          0x0      Up       loopback L2    

Notice the LAN priority section has disappeared from the show isis neighbor detail output. Now the link type setting is set according to the cabling.

box# show isis neighbor detail 
Area 1:
  box                 
    Interface: eth0, Level: 2, State: Up, Expires in 29s
    Adjacency flaps: 1, Last: 3m49s ago
    Circuit type: L2, Speaks: 0
    Topologies:
      ipv6-unicast
    SNPA: 2020.2020.2020
    Area Address(es):
      49.0001
    IPv6 Address(es):
      fe80::ef2:72ff:fed8:2b00

Verify the connectivity between both routers:

box# ping 2001:db8:2222:: 
PING 2001:db8:2222:: (2001:db8:2222::): 56 data bytes
64 bytes from 2001:db8:2222::: seq=0 ttl=64 time=0.883 ms
64 bytes from 2001:db8:2222::: seq=1 ttl=64 time=1.042 ms
64 bytes from 2001:db8:2222::: seq=2 ttl=64 time=1.038 ms
^C
--- 2001:db8:2222:: ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.883/0.987/1.042 ms

Showing the routing table with linux native tool iproute2:

tc@box:~$ ip -6 route
2001:db8:1111:: via fe80::ef2:72ff:fed8:2b00 dev eth0  proto 187  metric 20 
2001:db8:2222:: dev lo  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth2  proto kernel  metric 256 
fe80::/64 dev eth3  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 

Displaying the linux hosts loopback IP addressing using ip add show dev lo command:

tc@box:~$ ip add show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 2001:db8:1111::/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

Setting up a router has been never easier, with IPv6 there is no need any more for dedicated interface addressing. This flexibility simplifies the setup of a router to only few easy steps, perfect task for network automation. Locally significant addressing is the default if using frame relay, the DLCI - Data Link Connection Identifier, is locally significant. A service provider WAN technology from the late 80's and 90's.