Classes | Namespaces | Defines | Typedefs | Enumerations | Functions | Variables

OSPFcommon.h File Reference

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

Go to the source code of this file.

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

Namespaces

namespace  OSPF

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

Definition at line 30 of file OSPFcommon.h.

Referenced by OSPF::Router::AgeDatabase(), and OSPF::Area::AgeDatabase().

#define DEFAULT_DESTINATION_ADDRESS   0

Definition at line 33 of file OSPFcommon.h.

#define DEFAULT_DESTINATION_MASK   0

Definition at line 34 of file OSPFcommon.h.

#define INITIAL_SEQUENCE_NUMBER   -2147483647
#define IPV4_DATAGRAM_LENGTH   65536
#define IPV4_HEADER_LENGTH   60
#define LS_INFINITY   16777215

Definition at line 32 of file OSPFcommon.h.

#define LS_REFRESH_TIME   1800

Definition at line 26 of file OSPFcommon.h.

Referenced by OSPF::Router::AgeDatabase(), and OSPF::Area::AgeDatabase().

#define MAX_AGE   3600
#define MAX_AGE_DIFF   900

Definition at line 31 of file OSPFcommon.h.

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

#define MAX_SEQUENCE_NUMBER   2147483647
#define MIN_LS_ARRIVAL   1

Definition at line 28 of file OSPFcommon.h.

Referenced by OSPF::Neighbor::AgeTransmittedLSAList().

#define MIN_LS_INTERVAL   5

Definition at line 27 of file OSPFcommon.h.

#define OSPF_ASEXTERNALLSA_HEADER_LENGTH   16

Definition at line 51 of file OSPFcommon.h.

Referenced by CalculateLSASize().

#define OSPF_ASEXTERNALLSA_TOS_INFO_LENGTH   12

Definition at line 52 of file OSPFcommon.h.

#define OSPF_DD_HEADER_LENGTH   8

Definition at line 43 of file OSPFcommon.h.

Referenced by OSPF::Neighbor::SendDatabaseDescriptionPacket().

#define OSPF_HEADER_LENGTH   24
#define OSPF_LINK_HEADER_LENGTH   12

Definition at line 46 of file OSPFcommon.h.

Referenced by CalculateLSASize().

#define OSPF_LSA_HEADER_LENGTH   20

Definition at line 42 of file OSPFcommon.h.

Referenced by CalculateLSASize(), and OSPF::Neighbor::SendDatabaseDescriptionPacket().

#define OSPF_NETWORKLSA_ADDRESS_LENGTH   4

Definition at line 49 of file OSPFcommon.h.

#define OSPF_NETWORKLSA_MASK_LENGTH   4

Definition at line 48 of file OSPFcommon.h.

Referenced by CalculateLSASize().

#define OSPF_REQUEST_LENGTH   12

Definition at line 44 of file OSPFcommon.h.

Referenced by OSPF::Neighbor::SendLinkStateRequestPacket().

#define OSPF_ROUTERLSA_HEADER_LENGTH   4

Definition at line 45 of file OSPFcommon.h.

#define OSPF_SUMMARYLSA_HEADER_LENGTH   8

Definition at line 50 of file OSPFcommon.h.

Referenced by CalculateLSASize().

#define OSPF_TOS_LENGTH   4

Definition at line 47 of file OSPFcommon.h.

#define VIRTUAL_LINK_TTL   32

Function Documentation

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

Definition at line 291 of file OSPFcommon.h.

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

{
    if (bufferLength < 16) {
        buffer = '\0';
    }
    else {
        sprintf(buffer, "%d.%d.%d.%d", byteForm.bytes[0], byteForm.bytes[1], byteForm.bytes[2], byteForm.bytes[3]);
    }
    return buffer;
}

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

Definition at line 302 of file OSPFcommon.h.

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().

{
    if (bufferLength < 16) {
        buffer = '\0';
    }
    else {
        sprintf(buffer, "%d.%d.%d.%d", (int)((longForm & 0xFF000000) >> 24),
                                        (int)((longForm & 0x00FF0000) >> 16),
                                        (int)((longForm & 0x0000FF00) >> 8),
                                        (int)(longForm & 0x000000FF));
    }
    return buffer;
}

char HexCharToByte ( char  hex  )  [inline]

Definition at line 316 of file OSPFcommon.h.

Referenced by HexPairToByte().

{
    switch (hex) {
        case '0':   return 0;
        case '1':   return 1;
        case '2':   return 2;
        case '3':   return 3;
        case '4':   return 4;
        case '5':   return 5;
        case '6':   return 6;
        case '7':   return 7;
        case '8':   return 8;
        case '9':   return 9;
        case 'A':   return 10;
        case 'B':   return 11;
        case 'C':   return 12;
        case 'D':   return 13;
        case 'E':   return 14;
        case 'F':   return 15;
        case 'a':   return 10;
        case 'b':   return 11;
        case 'c':   return 12;
        case 'd':   return 13;
        case 'e':   return 14;
        case 'f':   return 15;
        default:    return 0;
    };
}

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

Definition at line 345 of file OSPFcommon.h.

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

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

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

Definition at line 224 of file OSPFcommon.h.

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

{
    OSPF::IPv4Address byteForm = OSPF::NullIPv4Address;

    int  lastDot = -1;
    int  byteCount = 0;
    for (int i = 0; i < 16; i++) {
        if (charForm[i] == '\0') {
            if ((byteCount <= 3) && (i - lastDot - 1 <= 3)) {
                switch (i - lastDot - 1) {
                    case 3: byteForm.bytes[byteCount] += (((charForm[i - 3] - '0') < 3) ? (charForm[i - 3] - '0') : 0) * 100;
                    case 2: byteForm.bytes[byteCount] += (charForm[i - 2] - '0') * 10;
                    case 1: byteForm.bytes[byteCount] += charForm[i - 1] - '0';
                    default: break;
                }
            }
            break;
        }
        if ((!isdigit(charForm[i])) && (charForm[i] != '.')) {
            break;
        }
        if (charForm[i] == '.') {
            if (i == 0) {
                break;
            }
            if (i - lastDot - 1 > 3) {
                break;
            }
            switch (i - lastDot - 1) {
                case 3: byteForm.bytes[byteCount] += (((charForm[i - 3] - '0') < 3) ? (charForm[i - 3] - '0') : 0) * 100;
                case 2: byteForm.bytes[byteCount] += (charForm[i - 2] - '0') * 10;
                case 1: byteForm.bytes[byteCount] += charForm[i - 1] - '0';
                default: break;
            }
            byteCount++;
            lastDot = i;
            if (byteCount > 3) {
                break;
            }
        }
    }

    return byteForm;
}

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

Definition at line 269 of file OSPFcommon.h.

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().

{

    OSPF::IPv4Address byteForm;

    byteForm.bytes[0] = (longForm & 0xFF000000) >> 24;
    byteForm.bytes[1] = (longForm & 0x00FF0000) >> 16;
    byteForm.bytes[2] = (longForm & 0x0000FF00) >> 8;
    byteForm.bytes[3] =  longForm & 0x000000FF;
    return byteForm;
}

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

Definition at line 189 of file OSPFcommon.h.

{
    return (!(leftAddressRange == rightAddressRange));
}

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

Definition at line 200 of file OSPFcommon.h.

{
    return (!(leftID == rightID));
}

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

Definition at line 138 of file OSPFcommon.h.

{
    return (!(leftAddress == rightAddress));
}

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

Definition at line 163 of file OSPFcommon.h.

{
    OSPF::IPv4Address maskedAddress;
    maskedAddress.bytes[0] = address.bytes[0] & mask.bytes[0];
    maskedAddress.bytes[1] = address.bytes[1] & mask.bytes[1];
    maskedAddress.bytes[2] = address.bytes[2] & mask.bytes[2];
    maskedAddress.bytes[3] = address.bytes[3] & mask.bytes[3];
    return maskedAddress;
}

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

Definition at line 143 of file OSPFcommon.h.

{
    return leftAddress.asInt() < rightAddress.asInt();
}

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

Definition at line 148 of file OSPFcommon.h.

{
    return ((leftAddress < rightAddress) || (leftAddress == rightAddress));
}

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

Definition at line 130 of file OSPFcommon.h.

{
    return (leftAddress.bytes[0] == rightAddress.bytes[0] &&
            leftAddress.bytes[1] == rightAddress.bytes[1] &&
            leftAddress.bytes[2] == rightAddress.bytes[2] &&
            leftAddress.bytes[3] == rightAddress.bytes[3]);
}

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

Definition at line 183 of file OSPFcommon.h.

{
    return (leftAddressRange.address == rightAddressRange.address &&
            leftAddressRange.mask    == rightAddressRange.mask);
}

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

Definition at line 194 of file OSPFcommon.h.

{
    return (leftID.routerID == rightID.routerID &&
            leftID.ipInterfaceAddress == rightID.ipInterfaceAddress);
}

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

Definition at line 153 of file OSPFcommon.h.

{
    return (!(leftAddress <= rightAddress));
}

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

Definition at line 158 of file OSPFcommon.h.

{
    return (!(leftAddress < rightAddress));
}

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

Definition at line 173 of file OSPFcommon.h.

{
    OSPF::IPv4Address matchAddress;
    matchAddress.bytes[0] = address.bytes[0] | match.bytes[0];
    matchAddress.bytes[1] = address.bytes[1] | match.bytes[1];
    matchAddress.bytes[2] = address.bytes[2] | match.bytes[2];
    matchAddress.bytes[3] = address.bytes[3] | match.bytes[3];
    return matchAddress;
}

unsigned long ULongFromAddressString ( const char *  charForm  )  [inline]
unsigned long ULongFromIPv4Address ( OSPF::IPv4Address  byteForm  )  [inline]