|
INET Framework for OMNeT++/OMNEST
|
00001 // 00002 // This program is free software: you can redistribute it and/or modify 00003 // it under the terms of the GNU Lesser General Public License as published by 00004 // the Free Software Foundation, either version 3 of the License, or 00005 // (at your option) any later version. 00006 // 00007 // This program is distributed in the hope that it will be useful, 00008 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00009 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00010 // GNU Lesser General Public License for more details. 00011 // 00012 // You should have received a copy of the GNU Lesser General Public License 00013 // along with this program. If not, see http://www.gnu.org/licenses/. 00014 // 00015 00016 #include "ansaLsa6.h" 00017 00018 bool AnsaOspf6::RouterLsa::Update(const OspfRouterLsa6* lsa) { 00019 EV<< "-----------------------------------------------------\n"; 00020 PrintLsaHeader6(lsa->getHeader(), ev.getOStream()); 00021 EV << "-----------------------------------------------------\n"; 00022 PrintLsaHeader6(this->getHeader(), ev.getOStream()); 00023 EV << "-----------------------------------------------------\n"; 00024 bool different = DiffersFrom(lsa); 00025 (*this) = (*lsa); 00026 ResetInstallTime(); 00027 if (different){ 00028 ClearNextHops(); 00029 return true; 00030 } else{ 00031 return false; 00032 } 00033 } 00034 00035 bool AnsaOspf6::RouterLsa::DiffersFrom(const OspfRouterLsa6* routerLsa) const { 00036 00037 const OspfLsaHeader6& lsaHeader = routerLsa->getHeader(); 00038 00039 if (((header_var.getLsAge() == MAX_AGE) && (lsaHeader.getLsAge() != MAX_AGE)) 00040 || ((header_var.getLsAge() != MAX_AGE) && (lsaHeader.getLsAge() == MAX_AGE)) 00041 || (header_var.getAdvertisingRouter() != lsaHeader.getAdvertisingRouter()) 00042 || (header_var.getLsSequenceNumber() != lsaHeader.getLsSequenceNumber())){ 00043 return true; 00044 00045 00046 }else if (V_VirtualLinkEndpoint_var != routerLsa->getV_VirtualLinkEndpoint()){ 00047 return true; 00048 }else if (E_AsBoundaryRouter_var != routerLsa->getE_AsBoundaryRouter()){ 00049 return true; 00050 }else if (B_AreaBorderRouter_var != routerLsa->getB_AreaBorderRouter()){ 00051 return true; 00052 }else if (options_var != routerLsa->getOptions()){ 00053 return true; 00054 }else if (links_arraysize != routerLsa->getLinksArraySize()){ 00055 return true; 00056 00057 }else{ 00058 00059 unsigned int linkCount = links_arraysize; 00060 for (unsigned int i = 0; i < linkCount; i++){ 00061 if (links_var[i] != routerLsa->getLinks(i)){ 00062 return true; 00063 } 00064 } 00065 } 00066 00067 return false; 00068 }