Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

LSA.h File Reference

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

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


Function Documentation

unsigned int CalculateLSASize const OSPFASExternalLSA *  asExternalLSA  )  [inline]
 

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

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]
 

00238 {
00239     return (OSPF_LSA_HEADER_LENGTH + OSPF_NETWORKLSA_MASK_LENGTH +
00240             (networkLSA->getAttachedRoutersArraySize () * OSPF_NETWORKLSA_ADDRESS_LENGTH));
00241 }

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 Sat Apr 1 20:52:20 2006 for INET Framework for OMNeT++/OMNEST by  doxygen 1.4.1