Step 21. Virtual link - connect two separate parts of a discontinuous backbone¶
Goals¶
The goal of this step is to demonstrate using virtual links to connect a partitioned backbone.
If the backbone area (Area 0) becomes partitioned (split into disconnected parts), OSPF inter-area routing fails because Summary LSAs can only be exchanged through a contiguous backbone. Virtual links can reconnect the backbone partitions through a transit area, restoring full connectivity.
Configuration¶
This step simulates a partitioned backbone and uses a virtual link to reconnect it.
The configuration in omnetpp.ini is the following:
[Config Step21]
description = "Virtual link - connect two separate parts of a discontinuous backbone"
network = VirtualLink
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Virtual_Discontinuous.xml")
*.R1.numApps = 1
*.R1.app[0].typename = "PingApp"
*.R1.app[0].destAddr = "R4"
*.R1.app[0].startTime = 60s
The OSPF configuration:
<?xml version="1.0"?>
<OSPFASConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="OSPF.xsd">
<!-- Areas -->
<Area id="0.0.0.0">
<AddressRange address="R1>switch1" mask="R1>switch1" />
<AddressRange address="R1>R2" mask="R1>R2" />
<AddressRange address="R2>switch2" mask="R2>switch2" />
<AddressRange address="R2>R1" mask="R2>R1" />
<AddressRange address="R3>switch3" mask="R3>switch3" />
<AddressRange address="R3>R4" mask="R3>R4" />
<AddressRange address="R4>switch4" mask="R4>switch4" />
<AddressRange address="R4>R3" mask="R4>R3" />
</Area>
<Area id="0.0.0.1">
<AddressRange address="R2>R5" mask="R2>R5" />
<AddressRange address="R3>R5" mask="R3>R5" />
<AddressRange address="R5>R2" mask="R5>R2" />
<AddressRange address="R5>R3" mask="R5>R3" />
<AddressRange address="R5>switch5" mask="R5>switch5" />
<AddressRange address="R5>switch6" mask="R5>switch6" />
</Area>
<!-- Routers -->
<Router name="R1" RFC1583Compatible="true">
<BroadcastInterface ifName="eth0" areaID="0.0.0.0" interfaceMode="Passive" />
<PointToPointInterface ifName="ppp0" areaID="0.0.0.0" />
</Router>
<Router name="R2" RFC1583Compatible="true">
<BroadcastInterface ifName="eth0" areaID="0.0.0.0" interfaceMode="Passive" />
<PointToPointInterface ifName="ppp0" areaID="0.0.0.0" />
<PointToPointInterface ifName="ppp1" areaID="0.0.0.1" />
<VirtualLink endPointRouterID="R3%routerId" transitAreaID="0.0.0.1" />
</Router>
<Router name="R3" RFC1583Compatible="true">
<BroadcastInterface ifName="eth0" areaID="0.0.0.0" interfaceMode="Passive" />
<PointToPointInterface ifName="ppp0" areaID="0.0.0.0" />
<PointToPointInterface ifName="ppp1" areaID="0.0.0.1" />
<VirtualLink endPointRouterID="R2%routerId" transitAreaID="0.0.0.1" />
</Router>
<Router name="R4" RFC1583Compatible="true">
<BroadcastInterface ifName="eth0" areaID="0.0.0.0" interfaceMode="Passive" />
<PointToPointInterface ifName="ppp0" areaID="0.0.0.0" />
</Router>
<Router name="R5" RFC1583Compatible="true">
<BroadcastInterface ifName="eth0" areaID="0.0.0.1" interfaceMode="Passive" />
<BroadcastInterface ifName="eth1" areaID="0.0.0.1" interfaceMode="Passive" />
<PointToPointInterface ifName="ppp0" areaID="0.0.0.1" />
<PointToPointInterface ifName="ppp1" areaID="0.0.0.1" />
</Router>
</OSPFASConfig>
Results¶
With a partitioned backbone:
Without virtual links, the two parts of Area 0 cannot exchange Summary LSAs.
Inter-area routing between the partitioned sections fails.
A virtual link is configured between two ABRs, one in each partition, through a transit area.
The virtual link acts as a logical Area 0 connection.
Summary LSAs can now be exchanged between the partitions.
Full inter-area routing is restored.
The routing tables show that routes are successfully computed across the previously partitioned backbone using the virtual link as a bridge.
Sources:
omnetpp.ini,
VirtualLink.ned,
ASConfig_Virtual_Discontinuous.xml
Discussion¶
Use this page in the GitHub issue tracker for commenting on this tutorial.