void FibManager::removeNextHop(const Name& topPrefix, const Interest& interest, ControlParameters parameters, const ndn::mgmt::CommandContinuation& done) { setFaceForSelfRegistration(interest, parameters); NFD_LOG_TRACE("remove-nexthop prefix: " << parameters.getName() << " faceid: " << parameters.getFaceId()); auto face = m_getFace(parameters.getFaceId()); if (static_cast<bool>(face)) { auto entry = m_fib.findExactMatch(parameters.getName()); if (static_cast<bool>(entry)) { entry->removeNextHop(face); NFD_LOG_DEBUG("remove-nexthop result: OK prefix: " << parameters.getName() << " faceid: " << parameters.getFaceId()); if (!entry->hasNextHops()) { m_fib.erase(*entry); } } else { NFD_LOG_DEBUG("remove-nexthop result: OK"); } } else { NFD_LOG_DEBUG("remove-nexthop result: OK"); } done(ControlResponse(200, "Success").setBody(parameters.wireEncode())); }
void NexthopList::addNextHop(const NextHop& nh) { std::set<NextHop, NextHopComparator>::iterator it = std::find_if(m_nexthopList.begin(), m_nexthopList.end(), std::bind(&nexthopAddCompare, _1, nh)); if (it == m_nexthopList.end()) { m_nexthopList.insert(nh); } else if (it->getRouteCost() > nh.getRouteCost()) { removeNextHop(*it); m_nexthopList.insert(nh); } }