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=&ev)
std::ostream & operator<< (std::ostream &ostr, OSPFLSA &lsa)


Function Documentation

unsigned int CalculateLSASize ( const OSPFASExternalLSA asExternalLSA  )  [inline]

unsigned int CalculateLSASize ( const OSPFSummaryLSA summaryLSA  )  [inline]

00244 {
00245     return (OSPF_LSA_HEADER_LENGTH + OSPF_SUMMARYLSA_HEADER_LENGTH +
00246             (summaryLSA->getTosDataArraySize () * OSPF_TOS_LENGTH));
00247 }

unsigned int CalculateLSASize ( const OSPFNetworkLSA networkLSA  )  [inline]

unsigned int CalculateLSASize ( const OSPFRouterLSA routerLSA  )  [inline]

00225 {
00226     unsigned int   lsaLength = OSPF_LSA_HEADER_LENGTH + OSPF_ROUTERLSA_HEADER_LENGTH;
00227     unsigned short linkCount = routerLSA->getLinksArraySize ();
00228 
00229     for (unsigned short i = 0; i < linkCount; i++) {
00230         const Link& link = routerLSA->getLinks (i);
00231         lsaLength += OSPF_LINK_HEADER_LENGTH + (link.getTosDataArraySize () * OSPF_TOS_LENGTH);
00232     }
00233 
00234     return lsaLength;
00235 }

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

00220 {
00221     return (!(leftHop == rightHop));
00222 }

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

00208 {
00209     return (!(leftOptions == rightOptions));
00210 }

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

Returns true if leftLSA is older than rightLSA.

00144 {
00145     long leftSequenceNumber  = leftLSA.getLsSequenceNumber ();
00146     long rightSequenceNumber = rightLSA.getLsSequenceNumber ();
00147 
00148     if (leftSequenceNumber < rightSequenceNumber) {
00149         return true;
00150     }
00151     if (leftSequenceNumber == rightSequenceNumber) {
00152         unsigned short leftChecksum  = leftLSA.getLsChecksum ();
00153         unsigned short rightChecksum = rightLSA.getLsChecksum ();
00154 
00155         if (leftChecksum < rightChecksum) {
00156             return true;
00157         }
00158         if (leftChecksum == rightChecksum) {
00159             unsigned short leftAge  = leftLSA.getLsAge ();
00160             unsigned short rightAge = rightLSA.getLsAge ();
00161 
00162             if ((leftAge != MAX_AGE) && (rightAge == MAX_AGE)) {
00163                 return true;
00164             }
00165             if ((abs (leftAge - rightAge) > MAX_AGE_DIFF) && (leftAge > rightAge)) {
00166                 return true;
00167             }
00168         }
00169     }
00170     return false;
00171 }

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

00278 {
00279     PrintLSAHeader (lsa.getHeader (), &ostr);
00280     return ostr;
00281 }

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

00213 {
00214     return ((leftHop.ifIndex           == rightHop.ifIndex) &&
00215             (leftHop.hopAddress        == rightHop.hopAddress) &&
00216             (leftHop.advertisingRouter == rightHop.advertisingRouter));
00217 }

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

00199 {
00200     return ((leftOptions.E_ExternalRoutingCapability == rightOptions.E_ExternalRoutingCapability) &&
00201             (leftOptions.MC_MulticastForwarding      == rightOptions.MC_MulticastForwarding) &&
00202             (leftOptions.NP_Type7LSA                 == rightOptions.NP_Type7LSA) &&
00203             (leftOptions.EA_ForwardExternalLSAs      == rightOptions.EA_ForwardExternalLSAs) &&
00204             (leftOptions.DC_DemandCircuits           == rightOptions.DC_DemandCircuits));
00205 }

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

Returns true if leftLSA is the same age as rightLSA.

00177 {
00178     long           leftSequenceNumber  = leftLSA.getLsSequenceNumber ();
00179     long           rightSequenceNumber = rightLSA.getLsSequenceNumber ();
00180     unsigned short leftChecksum        = leftLSA.getLsChecksum ();
00181     unsigned short rightChecksum       = rightLSA.getLsChecksum ();
00182     unsigned short leftAge             = leftLSA.getLsAge ();
00183     unsigned short rightAge            = rightLSA.getLsAge ();
00184 
00185     if ((leftSequenceNumber == rightSequenceNumber) &&
00186         (leftChecksum == rightChecksum) &&
00187         (((leftAge == MAX_AGE) && (rightAge == MAX_AGE)) ||
00188          (((leftAge != MAX_AGE) && (rightAge != MAX_AGE)) &&
00189           (abs (leftAge - rightAge) <= MAX_AGE_DIFF))))
00190     {
00191         return true;
00192     }
00193     else {
00194         return false;
00195     }
00196 }

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

00255                                                                                       {
00256     char addressString[16];
00257     *output << "LSAHeader: age="
00258             << lsaHeader.getLsAge ()
00259             << ", type=";
00260     switch (lsaHeader.getLsType ()) {
00261         case RouterLSAType:                     *output << "RouterLSA";                     break;
00262         case NetworkLSAType:                    *output << "NetworkLSA";                    break;
00263         case SummaryLSA_NetworksType:           *output << "SummaryLSA_Networks";           break;
00264         case SummaryLSA_ASBoundaryRoutersType:  *output << "SummaryLSA_ASBoundaryRouters";  break;
00265         case ASExternalLSAType:                 *output << "ASExternalLSA";                 break;
00266         default:                                *output << "Unknown";                       break;
00267     }
00268     *output << ", LSID="
00269             << AddressStringFromULong (addressString, sizeof (addressString), lsaHeader.getLinkStateID ());
00270     *output << ", advertisingRouter="
00271             << AddressStringFromULong (addressString, sizeof (addressString), lsaHeader.getAdvertisingRouter ().getInt ())
00272             << ", seqNumber="
00273             << lsaHeader.getLsSequenceNumber ();
00274     *output << endl;
00275 }


Generated on Wed Apr 4 13:20:18 2007 for INET Framework for OMNeT++/OMNEST by  doxygen 1.4.7