OpenFabric
OpenFabric, specified in draft-white-openfabric-06.txt,
is a routing protocol derived from IS-IS. It provides link-state routing with optimized flooding, making it well-suited for spine-leaf topologies.
OpenFabric is a dual-stack protocol. A single instance can simultaneously route both IPv4 and IPv6 traffic.
Configuration
Mandatory settings
Each OpenFabric router must be configured with a unique NET, the CLNS equivalent of a Router ID. The 6-byte system identifier portion of the NET must be unique across the fabric.
Configure the Network Entity Title (NET) for the router.
A typical NET looks like 49.0001.1921.6800.1002.00.
The NET consists of the following parts:
AFI (
49): OpenFabric conventionally uses AFI value 49 for private addressing.Area identifier (
0001): The area number within the fabric (in this case, Area 1).System identifier (
1921.6800.1002): Uniquely identifies the router within the fabric. We recommend deriving this value from the router IP address or MAC address. To construct the system identifier from an IPv4 address (for example,192.168.1.2):Pad each octet with leading zeros:
192.168.1.2→192.168.001.002.Regroup the digits into three 4-digit blocks:
192.168.001.002→1921.6800.1002.
NET selector (
00): Must always be00to indicate the local system.
Example:
set protocols openfabric net 49.0001.1921.6800.1002.00
Configure the named OpenFabric domain on a specific interface for the given address family (IPv4 or IPv6).
For dual-stack operation, run the command twice: once with ipv4 and once
with ipv6.
Example:
set protocols openfabric domain fabric1 interface eth1 address-family ipv4
set protocols openfabric domain fabric1 interface eth1 address-family ipv6
OpenFabric global configuration
Configure the authentication password for the specified OpenFabric domain.
The password can be specified as either plain text or an MD5 hash.
Example:
set protocols openfabric domain fabric1 domain-password md5 'shared-secret'
Enable POI for the specified OpenFabric domain.
POI is defined in RFC 6232.
Example:
set protocols openfabric domain fabric1 purge-originator
Configure the overload bit for the specified OpenFabric domain.
This instructs other routers in the domain not to use this router for transit traffic.
Example:
set protocols openfabric domain fabric1 set-overload-bit
Enable logging of adjacency state changes in the specified OpenFabric domain.
Example:
set protocols openfabric domain fabric1 log-adjacency-changes
Configure a static tier number for the specified OpenFabric domain.
The router advertises the tier value to indicate its location in the OpenFabric domain.
Example:
set protocols openfabric domain fabric1 fabric-tier 1
Interface configuration
Configure the interval, in seconds, at which the router transmits Hello packets on this interface.
Hello packets are exchanged with neighbors to establish and maintain adjacencies.
Example:
set protocols openfabric domain fabric1 interface eth0 hello-interval 5
Configure the multiplier used to compute the Hello hold time on the specified interface.
Example:
set protocols openfabric domain fabric1 interface eth0 hello-multiplier 3
Configure the routing metric for the specified interface.
This metric is used in path selection to determine the most efficient route. Lower metrics indicate preferred paths.
Example:
set protocols openfabric domain fabric1 interface eth0 metric 100
Enable passive mode for the specified interface.
In passive mode, the router does not send Hello packets on the interface and does not form adjacencies.
Example:
set protocols openfabric domain fabric1 interface eth0 passive
Configure the authentication password for the specified interface.
The password can be specified as either plain text or an MD5 hash.
Example:
set protocols openfabric domain fabric1 interface eth0 password plaintext-password link-secret
Configure the interval, in seconds, at which CSNPs are sent on the specified interface.
Example:
set protocols openfabric domain fabric1 interface eth0 csnp-interval 10
Configure the interval, in seconds, at which PSNPs are sent on the specified interface.
Example:
set protocols openfabric domain fabric1 interface eth0 psnp-interval 2
Timers
Configure the minimum interval, in seconds, between successive generations of the same LSP in the OpenFabric domain.
Example:
set protocols openfabric domain fabric1 lsp-gen-interval 5
Configure the LSP refresh interval, in seconds, for the OpenFabric domain.
Note
The value must be lower than max-lsp-lifetime. Otherwise, LSPs will
time out before they can be refreshed.
Example:
set protocols openfabric domain fabric1 lsp-refresh-interval 900
Configure the maximum lifetime, in seconds, for LSPs in the OpenFabric domain.
By default, LSPs remain in the link-state database for 1200 seconds and are deleted if they are not refreshed.
Example:
set protocols openfabric domain fabric1 max-lsp-lifetime 1200
Configure the minimum interval, in seconds, between consecutive SPF calculations in the OpenFabric domain.
Example:
set protocols openfabric domain fabric1 spf-interval 5
Example
The following example demonstrates a basic OpenFabric configuration between two routers.
Node 1:
set interfaces loopback lo address '198.51.100.1/32'
set interfaces ethernet eth1 address '192.0.2.1/24'
set protocols openfabric domain VyOS interface eth1 address-family ipv4
set protocols openfabric domain VyOS interface lo address-family ipv4
set protocols openfabric domain VyOS interface lo passive
set protocols openfabric net '49.0001.1980.5110.0001.00'
Node 2:
set interfaces loopback lo address '198.51.100.2/32'
set interfaces ethernet eth1 address '192.0.2.2/24'
set protocols openfabric domain VyOS interface eth1 address-family ipv4
set protocols openfabric domain VyOS interface lo address-family ipv4
set protocols openfabric domain VyOS interface lo passive
set protocols openfabric net '49.0001.1980.5110.0002.00'
After committing the configuration, verify the neighbor adjacencies on both nodes:
vyos@node-1:~$ show openfabric neighbor
show openfabric neighbor
Area VyOS:
System Id Interface L State Holdtime SNPA
node-2 eth1 2 Up 27 2020.2020.2020
vyos@node-2:~$ show openfabric neighbor
show openfabric neighbor
Area VyOS:
System Id Interface L State Holdtime SNPA
node-1 eth1 2 Up 30 2020.2020.2020
Verify that the OpenFabric routes have successfully populated:
vyos@node-1:~$ show ip route openfabric
show ip route openfabric
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, F - PBR,
f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
t - trapped, o - offload failure
f 192.0.2.0/24 [115/20] via 192.0.2.2, eth1 onlink, weight 1, 00:00:10
f>* 198.51.100.2/32 [115/20] via 192.0.2.2, eth1 onlink, weight 1, 00:00:10
vyos@node-2:~$ show ip route openfabric
show ip route openfabric
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, F - PBR,
f - OpenFabric,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
t - trapped, o - offload failure
f 192.0.2.0/24 [115/20] via 192.0.2.1, eth1 onlink, weight 1, 00:00:48
f>* 198.51.100.1/32 [115/20] via 192.0.2.1, eth1 onlink, weight 1, 00:00:48