diff --git a/daemon/face/generic-link-service.cpp b/daemon/face/generic-link-service.cpp
index e2f7e0e..55ec6ee 100644
--- a/daemon/face/generic-link-service.cpp
+++ b/daemon/face/generic-link-service.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2019,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -34,6 +34,10 @@
 
 NFD_LOG_INIT(GenericLinkService);
 
+constexpr size_t CONGESTION_MARK_SIZE = tlv::sizeOfVarNumber(lp::tlv::CongestionMark) + // type
+                                        tlv::sizeOfVarNumber(sizeof(uint64_t)) +        // length
+                                        tlv::sizeOfNonNegativeInteger(UINT64_MAX);      // value
+
 constexpr uint32_t DEFAULT_CONGESTION_THRESHOLD_DIVISOR = 2;
 
 GenericLinkService::GenericLinkService(const GenericLinkService::Options& options)
diff --git a/daemon/face/generic-link-service.hpp b/daemon/face/generic-link-service.hpp
index 9bbe1b8..c440932 100644
--- a/daemon/face/generic-link-service.hpp
+++ b/daemon/face/generic-link-service.hpp
@@ -288,9 +288,6 @@
   lp::Sequence m_lastSeqNo;
 
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
-  /// CongestionMark TLV-TYPE (3 octets) + CongestionMark TLV-LENGTH (1 octet) + sizeof(uint64_t)
-  static constexpr size_t CONGESTION_MARK_SIZE = 3 + 1 + sizeof(uint64_t);
-
   /// Time to mark next packet due to send queue congestion
   time::steady_clock::TimePoint m_nextMarkTime;
   /// Time last packet was marked
diff --git a/tests/daemon/face/dummy-face.cpp b/tests/daemon/face/dummy-face.cpp
index 367afed..9e7e0b6 100644
--- a/tests/daemon/face/dummy-face.cpp
+++ b/tests/daemon/face/dummy-face.cpp
@@ -24,109 +24,54 @@
  */
 
 #include "dummy-face.hpp"
+#include "dummy-link-service.hpp"
 #include "dummy-transport.hpp"
 
 namespace nfd {
 namespace face {
 namespace tests {
 
-class DummyFace::LinkService : public face::LinkService
-{
-public:
-  void
-  receiveInterest(const Interest& interest)
-  {
-    this->face::LinkService::receiveInterest(interest);
-  }
-
-  void
-  receiveData(const Data& data)
-  {
-    this->face::LinkService::receiveData(data);
-  }
-
-  void
-  receiveNack(const lp::Nack& nack)
-  {
-    this->face::LinkService::receiveNack(nack);
-  }
-
-  signal::Signal<LinkService, uint32_t> afterSend;
-
-private:
-  void
-  doSendInterest(const Interest& interest) final
-  {
-    this->sentInterests.push_back(interest);
-    this->afterSend(tlv::Interest);
-  }
-
-  void
-  doSendData(const Data& data) final
-  {
-    this->sentData.push_back(data);
-    this->afterSend(tlv::Data);
-  }
-
-  void
-  doSendNack(const lp::Nack& nack) final
-  {
-    this->sentNacks.push_back(nack);
-    this->afterSend(lp::tlv::Nack);
-  }
-
-  void
-  doReceivePacket(Transport::Packet&&) final
-  {
-    BOOST_ASSERT(false);
-  }
-
-public:
-  std::vector<Interest> sentInterests;
-  std::vector<Data> sentData;
-  std::vector<lp::Nack> sentNacks;
-};
-
 DummyFace::DummyFace(const std::string& localUri, const std::string& remoteUri,
                      ndn::nfd::FaceScope scope, ndn::nfd::FacePersistency persistency,
                      ndn::nfd::LinkType linkType)
-  : Face(make_unique<LinkService>(),
+  : Face(make_unique<DummyLinkService>(),
          make_unique<DummyTransport>(localUri, remoteUri, scope, persistency, linkType))
-  , afterSend(this->getLinkServiceInternal()->afterSend)
-  , sentInterests(this->getLinkServiceInternal()->sentInterests)
-  , sentData(this->getLinkServiceInternal()->sentData)
-  , sentNacks(this->getLinkServiceInternal()->sentNacks)
+  , afterSend(getDummyLinkService()->afterSend)
+  , sentInterests(getDummyLinkService()->sentInterests)
+  , sentData(getDummyLinkService()->sentData)
+  , sentNacks(getDummyLinkService()->sentNacks)
 {
+  getDummyLinkService()->setPacketLogging(LogSentPackets);
 }
 
 void
 DummyFace::setState(FaceState state)
 {
-  static_cast<DummyTransport*>(this->getTransport())->setState(state);
+  static_cast<DummyTransport*>(getTransport())->setState(state);
 }
 
 void
 DummyFace::receiveInterest(const Interest& interest)
 {
-  this->getLinkServiceInternal()->receiveInterest(interest);
+  getDummyLinkService()->receiveInterest(interest);
 }
 
 void
 DummyFace::receiveData(const Data& data)
 {
-  this->getLinkServiceInternal()->receiveData(data);
+  getDummyLinkService()->receiveData(data);
 }
 
 void
 DummyFace::receiveNack(const lp::Nack& nack)
 {
-  this->getLinkServiceInternal()->receiveNack(nack);
+  getDummyLinkService()->receiveNack(nack);
 }
 
-DummyFace::LinkService*
-DummyFace::getLinkServiceInternal()
+DummyLinkService*
+DummyFace::getDummyLinkService() const
 {
-  return static_cast<LinkService*>(this->getLinkService());
+  return static_cast<DummyLinkService*>(getLinkService());
 }
 
 } // namespace tests
diff --git a/tests/daemon/face/dummy-face.hpp b/tests/daemon/face/dummy-face.hpp
index 93bcd48..387206a 100644
--- a/tests/daemon/face/dummy-face.hpp
+++ b/tests/daemon/face/dummy-face.hpp
@@ -32,7 +32,9 @@
 namespace face {
 namespace tests {
 
-/** \brief a Face for unit testing
+class DummyLinkService;
+
+/** \brief A Face for unit testing.
  *
  *  The DummyFace has no underlying transport, but allows observing outgoing packets
  *  and injecting incoming packets at network layer.
@@ -45,8 +47,7 @@
 class DummyFace : public Face
 {
 public:
-  class LinkService;
-
+  explicit
   DummyFace(const std::string& localUri = "dummy://", const std::string& remoteUri = "dummy://",
             ndn::nfd::FaceScope scope = ndn::nfd::FACE_SCOPE_NON_LOCAL,
             ndn::nfd::FacePersistency persistency = ndn::nfd::FACE_PERSISTENCY_PERSISTENT,
@@ -73,17 +74,17 @@
   void
   receiveNack(const lp::Nack& nack);
 
-  /** \brief signals after any network-layer packet is sent
+  /** \brief Emitted after a network-layer packet is sent.
    *
-   *  The network-layer packet type is indicated as an argument,
-   *  which is either of tlv::Interest, tlv::Data, or lp::tlv::Nack.
-   *  The callback may retrieve the packet from sentInterests.back(), sentData.back(), or sentNacks.back().
+   *  The packet type is reported via the argument, whose value will be one of
+   *  tlv::Interest, tlv::Data, or lp::tlv::Nack. Signal handlers may retrieve
+   *  the packet via `sentInterests.back()`, `sentData.back()`, or `sentNacks.back()`.
    */
-  signal::Signal<LinkService, uint32_t>& afterSend;
+  signal::Signal<DummyLinkService, uint32_t>& afterSend;
 
 private:
-  LinkService*
-  getLinkServiceInternal();
+  DummyLinkService*
+  getDummyLinkService() const;
 
 public:
   std::vector<Interest>& sentInterests;
diff --git a/tests/daemon/face/dummy-receive-link-service.hpp b/tests/daemon/face/dummy-link-service.cpp
similarity index 65%
rename from tests/daemon/face/dummy-receive-link-service.hpp
rename to tests/daemon/face/dummy-link-service.cpp
index 56d72ce..2c92a52 100644
--- a/tests/daemon/face/dummy-receive-link-service.hpp
+++ b/tests/daemon/face/dummy-link-service.cpp
@@ -23,51 +23,46 @@
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NFD_TESTS_DAEMON_FACE_DUMMY_RECEIVE_LINK_SERVICE_HPP
-#define NFD_TESTS_DAEMON_FACE_DUMMY_RECEIVE_LINK_SERVICE_HPP
-
-#include "face/link-service.hpp"
+#include "dummy-link-service.hpp"
 
 namespace nfd {
 namespace face {
 namespace tests {
 
-/** \brief A dummy LinkService that logs all received packets, for Transport testing.
- *  \warning This LinkService does not allow sending.
- */
-class DummyReceiveLinkService final : public LinkService
+void
+DummyLinkService::doSendInterest(const Interest& interest)
 {
-private:
-  void
-  doSendInterest(const Interest&) final
-  {
-    BOOST_ASSERT(false);
-  }
+  if (m_loggingFlags & LogSentInterests)
+    sentInterests.push_back(interest);
 
-  void
-  doSendData(const Data&) final
-  {
-    BOOST_ASSERT(false);
-  }
+  afterSend(tlv::Interest);
+}
 
-  void
-  doSendNack(const lp::Nack&) final
-  {
-    BOOST_ASSERT(false);
-  }
+void
+DummyLinkService::doSendData(const Data& data)
+{
+  if (m_loggingFlags & LogSentData)
+    sentData.push_back(data);
 
-  void
-  doReceivePacket(Transport::Packet&& packet) final
-  {
+  afterSend(tlv::Data);
+}
+
+void
+DummyLinkService::doSendNack(const lp::Nack& nack)
+{
+  if (m_loggingFlags & LogSentNacks)
+    sentNacks.push_back(nack);
+
+  afterSend(lp::tlv::Nack);
+}
+
+void
+DummyLinkService::doReceivePacket(Transport::Packet&& packet)
+{
+  if (m_loggingFlags & LogReceivedPackets)
     receivedPackets.push_back(std::move(packet));
-  }
-
-public:
-  std::vector<Transport::Packet> receivedPackets;
-};
+}
 
 } // namespace tests
 } // namespace face
 } // namespace nfd
-
-#endif // NFD_TESTS_DAEMON_FACE_DUMMY_RECEIVE_LINK_SERVICE_HPP
diff --git a/tests/daemon/face/dummy-link-service.hpp b/tests/daemon/face/dummy-link-service.hpp
new file mode 100644
index 0000000..3717336
--- /dev/null
+++ b/tests/daemon/face/dummy-link-service.hpp
@@ -0,0 +1,95 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014-2019,  Regents of the University of California,
+ *                           Arizona Board of Regents,
+ *                           Colorado State University,
+ *                           University Pierre & Marie Curie, Sorbonne University,
+ *                           Washington University in St. Louis,
+ *                           Beijing Institute of Technology,
+ *                           The University of Memphis.
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NFD_TESTS_DAEMON_FACE_DUMMY_LINK_SERVICE_HPP
+#define NFD_TESTS_DAEMON_FACE_DUMMY_LINK_SERVICE_HPP
+
+#include "face/link-service.hpp"
+
+namespace nfd {
+namespace face {
+namespace tests {
+
+enum PacketLoggingFlags : unsigned {
+  LogNothing          = 0,      ///< disable packet logging
+  LogSentInterests    = 1 << 0, ///< log sent Interest packets
+  LogSentData         = 1 << 1, ///< log sent Data packets
+  LogSentNacks        = 1 << 2, ///< log sent Nack packets
+  LogSentPackets      = LogSentInterests | LogSentData | LogSentNacks, ///< log all sent packets
+  LogReceivedPackets  = 1 << 3, ///< log all received packets (as Transport::Packet)
+  LogAllPackets       = LogSentPackets | LogReceivedPackets, ///< log all sent and received packets
+};
+
+/** \brief A dummy LinkService that logs all sent and received packets.
+ */
+class DummyLinkService final : public LinkService
+{
+public:
+  /** \brief Emitted after a network-layer packet is sent through this link service.
+   *
+   *  The packet type is reported via the argument, whose value will be one of
+   *  tlv::Interest, tlv::Data, or lp::tlv::Nack. Signal handlers may retrieve
+   *  the packet via `sentInterests.back()`, `sentData.back()`, or `sentNacks.back()`.
+   */
+  signal::Signal<DummyLinkService, uint32_t> afterSend;
+
+  using LinkService::receiveInterest;
+  using LinkService::receiveData;
+  using LinkService::receiveNack;
+
+  void
+  setPacketLogging(std::underlying_type_t<PacketLoggingFlags> flags)
+  {
+    m_loggingFlags = static_cast<PacketLoggingFlags>(flags);
+  }
+
+private:
+  void
+  doSendInterest(const Interest& interest) final;
+
+  void
+  doSendData(const Data& data) final;
+
+  void
+  doSendNack(const lp::Nack& nack) final;
+
+  void
+  doReceivePacket(Transport::Packet&& packet) final;
+
+public:
+  std::vector<Interest> sentInterests;
+  std::vector<Data> sentData;
+  std::vector<lp::Nack> sentNacks;
+  std::vector<Transport::Packet> receivedPackets;
+
+private:
+  PacketLoggingFlags m_loggingFlags = LogAllPackets;
+};
+
+} // namespace tests
+} // namespace face
+} // namespace nfd
+
+#endif // NFD_TESTS_DAEMON_FACE_DUMMY_LINK_SERVICE_HPP
diff --git a/tests/daemon/face/multicast-udp-transport-fixture.hpp b/tests/daemon/face/multicast-udp-transport-fixture.hpp
index 626c37a..cdcb26a 100644
--- a/tests/daemon/face/multicast-udp-transport-fixture.hpp
+++ b/tests/daemon/face/multicast-udp-transport-fixture.hpp
@@ -31,7 +31,7 @@
 
 #include "tests/test-common.hpp"
 #include "tests/daemon/limited-io.hpp"
-#include "dummy-receive-link-service.hpp"
+#include "tests/daemon/face/dummy-link-service.hpp"
 
 namespace nfd {
 namespace face {
@@ -78,12 +78,11 @@
     MulticastUdpTransport::openRxSocket(sockRx, remoteMcastEp, address);
     MulticastUdpTransport::openTxSocket(sockTx, udp::endpoint(address, txPort), nullptr, true);
 
-    face = make_unique<Face>(
-             make_unique<DummyReceiveLinkService>(),
-             make_unique<MulticastUdpTransport>(mcastEp, std::move(sockRx), std::move(sockTx),
-                                                ndn::nfd::LINK_TYPE_MULTI_ACCESS));
+    face = make_unique<Face>(make_unique<DummyLinkService>(),
+                             make_unique<MulticastUdpTransport>(mcastEp, std::move(sockRx), std::move(sockTx),
+                                                                ndn::nfd::LINK_TYPE_MULTI_ACCESS));
     transport = static_cast<MulticastUdpTransport*>(face->getTransport());
-    receivedPackets = &static_cast<DummyReceiveLinkService*>(face->getLinkService())->receivedPackets;
+    receivedPackets = &static_cast<DummyLinkService*>(face->getLinkService())->receivedPackets;
 
     BOOST_REQUIRE_EQUAL(transport->getState(), TransportState::UP);
   }
diff --git a/tests/daemon/face/tcp-transport-fixture.hpp b/tests/daemon/face/tcp-transport-fixture.hpp
index dd77a95..77208e5 100644
--- a/tests/daemon/face/tcp-transport-fixture.hpp
+++ b/tests/daemon/face/tcp-transport-fixture.hpp
@@ -31,7 +31,7 @@
 
 #include "tests/test-common.hpp"
 #include "tests/daemon/limited-io.hpp"
-#include "dummy-receive-link-service.hpp"
+#include "tests/daemon/face/dummy-link-service.hpp"
 
 namespace nfd {
 namespace face {
@@ -98,10 +98,10 @@
       scope = ndn::nfd::FACE_SCOPE_NON_LOCAL;
     }
 
-    face = make_unique<Face>(make_unique<DummyReceiveLinkService>(),
+    face = make_unique<Face>(make_unique<DummyLinkService>(),
                              make_unique<TcpTransport>(std::move(sock), persistency, scope));
     transport = static_cast<TcpTransport*>(face->getTransport());
-    receivedPackets = &static_cast<DummyReceiveLinkService*>(face->getLinkService())->receivedPackets;
+    receivedPackets = &static_cast<DummyLinkService*>(face->getLinkService())->receivedPackets;
 
     BOOST_REQUIRE_EQUAL(transport->getState(), TransportState::UP);
   }
diff --git a/tests/daemon/face/transport.t.cpp b/tests/daemon/face/transport.t.cpp
index fbe3ee5..348348d 100644
--- a/tests/daemon/face/transport.t.cpp
+++ b/tests/daemon/face/transport.t.cpp
@@ -28,8 +28,8 @@
 
 #include "tests/test-common.hpp"
 #include "tests/daemon/global-io-fixture.hpp"
-#include "dummy-receive-link-service.hpp"
-#include "dummy-transport.hpp"
+#include "tests/daemon/face/dummy-link-service.hpp"
+#include "tests/daemon/face/dummy-transport.hpp"
 
 #include <boost/mpl/fold.hpp>
 #include <boost/mpl/int.hpp>
@@ -193,10 +193,10 @@
   void
   initialize(unique_ptr<DummyTransport> t = make_unique<DummyTransport>())
   {
-    this->face = make_unique<nfd::Face>(make_unique<DummyReceiveLinkService>(), std::move(t));
+    this->face = make_unique<nfd::Face>(make_unique<DummyLinkService>(), std::move(t));
     this->transport = static_cast<DummyTransport*>(face->getTransport());
     this->sentPackets = &this->transport->sentPackets;
-    this->receivedPackets = &static_cast<DummyReceiveLinkService*>(face->getLinkService())->receivedPackets;
+    this->receivedPackets = &static_cast<DummyLinkService*>(face->getLinkService())->receivedPackets;
   }
 
 protected:
diff --git a/tests/daemon/face/unicast-udp-transport-fixture.hpp b/tests/daemon/face/unicast-udp-transport-fixture.hpp
index dcd99ef..f9c8728 100644
--- a/tests/daemon/face/unicast-udp-transport-fixture.hpp
+++ b/tests/daemon/face/unicast-udp-transport-fixture.hpp
@@ -31,7 +31,7 @@
 
 #include "tests/test-common.hpp"
 #include "tests/daemon/limited-io.hpp"
-#include "dummy-receive-link-service.hpp"
+#include "tests/daemon/face/dummy-link-service.hpp"
 
 namespace nfd {
 namespace face {
@@ -61,11 +61,10 @@
 
     remoteConnect(address);
 
-    face = make_unique<Face>(
-             make_unique<DummyReceiveLinkService>(),
-             make_unique<UnicastUdpTransport>(std::move(sock), persistency, 3_s));
+    face = make_unique<Face>(make_unique<DummyLinkService>(),
+                             make_unique<UnicastUdpTransport>(std::move(sock), persistency, 3_s));
     transport = static_cast<UnicastUdpTransport*>(face->getTransport());
-    receivedPackets = &static_cast<DummyReceiveLinkService*>(face->getLinkService())->receivedPackets;
+    receivedPackets = &static_cast<DummyLinkService*>(face->getLinkService())->receivedPackets;
 
     BOOST_REQUIRE_EQUAL(transport->getState(), TransportState::UP);
   }
diff --git a/tests/daemon/face/unix-stream-transport-fixture.hpp b/tests/daemon/face/unix-stream-transport-fixture.hpp
index 74c1b45..17202f6 100644
--- a/tests/daemon/face/unix-stream-transport-fixture.hpp
+++ b/tests/daemon/face/unix-stream-transport-fixture.hpp
@@ -31,7 +31,7 @@
 
 #include "tests/test-common.hpp"
 #include "tests/daemon/limited-io.hpp"
-#include "dummy-receive-link-service.hpp"
+#include "tests/daemon/face/dummy-link-service.hpp"
 
 #include <boost/filesystem.hpp>
 
@@ -112,10 +112,10 @@
     BOOST_REQUIRE_EQUAL(limitedIo.run(2, 1_s), LimitedIo::EXCEED_OPS);
 
     localEp = sock.local_endpoint();
-    face = make_unique<Face>(make_unique<DummyReceiveLinkService>(),
+    face = make_unique<Face>(make_unique<DummyLinkService>(),
                              make_unique<UnixStreamTransport>(std::move(sock)));
     transport = static_cast<UnixStreamTransport*>(face->getTransport());
-    receivedPackets = &static_cast<DummyReceiveLinkService*>(face->getLinkService())->receivedPackets;
+    receivedPackets = &static_cast<DummyLinkService*>(face->getLinkService())->receivedPackets;
 
     BOOST_REQUIRE_EQUAL(transport->getState(), TransportState::UP);
   }
diff --git a/tests/daemon/face/websocket-transport-fixture.hpp b/tests/daemon/face/websocket-transport-fixture.hpp
index 07763cd..bcf9cf9 100644
--- a/tests/daemon/face/websocket-transport-fixture.hpp
+++ b/tests/daemon/face/websocket-transport-fixture.hpp
@@ -31,7 +31,7 @@
 
 #include "tests/test-common.hpp"
 #include "tests/daemon/limited-io.hpp"
-#include "dummy-receive-link-service.hpp"
+#include "tests/daemon/face/dummy-link-service.hpp"
 
 namespace nfd {
 namespace face {
@@ -109,11 +109,10 @@
     BOOST_REQUIRE_EQUAL(limitedIo.run(2, // serverHandleOpen, clientHandleOpen
                                       1_s), LimitedIo::EXCEED_OPS);
 
-    face = make_unique<Face>(
-             make_unique<DummyReceiveLinkService>(),
-             make_unique<WebSocketTransport>(serverHdl, std::ref(server), pingInterval));
+    face = make_unique<Face>(make_unique<DummyLinkService>(),
+                             make_unique<WebSocketTransport>(serverHdl, std::ref(server), pingInterval));
     transport = static_cast<WebSocketTransport*>(face->getTransport());
-    serverReceivedPackets = &static_cast<DummyReceiveLinkService*>(face->getLinkService())->receivedPackets;
+    serverReceivedPackets = &static_cast<DummyLinkService*>(face->getLinkService())->receivedPackets;
 
     BOOST_REQUIRE_EQUAL(transport->getState(), TransportState::UP);
   }
