|
INET Framework for OMNeT++/OMNEST
|
00001 #include "AnsaLSA.h" 00002 00003 bool AnsaOSPF::SummaryLSA::Update(const OSPFSummaryLSA* 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::SummaryLSA::DiffersFrom(const OSPFSummaryLSA* summaryLSA) const 00017 { 00018 const OSPFLSAHeader& lsaHeader = summaryLSA->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 != summaryLSA->getNetworkMask()) || 00027 (routeCost_var != summaryLSA->getRouteCost()) || 00028 (tosData_arraysize != summaryLSA->getTosDataArraySize())); 00029 00030 if (!differentBody) { 00031 unsigned int tosCount = tosData_arraysize; 00032 for (unsigned int i = 0; i < tosCount; i++) { 00033 if ((tosData_var[i].tos != summaryLSA->getTosData(i).tos) || 00034 (tosData_var[i].tosMetric[0] != summaryLSA->getTosData(i).tosMetric[0]) || 00035 (tosData_var[i].tosMetric[1] != summaryLSA->getTosData(i).tosMetric[1]) || 00036 (tosData_var[i].tosMetric[2] != summaryLSA->getTosData(i).tosMetric[2])) 00037 { 00038 differentBody = true; 00039 break; 00040 } 00041 } 00042 } 00043 } 00044 00045 return (differentHeader || differentBody); 00046 }