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