void AdjLsa::removeNptEntries(Nlsr& pnlsr) { if (getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix()) { pnlsr.getNamePrefixTable().removeEntry(getOrigRouter(), getOrigRouter()); } }
void AdjLsa::addNptEntries(Nlsr& pnlsr) { // Only add NPT entries if this is an adj LSA from another router. if (getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix()) { // Pass the originating router as both the name to register and // where it came from. pnlsr.getNamePrefixTable().addEntry(getOrigRouter(), getOrigRouter()); } }
void LinkStateRoutingTableCalculator::calculatePath(Map& pMap, RoutingTable& rt, Nlsr& pnlsr) { _LOG_DEBUG("LinkStateRoutingTableCalculator::calculatePath Called"); allocateAdjMatrix(); initMatrix(); makeAdjMatrix(pnlsr, pMap); writeAdjMatrixLog(); int sourceRouter = pMap.getMappingNoByRouterName(pnlsr.getConfParameter().getRouterPrefix()); allocateParent(); allocateDistance(); if (pnlsr.getConfParameter().getMaxFacesPerPrefix() == 1) { // Single Path doDijkstraPathCalculation(sourceRouter); // update routing table addAllLsNextHopsToRoutingTable(pnlsr, rt, pMap, sourceRouter); } else { // Multi Path setNoLink(getNumOfLinkfromAdjMatrix(sourceRouter)); allocateLinks(); allocateLinkCosts(); getLinksFromAdjMatrix(links, linkCosts, sourceRouter); for (int i = 0 ; i < vNoLink; i++) { adjustAdMatrix(sourceRouter, links[i], linkCosts[i]); writeAdjMatrixLog(); doDijkstraPathCalculation(sourceRouter); //update routing table addAllLsNextHopsToRoutingTable(pnlsr, rt, pMap, sourceRouter); } freeLinks(); freeLinksCosts(); } freeParent(); freeDistance(); freeAdjMatrix(); }
void RoutingTable::calculateHypDryRoutingTable(Nlsr& nlsr) { Map map; map.createFromAdjLsdb(nlsr); map.writeLog(); size_t nRouters = map.getMapSize(); HyperbolicRoutingCalculator calculator(nRouters, true, nlsr.getConfParameter().getRouterPrefix()); calculator.calculatePaths(map, ndn::ref(*this), nlsr.getLsdb(), nlsr.getAdjacencyList()); }
void SyncLogicHandler::processRoutingUpdateFromSync(const ndn::Name& routerName, uint64_t seqNo, Nlsr& pnlsr) { ndn::Name rName = routerName; if (routerName != pnlsr.getConfParameter().getRouterPrefix()) { SequencingManager sm(seqNo); sm.writeLog(); _LOG_DEBUG(routerName); try { if (pnlsr.getLsdb().isNameLsaNew(rName.append("name"), sm.getNameLsaSeq())) { _LOG_DEBUG("Updated Name LSA. Need to fetch it"); ndn::Name interestName(pnlsr.getConfParameter().getLsaPrefix()); interestName.append(routerName); interestName.append("name"); interestName.appendNumber(sm.getNameLsaSeq()); pnlsr.getLsdb().expressInterest(interestName, pnlsr.getConfParameter().getInterestResendTime(), 0); } if (pnlsr.getLsdb().isAdjLsaNew(rName.append("adjacency"), sm.getAdjLsaSeq())) { _LOG_DEBUG("Updated Adj LSA. Need to fetch it"); ndn::Name interestName(pnlsr.getConfParameter().getLsaPrefix()); interestName.append(routerName); interestName.append("adjacency"); interestName.appendNumber(sm.getAdjLsaSeq()); pnlsr.getLsdb().expressInterest(interestName, pnlsr.getConfParameter().getInterestResendTime(), 0); } if (pnlsr.getLsdb().isCoordinateLsaNew(rName.append("coordinate"), sm.getCorLsaSeq())) { _LOG_DEBUG("Updated Cor LSA. Need to fetch it"); ndn::Name interestName(pnlsr.getConfParameter().getLsaPrefix()); interestName.append(routerName); interestName.append("coordinate"); interestName.appendNumber(sm.getCorLsaSeq()); pnlsr.getLsdb().expressInterest(interestName, pnlsr.getConfParameter().getInterestResendTime(), 0); } } catch (std::exception& e) { std::cerr << e.what() << std::endl; return; } } }
void RoutingTable::calculate(Nlsr& pnlsr) { pnlsr.getLsdb().writeCorLsdbLog(); pnlsr.getLsdb().writeNameLsdbLog(); pnlsr.getLsdb().writeAdjLsdbLog(); pnlsr.getNamePrefixTable().writeLog(); if (pnlsr.getIsRoutingTableCalculating() == false) { //setting routing table calculation pnlsr.setIsRoutingTableCalculating(true); bool isHrEnabled = pnlsr.getConfParameter().getHyperbolicState() == HYPERBOLIC_STATE_ON; if ((!isHrEnabled && pnlsr.getLsdb().doesLsaExist(pnlsr.getConfParameter().getRouterPrefix().toUri() + "/" + "adjacency", std::string("adjacency"))) || (isHrEnabled && pnlsr.getLsdb().doesLsaExist(pnlsr.getConfParameter().getRouterPrefix().toUri() + "/" + "coordinate", std::string("coordinate")))) { if (pnlsr.getIsBuildAdjLsaSheduled() != 1) { _LOG_TRACE("Clearing old routing table"); clearRoutingTable(); // for dry run options clearDryRoutingTable(); _LOG_DEBUG("Calculating routing table"); // calculate Link State routing if ((pnlsr.getConfParameter().getHyperbolicState() == HYPERBOLIC_STATE_OFF) || (pnlsr.getConfParameter().getHyperbolicState() == HYPERBOLIC_STATE_DRY_RUN)) { calculateLsRoutingTable(pnlsr); } //calculate hyperbolic routing if (pnlsr.getConfParameter().getHyperbolicState() == HYPERBOLIC_STATE_ON) { calculateHypRoutingTable(pnlsr); } //calculate dry hyperbolic routing if (pnlsr.getConfParameter().getHyperbolicState() == HYPERBOLIC_STATE_DRY_RUN) { calculateHypDryRoutingTable(pnlsr); } //need to update NPT here _LOG_DEBUG("Calling Update NPT With new Route"); pnlsr.getNamePrefixTable().updateWithNewRoute(); writeLog(pnlsr.getConfParameter().getHyperbolicState()); pnlsr.getNamePrefixTable().writeLog(); pnlsr.getFib().writeLog(); } else { _LOG_DEBUG("Adjacency building is scheduled, so" " routing table can not be calculated :("); } } else { _LOG_DEBUG("No Adj LSA of router itself," " so Routing table can not be calculated :("); clearRoutingTable(); clearDryRoutingTable(); // for dry run options // need to update NPT here _LOG_DEBUG("Calling Update NPT With new Route"); pnlsr.getNamePrefixTable().updateWithNewRoute(); writeLog(pnlsr.getConfParameter().getHyperbolicState()); pnlsr.getNamePrefixTable().writeLog(); pnlsr.getFib().writeLog(); //debugging purpose end } pnlsr.setIsRouteCalculationScheduled(false); //clear scheduled flag pnlsr.setIsRoutingTableCalculating(false); //unsetting routing table calculation } else { scheduleRoutingTableCalculation(pnlsr); } }