NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.5: NDN, CCN, CCNx, content centric networks
API Documentation
face-manager.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014-2019, Regents of the University of California,
4  * Arizona Board of Regents,
5  * Colorado State University,
6  * University Pierre & Marie Curie, Sorbonne University,
7  * Washington University in St. Louis,
8  * Beijing Institute of Technology,
9  * The University of Memphis.
10  *
11  * This file is part of NFD (Named Data Networking Forwarding Daemon).
12  * See AUTHORS.md for complete list of NFD authors and contributors.
13  *
14  * NFD is free software: you can redistribute it and/or modify it under the terms
15  * of the GNU General Public License as published by the Free Software Foundation,
16  * either version 3 of the License, or (at your option) any later version.
17  *
18  * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20  * PURPOSE. See the GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License along with
23  * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24  */
25 
26 #include "face-manager.hpp"
27 
28 #include "common/logger.hpp"
31 #include "fw/face-table.hpp"
32 
33 #include <ndn-cxx/lp/tags.hpp>
38 
39 namespace nfd {
40 
42 
44  Dispatcher& dispatcher, CommandAuthenticator& authenticator)
45  : ManagerBase("faces", dispatcher, authenticator)
46  , m_faceSystem(faceSystem)
47  , m_faceTable(faceSystem.getFaceTable())
48 {
49  // register handlers for ControlCommand
50  registerCommandHandler<ndn::nfd::FaceCreateCommand>("create", bind(&FaceManager::createFace, this, _4, _5));
51  registerCommandHandler<ndn::nfd::FaceUpdateCommand>("update", bind(&FaceManager::updateFace, this, _3, _4, _5));
52  registerCommandHandler<ndn::nfd::FaceDestroyCommand>("destroy", bind(&FaceManager::destroyFace, this, _4, _5));
53 
54  // register handlers for StatusDataset
55  registerStatusDatasetHandler("list", bind(&FaceManager::listFaces, this, _3));
56  registerStatusDatasetHandler("channels", bind(&FaceManager::listChannels, this, _3));
57  registerStatusDatasetHandler("query", bind(&FaceManager::queryFaces, this, _2, _3));
58 
59  // register notification stream
60  m_postNotification = registerNotificationStream("events");
61  m_faceAddConn = m_faceTable.afterAdd.connect([this] (const Face& face) {
62  connectFaceStateChangeSignal(face);
63  notifyFaceEvent(face, ndn::nfd::FACE_EVENT_CREATED);
64  });
65  m_faceRemoveConn = m_faceTable.beforeRemove.connect([this] (const Face& face) {
66  notifyFaceEvent(face, ndn::nfd::FACE_EVENT_DESTROYED);
67  });
68 }
69 
70 void
71 FaceManager::createFace(const ControlParameters& parameters,
73 {
74  FaceUri remoteUri;
75  if (!remoteUri.parse(parameters.getUri())) {
76  NFD_LOG_TRACE("failed to parse remote URI: " << parameters.getUri());
77  done(ControlResponse(400, "Malformed command"));
78  return;
79  }
80 
81  if (!remoteUri.isCanonical()) {
82  NFD_LOG_TRACE("received non-canonical remote URI: " << remoteUri.toString());
83  done(ControlResponse(400, "Non-canonical remote URI"));
84  return;
85  }
86 
87  optional<FaceUri> localUri;
88  if (parameters.hasLocalUri()) {
89  localUri = FaceUri{};
90 
91  if (!localUri->parse(parameters.getLocalUri())) {
92  NFD_LOG_TRACE("failed to parse local URI: " << parameters.getLocalUri());
93  done(ControlResponse(400, "Malformed command"));
94  return;
95  }
96 
97  if (!localUri->isCanonical()) {
98  NFD_LOG_TRACE("received non-canonical local URI: " << localUri->toString());
99  done(ControlResponse(400, "Non-canonical local URI"));
100  return;
101  }
102  }
103 
104  face::ProtocolFactory* factory = m_faceSystem.getFactoryByScheme(remoteUri.getScheme());
105  if (factory == nullptr) {
106  NFD_LOG_TRACE("received create request for unsupported protocol: " << remoteUri.getScheme());
107  done(ControlResponse(406, "Unsupported protocol"));
108  return;
109  }
110 
111  face::FaceParams faceParams;
112  faceParams.persistency = parameters.getFacePersistency();
113  if (parameters.hasBaseCongestionMarkingInterval()) {
114  faceParams.baseCongestionMarkingInterval = parameters.getBaseCongestionMarkingInterval();
115  }
116  if (parameters.hasDefaultCongestionThreshold()) {
117  faceParams.defaultCongestionThreshold = parameters.getDefaultCongestionThreshold();
118  }
119  if (parameters.hasMtu()) {
120  faceParams.mtu = parameters.getMtu();
121  }
122  faceParams.wantLocalFields = parameters.hasFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED) &&
124  faceParams.wantLpReliability = parameters.hasFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED) &&
127  faceParams.wantCongestionMarking = parameters.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED);
128  }
129  try {
130  factory->createFace({remoteUri, localUri, faceParams},
131  [this, parameters, done] (const auto& face) {
132  this->afterCreateFaceSuccess(face, parameters, done);
133  },
134  [done] (uint32_t status, const std::string& reason) {
135  NFD_LOG_DEBUG("Face creation failed: " << reason);
136  done(ControlResponse(status, reason));
137  });
138  }
139  catch (const std::runtime_error& error) {
140  NFD_LOG_ERROR("Face creation failed: " << error.what());
141  done(ControlResponse(500, "Face creation failed due to internal error"));
142  return;
143  }
144  catch (const std::logic_error& error) {
145  NFD_LOG_ERROR("Face creation failed: " << error.what());
146  done(ControlResponse(500, "Face creation failed due to internal error"));
147  return;
148  }
149 }
150 
151 template<typename T>
152 static void
153 copyMtu(const Face& face, T& to)
154 {
155  auto transport = face.getTransport();
156  BOOST_ASSERT(transport != nullptr);
157 
158  if (transport->getMtu() > 0) {
159  to.setMtu(std::min(static_cast<size_t>(transport->getMtu()), ndn::MAX_NDN_PACKET_SIZE));
160  }
161  else if (transport->getMtu() == face::MTU_UNLIMITED) {
162  to.setMtu(ndn::MAX_NDN_PACKET_SIZE);
163  }
164 }
165 
166 static ControlParameters
168 {
169  ControlParameters params;
170  params.setFaceId(face.getId())
172 
173  auto linkService = dynamic_cast<face::GenericLinkService*>(face.getLinkService());
174  if (linkService != nullptr) {
175  const auto& options = linkService->getOptions();
176  params.setBaseCongestionMarkingInterval(options.baseCongestionMarkingInterval)
177  .setDefaultCongestionThreshold(options.defaultCongestionThreshold)
178  .setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, options.allowLocalFields, false)
179  .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, options.reliabilityOptions.isEnabled, false)
180  .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, options.allowCongestionMarking, false);
181  }
182 
183  return params;
184 }
185 
186 static ControlParameters
188 {
190  params.setUri(face.getRemoteUri().toString())
191  .setLocalUri(face.getLocalUri().toString());
192 
193  copyMtu(face, params);
194 
195  return params;
196 }
197 
198 void
199 FaceManager::afterCreateFaceSuccess(const shared_ptr<Face>& face,
200  const ControlParameters& parameters,
201  const ndn::mgmt::CommandContinuation& done)
202 {
203  if (face->getId() != face::INVALID_FACEID) { // Face already exists
204  NFD_LOG_TRACE("Attempted to create duplicate face of " << face->getId());
205  ControlParameters response = makeCreateFaceResponse(*face);
206  done(ControlResponse(409, "Face with remote URI already exists").setBody(response.wireEncode()));
207  return;
208  }
209 
210  // If scope non-local and flags set to enable local fields, request shouldn't
211  // have made it this far
212  BOOST_ASSERT(face->getScope() == ndn::nfd::FACE_SCOPE_LOCAL ||
213  !parameters.hasFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED) ||
214  (parameters.hasFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED) &&
215  !parameters.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED)));
216 
217  m_faceTable.add(face);
218 
219  ControlParameters response = makeCreateFaceResponse(*face);
220  done(ControlResponse(200, "OK").setBody(response.wireEncode()));
221 }
222 
223 static void
225 {
226  auto linkService = dynamic_cast<face::GenericLinkService*>(face.getLinkService());
227  if (linkService == nullptr) {
228  return;
229  }
230  auto options = linkService->getOptions();
231 
235  }
237  options.reliabilityOptions.isEnabled = parameters.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED);
238  }
240  options.allowCongestionMarking = parameters.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED);
241  }
242  if (parameters.hasBaseCongestionMarkingInterval()) {
243  options.baseCongestionMarkingInterval = parameters.getBaseCongestionMarkingInterval();
244  }
245  if (parameters.hasDefaultCongestionThreshold()) {
246  options.defaultCongestionThreshold = parameters.getDefaultCongestionThreshold();
247  }
248 
249  linkService->setOptions(options);
250 }
251 
252 void
253 FaceManager::updateFace(const Interest& interest,
254  const ControlParameters& parameters,
255  const ndn::mgmt::CommandContinuation& done)
256 {
257  FaceId faceId = parameters.getFaceId();
258  if (faceId == 0) { // Self-update
259  auto incomingFaceIdTag = interest.getTag<lp::IncomingFaceIdTag>();
260  if (incomingFaceIdTag == nullptr) {
261  NFD_LOG_TRACE("unable to determine face for self-update");
262  done(ControlResponse(404, "No FaceId specified and IncomingFaceId not available"));
263  return;
264  }
265  faceId = *incomingFaceIdTag;
266  }
267 
268  Face* face = m_faceTable.get(faceId);
269  if (face == nullptr) {
270  NFD_LOG_TRACE("invalid face specified");
271  done(ControlResponse(404, "Specified face does not exist"));
272  return;
273  }
274 
275  // Verify validity of requested changes
276  ControlParameters response;
277  bool areParamsValid = true;
278 
279  if (parameters.hasFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED) &&
280  parameters.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED) &&
281  face->getScope() != ndn::nfd::FACE_SCOPE_LOCAL) {
282  NFD_LOG_TRACE("received request to enable local fields on non-local face");
283  areParamsValid = false;
284  response.setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED,
285  parameters.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED));
286  }
287 
288  // check whether the requested FacePersistency change is valid if it's present
289  if (parameters.hasFacePersistency()) {
290  auto persistency = parameters.getFacePersistency();
291  if (!face->getTransport()->canChangePersistencyTo(persistency)) {
292  NFD_LOG_TRACE("cannot change face persistency to " << persistency);
293  areParamsValid = false;
294  response.setFacePersistency(persistency);
295  }
296  }
297 
298  if (!areParamsValid) {
299  done(ControlResponse(409, "Invalid properties specified").setBody(response.wireEncode()));
300  return;
301  }
302 
303  // All specified properties are valid, so make changes
304  if (parameters.hasFacePersistency()) {
305  face->setPersistency(parameters.getFacePersistency());
306  }
307  updateLinkServiceOptions(*face, parameters);
308 
309  // Prepare and send ControlResponse
310  response = makeUpdateFaceResponse(*face);
311  done(ControlResponse(200, "OK").setBody(response.wireEncode()));
312 }
313 
314 void
315 FaceManager::destroyFace(const ControlParameters& parameters,
316  const ndn::mgmt::CommandContinuation& done)
317 {
318  Face* face = m_faceTable.get(parameters.getFaceId());
319  if (face != nullptr) {
320  face->close();
321  }
322 
323  done(ControlResponse(200, "OK").setBody(parameters.wireEncode()));
324 }
325 
326 template<typename T>
327 static void
328 copyFaceProperties(const Face& face, T& to)
329 {
330  to.setFaceId(face.getId())
331  .setRemoteUri(face.getRemoteUri().toString())
332  .setLocalUri(face.getLocalUri().toString())
333  .setFaceScope(face.getScope())
334  .setFacePersistency(face.getPersistency())
335  .setLinkType(face.getLinkType());
336 
337  auto linkService = dynamic_cast<face::GenericLinkService*>(face.getLinkService());
338  if (linkService != nullptr) {
339  const auto& options = linkService->getOptions();
340  to.setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, options.allowLocalFields)
341  .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, options.reliabilityOptions.isEnabled)
342  .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, options.allowCongestionMarking);
343  }
344 }
345 
348 {
349  ndn::nfd::FaceStatus status;
350  copyFaceProperties(face, status);
351 
352  auto expirationTime = face.getExpirationTime();
353  if (expirationTime != time::steady_clock::TimePoint::max()) {
354  status.setExpirationPeriod(std::max(0_ms,
355  time::duration_cast<time::milliseconds>(expirationTime - now)));
356  }
357 
358  auto linkService = dynamic_cast<face::GenericLinkService*>(face.getLinkService());
359  if (linkService != nullptr) {
360  const auto& options = linkService->getOptions();
361  status.setBaseCongestionMarkingInterval(options.baseCongestionMarkingInterval)
362  .setDefaultCongestionThreshold(options.defaultCongestionThreshold);
363  }
364 
365  copyMtu(face, status);
366 
367  const auto& counters = face.getCounters();
368  status.setNInInterests(counters.nInInterests)
369  .setNOutInterests(counters.nOutInterests)
370  .setNInData(counters.nInData)
371  .setNOutData(counters.nOutData)
372  .setNInNacks(counters.nInNacks)
373  .setNOutNacks(counters.nOutNacks)
374  .setNInBytes(counters.nInBytes)
375  .setNOutBytes(counters.nOutBytes);
376 
377  return status;
378 }
379 
380 void
381 FaceManager::listFaces(ndn::mgmt::StatusDatasetContext& context)
382 {
383  auto now = time::steady_clock::now();
384  for (const auto& face : m_faceTable) {
385  ndn::nfd::FaceStatus status = makeFaceStatus(face, now);
386  context.append(status.wireEncode());
387  }
388  context.end();
389 }
390 
391 void
392 FaceManager::listChannels(ndn::mgmt::StatusDatasetContext& context)
393 {
394  auto factories = m_faceSystem.listProtocolFactories();
395  for (const auto* factory : factories) {
396  for (const auto& channel : factory->getChannels()) {
398  entry.setLocalUri(channel->getUri().toString());
399  context.append(entry.wireEncode());
400  }
401  }
402  context.end();
403 }
404 
405 static bool
406 matchFilter(const ndn::nfd::FaceQueryFilter& filter, const Face& face)
407 {
408  if (filter.hasFaceId() &&
409  filter.getFaceId() != static_cast<uint64_t>(face.getId())) {
410  return false;
411  }
412 
413  if (filter.hasUriScheme() &&
414  filter.getUriScheme() != face.getRemoteUri().getScheme() &&
415  filter.getUriScheme() != face.getLocalUri().getScheme()) {
416  return false;
417  }
418 
419  if (filter.hasRemoteUri() &&
420  filter.getRemoteUri() != face.getRemoteUri().toString()) {
421  return false;
422  }
423 
424  if (filter.hasLocalUri() &&
425  filter.getLocalUri() != face.getLocalUri().toString()) {
426  return false;
427  }
428 
429  if (filter.hasFaceScope() &&
430  filter.getFaceScope() != face.getScope()) {
431  return false;
432  }
433 
434  if (filter.hasFacePersistency() &&
435  filter.getFacePersistency() != face.getPersistency()) {
436  return false;
437  }
438 
439  if (filter.hasLinkType() &&
440  filter.getLinkType() != face.getLinkType()) {
441  return false;
442  }
443 
444  return true;
445 }
446 
447 void
448 FaceManager::queryFaces(const Interest& interest,
450 {
451  ndn::nfd::FaceQueryFilter faceFilter;
452  try {
453  faceFilter.wireDecode(interest.getName()[-1].blockFromValue());
454  }
455  catch (const tlv::Error& e) {
456  NFD_LOG_DEBUG("Malformed query filter: " << e.what());
457  return context.reject(ControlResponse(400, "Malformed filter"));
458  }
459 
460  auto now = time::steady_clock::now();
461  for (const auto& face : m_faceTable) {
462  if (matchFilter(faceFilter, face)) {
463  ndn::nfd::FaceStatus status = makeFaceStatus(face, now);
464  context.append(status.wireEncode());
465  }
466  }
467  context.end();
468 }
469 
470 void
471 FaceManager::notifyFaceEvent(const Face& face, ndn::nfd::FaceEventKind kind)
472 {
473  ndn::nfd::FaceEventNotification notification;
474  notification.setKind(kind);
475  copyFaceProperties(face, notification);
476 
477  m_postNotification(notification.wireEncode());
478 }
479 
480 void
481 FaceManager::connectFaceStateChangeSignal(const Face& face)
482 {
483  using face::FaceState;
484 
485  FaceId faceId = face.getId();
486  m_faceStateChangeConn[faceId] = face.afterStateChange.connect(
487  [this, faceId, &face] (FaceState oldState, FaceState newState) {
488  if (newState == FaceState::UP) {
489  notifyFaceEvent(face, ndn::nfd::FACE_EVENT_UP);
490  }
491  else if (newState == FaceState::DOWN) {
492  notifyFaceEvent(face, ndn::nfd::FACE_EVENT_DOWN);
493  }
494  else if (newState == FaceState::CLOSED) {
495  // cannot use face.getId() because it may already be reset to INVALID_FACEID
496  m_faceStateChangeConn.erase(faceId);
497  }
498  });
499 }
500 
501 } // namespace nfd
NFD_LOG_TRACE
#define NFD_LOG_TRACE
Definition: logger.hpp:37
ndn::nfd::FaceEventNotification::wireEncode
size_t wireEncode(EncodingImpl< TAG > &encoder) const
prepend FaceEventNotification to the encoder
Definition: face-event-notification.cpp:46
ndn::nfd::FaceStatus::setNInNacks
FaceStatus & setNInNacks(uint64_t nInNacks)
Definition: face-status.cpp:356
ndn::nfd::FACE_EVENT_DOWN
@ FACE_EVENT_DOWN
face went DOWN (from UP state)
Definition: nfd-constants.hpp:82
protocol-factory.hpp
nfd::face::GenericLinkService::getOptions
const Options & getOptions() const
get Options used by GenericLinkService
Definition: generic-link-service.hpp:315
nfd::face::Face::getCounters
const FaceCounters & getCounters() const
Definition: face.hpp:292
nfd::makeUpdateFaceResponse
static ControlParameters makeUpdateFaceResponse(const Face &face)
Definition: face-manager.cpp:167
ndn::mgmt::StatusDatasetContext::reject
void reject(const ControlResponse &resp=ControlResponse().setCode(400))
declare the non-existence of a response
Definition: status-dataset-context.cpp:108
ndn::nfd::FaceQueryFilter::getFaceId
uint64_t getFaceId() const
Definition: face-query-filter.hpp:79
ndn::nfd::FaceStatus::setNOutData
FaceStatus & setNOutData(uint64_t nOutData)
Definition: face-status.cpp:372
ndn::nfd::ControlParameters::setDefaultCongestionThreshold
ControlParameters & setDefaultCongestionThreshold(uint64_t threshold)
set default congestion threshold (measured in bytes)
Definition: control-parameters.hpp:544
nfd::face::MTU_UNLIMITED
const ssize_t MTU_UNLIMITED
indicates the transport has no limit on payload size
Definition: transport.hpp:91
face-status.hpp
ndn::nfd::FaceEventNotification::setKind
FaceEventNotification & setKind(FaceEventKind kind)
Definition: face-event-notification.cpp:159
ndn::mgmt::StatusDatasetContext::append
void append(const Block &block)
append a Block to the response
Definition: status-dataset-context.cpp:69
ndn::tlv::Interest
@ Interest
Definition: tlv.hpp:65
ndn::nfd::ControlParameters::setFacePersistency
ControlParameters & setFacePersistency(FacePersistency persistency)
Definition: control-parameters.hpp:480
ndn::nfd::FaceQueryFilter::getUriScheme
const std::string & getUriScheme() const
Definition: face-query-filter.hpp:98
nfd::face::Face::getTransport
Transport * getTransport() const
Definition: face.hpp:190
ndn::nfd::ChannelStatus::wireEncode
size_t wireEncode(EncodingImpl< TAG > &encoder) const
Definition: channel-status.cpp:41
ndn::FaceUri
represents the underlying protocol and address used by a Face
Definition: face-uri.hpp:45
nfd::FaceManager
Implements the Face Management of NFD Management Protocol.
Definition: face-manager.hpp:40
ndn::nfd::FaceQueryFilter::wireDecode
void wireDecode(const Block &wire)
decode FaceQueryFilter
Definition: face-query-filter.cpp:105
ndn::SimpleTag
provides a tag type for simple types
Definition: tag.hpp:59
ndn::nfd::FaceQueryFilter::getFaceScope
FaceScope getFaceScope() const
Definition: face-query-filter.hpp:155
ndn::nfd::FaceQueryFilter::hasFaceScope
bool hasFaceScope() const
Definition: face-query-filter.hpp:149
ndn::nfd::FACE_EVENT_DESTROYED
@ FACE_EVENT_DESTROYED
face was destroyed
Definition: nfd-constants.hpp:80
ndn::nfd::FaceQueryFilter::hasLinkType
bool hasLinkType() const
Definition: face-query-filter.hpp:187
nfd::face::FaceSystem
entry point of the face system
Definition: face-system.hpp:52
ndn::time::steady_clock::now
static time_point now() noexcept
Definition: time.cpp:80
nfd::face::FaceSystem::getFactoryByScheme
ProtocolFactory * getFactoryByScheme(const std::string &scheme)
Definition: face-system.cpp:82
ndn::mgmt::CommandContinuation
std::function< void(const ControlResponse &resp)> CommandContinuation
a function to be called after ControlCommandHandler completes
Definition: dispatcher.hpp:95
ndn::nfd::BIT_CONGESTION_MARKING_ENABLED
@ BIT_CONGESTION_MARKING_ENABLED
whether congestion detection and marking is enabled on a face
Definition: nfd-constants.hpp:72
ndn::nfd::ChannelStatus
represents an item in NFD Channel dataset
Definition: channel-status.hpp:36
nfd::face::FaceState
TransportState FaceState
indicates the state of a face
Definition: face.hpp:39
ndn::nfd::ControlResponse
mgmt::ControlResponse ControlResponse
Definition: control-response.hpp:30
nfd::ManagerBase::registerStatusDatasetHandler
void registerStatusDatasetHandler(const std::string &verb, const ndn::mgmt::StatusDatasetHandler &handler)
Definition: manager-base.cpp:47
ndn::nfd::FaceStatus::setNInBytes
FaceStatus & setNInBytes(uint64_t nInBytes)
Definition: face-status.cpp:388
nfd::face::FaceSystem::listProtocolFactories
std::set< const ProtocolFactory * > listProtocolFactories() const
Definition: face-system.cpp:65
ndn::nfd::ControlParameters::hasLocalUri
bool hasLocalUri() const
Definition: control-parameters.hpp:197
ndn::FaceUri::toString
std::string toString() const
write as a string
Definition: face-uri.cpp:188
face-table.hpp
ndn::nfd::FaceStatus::setDefaultCongestionThreshold
FaceStatus & setDefaultCongestionThreshold(uint64_t threshold)
set default congestion threshold (measured in bytes)
Definition: face-status.cpp:308
face-query-filter.hpp
ndn::nfd::ControlParameters::hasFlagBit
bool hasFlagBit(size_t bit) const
Definition: control-parameters.cpp:244
channel-status.hpp
nfd::makeFaceStatus
static ndn::nfd::FaceStatus makeFaceStatus(const Face &face, const time::steady_clock::TimePoint &now)
Definition: face-manager.cpp:347
nfd::FaceTable::afterAdd
signal::Signal< FaceTable, Face > afterAdd
Fires immediately after a face is added.
Definition: face-table.hpp:85
nfd::face::Face::getLocalUri
FaceUri getLocalUri() const
Definition: face.hpp:238
ndn::nfd::ControlParameters::setFlagBit
ControlParameters & setFlagBit(size_t bit, bool value, bool wantMask=true)
set a bit in Flags
Definition: control-parameters.cpp:272
ndn::nfd::FaceQueryFilter::hasFacePersistency
bool hasFacePersistency() const
Definition: face-query-filter.hpp:168
nfd::copyMtu
static void copyMtu(const Face &face, T &to)
Definition: face-manager.cpp:153
ndn::nfd::FaceEventNotification
represents a Face status change notification
Definition: face-event-notification.hpp:36
nfd::face::Face::close
void close()
request the face to be closed
Definition: face.hpp:286
ndn::nfd::ControlParameters::setUri
ControlParameters & setUri(const std::string &uri)
Definition: control-parameters.hpp:180
ndn::nfd::FaceStatus::setExpirationPeriod
FaceStatus & setExpirationPeriod(time::milliseconds expirationPeriod)
Definition: face-status.cpp:276
ndn::nfd::FaceQueryFilter::hasLocalUri
bool hasLocalUri() const
Definition: face-query-filter.hpp:130
ndn::nfd::FaceQueryFilter::hasUriScheme
bool hasUriScheme() const
Definition: face-query-filter.hpp:92
nfd
Copyright (c) 2011-2015 Regents of the University of California.
Definition: ndn-common.hpp:40
nfd::face::Face::getRemoteUri
FaceUri getRemoteUri() const
Definition: face.hpp:244
nfd::face::INVALID_FACEID
const FaceId INVALID_FACEID
indicates an invalid FaceId
Definition: face-common.hpp:47
nfd::face::Face::getPersistency
ndn::nfd::FacePersistency getPersistency() const
Definition: face.hpp:256
ndn::nfd::FaceQueryFilter::hasRemoteUri
bool hasRemoteUri() const
Definition: face-query-filter.hpp:111
ndn::nfd::FaceQueryFilter::getLocalUri
const std::string & getLocalUri() const
Definition: face-query-filter.hpp:136
ndn::nfd::ControlParameters::getLocalUri
const std::string & getLocalUri() const
Definition: control-parameters.hpp:203
nfd::face::Face::getExpirationTime
time::steady_clock::TimePoint getExpirationTime() const
Definition: face.hpp:280
nfd::face::FaceId
uint64_t FaceId
Identifies a face.
Definition: face-common.hpp:44
nfd::face::Face
generalization of a network interface
Definition: face.hpp:53
nfd::ManagerBase::registerNotificationStream
ndn::mgmt::PostNotification registerNotificationStream(const std::string &verb)
Definition: manager-base.cpp:56
ndn::nfd::ControlParameters::getBaseCongestionMarkingInterval
time::nanoseconds getBaseCongestionMarkingInterval() const
Definition: control-parameters.hpp:503
ndn::nfd::FACE_EVENT_UP
@ FACE_EVENT_UP
face went UP (from DOWN state)
Definition: nfd-constants.hpp:81
nfd::face::GenericLinkService::Options::allowLocalFields
bool allowLocalFields
enables encoding of IncomingFaceId, and decoding of NextHopFaceId and CachePolicy
Definition: generic-link-service.hpp:110
ndn::mgmt::StatusDatasetContext
provides a context for generating response to a StatusDataset request
Definition: status-dataset-context.hpp:37
ndn::nfd::FaceStatus::setNInInterests
FaceStatus & setNInInterests(uint64_t nInInterests)
Definition: face-status.cpp:340
ndn::nfd::ControlParameters::getUri
const std::string & getUri() const
Definition: control-parameters.hpp:173
ndn::nfd::BIT_LP_RELIABILITY_ENABLED
@ BIT_LP_RELIABILITY_ENABLED
whether the link reliability feature is enabled on a face
Definition: nfd-constants.hpp:71
ndn::nfd::ControlParameters::setFaceId
ControlParameters & setFaceId(uint64_t faceId)
Definition: control-parameters.hpp:150
ndn::tlv::nfd::ControlParameters
@ ControlParameters
Definition: tlv-nfd.hpp:35
nfd::matchFilter
static bool matchFilter(const ndn::nfd::FaceQueryFilter &filter, const Face &face)
Definition: face-manager.cpp:406
ndn::nfd::ControlParameters::getMtu
uint64_t getMtu() const
get MTU (measured in bytes)
Definition: control-parameters.hpp:571
nfd::makeCreateFaceResponse
static ControlParameters makeCreateFaceResponse(const Face &face)
Definition: face-manager.cpp:187
nfd::face::Face::getLinkService
LinkService * getLinkService() const
Definition: face.hpp:184
ndn::nfd::FaceStatus::setBaseCongestionMarkingInterval
FaceStatus & setBaseCongestionMarkingInterval(time::nanoseconds interval)
Definition: face-status.cpp:292
ndn::nfd::ControlParameters::hasMtu
bool hasMtu() const
Definition: control-parameters.hpp:561
nfd::face::Face::getId
FaceId getId() const
Definition: face.hpp:214
ndn::nfd::FaceQueryFilter::getLinkType
LinkType getLinkType() const
Definition: face-query-filter.hpp:193
ndn::nfd::ChannelStatus::setLocalUri
ChannelStatus & setLocalUri(const std::string localUri)
Definition: channel-status.cpp:89
ndn::nfd::ControlParameters::getFlagBit
bool getFlagBit(size_t bit) const
Definition: control-parameters.cpp:258
ndn::nfd::FaceQueryFilter::getFacePersistency
FacePersistency getFacePersistency() const
Definition: face-query-filter.hpp:174
nfd::copyFaceProperties
static void copyFaceProperties(const Face &face, T &to)
Definition: face-manager.cpp:328
nfd::FaceTable::get
Face * get(FaceId id) const
get face by FaceId
Definition: face-table.cpp:45
NFD_LOG_DEBUG
#define NFD_LOG_DEBUG
Definition: logger.hpp:38
ndn::nfd::FaceQueryFilter::getRemoteUri
const std::string & getRemoteUri() const
Definition: face-query-filter.hpp:117
ndn::time::steady_clock::TimePoint
time_point TimePoint
Definition: time.hpp:225
ndn::nfd::FaceStatus::setNOutInterests
FaceStatus & setNOutInterests(uint64_t nOutInterests)
Definition: face-status.cpp:364
ndn::nfd::FaceStatus
represents an item in NFD Face dataset
Definition: face-status.hpp:37
Face
ndn Face
Definition: face-impl.hpp:41
nfd::ManagerBase
A collection of common functions shared by all NFD managers, such as communicating with the dispatche...
Definition: manager-base.hpp:48
ndn::nfd::ControlParameters
represents parameters in a ControlCommand request or response
Definition: control-parameters.hpp:82
nfd::FaceTable::add
void add(shared_ptr< Face > face)
add a face
Definition: face-table.cpp:58
ndn::nfd::ControlParameters::hasBaseCongestionMarkingInterval
bool hasBaseCongestionMarkingInterval() const
Definition: control-parameters.hpp:497
ndn::nfd::FaceEventKind
FaceEventKind
Definition: nfd-constants.hpp:77
nfd::face::GenericLinkService
GenericLinkService is a LinkService that implements the NDNLPv2 protocol.
Definition: generic-link-service.hpp:96
ndn::nfd::FACE_EVENT_CREATED
@ FACE_EVENT_CREATED
face was created
Definition: nfd-constants.hpp:79
ndn::MAX_NDN_PACKET_SIZE
const size_t MAX_NDN_PACKET_SIZE
practical limit of network layer packet size
Definition: tlv.hpp:41
nfd::face::Face::getScope
ndn::nfd::FaceScope getScope() const
Definition: face.hpp:250
ndn::nfd::FACE_SCOPE_LOCAL
@ FACE_SCOPE_LOCAL
face is local
Definition: nfd-constants.hpp:37
ndn::nfd::ControlParameters::setLocalUri
ControlParameters & setLocalUri(const std::string &localUri)
Definition: control-parameters.hpp:210
face-event-notification.hpp
ndn::nfd::ControlParameters::hasDefaultCongestionThreshold
bool hasDefaultCongestionThreshold() const
Definition: control-parameters.hpp:527
ndn::mgmt::Dispatcher
represents a dispatcher on server side of NFD Management protocol
Definition: dispatcher.hpp:131
ndn::mgmt::StatusDatasetContext::end
void end()
end the response successfully after appending zero or more blocks
Definition: status-dataset-context.cpp:95
ndn::FaceUri::isCanonical
bool isCanonical() const
determine whether this FaceUri is in canonical form
Definition: face-uri.cpp:620
ndn::nfd::FaceStatus::wireEncode
size_t wireEncode(EncodingImpl< TAG > &encoder) const
prepend FaceStatus to the encoder
Definition: face-status.cpp:53
face-manager.hpp
nfd::FaceTable::beforeRemove
signal::Signal< FaceTable, Face > beforeRemove
Fires immediately before a face is removed.
Definition: face-table.hpp:91
tags.hpp
nfd::face::Face::getLinkType
ndn::nfd::LinkType getLinkType() const
Definition: face.hpp:268
ndn::nfd::BIT_LOCAL_FIELDS_ENABLED
@ BIT_LOCAL_FIELDS_ENABLED
whether local fields are enabled on a face
Definition: nfd-constants.hpp:70
NFD_LOG_ERROR
#define NFD_LOG_ERROR
Definition: logger.hpp:41
nfd::CommandAuthenticator
Provides ControlCommand authorization according to NFD configuration file.
Definition: command-authenticator.hpp:46
ndn::nfd::FaceStatus::setNInData
FaceStatus & setNInData(uint64_t nInData)
Definition: face-status.cpp:348
ndn::nfd::ControlParameters::getFacePersistency
FacePersistency getFacePersistency() const
Definition: control-parameters.hpp:473
nfd::FaceManager::FaceManager
FaceManager(FaceSystem &faceSystem, Dispatcher &dispatcher, CommandAuthenticator &authenticator)
Definition: face-manager.cpp:43
ndn::nfd::ControlParameters::getDefaultCongestionThreshold
uint64_t getDefaultCongestionThreshold() const
get default congestion threshold (measured in bytes)
Definition: control-parameters.hpp:535
ndn::FaceUri::parse
NDN_CXX_NODISCARD bool parse(const std::string &uri)
exception-safe parsing
Definition: face-uri.cpp:63
ndn::FaceUri::getScheme
const std::string & getScheme() const
get scheme (protocol)
Definition: face-uri.hpp:109
ndn::nfd::FaceQueryFilter::hasFaceId
bool hasFaceId() const
Definition: face-query-filter.hpp:73
ndn::nfd::FaceQueryFilter
represents Face Query Filter
Definition: face-query-filter.hpp:37
NFD_LOG_INIT
#define NFD_LOG_INIT(name)
Definition: logger.hpp:31
ndn::nfd::FaceStatus::setNOutBytes
FaceStatus & setNOutBytes(uint64_t nOutBytes)
Definition: face-status.cpp:396
logger.hpp
ndn::nfd::FaceStatus::setNOutNacks
FaceStatus & setNOutNacks(uint64_t nOutNacks)
Definition: face-status.cpp:380
nfd::updateLinkServiceOptions
static void updateLinkServiceOptions(Face &face, const ControlParameters &parameters)
Definition: face-manager.cpp:224
ndn::nfd::ControlParameters::setBaseCongestionMarkingInterval
ControlParameters & setBaseCongestionMarkingInterval(time::nanoseconds interval)
Definition: control-parameters.hpp:510