diff --git a/tests/daemon/face/transport-test-common.hpp b/tests/daemon/face/transport-test-common.hpp
index 16b9038..fa3e4bd 100644
--- a/tests/daemon/face/transport-test-common.hpp
+++ b/tests/daemon/face/transport-test-common.hpp
@@ -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-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -28,12 +28,13 @@
 
 #include "face/transport.hpp"
 #include "tests/test-common.hpp"
+#include "test-ip.hpp"
 
 namespace nfd {
 namespace face {
 namespace tests {
 
-/** \brief check a transport has all its static properties set after initialization
+/** \brief Check that a transport has all its static properties set after initialization
  *
  *  This check shall be inserted to the StaticProperties test case for each transport,
  *  in addition to checking the values of properties.
@@ -51,8 +52,66 @@
   BOOST_CHECK_NE(transport.getMtu(), MTU_INVALID);
 }
 
+/** \brief Generic wrapper for transport fixtures that require an IP address
+ */
+template<typename TransportFixtureBase,
+         AddressFamily AF = AddressFamily::Any,
+         AddressScope AS = AddressScope::Any,
+         MulticastInterface MC = MulticastInterface::Any>
+class IpTransportFixture : public TransportFixtureBase
+{
+protected:
+  IpTransportFixture()
+  {
+    BOOST_TEST_MESSAGE("Testing with AddressFamily=" << AF <<
+                       " AddressScope=" << AS <<
+                       " MulticastInterface=" << MC <<
+                       " TestIp=" << address);
+  }
+
+  std::pair<bool, std::string>
+  checkPreconditions() const
+  {
+    return {!address.is_unspecified(), "no appropriate IP address available"};
+  }
+
+  template<typename... Args>
+  void
+  initialize(Args&&... args)
+  {
+    TransportFixtureBase::initialize(address, std::forward<Args>(args)...);
+  }
+
+protected:
+  static constexpr AddressFamily addressFamily = AF;
+  static constexpr AddressScope addressScope = AS;
+  const boost::asio::ip::address address = getTestIp(AF, AS, MC);
+};
+
 } // namespace tests
 } // namespace face
 } // namespace nfd
 
+#define GENERATE_IP_TRANSPORT_FIXTURE_INSTANTIATIONS(F) \
+  IpTransportFixture<F, AddressFamily::V4, AddressScope::Loopback>,  \
+  IpTransportFixture<F, AddressFamily::V4, AddressScope::Global>,    \
+  IpTransportFixture<F, AddressFamily::V6, AddressScope::Loopback>,  \
+  IpTransportFixture<F, AddressFamily::V6, AddressScope::LinkLocal>, \
+  IpTransportFixture<F, AddressFamily::V6, AddressScope::Global>
+
+#define TRANSPORT_TEST_CHECK_PRECONDITIONS() \
+  do { \
+    auto result = this->checkPreconditions(); \
+    if (!result.first) { \
+      BOOST_WARN_MESSAGE(false, "skipping test case: " << result.second); \
+      return; \
+    } \
+  } while (false)
+
+#define TRANSPORT_TEST_INIT(...) \
+  do { \
+    TRANSPORT_TEST_CHECK_PRECONDITIONS(); \
+    this->initialize(__VA_ARGS__); \
+  } while (false)
+
 #endif // NFD_TESTS_DAEMON_FACE_TRANSPORT_TEST_COMMON_HPP
