INET Framework for OMNeT++/OMNEST
ansaLsa6Type1Router.cc
Go to the documentation of this file.
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 }