Name | Type | 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 | (no description) |
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 |
// // 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 "inet/networklayer/contract/ipv4/IPv4Address.h" }} namespace inet::ospf; class noncobject IPv4Address; enum OSPFPacketType { HELLO_PACKET = 1; DATABASE_DESCRIPTION_PACKET = 2; LINKSTATE_REQUEST_PACKET = 3; LINKSTATE_UPDATE_PACKET = 4; LINKSTATE_ACKNOWLEDGEMENT_PACKET = 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) = HELLO_PACKET; IPv4Address routerID; IPv4Address areaID; short authenticationType = 0; char authentication[8]; } // // Represents an OSPF Hello packet // packet OSPFHelloPacket extends OSPFPacket { IPv4Address networkMask; short helloInterval = 5; OSPFOptions options; char routerPriority = 0; long routerDeadInterval = 0; IPv4Address designatedRouter; IPv4Address backupDesignatedRouter; IPv4Address neighbor[]; } enum LSAType { ROUTERLSA_TYPE = 1; NETWORKLSA_TYPE = 2; SUMMARYLSA_NETWORKS_TYPE = 3; SUMMARYLSA_ASBOUNDARYROUTERS_TYPE = 4; AS_EXTERNAL_LSA_TYPE = 5; } // // Represents an OSPF LSA header // class OSPFLSAHeader { unsigned short lsAge = 0; OSPFOptions lsOptions; char lsType @enum(LSAType) = ROUTERLSA_TYPE; IPv4Address linkStateID; IPv4Address advertisingRouter; long lsSequenceNumber = 0; unsigned short lsaLength = 0; } // // common ancestor type for all LSAs // class OSPFLSA { OSPFLSAHeader header; } enum LinkType { POINTTOPOINT_LINK = 1; TRANSIT_LINK = 2; STUB_LINK = 3; VIRTUAL_LINK = 4; } struct TOSData { unsigned char tos; unsigned char tosMetric[3]; } class Link { IPv4Address linkID; unsigned long linkData = 0; unsigned char type @enum(LinkType) = POINTTOPOINT_LINK; 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 { IPv4Address networkMask; IPv4Address attachedRouters[]; } // // Represents an OSPF Summary LSA // class OSPFSummaryLSA extends OSPFLSA { IPv4Address networkMask; unsigned long routeCost = 1; TOSData tosData[]; } struct ExternalTOSInfo { TOSData tosData; bool E_ExternalMetricType; IPv4Address forwardingAddress; long externalRouteTag; } // // Represents the contents of an OSPF AS External LSA // class OSPFASExternalLSAContents { IPv4Address networkMask; bool E_ExternalMetricType = false; unsigned long routeCost = 1; IPv4Address 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; IPv4Address linkStateID; IPv4Address 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[]; }