Msg File src/networklayer/ospfv2/OSPFPacket.msg

Name Description
OSPFPacketType (enum) (no description)
OSPFOptions (struct)

should be a byte long bitfield

OSPFPacket (packet)

Represents an OSPF packet header

OSPFHelloPacket (packet)

Represents an OSPF Hello packet

LSAType (enum) (no description)
OSPFLSAHeader (class)

Represents an OSPF LSA header

OSPFLSA (class)

common ancestor type for all LSAs

LinkType (enum) (no description)
TOSData (struct) (no description)
Link (class)

class Link extends cObject

OSPFRouterLSA (class)

Represents an OSPF Router LSA

OSPFNetworkLSA (class)

Represents an OSPF Network LSA

OSPFSummaryLSA (class)

Represents an OSPF Summary LSA

ExternalTOSInfo (struct) (no description)
OSPFASExternalLSAContents (class)

Represents the contents of an OSPF AS External LSA

OSPFASExternalLSA (class)

Represents an OSPF AS External LSA

OSPFDDOptions (struct)

should be a byte long bitfield

OSPFDatabaseDescriptionPacket (packet)

Represents an OSPF Database Description packet

LSARequest (struct) (no description)
OSPFLinkStateRequestPacket (packet)

Represents an OSPF Link State Request packet

OSPFLinkStateUpdatePacket (packet)

Represents an OSPF Link State Update packet

OSPFLinkStateAcknowledgementPacket (packet)

Represents an OSPF Link State Acknowledgement packet

Source code:

//
// Copyright (C) 2006 Andras Babos and Andras Varga
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program; if not, see <http://www.gnu.org/licenses/>.
//

cplusplus {{
#include "IPAddress.h"
}}


class noncobject IPAddress;

enum OSPFPacketType
{

    HelloPacket = 1;
    DatabaseDescriptionPacket = 2;
    LinkStateRequestPacket = 3;
    LinkStateUpdatePacket = 4;
    LinkStateAcknowledgementPacket = 5;
}

// should be a byte long bitfield
struct OSPFOptions
{
    bool unused_1;
    bool E_ExternalRoutingCapability;
    bool MC_MulticastForwarding;
    bool NP_Type7LSA;
    bool EA_ForwardExternalLSAs;
    bool DC_DemandCircuits;
    bool unused_2;
    bool unused_3;
}

//
// Represents an OSPF packet header
//
packet OSPFPacket
{
    char version = 2;
    char type enum(OSPFPacketType) = HelloPacket;
    short packetLength = 0;

    IPAddress routerID;
    IPAddress areaID;

    short checksum = 0;
    short authenticationType = 0;
    char authentication[8];
}

//
// Represents an OSPF Hello packet
//
packet OSPFHelloPacket extends OSPFPacket
{
    IPAddress networkMask;

    short helloInterval = 5;

    OSPFOptions options;

    char routerPriority = 0;
    long routerDeadInterval = 0;

    IPAddress designatedRouter;
    IPAddress backupDesignatedRouter;
    IPAddress neighbor[];
}


enum LSAType
{

    RouterLSAType = 1;
    NetworkLSAType = 2;
    SummaryLSA_NetworksType = 3;
    SummaryLSA_ASBoundaryRoutersType = 4;
    ASExternalLSAType = 5;
}

//
// Represents an OSPF LSA header
//
//class OSPFLSAHeader extends cObject
class OSPFLSAHeader
{
    unsigned short lsAge = 0;
    OSPFOptions lsOptions;
    char lsType enum(LSAType) = RouterLSAType;
    unsigned long linkStateID;
    IPAddress advertisingRouter;
    long lsSequenceNumber = 0;
    short lsChecksum = 0;
    unsigned short lsaLength = 0;
}

//
// common ancestor type for all LSAs
//
//class OSPFLSA extends cObject
class OSPFLSA
{
    OSPFLSAHeader header;
}

enum LinkType
{

    PointToPointLink = 1;
    TransitLink = 2;
    StubLink = 3;
    VirtualLink = 4;
}

struct TOSData
{
    unsigned char tos;
    unsigned char tosMetric[3];
}

//class Link extends cObject
class Link
{
    IPAddress linkID;
    unsigned long linkData = 0;
    unsigned char type enum(LinkType) = PointToPointLink;
    unsigned char numberOfTOS = 0;
    unsigned long linkCost = 1;
    TOSData tosData[];
}

//
// Represents an OSPF Router LSA
//
class OSPFRouterLSA extends OSPFLSA
{
    bool V_VirtualLinkEndpoint = false;
    bool E_ASBoundaryRouter = false;
    bool B_AreaBorderRouter = false;
    unsigned short numberOfLinks = 0;
    Link links[];
}

//
// Represents an OSPF Network LSA
//
class OSPFNetworkLSA extends OSPFLSA
{
    IPAddress networkMask;
    IPAddress attachedRouters[];
}

//
// Represents an OSPF Summary LSA
//
class OSPFSummaryLSA extends OSPFLSA
{
    IPAddress networkMask;
    unsigned long routeCost = 1;
    TOSData tosData[];
}

struct ExternalTOSInfo
{
    TOSData tosData;
    bool E_ExternalMetricType;
    IPAddress forwardingAddress;
    long externalRouteTag;
}

//
// Represents the contents of an OSPF AS External LSA
//
class OSPFASExternalLSAContents
{
    IPAddress networkMask;
    bool E_ExternalMetricType = false;
    unsigned long routeCost = 1;
    IPAddress forwardingAddress;
    long externalRouteTag = 0;
    ExternalTOSInfo externalTOSInfo[];
}

//
// Represents an OSPF AS External LSA
//
class OSPFASExternalLSA extends OSPFLSA
{
    OSPFASExternalLSAContents contents;
}


// should be a byte long bitfield
struct OSPFDDOptions
{
    bool unused_1;
    bool unused_2;
    bool unused_3;
    bool unused_4;
    bool unused_5;
    bool I_Init;
    bool M_More;
    bool MS_MasterSlave;
}

//
// Represents an OSPF Database Description packet
//
packet OSPFDatabaseDescriptionPacket extends OSPFPacket
{
    unsigned short interfaceMTU;
    OSPFOptions options;
    OSPFDDOptions ddOptions;
    unsigned long ddSequenceNumber;
    OSPFLSAHeader lsaHeaders[];
}

struct LSARequest
{
    unsigned long lsType;
    unsigned long linkStateID;
    IPAddress advertisingRouter;
}

//
// Represents an OSPF Link State Request packet
//
packet OSPFLinkStateRequestPacket extends OSPFPacket
{
    LSARequest requests[];
}

//
// Represents an OSPF Link State Update packet
//
packet OSPFLinkStateUpdatePacket extends OSPFPacket
{
    unsigned long numberOfLSAs;
    OSPFRouterLSA routerLSAs[];
    OSPFNetworkLSA networkLSAs[];
    OSPFSummaryLSA summaryLSAs[];
    OSPFASExternalLSA asExternalLSAs[];
}

//
// Represents an OSPF Link State Acknowledgement packet
//
packet OSPFLinkStateAcknowledgementPacket extends OSPFPacket
{
    OSPFLSAHeader lsaHeaders[];
}