OSPFcommon.h File Reference

#include <ctype.h>
#include <stdio.h>
#include <functional>

Namespaces

namespace  OSPF

Classes

struct  OSPF::AuthenticationKeyType
struct  OSPF::IPv4Address
class  OSPF::IPv4Address_Less
struct  OSPF::IPv4AddressRange
class  OSPF::IPv4AddressRange_Less
struct  OSPF::HostRouteParameters
struct  OSPF::LSAKeyType
class  OSPF::LSAKeyType_Less
struct  OSPF::DesignatedRouterID

Defines

#define LS_REFRESH_TIME   1800
#define MIN_LS_INTERVAL   5
#define MIN_LS_ARRIVAL   1
#define MAX_AGE   3600
#define CHECK_AGE   300
#define MAX_AGE_DIFF   900
#define LS_INFINITY   16777215
#define DEFAULT_DESTINATION_ADDRESS   0
#define DEFAULT_DESTINATION_MASK   0
#define INITIAL_SEQUENCE_NUMBER   -2147483647
#define MAX_SEQUENCE_NUMBER   2147483647
#define VIRTUAL_LINK_TTL   32
#define IPV4_HEADER_LENGTH   60
#define IPV4_DATAGRAM_LENGTH   65536
#define OSPF_HEADER_LENGTH   24
#define OSPF_LSA_HEADER_LENGTH   20
#define OSPF_DD_HEADER_LENGTH   8
#define OSPF_REQUEST_LENGTH   12
#define OSPF_ROUTERLSA_HEADER_LENGTH   4
#define OSPF_LINK_HEADER_LENGTH   12
#define OSPF_TOS_LENGTH   4
#define OSPF_NETWORKLSA_MASK_LENGTH   4
#define OSPF_NETWORKLSA_ADDRESS_LENGTH   4
#define OSPF_SUMMARYLSA_HEADER_LENGTH   8
#define OSPF_ASEXTERNALLSA_HEADER_LENGTH   16
#define OSPF_ASEXTERNALLSA_TOS_INFO_LENGTH   12

Typedefs

typedef unsigned long OSPF::Metric
typedef unsigned long OSPF::RouterID
typedef unsigned long OSPF::AreaID
typedef unsigned long OSPF::LinkStateID

Enumerations

enum  OSPF::AuthenticationType { OSPF::NullType = 0, OSPF::SimplePasswordType = 1, OSPF::CrytographicType = 2 }

Functions

bool operator== (OSPF::IPv4Address leftAddress, OSPF::IPv4Address rightAddress)
bool operator!= (OSPF::IPv4Address leftAddress, OSPF::IPv4Address rightAddress)
bool operator< (OSPF::IPv4Address leftAddress, OSPF::IPv4Address rightAddress)
bool operator<= (OSPF::IPv4Address leftAddress, OSPF::IPv4Address rightAddress)
bool operator> (OSPF::IPv4Address leftAddress, OSPF::IPv4Address rightAddress)
bool operator>= (OSPF::IPv4Address leftAddress, OSPF::IPv4Address rightAddress)
OSPF::IPv4Address operator & (OSPF::IPv4Address address, OSPF::IPv4Address mask)
OSPF::IPv4Address operator| (OSPF::IPv4Address address, OSPF::IPv4Address match)
bool operator== (OSPF::IPv4AddressRange leftAddressRange, OSPF::IPv4AddressRange rightAddressRange)
bool operator!= (OSPF::IPv4AddressRange leftAddressRange, OSPF::IPv4AddressRange rightAddressRange)
bool operator== (OSPF::DesignatedRouterID leftID, OSPF::DesignatedRouterID rightID)
bool operator!= (OSPF::DesignatedRouterID leftID, OSPF::DesignatedRouterID rightID)
OSPF::IPv4Address IPv4AddressFromAddressString (const char *charForm)
OSPF::IPv4Address IPv4AddressFromULong (unsigned long longForm)
unsigned long ULongFromIPv4Address (OSPF::IPv4Address byteForm)
unsigned long ULongFromAddressString (const char *charForm)
char * AddressStringFromIPv4Address (char *buffer, int bufferLength, OSPF::IPv4Address byteForm)
char * AddressStringFromULong (char *buffer, int bufferLength, unsigned long longForm)
char HexCharToByte (char hex)
char HexPairToByte (char upperHex, char lowerHex)

Variables

const RouterID OSPF::NullRouterID = 0
const AreaID OSPF::BackboneAreaID = 0
const LinkStateID OSPF::NullLinkStateID = 0
const IPv4Address OSPF::NullIPv4Address = { {0, 0, 0, 0} }
const IPv4Address OSPF::AllSPFRouters = { {224, 0, 0, 5} }
const IPv4Address OSPF::AllDRouters = { {224, 0, 0, 6} }
const IPv4AddressRange OSPF::NullIPv4AddressRange = { { {0, 0, 0, 0} }, { {0, 0, 0, 0} } }
const DesignatedRouterID OSPF::NullDesignatedRouterID = { 0, { {0, 0, 0, 0} } }


Define Documentation

#define CHECK_AGE   300

#define DEFAULT_DESTINATION_ADDRESS   0

#define DEFAULT_DESTINATION_MASK   0

#define INITIAL_SEQUENCE_NUMBER   -2147483647

#define IPV4_DATAGRAM_LENGTH   65536

#define IPV4_HEADER_LENGTH   60

#define LS_INFINITY   16777215

#define LS_REFRESH_TIME   1800

#define MAX_AGE   3600

#define MAX_AGE_DIFF   900

Referenced by operator<(), and operator==().

#define MAX_SEQUENCE_NUMBER   2147483647

#define MIN_LS_ARRIVAL   1

#define MIN_LS_INTERVAL   5

#define OSPF_ASEXTERNALLSA_HEADER_LENGTH   16

Referenced by CalculateLSASize().

#define OSPF_ASEXTERNALLSA_TOS_INFO_LENGTH   12

Referenced by CalculateLSASize().

#define OSPF_DD_HEADER_LENGTH   8

#define OSPF_HEADER_LENGTH   24

#define OSPF_LINK_HEADER_LENGTH   12

Referenced by CalculateLSASize().

#define OSPF_LSA_HEADER_LENGTH   20

#define OSPF_NETWORKLSA_ADDRESS_LENGTH   4

Referenced by CalculateLSASize().

#define OSPF_NETWORKLSA_MASK_LENGTH   4

Referenced by CalculateLSASize().

#define OSPF_REQUEST_LENGTH   12

#define OSPF_ROUTERLSA_HEADER_LENGTH   4

Referenced by CalculateLSASize().

#define OSPF_SUMMARYLSA_HEADER_LENGTH   8

Referenced by CalculateLSASize().

#define OSPF_TOS_LENGTH   4

Referenced by CalculateLSASize().

#define VIRTUAL_LINK_TTL   32


Function Documentation

char* AddressStringFromIPv4Address ( char *  buffer,
int  bufferLength,
OSPF::IPv4Address  byteForm 
) [inline]

Referenced by OSPF::Area::detailedInfo(), operator<<(), OSPF::MessageHandler::PrintDatabaseDescriptionPacket(), OSPF::MessageHandler::PrintHelloPacket(), OSPF::MessageHandler::PrintLinkStateAcknowledgementPacket(), OSPF::MessageHandler::PrintLinkStateRequestPacket(), and OSPF::MessageHandler::PrintLinkStateUpdatePacket().

00292 {
00293     if (bufferLength < 16) {
00294         buffer = '\0';
00295     }
00296     else {
00297         sprintf(buffer, "%d.%d.%d.%d", byteForm.bytes[0], byteForm.bytes[1], byteForm.bytes[2], byteForm.bytes[3]);
00298     }
00299     return buffer;
00300 }

char* AddressStringFromULong ( char *  buffer,
int  bufferLength,
unsigned long  longForm 
) [inline]

Referenced by OSPF::Area::detailedInfo(), OSPF::Area::info(), OSPF::MessageHandler::PrintEvent(), OSPF::MessageHandler::PrintHelloPacket(), OSPF::MessageHandler::PrintLinkStateRequestPacket(), OSPF::MessageHandler::PrintLinkStateUpdatePacket(), PrintLSAHeader(), and OSPF::LinkStateRequestHandler::ProcessPacket().

00303 {
00304     if (bufferLength < 16) {
00305         buffer = '\0';
00306     }
00307     else {
00308         sprintf(buffer, "%d.%d.%d.%d", (int)((longForm & 0xFF000000) >> 24),
00309                                         (int)((longForm & 0x00FF0000) >> 16),
00310                                         (int)((longForm & 0x0000FF00) >> 8),
00311                                         (int)(longForm & 0x000000FF));
00312     }
00313     return buffer;
00314 }

char HexCharToByte ( char  hex  )  [inline]

Referenced by HexPairToByte().

00317 {
00318     switch (hex) {
00319         case '0':   return 0;
00320         case '1':   return 1;
00321         case '2':   return 2;
00322         case '3':   return 3;
00323         case '4':   return 4;
00324         case '5':   return 5;
00325         case '6':   return 6;
00326         case '7':   return 7;
00327         case '8':   return 8;
00328         case '9':   return 9;
00329         case 'A':   return 10;
00330         case 'B':   return 11;
00331         case 'C':   return 12;
00332         case 'D':   return 13;
00333         case 'E':   return 14;
00334         case 'F':   return 15;
00335         case 'a':   return 10;
00336         case 'b':   return 11;
00337         case 'c':   return 12;
00338         case 'd':   return 13;
00339         case 'e':   return 14;
00340         case 'f':   return 15;
00341         default:    return 0;
00342     };
00343 }

char HexPairToByte ( char  upperHex,
char  lowerHex 
) [inline]

Referenced by OSPFRouting::LoadExternalRoute(), OSPFRouting::LoadInterfaceParameters(), and OSPFRouting::LoadVirtualLink().

00346 {
00347     return ((HexCharToByte(upperHex) << 4) & (HexCharToByte(lowerHex)));
00348 }

OSPF::IPv4Address IPv4AddressFromAddressString ( const char *  charForm  )  [inline]

Referenced by OSPFRouting::LoadAreaFromXML(), OSPFRouting::LoadExternalRoute(), OSPFRouting::LoadHostRoute(), OSPFRouting::LoadInterfaceParameters(), OSPF::Interface::SetIfIndex(), and ULongFromAddressString().

00225 {
00226     OSPF::IPv4Address byteForm = OSPF::NullIPv4Address;
00227 
00228     int  lastDot = -1;
00229     int  byteCount = 0;
00230     for (int i = 0; i < 16; i++) {
00231         if (charForm[i] == '\0') {
00232             if ((byteCount <= 3) && (i - lastDot - 1 <= 3)) {
00233                 switch (i - lastDot - 1) {
00234                     case 3: byteForm.bytes[byteCount] += (((charForm[i - 3] - '0') < 3) ? (charForm[i - 3] - '0') : 0) * 100;
00235                     case 2: byteForm.bytes[byteCount] += (charForm[i - 2] - '0') * 10;
00236                     case 1: byteForm.bytes[byteCount] += charForm[i - 1] - '0';
00237                     default: break;
00238                 }
00239             }
00240             break;
00241         }
00242         if ((!isdigit(charForm[i])) && (charForm[i] != '.')) {
00243             break;
00244         }
00245         if (charForm[i] == '.') {
00246             if (i == 0) {
00247                 break;
00248             }
00249             if (i - lastDot - 1 > 3) {
00250                 break;
00251             }
00252             switch (i - lastDot - 1) {
00253                 case 3: byteForm.bytes[byteCount] += (((charForm[i - 3] - '0') < 3) ? (charForm[i - 3] - '0') : 0) * 100;
00254                 case 2: byteForm.bytes[byteCount] += (charForm[i - 2] - '0') * 10;
00255                 case 1: byteForm.bytes[byteCount] += charForm[i - 1] - '0';
00256                 default: break;
00257             }
00258             byteCount++;
00259             lastDot = i;
00260             if (byteCount > 3) {
00261                 break;
00262             }
00263         }
00264     }
00265 
00266     return byteForm;
00267 }

OSPF::IPv4Address IPv4AddressFromULong ( unsigned long  longForm  )  [inline]

Referenced by OSPF::Area::AgeDatabase(), OSPF::Area::CalculateNextHops(), OSPF::Area::CreateRoutingTableEntryFromSummaryLSA(), OSPF::Area::FindSameOrWorseCostRoute(), OSPF::Router::GetUniqueLinkStateID(), OSPF::Area::GetUniqueLinkStateID(), OSPF::MessageHandler::ProcessPacket(), OSPF::LinkStateUpdateHandler::ProcessPacket(), and OSPF::HelloHandler::ProcessPacket().

00270 {
00271 
00272     OSPF::IPv4Address byteForm;
00273 
00274     byteForm.bytes[0] = (longForm & 0xFF000000) >> 24;
00275     byteForm.bytes[1] = (longForm & 0x00FF0000) >> 16;
00276     byteForm.bytes[2] = (longForm & 0x0000FF00) >> 8;
00277     byteForm.bytes[3] =  longForm & 0x000000FF;
00278     return byteForm;
00279 }

OSPF::IPv4Address operator & ( OSPF::IPv4Address  address,
OSPF::IPv4Address  mask 
) [inline]

00164 {
00165     OSPF::IPv4Address maskedAddress;
00166     maskedAddress.bytes[0] = address.bytes[0] & mask.bytes[0];
00167     maskedAddress.bytes[1] = address.bytes[1] & mask.bytes[1];
00168     maskedAddress.bytes[2] = address.bytes[2] & mask.bytes[2];
00169     maskedAddress.bytes[3] = address.bytes[3] & mask.bytes[3];
00170     return maskedAddress;
00171 }

bool operator!= ( OSPF::DesignatedRouterID  leftID,
OSPF::DesignatedRouterID  rightID 
) [inline]

00201 {
00202     return (!(leftID == rightID));
00203 }

bool operator!= ( OSPF::IPv4AddressRange  leftAddressRange,
OSPF::IPv4AddressRange  rightAddressRange 
) [inline]

00190 {
00191     return (!(leftAddressRange == rightAddressRange));
00192 }

bool operator!= ( OSPF::IPv4Address  leftAddress,
OSPF::IPv4Address  rightAddress 
) [inline]

00139 {
00140     return (!(leftAddress == rightAddress));
00141 }

bool operator< ( OSPF::IPv4Address  leftAddress,
OSPF::IPv4Address  rightAddress 
) [inline]

00144 {
00145     return leftAddress.asInt() < rightAddress.asInt();
00146 }

bool operator<= ( OSPF::IPv4Address  leftAddress,
OSPF::IPv4Address  rightAddress 
) [inline]

00149 {
00150     return ((leftAddress < rightAddress) || (leftAddress == rightAddress));
00151 }

bool operator== ( OSPF::DesignatedRouterID  leftID,
OSPF::DesignatedRouterID  rightID 
) [inline]

00195 {
00196     return (leftID.routerID == rightID.routerID &&
00197             leftID.ipInterfaceAddress == rightID.ipInterfaceAddress);
00198 }

bool operator== ( OSPF::IPv4AddressRange  leftAddressRange,
OSPF::IPv4AddressRange  rightAddressRange 
) [inline]

00184 {
00185     return (leftAddressRange.address == rightAddressRange.address &&
00186             leftAddressRange.mask    == rightAddressRange.mask);
00187 }

bool operator== ( OSPF::IPv4Address  leftAddress,
OSPF::IPv4Address  rightAddress 
) [inline]

00131 {
00132     return (leftAddress.bytes[0] == rightAddress.bytes[0] &&
00133             leftAddress.bytes[1] == rightAddress.bytes[1] &&
00134             leftAddress.bytes[2] == rightAddress.bytes[2] &&
00135             leftAddress.bytes[3] == rightAddress.bytes[3]);
00136 }

bool operator> ( OSPF::IPv4Address  leftAddress,
OSPF::IPv4Address  rightAddress 
) [inline]

00154 {
00155     return (!(leftAddress <= rightAddress));
00156 }

bool operator>= ( OSPF::IPv4Address  leftAddress,
OSPF::IPv4Address  rightAddress 
) [inline]

00159 {
00160     return (!(leftAddress < rightAddress));
00161 }

OSPF::IPv4Address operator| ( OSPF::IPv4Address  address,
OSPF::IPv4Address  match 
) [inline]

00174 {
00175     OSPF::IPv4Address matchAddress;
00176     matchAddress.bytes[0] = address.bytes[0] | match.bytes[0];
00177     matchAddress.bytes[1] = address.bytes[1] | match.bytes[1];
00178     matchAddress.bytes[2] = address.bytes[2] | match.bytes[2];
00179     matchAddress.bytes[3] = address.bytes[3] | match.bytes[3];
00180     return matchAddress;
00181 }

unsigned long ULongFromAddressString ( const char *  charForm  )  [inline]

unsigned long ULongFromIPv4Address ( OSPF::IPv4Address  byteForm  )  [inline]


Generated on Fri Mar 20 18:51:17 2009 for INET Framework for OMNeT++/OMNEST by  doxygen 1.5.5