Classes | Namespaces | Functions

LSA.h File Reference

#include "OSPFPacket_m.h"
#include "OSPFcommon.h"
#include <vector>
#include <math.h>

Go to the source code of this file.

Classes

struct  OSPF::NextHop
class  OSPF::RoutingInfo
class  OSPF::LSATrackingInfo
class  OSPF::RouterLSA
class  OSPF::NetworkLSA
class  OSPF::SummaryLSA
class  OSPF::ASExternalLSA

Namespaces

namespace  OSPF

Functions

bool operator< (const OSPFLSAHeader &leftLSA, const OSPFLSAHeader &rightLSA)
bool operator== (const OSPFLSAHeader &leftLSA, const OSPFLSAHeader &rightLSA)
bool operator== (const OSPFOptions &leftOptions, const OSPFOptions &rightOptions)
bool operator!= (const OSPFOptions &leftOptions, const OSPFOptions &rightOptions)
bool operator== (const OSPF::NextHop &leftHop, const OSPF::NextHop &rightHop)
bool operator!= (const OSPF::NextHop &leftHop, const OSPF::NextHop &rightHop)
unsigned int CalculateLSASize (const OSPFRouterLSA *routerLSA)
unsigned int CalculateLSASize (const OSPFNetworkLSA *networkLSA)
unsigned int CalculateLSASize (const OSPFSummaryLSA *summaryLSA)
unsigned int CalculateLSASize (const OSPFASExternalLSA *asExternalLSA)
void PrintLSAHeader (const OSPFLSAHeader &lsaHeader, std::ostream &output)
std::ostream & operator<< (std::ostream &ostr, OSPFLSA &lsa)

Function Documentation

unsigned int CalculateLSASize ( const OSPFRouterLSA *  routerLSA  )  [inline]

Definition at line 241 of file LSA.h.

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

{
    unsigned int   lsaLength = OSPF_LSA_HEADER_LENGTH + OSPF_ROUTERLSA_HEADER_LENGTH;
    unsigned short linkCount = routerLSA->getLinksArraySize();

    for (unsigned short i = 0; i < linkCount; i++) {
        const Link& link = routerLSA->getLinks(i);
        lsaLength += OSPF_LINK_HEADER_LENGTH + (link.getTosDataArraySize() * OSPF_TOS_LENGTH);
    }

    return lsaLength;
}

unsigned int CalculateLSASize ( const OSPFNetworkLSA *  networkLSA  )  [inline]

Definition at line 254 of file LSA.h.

{
    return (OSPF_LSA_HEADER_LENGTH + OSPF_NETWORKLSA_MASK_LENGTH +
            (networkLSA->getAttachedRoutersArraySize() * OSPF_NETWORKLSA_ADDRESS_LENGTH));
}

unsigned int CalculateLSASize ( const OSPFSummaryLSA *  summaryLSA  )  [inline]

Definition at line 260 of file LSA.h.

{
    return (OSPF_LSA_HEADER_LENGTH + OSPF_SUMMARYLSA_HEADER_LENGTH +
            (summaryLSA->getTosDataArraySize() * OSPF_TOS_LENGTH));
}

unsigned int CalculateLSASize ( const OSPFASExternalLSA *  asExternalLSA  )  [inline]

Definition at line 266 of file LSA.h.

{
    return (OSPF_LSA_HEADER_LENGTH + OSPF_ASEXTERNALLSA_HEADER_LENGTH +
            (asExternalLSA->getContents().getExternalTOSInfoArraySize() * OSPF_ASEXTERNALLSA_TOS_INFO_LENGTH));
}

bool operator!= ( const OSPFOptions &  leftOptions,
const OSPFOptions &  rightOptions 
) [inline]

Definition at line 224 of file LSA.h.

{
    return (!(leftOptions == rightOptions));
}

bool operator!= ( const OSPF::NextHop leftHop,
const OSPF::NextHop rightHop 
) [inline]

Definition at line 236 of file LSA.h.

{
    return (!(leftHop == rightHop));
}

bool operator< ( const OSPFLSAHeader &  leftLSA,
const OSPFLSAHeader &  rightLSA 
) [inline]

Returns true if leftLSA is older than rightLSA.

Definition at line 160 of file LSA.h.

{
    long leftSequenceNumber  = leftLSA.getLsSequenceNumber();
    long rightSequenceNumber = rightLSA.getLsSequenceNumber();

    if (leftSequenceNumber < rightSequenceNumber) {
        return true;
    }
    if (leftSequenceNumber == rightSequenceNumber) {
        unsigned short leftChecksum  = leftLSA.getLsChecksum();
        unsigned short rightChecksum = rightLSA.getLsChecksum();

        if (leftChecksum < rightChecksum) {
            return true;
        }
        if (leftChecksum == rightChecksum) {
            unsigned short leftAge  = leftLSA.getLsAge();
            unsigned short rightAge = rightLSA.getLsAge();

            if ((leftAge != MAX_AGE) && (rightAge == MAX_AGE)) {
                return true;
            }
            if ((abs(leftAge - rightAge) > MAX_AGE_DIFF) && (leftAge > rightAge)) {
                return true;
            }
        }
    }
    return false;
}

std::ostream& operator<< ( std::ostream &  ostr,
OSPFLSA &  lsa 
) [inline]

Definition at line 294 of file LSA.h.

{
    PrintLSAHeader(lsa.getHeader(), ostr);
    return ostr;
}

bool operator== ( const OSPF::NextHop leftHop,
const OSPF::NextHop rightHop 
) [inline]

Definition at line 229 of file LSA.h.

{
    return ((leftHop.ifIndex           == rightHop.ifIndex) &&
            (leftHop.hopAddress        == rightHop.hopAddress) &&
            (leftHop.advertisingRouter == rightHop.advertisingRouter));
}

bool operator== ( const OSPFLSAHeader &  leftLSA,
const OSPFLSAHeader &  rightLSA 
) [inline]

Returns true if leftLSA is the same age as rightLSA.

Definition at line 193 of file LSA.h.

{
    long           leftSequenceNumber  = leftLSA.getLsSequenceNumber();
    long           rightSequenceNumber = rightLSA.getLsSequenceNumber();
    unsigned short leftChecksum        = leftLSA.getLsChecksum();
    unsigned short rightChecksum       = rightLSA.getLsChecksum();
    unsigned short leftAge             = leftLSA.getLsAge();
    unsigned short rightAge            = rightLSA.getLsAge();

    if ((leftSequenceNumber == rightSequenceNumber) &&
        (leftChecksum == rightChecksum) &&
        (((leftAge == MAX_AGE) && (rightAge == MAX_AGE)) ||
         (((leftAge != MAX_AGE) && (rightAge != MAX_AGE)) &&
          (abs(leftAge - rightAge) <= MAX_AGE_DIFF))))
    {
        return true;
    }
    else {
        return false;
    }
}

bool operator== ( const OSPFOptions &  leftOptions,
const OSPFOptions &  rightOptions 
) [inline]

Definition at line 215 of file LSA.h.

{
    return ((leftOptions.E_ExternalRoutingCapability == rightOptions.E_ExternalRoutingCapability) &&
            (leftOptions.MC_MulticastForwarding      == rightOptions.MC_MulticastForwarding) &&
            (leftOptions.NP_Type7LSA                 == rightOptions.NP_Type7LSA) &&
            (leftOptions.EA_ForwardExternalLSAs      == rightOptions.EA_ForwardExternalLSAs) &&
            (leftOptions.DC_DemandCircuits           == rightOptions.DC_DemandCircuits));
}

void PrintLSAHeader ( const OSPFLSAHeader &  lsaHeader,
std::ostream &  output 
) [inline]

Definition at line 272 of file LSA.h.

Referenced by operator<<(), OSPF::MessageHandler::PrintDatabaseDescriptionPacket(), OSPF::MessageHandler::PrintLinkStateAcknowledgementPacket(), OSPF::MessageHandler::PrintLinkStateUpdatePacket(), OSPF::DatabaseDescriptionHandler::ProcessDDPacket(), OSPF::LinkStateUpdateHandler::ProcessPacket(), and OSPF::LinkStateAcknowledgementHandler::ProcessPacket().

                                                                               {
    char addressString[16];
    output << "LSAHeader: age="
           << lsaHeader.getLsAge()
           << ", type=";
    switch (lsaHeader.getLsType()) {
        case RouterLSAType:                     output << "RouterLSA";                     break;
        case NetworkLSAType:                    output << "NetworkLSA";                    break;
        case SummaryLSA_NetworksType:           output << "SummaryLSA_Networks";           break;
        case SummaryLSA_ASBoundaryRoutersType:  output << "SummaryLSA_ASBoundaryRouters";  break;
        case ASExternalLSAType:                 output << "ASExternalLSA";                 break;
        default:                                output << "Unknown";                       break;
    }
    output << ", LSID="
           << AddressStringFromULong(addressString, sizeof(addressString), lsaHeader.getLinkStateID());
    output << ", advertisingRouter="
           << AddressStringFromULong(addressString, sizeof(addressString), lsaHeader.getAdvertisingRouter().getInt())
           << ", seqNumber="
           << lsaHeader.getLsSequenceNumber();
    output << endl;
}