#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) |
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] |
bool operator!= | ( | const OSPFOptions & | leftOptions, | |
const OSPFOptions & | rightOptions | |||
) | [inline] |
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] |
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 }