|
INET Framework for OMNeT++/OMNEST
|
00001 #include "AnsaLSA.h" 00002 00003 bool AnsaOSPF::NetworkLSA::Update(const OSPFNetworkLSA* lsa) 00004 { 00005 bool different = DiffersFrom(lsa); 00006 (*this) = (*lsa); 00007 ResetInstallTime(); 00008 if (different) { 00009 ClearNextHops(); 00010 return true; 00011 } else { 00012 return false; 00013 } 00014 } 00015 00016 bool AnsaOSPF::NetworkLSA::DiffersFrom(const OSPFNetworkLSA* networkLSA) const 00017 { 00018 const OSPFLSAHeader& lsaHeader = networkLSA->getHeader(); 00019 bool differentHeader = ((header_var.getLsOptions() != lsaHeader.getLsOptions()) || 00020 ((header_var.getLsAge() == MAX_AGE) && (lsaHeader.getLsAge() != MAX_AGE)) || 00021 ((header_var.getLsAge() != MAX_AGE) && (lsaHeader.getLsAge() == MAX_AGE)) || 00022 (header_var.getLsaLength() != lsaHeader.getLsaLength())); 00023 bool differentBody = false; 00024 00025 if (!differentHeader) { 00026 differentBody = ((networkMask_var != networkLSA->getNetworkMask()) || 00027 (attachedRouters_arraysize != networkLSA->getAttachedRoutersArraySize())); 00028 00029 if (!differentBody) { 00030 unsigned int routerCount = attachedRouters_arraysize; 00031 for (unsigned int i = 0; i < routerCount; i++) { 00032 if (attachedRouters_var[i] != networkLSA->getAttachedRouters(i)) { 00033 differentBody = true; 00034 break; 00035 } 00036 } 00037 } 00038 } 00039 00040 return (differentHeader || differentBody); 00041 }