LSA.h File Reference

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

Namespaces

namespace  OSPF

Classes

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

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 OSPFASExternalLSA *  asExternalLSA  )  [inline]

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

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

00261 {
00262     return (OSPF_LSA_HEADER_LENGTH + OSPF_SUMMARYLSA_HEADER_LENGTH +
00263             (summaryLSA->getTosDataArraySize() * OSPF_TOS_LENGTH));
00264 }

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

00255 {
00256     return (OSPF_LSA_HEADER_LENGTH + OSPF_NETWORKLSA_MASK_LENGTH +
00257             (networkLSA->getAttachedRoutersArraySize() * OSPF_NETWORKLSA_ADDRESS_LENGTH));
00258 }

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

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

00242 {
00243     unsigned int   lsaLength = OSPF_LSA_HEADER_LENGTH + OSPF_ROUTERLSA_HEADER_LENGTH;
00244     unsigned short linkCount = routerLSA->getLinksArraySize();
00245 
00246     for (unsigned short i = 0; i < linkCount; i++) {
00247         const Link& link = routerLSA->getLinks(i);
00248         lsaLength += OSPF_LINK_HEADER_LENGTH + (link.getTosDataArraySize() * OSPF_TOS_LENGTH);
00249     }
00250 
00251     return lsaLength;
00252 }

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

00237 {
00238     return (!(leftHop == rightHop));
00239 }

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

00225 {
00226     return (!(leftOptions == rightOptions));
00227 }

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

Returns true if leftLSA is older than rightLSA.

00161 {
00162     long leftSequenceNumber  = leftLSA.getLsSequenceNumber();
00163     long rightSequenceNumber = rightLSA.getLsSequenceNumber();
00164 
00165     if (leftSequenceNumber < rightSequenceNumber) {
00166         return true;
00167     }
00168     if (leftSequenceNumber == rightSequenceNumber) {
00169         unsigned short leftChecksum  = leftLSA.getLsChecksum();
00170         unsigned short rightChecksum = rightLSA.getLsChecksum();
00171 
00172         if (leftChecksum < rightChecksum) {
00173             return true;
00174         }
00175         if (leftChecksum == rightChecksum) {
00176             unsigned short leftAge  = leftLSA.getLsAge();
00177             unsigned short rightAge = rightLSA.getLsAge();
00178 
00179             if ((leftAge != MAX_AGE) && (rightAge == MAX_AGE)) {
00180                 return true;
00181             }
00182             if ((abs(leftAge - rightAge) > MAX_AGE_DIFF) && (leftAge > rightAge)) {
00183                 return true;
00184             }
00185         }
00186     }
00187     return false;
00188 }

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

00295 {
00296     PrintLSAHeader(lsa.getHeader(), ostr);
00297     return ostr;
00298 }

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

00230 {
00231     return ((leftHop.ifIndex           == rightHop.ifIndex) &&
00232             (leftHop.hopAddress        == rightHop.hopAddress) &&
00233             (leftHop.advertisingRouter == rightHop.advertisingRouter));
00234 }

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

00216 {
00217     return ((leftOptions.E_ExternalRoutingCapability == rightOptions.E_ExternalRoutingCapability) &&
00218             (leftOptions.MC_MulticastForwarding      == rightOptions.MC_MulticastForwarding) &&
00219             (leftOptions.NP_Type7LSA                 == rightOptions.NP_Type7LSA) &&
00220             (leftOptions.EA_ForwardExternalLSAs      == rightOptions.EA_ForwardExternalLSAs) &&
00221             (leftOptions.DC_DemandCircuits           == rightOptions.DC_DemandCircuits));
00222 }

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

Returns true if leftLSA is the same age as rightLSA.

00194 {
00195     long           leftSequenceNumber  = leftLSA.getLsSequenceNumber();
00196     long           rightSequenceNumber = rightLSA.getLsSequenceNumber();
00197     unsigned short leftChecksum        = leftLSA.getLsChecksum();
00198     unsigned short rightChecksum       = rightLSA.getLsChecksum();
00199     unsigned short leftAge             = leftLSA.getLsAge();
00200     unsigned short rightAge            = rightLSA.getLsAge();
00201 
00202     if ((leftSequenceNumber == rightSequenceNumber) &&
00203         (leftChecksum == rightChecksum) &&
00204         (((leftAge == MAX_AGE) && (rightAge == MAX_AGE)) ||
00205          (((leftAge != MAX_AGE) && (rightAge != MAX_AGE)) &&
00206           (abs(leftAge - rightAge) <= MAX_AGE_DIFF))))
00207     {
00208         return true;
00209     }
00210     else {
00211         return false;
00212     }
00213 }

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

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

00272                                                                                {
00273     char addressString[16];
00274     output << "LSAHeader: age="
00275            << lsaHeader.getLsAge()
00276            << ", type=";
00277     switch (lsaHeader.getLsType()) {
00278         case RouterLSAType:                     output << "RouterLSA";                     break;
00279         case NetworkLSAType:                    output << "NetworkLSA";                    break;
00280         case SummaryLSA_NetworksType:           output << "SummaryLSA_Networks";           break;
00281         case SummaryLSA_ASBoundaryRoutersType:  output << "SummaryLSA_ASBoundaryRouters";  break;
00282         case ASExternalLSAType:                 output << "ASExternalLSA";                 break;
00283         default:                                output << "Unknown";                       break;
00284     }
00285     output << ", LSID="
00286            << AddressStringFromULong(addressString, sizeof(addressString), lsaHeader.getLinkStateID());
00287     output << ", advertisingRouter="
00288            << AddressStringFromULong(addressString, sizeof(addressString), lsaHeader.getAdvertisingRouter().getInt())
00289            << ", seqNumber="
00290            << lsaHeader.getLsSequenceNumber();
00291     output << endl;
00292 }


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