Package SSF.OS.OSPFv2

This package provides classes which together implement the Open Shortest Path First protocol Version 2.


Class Summary
AreaData This Data Stucture contains all information used to run the basic OSPF routing algorithm.
DD_Packet This class implements an OSPF Database Description packet.
Dijkstra Dijkstra's shortest path algorithm.
HashMapRoutingTable An implementation of OSPF routing table usingn HashMaps to distinguish between router and network entries.
HelloPacket This class implements an OSPF Hello packet.
Interface An OSPF interface.
LinkInfo A unit of information describing a link and used in the contents of a link state advertisement.
LS_AckPacket This class implements an OSPF Acknowledgment Packet.
LS_RequestPacket This class implements an OSPF link state request packet.
LS_UpdatePacket This class implements the payload of an OSPF Link State Update Packet.
LSA An OSPF Link State Advertisement packet.
LSASlot This class is intended as a container for a single LSA.
LSDatabase An OSPF Link State database.
Neighbor The class Neighbor represents a conversation between its interface owner and the neighboring interface.
NetworkEntry A routing table entry describing the set of shortest paths leading to a network destination.
NextHop A class containing a router's outgoing interface ip address to use when forwarding traffic to a destination and in case of a non point-to-point network the ip address of the next router in the path towards the destination.
OSPF The OSPFv2 interior gateway protocol (IGP).
OwnLSASlot This class extends LSASlot.
Packet This class implements a generic OSPF packet.
RecLSASlot This class extends LSASlot.
Router_LSA This class implements an OSPF Router Link State Advertisement.
RouterEntry A routing table entry describing the set of shortest paths leading to a router destination.
ShortestPath When multiple paths of equal path-type and cost exist to a destination, they are stored in a single routing table entry.
Summary_LSA This class implements an OSPF Summary Link State Advertisement.

Package SSF.OS.OSPFv2 Description

This package provides classes which together implement the Open Shortest Path First protocol Version 2.

The Open Shortest Path First (OSPF) protocol is an IP link-state routing protocol, recommended for distributing routing information among the routers in a single autonomous system (AS), with explicit support for classless inter-domain routing (CIDR) address allocation.

SSF.OS.OSPFv2 is a partial implementation of OSPFv2, based on the Internet Engineering Task Force's Request for Comments number 2328 (RFC 2328), "OSPF Version 2". Currently it only runs on point-to-point networks, because there is no multicast available. Intended to provide all features of the protocol in the future it follows a bottom-up design. On point-to-point networks it has been developed beyond the basic features like Hello Protocol, Database Exchange, Flooding and Shortest Path Calculation. Intra as well as inter area routing are supported and making the interaction with IP more proper, a better integration of the protocol into SSFNet was accomplished.

OSPFv2 is NOT compatible to sOSPF. It was completely rebuilt. In comparison to sOSPF it is much more dynamic, supports multiple areas and maintains a separate area data structure for each area the router is connected to. Every area structure supports its own Link State Database, which is able to store Router as well as Summary Type 3 and 4 LSAs. Version 0.2.2 is therefore able to deal with stub areas and AS boundary routers, but it still does not process external route information like sOSPF.

OSPFv2 is a dynamic version of OSPF. But because of the absence of multicast it is not able to detect neighbors dynamically. It retrieves the addresses directly from the underlying link layer and then performs the discovery process simulating multicast by unicast. But this is the only exception to its dynamic behavior.
Having dicovered a neighbor, periodically sendig of Hello Packets guarantees neighbor maintenance. Thereafter the Database Exchange process synchronizes the LS Databases of both routers using Database Description, Link State Request and Link State Update Packets as determined by the RFC. The Flooding Procedure ensures continuation of the synchronization process when state EXCHANGE in neighbor relation is reached. All these processes are triggered by the neighbor state machine whose functionality is mainly implemented in class Neighbor. Its logic is triggered by method OSPF.push() every time a new OSPF packet arrives. Packets containing LSA updates are sent in intervals coordinated by a PacingTimer in class Interface.
A shortest path tree is built from the Router LSAs of all Databases. Thereafter, inter-area routes are computed and, on area border routers, Summary LSAs are created and originated.
Periodically reoriginating of selforiginated LSAs, aging of LSAs and time blocks for the installation process thereby ensure an OSPF like behavior. Eventually an OSPF Routing Table is built from the tree and the inter area routes and used to update the IP Forwarding Table. These Rouing Table calculations are scheduled by the RTCControlTimer in class OSPF. The timer is configurable via the attributes spf_delay and spf_hold_time.

Because in version 0.2.2 inter-area routing is employed, the routing table of an OSPFv2 router now provides shortest paths to all reachable

  • stub networks within an AS (only point-to-point!)
  • area border routers in the router's attached areas
  • AS boundary routers in the AS in case the router is not placed in a stub area

    This release has been tested by a partially implemented test suite developed by the Inter Operability Lab at University of New Hampshire. Not all of the tests get a PASS because OSPFv2 is still under development and it can't make use of multicast to send packets to the correct address.
    For further information concerning the test suite design see documentation in ssfnet/src/SSF/OS/OSPFv2/test/doc/index.html

    Further Information about OSPFv2 and its configuration: See distribution file ssfnet/src/SSF/OS/OSPFv2/doc/index.html.