model+helper+tests: Create an ndnSIM-specific transport for the NFD face system

This commit replaces the previous hack of implementing NS-3's inter-node
communication using the LinkService abstraction of the NFD face system.
The new implementation has higher memory overhead, but allows simulation
of any LinkService versions, including GenericLinkService that
implements NDNLPv2 protocol (i.e., fragmentation, network NACKs, etc.).

Change-Id: I3d16bcf29f4858049d1040a3e421e1c7151b3ba2
Refs: #3871, #3873
diff --git a/model/ndn-block-header.hpp b/model/ndn-block-header.hpp
new file mode 100644
index 0000000..f2c73ab
--- /dev/null
+++ b/model/ndn-block-header.hpp
@@ -0,0 +1,69 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2011-2015  Regents of the University of California.
+ *
+ * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
+ * contributors.
+ *
+ * ndnSIM 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.
+ *
+ * ndnSIM 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
+ * ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+#ifndef NDNSIM_NDN_BLOCK_HEADER_HPP
+#define NDNSIM_NDN_BLOCK_HEADER_HPP
+
+#include "ns3/header.h"
+
+#include "ndn-common.hpp"
+
+namespace nfdFace = nfd::face;
+
+namespace ns3 {
+namespace ndn {
+
+class BlockHeader : public Header {
+public:
+  static ns3::TypeId
+  GetTypeId();
+
+  virtual TypeId
+  GetInstanceTypeId(void) const;
+
+  BlockHeader();
+
+  BlockHeader(const nfdFace::Transport::Packet& packet);
+
+  virtual uint32_t
+  GetSerializedSize(void) const;
+
+  virtual void
+  Serialize(ns3::Buffer::Iterator start) const;
+
+  virtual uint32_t
+  Deserialize(ns3::Buffer::Iterator start);
+
+  virtual void
+  Print(std::ostream& os) const;
+
+  Block&
+  getBlock();
+
+  const Block&
+  getBlock() const;
+
+private:
+  Block m_block;
+};
+
+} // namespace ndn
+} // namespace ns3
+
+#endif // NDNSIM_NDN_BLOCK_HEADER_HPP