NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.0: NDN, CCN, CCNx, content centric networks
API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ndn-ns3.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
20 #include "ndn-ns3.hpp"
21 
22 #include <ndn-cxx/encoding/block.hpp>
23 #include <ndn-cxx/interest.hpp>
24 #include <ndn-cxx/data.hpp>
25 
26 #include "ndn-header.hpp"
27 #include "../utils/ndn-ns3-packet-tag.hpp"
28 
29 namespace ns3 {
30 namespace ndn {
31 
32 template<class T>
33 std::shared_ptr<const T>
34 Convert::FromPacket(Ptr<Packet> packet)
35 {
36  PacketHeader<T> header;
37  packet->RemoveHeader(header);
38 
39  auto pkt = header.getPacket();
40  pkt->setTag(make_shared<Ns3PacketTag>(packet));
41 
42  return pkt;
43 }
44 
45 template std::shared_ptr<const Interest>
46 Convert::FromPacket<Interest>(Ptr<Packet> packet);
47 
48 template std::shared_ptr<const Data>
49 Convert::FromPacket<Data>(Ptr<Packet> packet);
50 
51 template<class T>
52 Ptr<Packet>
53 Convert::ToPacket(const T& pkt)
54 {
55  PacketHeader<T> header(pkt);
56 
57  Ptr<Packet> packet;
58 
59  auto tag = pkt.template getTag<Ns3PacketTag>();
60  if (tag != nullptr) {
61  packet = tag->getPacket()->Copy();
62  }
63  else {
64  packet = Create<Packet>();
65  }
66 
67  packet->AddHeader(header);
68  return packet;
69 }
70 
71 template Ptr<Packet>
72 Convert::ToPacket<Interest>(const Interest& packet);
73 
74 template Ptr<Packet>
75 Convert::ToPacket<Data>(const Data& packet);
76 
77 uint32_t
78 Convert::getPacketType(Ptr<const Packet> packet)
79 {
80  uint8_t type;
81  uint32_t nRead = packet->CopyData(&type, 1);
82  if (nRead != 1) {
83  throw ::ndn::tlv::Error("Unknown header");
84  }
85 
86  if (type == ::ndn::tlv::Interest || type == ::ndn::tlv::Data) {
87  return type;
88  }
89  else {
90  throw ::ndn::tlv::Error("Unknown header");
91  }
92 }
93 
94 } // namespace ndn
95 } // namespace ns3
static Ptr< Packet > ToPacket(const T &pkt)
Definition: ndn-ns3.cpp:53
shared_ptr< const Pkt > getPacket()
Definition: ndn-header.cpp:143
static std::shared_ptr< const T > FromPacket(Ptr< Packet > packet)
Definition: ndn-ns3.cpp:34
static uint32_t getPacketType(Ptr< const Packet > packet)
Definition: ndn-ns3.cpp:78