rib: add route cost to readvertise functionality
This commit adds the cost property (obtained from RIB) to outbound
readvertisements to NLSR.
Change-Id: Idb2e1780dfe1b57f95cfdbb2471b27f832d2671a
diff --git a/daemon/rib/readvertise/client-to-nlsr-readvertise-policy.cpp b/daemon/rib/readvertise/client-to-nlsr-readvertise-policy.cpp
index dcce60a..94c340b 100644
--- a/daemon/rib/readvertise/client-to-nlsr-readvertise-policy.cpp
+++ b/daemon/rib/readvertise/client-to-nlsr-readvertise-policy.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2014-2022, Regents of the University of California,
+ * Copyright (c) 2014-2025, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -31,7 +31,7 @@
ClientToNlsrReadvertisePolicy::handleNewRoute(const RibRouteRef& ribRoute) const
{
if (ribRoute.route->origin == ndn::nfd::ROUTE_ORIGIN_CLIENT) {
- return ReadvertiseAction{ribRoute.entry->getName(), ndn::security::SigningInfo()};
+ return ReadvertiseAction{ribRoute.entry->getName(), ribRoute.route->cost, ndn::security::SigningInfo()};
}
else {
return std::nullopt;
diff --git a/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp b/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp
index ade9f8b..109135e 100644
--- a/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp
+++ b/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2014-2022, Regents of the University of California,
+ * Copyright (c) 2014-2025, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -75,7 +75,7 @@
if (!isFound) {
return std::nullopt;
}
- return ReadvertiseAction{prefixToAdvertise, ndn::security::signingByIdentity(signingIdentity)};
+ return ReadvertiseAction{prefixToAdvertise, ribRoute.route->cost, ndn::security::signingByIdentity(signingIdentity)};
}
time::milliseconds
diff --git a/daemon/rib/readvertise/nfd-rib-readvertise-destination.cpp b/daemon/rib/readvertise/nfd-rib-readvertise-destination.cpp
index 413320e..8504e03 100644
--- a/daemon/rib/readvertise/nfd-rib-readvertise-destination.cpp
+++ b/daemon/rib/readvertise/nfd-rib-readvertise-destination.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2014-2022, Regents of the University of California,
+ * Copyright (c) 2014-2025, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -64,7 +64,7 @@
NFD_LOG_DEBUG("advertise " << rr.prefix << " on " << m_commandOptions.getPrefix());
m_controller.start<ndn::nfd::RibRegisterCommand>(
- getControlParameters().setName(rr.prefix),
+ getControlParameters().setName(rr.prefix).setCost(rr.cost),
[=] (const ControlParameters&) { successCb(); },
[=] (const ControlResponse& cr) { failureCb(cr.getText()); },
getCommandOptions().setSigningInfo(rr.signer));
diff --git a/daemon/rib/readvertise/readvertise-policy.hpp b/daemon/rib/readvertise/readvertise-policy.hpp
index 94d178f..d0d36e5 100644
--- a/daemon/rib/readvertise/readvertise-policy.hpp
+++ b/daemon/rib/readvertise/readvertise-policy.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2014-2022, Regents of the University of California,
+ * Copyright (c) 2014-2025, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -37,6 +37,7 @@
struct ReadvertiseAction
{
Name prefix; ///< the prefix that should be readvertised
+ uint64_t cost; ///< route cost
ndn::security::SigningInfo signer; ///< credentials for command signing
};
diff --git a/daemon/rib/readvertise/readvertise.cpp b/daemon/rib/readvertise/readvertise.cpp
index 1df539d..0d07413 100644
--- a/daemon/rib/readvertise/readvertise.cpp
+++ b/daemon/rib/readvertise/readvertise.cpp
@@ -73,7 +73,7 @@
return;
}
- auto [rrIt, isNewRr] = m_rrs.emplace(action->prefix);
+ auto [rrIt, isNewRr] = m_rrs.emplace(action->prefix, action->cost);
if (!isNewRr && rrIt->signer != action->signer) {
NFD_LOG_WARN("add-route " << ribRoute.entry->getName() << " face=" << ribRoute.route->faceId <<
" origin=" << ribRoute.route->origin << " -> readvertising-as " << action->prefix <<
@@ -92,7 +92,7 @@
NFD_LOG_DEBUG("add-route " << ribRoute.entry->getName() << " face=" << ribRoute.route->faceId <<
" origin=" << ribRoute.route->origin << " -> readvertising-as " << action->prefix <<
- " signer=" << action->signer);
+ " cost=" << action->cost << " signer=" << action->signer);
rrIt->retryDelay = RETRY_DELAY_MIN;
this->advertise(rrIt);
}
diff --git a/daemon/rib/readvertise/readvertised-route.hpp b/daemon/rib/readvertise/readvertised-route.hpp
index c4e0ac7..e3c2173 100644
--- a/daemon/rib/readvertise/readvertised-route.hpp
+++ b/daemon/rib/readvertise/readvertised-route.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2014-2024, Regents of the University of California,
+ * Copyright (c) 2014-2025, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -41,9 +41,9 @@
class ReadvertisedRoute : noncopyable
{
public:
- explicit
- ReadvertisedRoute(const Name& prefix)
+ ReadvertisedRoute(const Name& prefix, uint64_t cost)
: prefix(prefix)
+ , cost(cost)
{
}
@@ -55,6 +55,7 @@
public:
Name prefix; ///< readvertised prefix
+ uint64_t cost; ///< cost to reach the prefix
mutable ndn::security::SigningInfo signer; ///< signer for commands
mutable size_t nRibRoutes = 0; ///< number of RIB routes that cause the readvertisement
mutable time::milliseconds retryDelay = 0_ms; ///< retry interval (not used for refresh)