In marketing terms fabric is mostly a product group or technical solution that works in a strictly defined environment. The term fabric has often to do with frame switching. A term and a solution used in storage networks and data center area. Fabric is a singly entity, a separate domain, a closed system in terms of integrity.

A new routing protocol has been added to the FRR router software. The routing protocol is called openfabric. Openfabric is a tech demo of a routing protocol, in fact there is already an RFC draft for openfabric, the seventh draft. Openfabric is a routing protocol especially and exclusively designed in mind for the leaf and spine network topology. It is build on top of IS-IS and uses SPF. IS-IS stripped down from all unneeded functions that are not needed for its target topology. Here is what the Abstract of the RFC draft says:

Abstract

   Spine and leaf topologies are widely used in hyperscale and cloud
   scale networks.  In most of these networks, configuration is
   automated, but difficult, and topology information is extracted
   through broad based connections.  Policy is often integrated into the
   control plane, as well, making configuration, management, and
   troubleshooting difficult.  Openfabric is an adaptation of an
   existing, widely deployed link state protocol, Intermediate System to
   Intermediate System (IS-IS) that is designed to:

   o  Provide a full view of the topology from a single point in the
      network to simplify operations

   o  Minimize configuration of each Intermediate System (IS) (also
      called a router or switch) in the network

   o  Optimize the operation of IS-IS within a spine and leaf fabric to
      enable scaling

   This document begins with an overview of openfabric, including a
   description of what may be removed from IS-IS to enable scaling.  The
   document then describes an optimized adjacency formation process; an
   optimized flooding scheme; some thoughts on the operation of
   openfabric, metrics, and aggregation; and finally a description of
   the changes to the IS-IS protocol required for openfabric.

...

Openfabric TL;DR

  • Openfabric is a routing protocol
  • A routing protocol designed to work in a leaf and spine network design
  • Openfabric is build on top of the IS-IS routing protocol
  • SPF is the algorithm for path computation

Network topology

This is the network topology used in the netlab.

Network topology:

                lo                  lo
             192.0.2.1           192.0.2.2
             +-------+           +-------+
             | FRR1  |           | FRR2  |
             |       |           |       |
             | 0 1 2 |           | 0 1 2 |
             +-+-+-+-+           +-+-+-+-+
           eth | | |           eth | | | 
     +---------+ | |               | | +--------+
     |           | |               | |          |
     | +---------)-)---------------+ |          |
     | |         | |                 |          |
     | |         | +-----------------)--------+ |
     | |         |                   |        | |
     | |         +--------+          |        | |
     | |                  |          |        | |         /\
     | |                  | +--------+        | |        /  \
eht0 | | eth1        eth0 | | eth1      eth0  | | eth1   |  |
  +--+-+--+            +--+-+--+           +--+-+--+ 
  | FRR3  |            | FRR4  |           | FRR5  |   0.0.0.0/0
  |       |            |       |           |       |   ::0/
  |       |            |       |           |       |
  +-------+            +-------+           +-------+
     lo                   lo                  lo
  192.0.2.3            192.0.2.4           192.0.2.5
  • Routers R1 and R2 are the spines
  • Routers R3, R4 and R5 are leaves
  • Router R5 is additionally a border leave, it has connectivity to other networks

Configuration

The configuration of openfabric routing protocol is reduced to its minimum. 3 steps are needed to set it up.

  • Create an IP loopback address
  • Configure openfabric router process
  • Add physical interfaces to openfabric

It works for both IP address families IPv4 and IPv6, and it does not need dedicated interface IP and IPv6 addressing. Official configuration guide.

This is the full working configuration of FRR1 router:

!FRR1
conf t
!
frr version 7.2
frr defaults traditional
hostname FRR1
!
interface eth0
 ip router openfabric 1
 ipv6 router openfabric 1
!
interface eth1
 ip router openfabric 1
 ipv6 router openfabric 1
!   
interface eth2
 ip router openfabric 1
 ipv6 router openfabric 1
!
interface lo
 ip address 192.0.2.1/32
 ip router openfabric 1
 ipv6 address 2001:db8:1111::/128
 ipv6 router openfabric 1
 openfabric passive
!
line vty
!
router openfabric 1
 net 49.0001.1111.1111.1111.00
!
end

The configuration is easy. One things needs explanation the loopback interface lo is set to openfabric passive . This command is identical to ip ospf passive-interface or isis passive . It prevents forming adjacencies to the loopback interface.

To setup other routers adjust the configuration to match each router settings. Addressing table for all routers in the network topology:

Router  NSAP address            IPv6 loopback       IPv4 loobpack
R1  49.0001.1111.1111.1111.00   2001:db8:1111::/128 192.0.2.1/32
R2  49.0001.2222.2222.2222.00   2001:db8:2222::/128 192.0.2.2/32
R3  49.0001.3333.3333.3333.00   2001:db8:3333::/128 192.0.2.3/32
R4  49.0001.4444.4444.4444.00   2001:db8:4444::/128 192.0.2.4/32
R5  49.0001.5555.5555.5555.00   2001:db8:5555::/128 192.0.2.5/32

Setup each router accordingly using the shown configuration of FRR1.

Verification

If the network topology is setup correctly and the routing has converged inspect the routing table.

show ip route Output on router FRR5. Notice, the routing table contains only loopback adresses of other routers. No point to point links no interface addressing no transfer networks in the routing table.

FRR5# sh ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued route, r - rejected route

f>* 192.0.2.1/32 [115/20] via 192.0.2.1, eth0 onlink, 00:01:10
f>* 192.0.2.2/32 [115/20] via 192.0.2.2, eth1 onlink, 00:01:13
f>* 192.0.2.3/32 [115/30] via 192.0.2.1, eth0 onlink, 00:01:10
  *                       via 192.0.2.2, eth1 onlink, 00:01:10
f>* 192.0.2.4/32 [115/30] via 192.0.2.1, eth0 onlink, 00:01:10
  *                       via 192.0.2.2, eth1 onlink, 00:01:10
C>* 192.0.2.5/32 is directly connected, lo, 00:01:4

The routing table for the IPv6 address family, as seen on the router FRR1:

FRR1# sh 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,
       f - OpenFabric,
       > - selected route, * - FIB route, q - queued route, r - rejected route

C>* 2001:db8:1111::/128 is directly connected, lo, 00:00:50
f>* 2001:db8:2222::/128 [115/30] via fe80::e6d:e5ff:fe10:700, eth0 onlink, 00:00:18
  *                              via fe80::e6d:e5ff:fe24:6c00, eth2 onlink, 00:00:18
f>* 2001:db8:3333::/128 [115/20] via fe80::e6d:e5ff:fe10:700, eth0 onlink, 00:00:18
f>* 2001:db8:5555::/128 [115/20] via fe80::e6d:e5ff:fe24:6c00, eth2 onlink, 00:00:18
C * fe80::/64 is directly connected, eth2, 00:00:48
C * fe80::/64 is directly connected, eth1, 00:00:48
C * fe80::/64 is directly connected, eth3, 00:00:49
C>* fe80::/64 is directly connected, eth0, 00:00:4

Border leave router configuration

The router FRR5 is a leave as FRR4 and FRR3. Additionally to this it is a declared as border leave. Border leave is a has connectivity to the backbone or core IP network. In this example it is assumed the FRR5 router is additionally connected to the backbone. Usually FRR5 would do some kind of redistribution between routing protocols. It could receive a default route in OSPF and had to originate a default route.

Configuration for the FRR5 router to originate the default route for IPv4 and IPv6.

conf t
!
router openfabric 1
 default-information originate ipv4 always metric 1000
 default-information originate ipv6 always metric 1000
!
end

Verification

After the configuration has been done inspect how the IP routing has changed and if the default route announced by the FRR5 router is in the routing table of other routers.

show ip route on FRR1 router:

FRR1# sh ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued route, r - rejected route

f>* 0.0.0.0/0 [115/1010] via 192.0.2.5, eth2 onlink, 00:04:39
C>* 192.0.2.1/32 is directly connected, lo, 00:05:10
f>* 192.0.2.2/32 [115/30] via 192.0.2.3, eth0 onlink, 00:04:39
  *                       via 192.0.2.4, eth1 onlink, 00:04:39
  *                       via 192.0.2.5, eth2 onlink, 00:04:39
f>* 192.0.2.3/32 [115/20] via 192.0.2.3, eth0 onlink, 00:04:41
f>* 192.0.2.4/32 [115/20] via 192.0.2.4, eth1 onlink, 00:04:40
f>* 192.0.2.5/32 [115/20] via 192.0.2.5, eth2 onlink, 00:04:39

This is routing table shown on the spine router. It has reachability to another spine through the leafs. The node 192.0.2.2/32 is reachable via 3 separate interfaces. All routes have equal cost. This is called ECMP - Equal Cost MultiPath.

FRR1# sh 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,
       f - OpenFabric,
       > - selected route, * - FIB route, q - queued route, r - rejected route

f>* ::/0 [115/1010] via fe80::e2b:20ff:fe5f:1300, eth2 onlink, 00:04:42
C>* 2001:db8:1111::/128 is directly connected, lo, 00:05:13
f>* 2001:db8:2222::/128 [115/30] via fe80::e2b:20ff:fe16:9900, eth1 onlink, 00:04:42
  *                              via fe80::e2b:20ff:fe49:d300, eth0 onlink, 00:04:42
  *                              via fe80::e2b:20ff:fe5f:1300, eth2 onlink, 00:04:42
f>* 2001:db8:3333::/128 [115/20] via fe80::e2b:20ff:fe49:d300, eth0 onlink, 00:04:44
f>* 2001:db8:4444::/128 [115/20] via fe80::e2b:20ff:fe16:9900, eth1 onlink, 00:04:43
f>* 2001:db8:5555::/128 [115/20] via fe80::e2b:20ff:fe5f:1300, eth2 onlink, 00:04:42
C * fe80::/64 is directly connected, eth3, 00:05:13
C * fe80::/64 is directly connected, eth2, 00:05:13
C * fe80::/64 is directly connected, eth1, 00:05:13
C>* fe80::/64 is directly connected, eth0, 00:05:13

References