Ospfv2

Package: inet.routing.ospfv2

simple module Ospfv2

Implements the OSPFv2 routing protocol.

The ospfConfig parameter can specify an XML file describing the configuration of all OSPF routers and their interfaces in the network.

The XML configuration must contain exactly one <OSPFASConfig> root element which describes an OSPF autonomous system with its areas and its routers. The Area IDs, Router IDs and area Address Ranges must be unique within the autonomous system. Various OSPF parameters can be specified for the network interfaces in the XML file. If those parameters are not specified in the XML file, the module parameters of the OSPF module are used instead.

  • <Area> - defines an area in the network.

  • @id - Mandatory attribute containing the area ID in dotted decimal notation.

    The backbone is ‘0.0.0.0’. (NOTE: This is not an IP address though it looks like one.)

  • <AddressRange> - Describes an address range of an OSPF area.

    • @address - A string which is resolvable by IPvXAddressResolver class. (e.g. Area1.R1>Area1.N1)

    • @mask - A string which is resolvable by IPvXAddressResolver class. (e.g. Area1.R1>Area1.N1)

    • @status - Decides whether an address range will be advertised in Summary LSAs. (Advertise or DoNotAdvertise)

  • <Stub> - Any OSPF area (except the backbone) can be configured as a stub area.

    • ``@defaultCost`` - A required attribute that defines the default route cost (>=0 and <1000) advertised for the area.

  • <Router> - Describes an OSPF router with its interfaces. Interface ifName and ‘toward’ values

    must be unique within the same router and only one of them must be specified. A router is identified by its Router ID, which is given as an IPv4 address (but isn’t necessarily one). It may contain various child elements.

  • @name - A required string containing a node path specifying the router to which this configuration belongs to.

  • @RFC1583Compatible - optional true or false value (defined in RFC 3101)

  • @DistributeDefaultRoute - optional true or false value (distribute the default route, if exists, using AS-External LSA)

  • <PointToPointInterface> - Describes the parameters of a point-to-point interface. It is identified

    in the router by its ifName value, or name of toward module.

    • @ifName - A unique name of the interface (e.g. eth0) or …

    • @toward - a string containing a node path, for example “Area1.Router2”

    • @areaID - An optional attribute containing the area ID in dotted decimal notation

    • @interfaceOutputCost - An optional attribute specifying the associated cost (>=0 and <1000)

    • @retransmissionInterval - An optional integer

    • @interfaceTransmissionDelay - An optional integer

    • @helloInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @routerDeadInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @authenticationType - Optional OSPF packet authentication protocol (SimplePasswordType | CryptographicType | NullType)

    • @authenticationKey - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE

  • <BroadcastInterface> - Describes the parameters of a broadcast interface. It is identified in

    the router by its ifName value, or name of toward module. HelloInterval and RouterDeadInterval must be the same for all router interfaces attached to the same network.

    • @ifName - A unique name of the interface (e.g. eth0) or …

    • @toward - a string containing a node path, for example “Area1.Router2”

    • @areaID - An optional attribute containing the area ID in dotted decimal notation

    • @interfaceOutputCost - An optional attribute specifying the associated cost (>=0 and <1000)

    • @retransmissionInterval - An optional integer

    • @interfaceTransmissionDelay - An optional integer

    • @helloInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @routerDeadInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @authenticationType - Optional OSPF packet authentication protocol (SimplePasswordType | CryptographicType | NullType)

    • @authenticationKey - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE

    • @routerPriority - Optional integer specifying the priority in DR/BDR election. Set to 0 to exclude the router from the election.

  • <PointToMultiPointInterface> - Describes the parameters of a point-to-multipoint interface. It is

    identified in the router by its ifName value, or name of toward module. HelloInterval and RouterDeadInterval must be the same for all router interfaces attached to the same network.

    • @ifName - A unique name of the interface (e.g. eth0) or …

    • @toward - a string containing a node path, for example “Area1.Router2”

    • @areaID - An optional attribute containing the area ID in dotted decimal notation

    • @interfaceOutputCost - An optional attribute specifying the associated cost (>=0 and <1000)

    • @retransmissionInterval - An optional integer

    • @interfaceTransmissionDelay - An optional integer

    • @helloInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @routerDeadInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @authenticationType - Optional OSPF packet authentication protocol (SimplePasswordType | CryptographicType | NullType)

    • @authenticationKey - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE

    • <PointToMultiPointNeighborList>

    • <PointToMultiPointNeighbor> - the content of the element is a string resolvable to an IPv4 address

  • <HostInterface>

    • @ifName - A unique name of the interface (e.g. eth0) or …

    • @toward - a string containing a node path, for example “Area1.Router2”

    • @areaID - An optional attribute containing the area ID in dotted decimal notation

    • @attachedHost - IPv4 address of attached host

    • @linkCost - An optional attribute specifying the associated cost (>=0 and <1000)

  • <LoopbackInterface>

    • @ifName - A unique name of the loopback interface (e.g. lo1)

    • @areaID - An optional attribute containing the area ID in dotted decimal notation

    • @linkCost - An optional attribute specifying the associated cost (>=0 and <1000)

  • <NBMAInterface>

    • @ifName - A unique name of the interface (e.g. eth0) or …

    • @toward - a string containing a node path, for example “Area1.Router2”

    • @areaID - An optional attribute containing the area ID in dotted decimal notation

    • @interfaceOutputCost - An optional attribute specifying the associated cost (>=0 and <1000)

    • @retransmissionInterval - An optional integer

    • @interfaceTransmissionDelay - An optional integer

    • @helloInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @routerDeadInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @authenticationType - Optional OSPF packet authentication protocol (SimplePasswordType | CryptographicType | NullType)

    • @authenticationKey - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE

    • @routerPriority - Optional integer specifying the priority in DR/BDR election. Set to 0 to exclude the router from the election.

    • @pollInterval - Optional integer that specifies the length of time, in seconds, between

      OSPF packets that the router send before adjacency is established with a neighbor

    • <NBMANeighborList>

    • <NBMANeighbor>

      • @networkInterfaceAddress - A string which is resolvable by IPvXAddressResolver class. (e.g. Area1.R1>Area1.N1)

      • @neighborPriority - neighbor’s priority in the DR/BDR election process.

  • <ExternalInterface>

    • @ifName - A unique name of the interface (e.g. eth0) or …

    • @toward - a string containing a node path, for example “R2”

    • @advertisedExternalNetworkAddress - Network address of the external network

    • @advertisedExternalNetworkMask - Network mask of the external network

    • @externalInterfaceOutputCost - The associated cost to reach the external network

    • @externalInterfaceOutputType - Type1 (no external metric) or Type2 (external metric)

    • @forwardingAddress - Optional (set 0.0.0.0 by default)

    • @externalRouteTag - Optional (set 0 by default)

  • <VirtualLink>

    • @endPointRouterID - the router ID of the endpoint of the virtual link (required)

    • @transitAreaID - the ID of the area which is used for transit

    • @retransmissionInterval - An optional integer

    • @interfaceTransmissionDelay - An optional integer

    • @helloInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @routerDeadInterval - An optional integer that must be the same for all router interfaces attached to the same network

    • @authenticationType - Optional OSPF packet authentication protocol (SimplePasswordType | CryptographicType | NullType)

    • @authenticationKey - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE

inet.routing.ospfv2.Ospfv2Ospfv2simple

Usage diagram

Inheritance diagram

Used in compound modules

Name

Type

Description

Router

compound module

A network router device with support for multiple routing protocols and network interfaces. Provides the foundation for simulating various types of routers in both wired and wireless networks.

Extends

Name

Type

Description

SimpleModule

simple module

Base module for all INET simple modules.

Parameters

Name

Type

Default value

Description

displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

interfaceTableModule

string

routingTableModule

string

checksumMode

string

“declared”

startupTime

double

0s

Delay before starting OSPF

ospfConfig

xml

xml(“<OSPFASConfig> \ <Router name=’**’ RFC1583Compatible=’true’> \ <BroadcastInterface ifName=’eth[*]’ areaID=’0.0.0.0’ interfaceOutputCost=’0’ /> \ <PointToPointInterface ifName=’ppp[*]’ areaID=’0.0.0.0’ interfaceOutputCost=’0’ /> \ </Router> </OSPFASConfig>”)

xml containing the full OSPF AS configuration

routerPriority

int

1

Priority in DR/BDR election (Specify 0 to exclude the router from the election)

areaID

string

“0.0.0.0”

RFC1583Compatible

bool

false

If ‘false’, prune the set of routing table entries for the ASBR (RFC 3101)

DistributeDefaultRoute

bool

false

Distribute the default route (if exists) using AS-External LSA

helloInterval

int

10s

Specifies the time in seconds between hello packets that the other router sends on an interface

pollInterval

int

120s

Specifies the length of time, in seconds, between OSPF packets that the router send before adjacency is established with a neighbor

routerDeadInterval

int

40s

The interval during which at least one hello packet must be received from a neighbor before the router declares that neighbor as down

retransmissionInterval

int

5s

The time between OSPF LSA retransmissions for adjacencies that belongs to the interface

interfaceTransmissionDelay

int

1s

The number of seconds required to transmit a link state update packet. Valid values are 1 to 65535

interfaceMode

string

“Active”

NoOSPF: the interface is not advertised by OSPF

referenceBandwidth

int

1e8bps

Reference bandwidth for cost calculation

interfaceOutputCost

int

0

Cost of link on the interface (1-1000), 0 means use reference bandwidth

externalInterfaceOutputCost

int

1

Cost of link (1-1000)

externalInterfaceOutputType

string

“Type2”

Type1|Type2

forwardingAddress

string

“0.0.0.0”

linkCost

int

1

Cost of link (1-1000) for HostInterface and LoopbackInterface only

authenticationType

string

“NullType”

authenticationKey

string

“0x00”

0xnn..nn

Properties

Name

Value

Description

class

Ospfv2

display

i=block/network2

selfMessageKinds

inet::ospfv2::Ospfv2TimerType

Gates

Name

Direction

Size

Description

ipIn

input

ipOut

output

Source code

//
// Implements the OSPFv2 routing protocol.
//
// The `ospfConfig` parameter can specify an XML file describing the
// configuration of all OSPF routers and their interfaces in the network.
//
// The XML configuration must contain exactly one `<OSPFASConfig>` root element which
// describes an OSPF autonomous system with its areas and its routers. The
// Area IDs, Router IDs and area Address Ranges must be unique within the
// autonomous system. Various OSPF parameters can be specified for the network
// interfaces in the XML file. If those parameters are not specified in the XML file,
// the module parameters of the OSPF module are used instead.
//
// - `<Area>` - defines an area in the network.
//   - `@id` - Mandatory attribute containing the area ID in dotted decimal notation.
//     The backbone is '0.0.0.0'. (NOTE: This is not an IP address though it looks like one.)
//   - `<AddressRange>` - Describes an address range of an OSPF area.
//     - `@address` - A string which is resolvable by `IPvXAddressResolver` class. (e.g. Area1.R1>Area1.N1)
//     - `@mask` - A string which is resolvable by `IPvXAddressResolver` class. (e.g. Area1.R1>Area1.N1)
//     - `@status` - Decides whether an address range will be advertised in Summary LSAs. (Advertise or `DoNotAdvertise`)
//   - `<Stub>` - Any OSPF area (except the backbone) can be configured as a stub area.
//     - ``@defaultCost`` - A required attribute that defines the default route cost (>=0 and <1000) advertised for the area.
//
// - `<Router>` - Describes an OSPF router with its interfaces. Interface `ifName` and 'toward' values
//   must be unique within the same router and only one of them must be specified. A router is
//   identified by its Router ID, which is given as an IPv4 address (but isn't necessarily one).
//   It may contain various child elements.
//   - `@name` - A required string containing a node path specifying the router to which this configuration belongs to.
//   - `@RFC1583Compatible` - optional true or false value (defined in RFC 3101)
//   - `@DistributeDefaultRoute` - optional true or false value (distribute the default route, if exists, using AS-External LSA)
//
//   - `<PointToPointInterface>` - Describes the parameters of a point-to-point interface. It is identified
//     in the router by its `ifName` value, or name of toward module.
//     - `@ifName` - A unique name of the interface (e.g. eth0) or ...
//     - `@toward` - a string containing a node path, for example "Area1.Router2"
//     - `@areaID` - An optional attribute containing the area ID in dotted decimal notation
//     - `@interfaceOutputCost` - An optional attribute specifying the associated cost (>=0 and <1000)
//     - `@retransmissionInterval` - An optional integer
//     - `@interfaceTransmissionDelay` - An optional integer
//     - `@helloInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@routerDeadInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@authenticationType` - Optional OSPF packet authentication protocol (`SimplePasswordType` | `CryptographicType` | `NullType`)
//     - `@authenticationKey` - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE
//
//   - `<BroadcastInterface>` - Describes the parameters of a broadcast interface. It is identified in
//     the router by its `ifName` value, or name of toward module. `HelloInterval` and `RouterDeadInterval`
//     must be the same for all router interfaces attached to the same network.
//     - `@ifName` - A unique name of the interface (e.g. eth0) or ...
//     - `@toward` - a string containing a node path, for example "Area1.Router2"
//     - `@areaID` - An optional attribute containing the area ID in dotted decimal notation
//     - `@interfaceOutputCost` - An optional attribute specifying the associated cost (>=0 and <1000)
//     - `@retransmissionInterval` - An optional integer
//     - `@interfaceTransmissionDelay` - An optional integer
//     - `@helloInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@routerDeadInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@authenticationType` - Optional OSPF packet authentication protocol (`SimplePasswordType` | `CryptographicType` | `NullType`)
//     - `@authenticationKey` - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE
//     - `@routerPriority` - Optional integer specifying the priority in DR/BDR election. Set to 0 to exclude the router from the election.
//
//   - `<PointToMultiPointInterface>` - Describes the parameters of a point-to-multipoint interface. It is
//     identified in the router by its `ifName` value, or name of toward module.
//     `HelloInterval` and `RouterDeadInterval` must be the same for all router
//     interfaces attached to the same network.
//     - `@ifName` - A unique name of the interface (e.g. eth0) or ...
//     - `@toward` - a string containing a node path, for example "Area1.Router2"
//     - `@areaID` - An optional attribute containing the area ID in dotted decimal notation
//     - `@interfaceOutputCost` - An optional attribute specifying the associated cost (>=0 and <1000)
//     - `@retransmissionInterval` - An optional integer
//     - `@interfaceTransmissionDelay` - An optional integer
//     - `@helloInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@routerDeadInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@authenticationType` - Optional OSPF packet authentication protocol (`SimplePasswordType` | `CryptographicType` | `NullType`)
//     - `@authenticationKey` - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE
//     - `<PointToMultiPointNeighborList>`
//       - `<PointToMultiPointNeighbor>` - the content of the element is a string resolvable to an IPv4 address
//
//   - `<HostInterface>`
//     - `@ifName` - A unique name of the interface (e.g. eth0) or ...
//     - `@toward` - a string containing a node path, for example "Area1.Router2"
//     - `@areaID` - An optional attribute containing the area ID in dotted decimal notation
//     - `@attachedHost` - IPv4 address of attached host
//     - `@linkCost` - An optional attribute specifying the associated cost (>=0 and <1000)
//
//   - `<LoopbackInterface>`
//     - `@ifName` - A unique name of the loopback interface (e.g. lo1)
//     - `@areaID` - An optional attribute containing the area ID in dotted decimal notation
//     - `@linkCost` - An optional attribute specifying the associated cost (>=0 and <1000)
//
//   - `<NBMAInterface>`
//     - `@ifName` - A unique name of the interface (e.g. eth0) or ...
//     - `@toward` - a string containing a node path, for example "Area1.Router2"
//     - `@areaID` - An optional attribute containing the area ID in dotted decimal notation
//     - `@interfaceOutputCost` - An optional attribute specifying the associated cost (>=0 and <1000)
//     - `@retransmissionInterval` - An optional integer
//     - `@interfaceTransmissionDelay` - An optional integer
//     - `@helloInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@routerDeadInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@authenticationType` - Optional OSPF packet authentication protocol (`SimplePasswordType` | `CryptographicType` | `NullType`)
//     - `@authenticationKey` - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE
//     - `@routerPriority` - Optional integer specifying the priority in DR/BDR election. Set to 0 to exclude the router from the election.
//     - `@pollInterval` - Optional integer that specifies the length of time, in seconds, between
//                       OSPF packets that the router send before adjacency is established with a neighbor
//     - `<NBMANeighborList>`
//       - `<NBMANeighbor>`
//         - `@networkInterfaceAddress` - A string which is resolvable by `IPvXAddressResolver` class. (e.g. Area1.R1>Area1.N1)
//         - `@neighborPriority` - neighbor's priority in the DR/BDR election process.
//
//   - `<ExternalInterface>`
//     - `@ifName` - A unique name of the interface (e.g. eth0) or ...
//     - `@toward` - a string containing a node path, for example "R2"
//     - `@advertisedExternalNetworkAddress` - Network address of the external network
//     - `@advertisedExternalNetworkMask` - Network mask of the external network
//     - `@externalInterfaceOutputCost` - The associated cost to reach the external network
//     - `@externalInterfaceOutputType` - Type1 (no external metric) or Type2 (external metric)
//     - `@forwardingAddress` - Optional (set 0.0.0.0 by default)
//     - `@externalRouteTag` - Optional (set 0 by default)
//
//   - `<VirtualLink>`
//     - `@endPointRouterID` - the router ID of the endpoint of the virtual link (required)
//     - `@transitAreaID` - the ID of the area which is used for transit
//     - `@retransmissionInterval` - An optional integer
//     - `@interfaceTransmissionDelay` - An optional integer
//     - `@helloInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@routerDeadInterval` - An optional integer that must be the same for all router interfaces attached to the same network
//     - `@authenticationType` - Optional OSPF packet authentication protocol (`SimplePasswordType` | `CryptographicType` | `NullType`)
//     - `@authenticationKey` - Optional 8 byte hexadecimal value e.g. 0x5D8ABDAEDFCB8BEE
//
simple Ospfv2 extends SimpleModule like IOspf
{
    parameters:
        @class(Ospfv2);
        string interfaceTableModule;
        string routingTableModule;
        string checksumMode @enum("declared", "computed") = default("declared");
        volatile double startupTime @unit(s) = default(0s); // Delay before starting OSPF
        // xml containing the full OSPF AS configuration
        xml ospfConfig = default(xml("<OSPFASConfig> \
                <Router name='**' RFC1583Compatible='true'> \
                    <BroadcastInterface ifName='eth[*]' areaID='0.0.0.0' interfaceOutputCost='0' /> \
                    <PointToPointInterface ifName='ppp[*]' areaID='0.0.0.0' interfaceOutputCost='0' /> \
                </Router> </OSPFASConfig>"));

        // default values for attributes of interface xml entries:

        int routerPriority = default(1);  // Priority in DR/BDR election (Specify 0 to exclude the router from the election)
        string areaID = default("0.0.0.0");
        bool RFC1583Compatible = default(false); // If 'false', prune the set of routing table entries for the ASBR (RFC 3101)
        bool DistributeDefaultRoute = default(false); // Distribute the default route (if exists) using AS-External LSA

        int helloInterval @unit(s) = default(10s);  // Specifies the time in seconds between hello packets that the other router sends on an interface
        int pollInterval @unit(s) = default(120s);  // Specifies the length of time, in seconds, between OSPF packets that the router send before adjacency is established with a neighbor
        int routerDeadInterval @unit(s) = default(40s);  // The interval during which at least one hello packet must be received from a neighbor before the router declares that neighbor as down
        int retransmissionInterval @unit(s) = default(5s);  // The time between OSPF LSA retransmissions for adjacencies that belongs to the interface
        int interfaceTransmissionDelay @unit(s) = default(1s);  // The number of seconds required to transmit a link state update packet. Valid values are 1 to 65535
        string interfaceMode @enum("Active","Passive","NoOSPF") = default("Active"); // NoOSPF: the interface is not advertised by OSPF
                                                                                     // Passive: the interface is advertised, but no OSPF message is sent out

        int referenceBandwidth @unit(bps) = default(1e8bps);   // Reference bandwidth for cost calculation
        int interfaceOutputCost = default(0);  // Cost of link on the interface (1-1000), 0 means use reference bandwidth
        int externalInterfaceOutputCost = default(1);  // Cost of link (1-1000)
        string externalInterfaceOutputType = default("Type2");  // Type1|Type2
        string forwardingAddress = default("0.0.0.0");
        int linkCost = default(1);  // Cost of link (1-1000) for HostInterface and LoopbackInterface only

        string authenticationType @enum("SimplePasswordType","CryptographicType","NullType") = default("NullType");
        string authenticationKey = default("0x00");  // 0xnn..nn

        @display("i=block/network2");
        @selfMessageKinds(inet::ospfv2::Ospfv2TimerType);
    gates:
        input ipIn @labels(Ipv4ControlInfo/up);
        output ipOut @labels(Ipv4ControlInfo/down);
}

File: src/inet/routing/ospfv2/Ospfv2.ned