-
Notifications
You must be signed in to change notification settings - Fork 17
Example Topology
This wiki page provides a practical demonstration of Holo's functionality. The primary objective is to demonstrate how Holo is configured, how to fetch state information, and how to perform basic validations to ensure proper operation.
The network topology for this demonstration consists of six routers distributed across two OSPFv3 areas: the backbone area (routers rt1, rt2, rt3, rt4, and rt5) and area 0.0.0.1 (routers rt4, rt5, and rt6). Routers rt4 and rt5 act as ABRs.
Although simple in design, this topology offers sufficient complexity to test a range of functionalities such as:
- OSPFv3 with the IPv4 address family
- Point-to-Point and Broadcast links
- Equal-cost multi-path routing (ECMP)
- OSPF multi-area and ABR functionality
- Segment-Routing (Adj-SIDs and Prefix-SIDs)
+---------+
| |
| RT1 |
| 1.1.1.1 |
| |
+---------+
|eth-sw1
|
|
+---------+ | +---------+
| | | | |
| RT2 |eth-sw1 | eth-sw1| RT3 |
| 2.2.2.2 +----------+----------+ 3.3.3.3 |
| | 10.0.1.0/24 | |
+---------+ +---------+
eth-rt4-1| |eth-rt4-2 eth-rt5-1| |eth-rt5-2
| | | |
10.0.2.0/24| |10.0.3.0/24 10.0.4.0/24| |10.0.5.0/24
| | | |
eth-rt2-1| |eth-rt2-2 eth-rt3-1| |eth-rt3-2
+---------+ +---------+
| | | |
| RT4 | 10.0.6.0/24 | RT5 |
| 4.4.4.4 +---------------------+ 5.5.5.5 |
| |eth-rt5 eth-rt4| |
+---------+ +---------+
eth-rt6| |eth-rt6
| |
10.0.7.0/24| |10.0.8.0/24
| +---------+ |
| | | |
| | RT6 | |
+----------+ 6.6.6.6 +-----------+
eth-rt4| |eth-rt5
+---------+
Below is the Holo CLI configuration for all routers in the network topology:
Please note that the CLI uses auto-generated commands from the IETF YANG models. These commands can at times be excessively verbose and more intricate than required. In the future, efforts will be made to provide simpler commands.
rt1
interfaces interface lo
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-sw1
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
routing segment-routing sr-mpls srgb srgb 16000 23999
!
routing segment-routing sr-mpls bindings connected-prefix-sid-map connected-prefix-sid 1.1.1.1/32 ietf-segment-routing-common:prefix-sid-algorithm-shortest-path
start-sid 10
last-hop-behavior no-php
!
routing control-plane-protocols control-plane-protocol ietf-ospf:ospfv3 main
ospf explicit-router-id 1.1.1.1
ospf address-family ipv4
ospf extended-lsa-support true
ospf segment-routing enabled true
!
ospf areas area 0.0.0.0
interfaces interface lo
interfaces interface eth-sw1
priority 1
hello-interval 3
dead-interval 12
!
!
!
rt2
interfaces interface lo
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-sw1
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt4-1
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt4-2
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
routing segment-routing sr-mpls srgb srgb 16000 23999
!
routing segment-routing sr-mpls bindings connected-prefix-sid-map connected-prefix-sid 2.2.2.2/32 ietf-segment-routing-common:prefix-sid-algorithm-shortest-path
start-sid 20
last-hop-behavior no-php
!
routing control-plane-protocols control-plane-protocol ietf-ospf:ospfv3 main
ospf explicit-router-id 2.2.2.2
ospf address-family ipv4
ospf extended-lsa-support true
ospf segment-routing enabled true
!
ospf areas area 0.0.0.0
interfaces interface lo
interfaces interface eth-sw1
priority 2
hello-interval 3
dead-interval 12
!
interfaces interface eth-rt4-1
interface-type point-to-point
hello-interval 3
dead-interval 12
!
interfaces interface eth-rt4-2
interface-type point-to-point
hello-interval 3
dead-interval 12
!
!
!
rt3
interfaces interface lo
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-sw1
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt5-1
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt5-2
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
routing segment-routing sr-mpls srgb srgb 16000 23999
!
routing segment-routing sr-mpls bindings connected-prefix-sid-map connected-prefix-sid 3.3.3.3/32 ietf-segment-routing-common:prefix-sid-algorithm-shortest-path
start-sid 30
last-hop-behavior no-php
!
routing control-plane-protocols control-plane-protocol ietf-ospf:ospfv3 main
ospf explicit-router-id 3.3.3.3
ospf address-family ipv4
ospf extended-lsa-support true
ospf segment-routing enabled true
!
ospf areas area 0.0.0.0
interfaces interface lo
interfaces interface eth-sw1
priority 3
hello-interval 3
dead-interval 12
!
interfaces interface eth-rt5-1
interface-type point-to-point
hello-interval 3
dead-interval 12
!
interfaces interface eth-rt5-2
interface-type point-to-point
hello-interval 3
dead-interval 12
!
!
!
rt4
interfaces interface lo
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt2-1
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt2-2
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt5
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt6
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
routing segment-routing sr-mpls srgb srgb 16000 23999
!
routing segment-routing sr-mpls bindings connected-prefix-sid-map connected-prefix-sid 4.4.4.4/32 ietf-segment-routing-common:prefix-sid-algorithm-shortest-path
start-sid 40
last-hop-behavior no-php
!
routing control-plane-protocols control-plane-protocol ietf-ospf:ospfv3 main
ospf explicit-router-id 4.4.4.4
ospf address-family ipv4
ospf extended-lsa-support true
ospf segment-routing enabled true
!
ospf areas area 0.0.0.0
interfaces interface lo
interfaces interface eth-rt2-1
interface-type point-to-point
hello-interval 3
dead-interval 12
!
interfaces interface eth-rt2-2
interface-type point-to-point
hello-interval 3
dead-interval 12
!
!
ospf areas area 0.0.0.1
interfaces interface lo
interfaces interface eth-rt5
interface-type point-to-point
hello-interval 3
dead-interval 12
!
interfaces interface eth-rt6
interface-type point-to-point
hello-interval 3
dead-interval 12
!
!
!
rt5
interfaces interface lo
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt3-1
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt3-2
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt4
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt6
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
routing segment-routing sr-mpls srgb srgb 16000 23999
!
routing segment-routing sr-mpls bindings connected-prefix-sid-map connected-prefix-sid 5.5.5.5/32 ietf-segment-routing-common:prefix-sid-algorithm-shortest-path
start-sid 50
last-hop-behavior no-php
!
routing control-plane-protocols control-plane-protocol ietf-ospf:ospfv3 main
ospf explicit-router-id 5.5.5.5
ospf address-family ipv4
ospf extended-lsa-support true
ospf segment-routing enabled true
!
ospf areas area 0.0.0.0
interfaces interface eth-rt3-1
interface-type point-to-point
hello-interval 3
dead-interval 12
!
interfaces interface eth-rt3-2
interface-type point-to-point
hello-interval 3
dead-interval 12
!
!
ospf areas area 0.0.0.1
interfaces interface lo
interfaces interface eth-rt4
interface-type point-to-point
hello-interval 3
dead-interval 12
!
interfaces interface eth-rt6
interface-type point-to-point
hello-interval 3
dead-interval 12
!
!
!
rt6
interfaces interface lo
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt4
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
interfaces interface eth-rt5
type iana-if-type:ethernetCsmacd
ipv4
ipv6
!
routing segment-routing sr-mpls srgb srgb 16000 23999
!
routing segment-routing sr-mpls bindings connected-prefix-sid-map connected-prefix-sid 6.6.6.6/32 ietf-segment-routing-common:prefix-sid-algorithm-shortest-path
start-sid 60
last-hop-behavior no-php
!
routing control-plane-protocols control-plane-protocol ietf-ospf:ospfv3 main
ospf explicit-router-id 6.6.6.6
ospf address-family ipv4
ospf extended-lsa-support true
ospf segment-routing enabled true
!
ospf areas area 0.0.0.1
interfaces interface lo
interfaces interface eth-rt4
interface-type point-to-point
hello-interval 3
dead-interval 12
!
interfaces interface eth-rt5
interface-type point-to-point
hello-interval 3
dead-interval 12
!
!
!
In order to verify the OSPF network convergence, we will inspect the rt4 router.
Firstly, it is important to ensure that all interfaces are operational:
rt4# show state xpath /ietf-routing:routing/control-plane-protocols/control-plane-protocol/ospf/areas/area/interfaces/interface/*
{
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-ospf:ospfv3",
"name": "main",
"ietf-ospf:ospf": {
"areas": {
"area": [
{
"area-id": "0.0.0.0",
"interfaces": {
"interface": [
{
"name": "eth-rt2-1",
"state": "point-to-point",
"hello-timer": 1,
"wait-timer": "not-set",
"interface-id": 4
},
{
"name": "eth-rt2-2",
"state": "point-to-point",
"hello-timer": 1,
"wait-timer": "not-set",
"interface-id": 6
}
]
}
},
{
"area-id": "0.0.0.1",
"interfaces": {
"interface": [
{
"name": "eth-rt5",
"state": "point-to-point",
"hello-timer": 1,
"wait-timer": "not-set",
"interface-id": 3
},
{
"name": "eth-rt6",
"state": "point-to-point",
"hello-timer": 1,
"wait-timer": "not-set",
"interface-id": 7
},
{
"name": "lo",
"state": "loopback",
"hello-timer": "not-set",
"wait-timer": "not-set",
"interface-id": 1
}
]
}
}
]
}
}
}
]
}
}
}
Check if a full adjacency has been established with all connected neighbors:
rt4# show state xpath /ietf-routing:routing/control-plane-protocols/control-plane-protocol/ospf/areas/area/interfaces/interface/neighbors//*
{
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-ospf:ospfv3",
"name": "main",
"ietf-ospf:ospf": {
"areas": {
"area": [
{
"area-id": "0.0.0.0",
"interfaces": {
"interface": [
{
"name": "eth-rt2-1",
"neighbors": {
"neighbor": [
{
"neighbor-router-id": "2.2.2.2",
"address": "fe80::5c39:d6ff:fe4b:e2cb",
"state": "full",
"dead-timer": 10,
"statistics": {
"discontinuity-time": "2023-04-02T10:45:53.858099739-03:00",
"nbr-event-count": 4,
"nbr-retrans-qlen": 0
}
}
]
}
},
{
"name": "eth-rt2-2",
"neighbors": {
"neighbor": [
{
"neighbor-router-id": "2.2.2.2",
"address": "fe80::28de:6cff:fe2d:f511",
"state": "full",
"dead-timer": 10,
"statistics": {
"discontinuity-time": "2023-04-02T10:45:53.865773865-03:00",
"nbr-event-count": 5,
"nbr-retrans-qlen": 0
}
}
]
}
}
]
}
},
{
"area-id": "0.0.0.1",
"interfaces": {
"interface": [
{
"name": "eth-rt5",
"neighbors": {
"neighbor": [
{
"neighbor-router-id": "5.5.5.5",
"address": "fe80::68ec:fcff:feb7:cf49",
"state": "full",
"dead-timer": 9,
"statistics": {
"discontinuity-time": "2023-04-02T10:45:53.895945337-03:00",
"nbr-event-count": 5,
"nbr-retrans-qlen": 0
}
}
]
}
},
{
"name": "eth-rt6",
"neighbors": {
"neighbor": [
{
"neighbor-router-id": "6.6.6.6",
"address": "fe80::1c4a:2bff:fede:494c",
"state": "full",
"dead-timer": 9,
"statistics": {
"discontinuity-time": "2023-04-02T10:45:53.875728142-03:00",
"nbr-event-count": 5,
"nbr-retrans-qlen": 0
}
}
]
}
}
]
}
}
]
}
}
}
]
}
}
}
Inspect the OSPF routing table to verify that all destinations are reachable via the shortest available paths:
rt4# show state xpath /ietf-routing:routing/control-plane-protocols/control-plane-protocol/ospf/local-rib//*
{
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-ospf:ospfv3",
"name": "main",
"ietf-ospf:ospf": {
"local-rib": {
"route": [
{
"prefix": "1.1.1.1/32",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.2.2",
"outgoing-interface": "eth-rt2-1"
},
{
"next-hop": "10.0.3.2",
"outgoing-interface": "eth-rt2-2"
}
]
},
"metric": 20,
"route-type": "intra-area"
},
{
"prefix": "2.2.2.2/32",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.2.2",
"outgoing-interface": "eth-rt2-1"
},
{
"next-hop": "10.0.3.2",
"outgoing-interface": "eth-rt2-2"
}
]
},
"metric": 10,
"route-type": "intra-area"
},
{
"prefix": "3.3.3.3/32",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.2.2",
"outgoing-interface": "eth-rt2-1"
},
{
"next-hop": "10.0.3.2",
"outgoing-interface": "eth-rt2-2"
}
]
},
"metric": 20,
"route-type": "intra-area"
},
{
"prefix": "4.4.4.4/32",
"metric": 0,
"route-type": "intra-area"
},
{
"prefix": "5.5.5.5/32",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.6.5",
"outgoing-interface": "eth-rt5"
}
]
},
"metric": 10,
"route-type": "intra-area"
},
{
"prefix": "6.6.6.6/32",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.7.6",
"outgoing-interface": "eth-rt6"
}
]
},
"metric": 10,
"route-type": "intra-area"
},
{
"prefix": "10.0.1.0/24",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.2.2",
"outgoing-interface": "eth-rt2-1"
},
{
"next-hop": "10.0.3.2",
"outgoing-interface": "eth-rt2-2"
}
]
},
"metric": 20,
"route-type": "intra-area"
},
{
"prefix": "10.0.2.0/24",
"metric": 10,
"route-type": "intra-area"
},
{
"prefix": "10.0.3.0/24",
"metric": 10,
"route-type": "intra-area"
},
{
"prefix": "10.0.4.0/24",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.2.2",
"outgoing-interface": "eth-rt2-1"
},
{
"next-hop": "10.0.3.2",
"outgoing-interface": "eth-rt2-2"
}
]
},
"metric": 30,
"route-type": "intra-area"
},
{
"prefix": "10.0.5.0/24",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.2.2",
"outgoing-interface": "eth-rt2-1"
},
{
"next-hop": "10.0.3.2",
"outgoing-interface": "eth-rt2-2"
}
]
},
"metric": 30,
"route-type": "intra-area"
},
{
"prefix": "10.0.6.0/24",
"metric": 10,
"route-type": "intra-area"
},
{
"prefix": "10.0.7.0/24",
"metric": 10,
"route-type": "intra-area"
},
{
"prefix": "10.0.8.0/24",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.6.5",
"outgoing-interface": "eth-rt5"
},
{
"next-hop": "10.0.7.6",
"outgoing-interface": "eth-rt6"
}
]
},
"metric": 20,
"route-type": "intra-area"
}
]
}
}
}
]
}
}
}
Check the Forwarding Information Base (FIB) to confirm that it is synchronized with the Routing Information Base (RIB):
rt4# ip route
1.1.1.1 nhid 53 proto ospf metric 20
nexthop encap mpls 16010 via 10.0.2.2 dev eth-rt2-1 weight 1
nexthop encap mpls 16010 via 10.0.3.2 dev eth-rt2-2 weight 1
2.2.2.2 nhid 30 proto ospf metric 20
nexthop encap mpls 16020 via 10.0.2.2 dev eth-rt2-1 weight 1
nexthop encap mpls 16020 via 10.0.3.2 dev eth-rt2-2 weight 1
3.3.3.3 nhid 47 proto ospf metric 20
nexthop encap mpls 16030 via 10.0.2.2 dev eth-rt2-1 weight 1
nexthop encap mpls 16030 via 10.0.3.2 dev eth-rt2-2 weight 1
5.5.5.5 nhid 33 encap mpls 16050 via 10.0.6.5 dev eth-rt5 proto ospf metric 20
6.6.6.6 nhid 34 encap mpls 16060 via 10.0.7.6 dev eth-rt6 proto ospf metric 20
10.0.1.0/24 nhid 35 proto ospf metric 20
nexthop via 10.0.2.2 dev eth-rt2-1 weight 1
nexthop via 10.0.3.2 dev eth-rt2-2 weight 1
10.0.2.0/24 dev eth-rt2-1 proto kernel scope link src 10.0.2.4
10.0.3.0/24 dev eth-rt2-2 proto kernel scope link src 10.0.3.4
10.0.4.0/24 nhid 35 proto ospf metric 20
nexthop via 10.0.2.2 dev eth-rt2-1 weight 1
nexthop via 10.0.3.2 dev eth-rt2-2 weight 1
10.0.5.0/24 nhid 35 proto ospf metric 20
nexthop via 10.0.2.2 dev eth-rt2-1 weight 1
nexthop via 10.0.3.2 dev eth-rt2-2 weight 1
10.0.6.0/24 dev eth-rt5 proto kernel scope link src 10.0.6.4
10.0.7.0/24 dev eth-rt6 proto kernel scope link src 10.0.7.4
10.0.8.0/24 nhid 38 proto ospf metric 20
nexthop via 10.0.6.5 dev eth-rt5 weight 1
nexthop via 10.0.7.6 dev eth-rt6 weight 1
Verify the Label Forwarding Information Base (LFIB) to ensure that all Segment Routing Adj-SIDs and Prefix-SIDs have been correctly installed:
rt4# ip -M route
16 via inet6 fe80::5c39:d6ff:fe4b:e2cb dev eth-rt2-1 proto ospf
17 via inet6 fe80::28de:6cff:fe2d:f511 dev eth-rt2-2 proto ospf
18 via inet6 fe80::1c4a:2bff:fede:494c dev eth-rt6 proto ospf
19 via inet6 fe80::68ec:fcff:feb7:cf49 dev eth-rt5 proto ospf
16010 proto ospf
nexthop as to 16010 via inet 10.0.2.2 dev eth-rt2-1
nexthop as to 16010 via inet 10.0.3.2 dev eth-rt2-2
16020 proto ospf
nexthop as to 16020 via inet 10.0.2.2 dev eth-rt2-1
nexthop as to 16020 via inet 10.0.3.2 dev eth-rt2-2
16030 proto ospf
nexthop as to 16030 via inet 10.0.2.2 dev eth-rt2-1
nexthop as to 16030 via inet 10.0.3.2 dev eth-rt2-2
16050 as to 16050 via inet 10.0.6.5 dev eth-rt5 proto ospf
16060 as to 16060 via inet 10.0.7.6 dev eth-rt6 proto ospf
Let's modify the cost of rt4's interface towards rt5 to a very high value:
rt4# holo-cli
rt4# configure
rt4(config)# routing control-plane-protocols control-plane-protocol ietf-ospf:ospfv3 main
rt4(config/control-plane-protocol[ietf-ospf:ospfv3 main])# ospf areas area 0.0.0.1
rt4(config/control-plane-protocol[ietf-ospf:ospfv3 main]/area[0.0.0.0])# interfaces interface eth-rt5
rt4(config/control-plane-protocol[ietf-ospf:ospfv3 main]/area[0.0.0.0]/interface[eth-sw1])# cost 1000
rt4(config/control-plane-protocol[ietf-ospf:ospfv3 main]/area[0.0.0.0]/interface[eth-sw1])# commit
% configuration committed successfully
This change will trigger a full SPF run:
rt4# show state xpath /ietf-routing:routing/control-plane-protocols/control-plane-protocol/ospf/spf-log//*
{
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-ospf:ospfv3",
"name": "main",
"ietf-ospf:ospf": {
"spf-log": {
"event": [
{
"id": 28,
"spf-type": "full",
"schedule-timestamp": 4345,
"start-timestamp": 3842,
"end-timestamp": 3842,
"trigger-lsa": [
{
"area-id": "0.0.0.1",
"type": 40993,
"lsa-id": "0.0.0.0",
"adv-router": "4.4.4.4",
"seq-num": 2147483657
},
{
"area-id": "0.0.0.1",
"type": 41001,
"lsa-id": "0.0.0.0",
"adv-router": "4.4.4.4",
"seq-num": 2147483657
}
]
},
We can observe that 5.5.5.5/32 is now reachable via rt6, as the accumulated cost between rt4-rt6-rt5 is smaller than the cost of the direct link between rt4 and rt5:
rt4# holo-cli -c "show state xpath /ietf-routing:routing/control-plane-protocols/control-plane-protocol/ospf/local-rib/route[prefix='5.5.5.5/32']//*"
{
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-ospf:ospfv3",
"name": "main",
"ietf-ospf:ospf": {
"local-rib": {
"route": [
{
"prefix": "5.5.5.5/32",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.7.6",
"outgoing-interface": "eth-rt6"
}
]
},
"metric": 20,
"route-type": "intra-area"
}
]
}
}
}
]
}
}
}
rt4# ip route show 5.5.5.5/32
5.5.5.5 nhid 58 encap mpls 16050 via 10.0.7.6 dev eth-rt6 proto ospf metric 20
To simulate a link failure, we will shut down rt4's interface towards rt6:
rt4# ip link set dev eth-rt6 down
After the link failure, we expect rt4 to reach rt5 through rt2, as the direct link to rt5 has a very high cost. However, rt4 still prefers to use the direct link because intra-area routes are always preferred over inter-area routes, regardless of the route costs. We can confirm this by inspecting rt4's RIB and FIB:
rt4# holo-cli -c "show state xpath /ietf-routing:routing/control-plane-protocols/control-plane-protocol/ospf/local-rib/route[prefix='5.5.5.5/32']//*"
{
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-ospf:ospfv3",
"name": "main",
"ietf-ospf:ospf": {
"local-rib": {
"route": [
{
"prefix": "5.5.5.5/32",
"next-hops": {
"next-hop": [
{
"next-hop": "10.0.6.5",
"outgoing-interface": "eth-rt5"
}
]
},
"metric": 1000,
"route-type": "intra-area"
}
]
}
}
}
]
}
}
}
rt4# ip route show 5.5.5.5/32
5.5.5.5 nhid 100 encap mpls 16050 via 10.0.6.5 dev eth-rt5 proto ospf metric 20
As a further exercise, we will disconnect rt1 from the topology:
rt1# ip link set dev eth-sw1 down
After disconnecting rt1, we can inspect the RIB and FIB on rt6 and confirm that the route to 1.1.1.1/32 is gone:
rt6# holo-cli -c "show state xpath /ietf-routing:routing/control-plane-protocols/control-plane-protocol/ospf/local-rib/route[prefix='1.1.1.1/32']//*"
{}
rt6# ip route show 1.1.1.1/32
It is interesting to note that a partial SPF run was sufficient to update the routing table, as rt1 resides in another OSPF area. We can confirm this by using the following command:
rt6# show state xpath /ietf-routing:routing/control-plane-protocols/control-plane-protocol/ospf/spf-log//*
{
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-ospf:ospfv3",
"name": "main",
"ietf-ospf:ospf": {
"spf-log": {
"event": [
{
"id": 53,
"spf-type": "inter",
"schedule-timestamp": 5572,
"start-timestamp": 5552,
"end-timestamp": 5551,
"trigger-lsa": [
{
"area-id": "0.0.0.1",
"type": 40995,
"lsa-id": "0.0.0.23",
"adv-router": "4.4.4.4",
"seq-num": 2147483649
},
- Architecture
- Management Interfaces
- Developer's Documentation
- Example Topology
- Paul's Practical Guide