diff --git a/daemon/face/null-face.cpp b/daemon/face/null-face.cpp
index a793e3e..2ce5c98 100644
--- a/daemon/face/null-face.cpp
+++ b/daemon/face/null-face.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2015,  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,
@@ -24,19 +24,18 @@
  */
 
 #include "null-face.hpp"
-#include "generic-link-service.hpp"
+#include "null-link-service.hpp"
 #include "internal-transport.hpp"
 
 namespace nfd {
 namespace face {
 
-// FIB could restrict creating a nexthop record toward non-local face in /localhost namespace.
-// NullFace has scope=local to enable creating a "blackhole" FIB entry under /localhost.
-
 shared_ptr<Face>
 makeNullFace(const FaceUri& uri)
 {
-  return make_shared<Face>(make_unique<GenericLinkService>(),
+  // FIB could restrict creating a nexthop record toward a non-local face in /localhost namespace.
+  // Therefore, NullFace has scope=local to enable creating a "blackhole" FIB entry under /localhost.
+  return make_shared<Face>(make_unique<NullLinkService>(),
                            make_unique<InternalForwarderTransport>(uri, uri, ndn::nfd::FACE_SCOPE_LOCAL));
 }
 
diff --git a/daemon/face/null-link-service.hpp b/daemon/face/null-link-service.hpp
new file mode 100644
index 0000000..7a8e8ba
--- /dev/null
+++ b/daemon/face/null-link-service.hpp
@@ -0,0 +1,63 @@
+/* -*- 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_DAEMON_FACE_NULL_LINK_SERVICE_HPP
+#define NFD_DAEMON_FACE_NULL_LINK_SERVICE_HPP
+
+#include "link-service.hpp"
+
+namespace nfd {
+namespace face {
+
+/** \brief A LinkService that drops every packet.
+ */
+class NullLinkService final : public LinkService
+{
+private:
+  void
+  doSendInterest(const Interest&) final
+  {
+  }
+
+  void
+  doSendData(const Data&) final
+  {
+  }
+
+  void
+  doSendNack(const lp::Nack&) final
+  {
+  }
+
+  void
+  doReceivePacket(Transport::Packet&&) final
+  {
+  }
+};
+
+} // namespace face
+} // namespace nfd
+
+#endif // NFD_DAEMON_FACE_NULL_LINK_SERVICE_HPP
diff --git a/tests/daemon/face/dummy-receive-link-service.hpp b/tests/daemon/face/dummy-receive-link-service.hpp
index 389c0d9..56d72ce 100644
--- a/tests/daemon/face/dummy-receive-link-service.hpp
+++ b/tests/daemon/face/dummy-receive-link-service.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016,  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,
@@ -26,42 +26,40 @@
 #ifndef NFD_TESTS_DAEMON_FACE_DUMMY_RECEIVE_LINK_SERVICE_HPP
 #define NFD_TESTS_DAEMON_FACE_DUMMY_RECEIVE_LINK_SERVICE_HPP
 
-#include "core/common.hpp"
-
 #include "face/link-service.hpp"
 
 namespace nfd {
 namespace face {
 namespace tests {
 
-/** \brief a dummy LinkService that logs all received packets, for Transport testing
+/** \brief A dummy LinkService that logs all received packets, for Transport testing.
  *  \warning This LinkService does not allow sending.
  */
-class DummyReceiveLinkService : public LinkService
+class DummyReceiveLinkService final : public LinkService
 {
 private:
-  virtual void
-  doSendInterest(const Interest& interest) override
+  void
+  doSendInterest(const Interest&) final
   {
     BOOST_ASSERT(false);
   }
 
-  virtual void
-  doSendData(const Data& data) override
+  void
+  doSendData(const Data&) final
   {
     BOOST_ASSERT(false);
   }
 
-  virtual void
-  doSendNack(const lp::Nack& nack) override
+  void
+  doSendNack(const lp::Nack&) final
   {
     BOOST_ASSERT(false);
   }
 
-  virtual void
-  doReceivePacket(Transport::Packet&& packet) override
+  void
+  doReceivePacket(Transport::Packet&& packet) final
   {
-    receivedPackets.push_back(packet);
+    receivedPackets.push_back(std::move(packet));
   }
 
 public:
