face+mgmt: allow congestion marking parameters to be enabled and set
refs #4465
Change-Id: I9d49135ab32bacb2885b70031c573f7c8709ac1f
diff --git a/daemon/mgmt/face-manager.cpp b/daemon/mgmt/face-manager.cpp
index 7ddf6ea..04e80a9 100644
--- a/daemon/mgmt/face-manager.cpp
+++ b/daemon/mgmt/face-manager.cpp
@@ -28,6 +28,8 @@
#include "face/protocol-factory.hpp"
#include "fw/face-table.hpp"
+#include <boost/logic/tribool.hpp>
+
#include <ndn-cxx/lp/tags.hpp>
#include <ndn-cxx/mgmt/nfd/channel-status.hpp>
@@ -117,10 +119,19 @@
face::FaceParams faceParams;
faceParams.persistency = parameters.getFacePersistency();
+ if (parameters.hasBaseCongestionMarkingInterval()) {
+ faceParams.baseCongestionMarkingInterval = parameters.getBaseCongestionMarkingInterval();
+ }
+ if (parameters.hasDefaultCongestionThreshold()) {
+ faceParams.defaultCongestionThreshold = parameters.getDefaultCongestionThreshold();
+ }
faceParams.wantLocalFields = parameters.hasFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED) &&
parameters.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED);
faceParams.wantLpReliability = parameters.hasFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED) &&
parameters.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED);
+ if (parameters.hasFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED)) {
+ faceParams.wantCongestionMarking = parameters.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED);
+ }
try {
factory->createFace({remoteUri, localUri, faceParams},
bind(&FaceManager::afterCreateFaceSuccess, this, parameters, _1, done),
@@ -267,6 +278,15 @@
if (parameters.hasFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED)) {
options.reliabilityOptions.isEnabled = parameters.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED);
}
+ if (parameters.hasFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED)) {
+ options.allowCongestionMarking = parameters.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED);
+ }
+ if (parameters.hasBaseCongestionMarkingInterval()) {
+ options.baseCongestionMarkingInterval = parameters.getBaseCongestionMarkingInterval();
+ }
+ if (parameters.hasDefaultCongestionThreshold()) {
+ options.defaultCongestionThreshold = parameters.getDefaultCongestionThreshold();
+ }
linkService->setOptions(options);
}
@@ -280,8 +300,11 @@
ControlParameters params;
params.setFaceId(face.getId())
.setFacePersistency(face.getPersistency())
+ .setBaseCongestionMarkingInterval(options.baseCongestionMarkingInterval)
+ .setDefaultCongestionThreshold(options.defaultCongestionThreshold)
.setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, options.allowLocalFields, false)
- .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, options.reliabilityOptions.isEnabled, false);
+ .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, options.reliabilityOptions.isEnabled, false)
+ .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, options.allowCongestionMarking, false);
if (wantUris) {
params.setUri(face.getRemoteUri().toString())
.setLocalUri(face.getLocalUri().toString());
@@ -393,10 +416,18 @@
time::steady_clock::TimePoint expirationTime = face.getExpirationTime();
if (expirationTime != time::steady_clock::TimePoint::max()) {
- status.setExpirationPeriod(std::max(time::milliseconds(0),
+ status.setExpirationPeriod(std::max(0_ms,
time::duration_cast<time::milliseconds>(expirationTime - now)));
}
+ // Get LinkService options
+ auto linkService = dynamic_cast<face::GenericLinkService*>(face.getLinkService());
+ if (linkService != nullptr) {
+ auto linkServiceOptions = linkService->getOptions();
+ status.setBaseCongestionMarkingInterval(linkServiceOptions.baseCongestionMarkingInterval);
+ status.setDefaultCongestionThreshold(linkServiceOptions.defaultCongestionThreshold);
+ }
+
const face::FaceCounters& counters = face.getCounters();
status.setNInInterests(counters.nInInterests)
.setNOutInterests(counters.nOutInterests)