diff --git a/samples/main-packet-printer.cc b/samples/main-packet-printer.cc index c840a13f0..f056e523b 100644 --- a/samples/main-packet-printer.cc +++ b/samples/main-packet-printer.cc @@ -49,7 +49,7 @@ void DefaultPrint (void) { // We create a packet with 1000 bytes of zero payload // and add 3 headers to this packet. - Packet p (1000); + Ptr p = Create (1000); Ipv4Header ipv4; UdpHeader udp; ipv4.SetSource (Ipv4Address ("192.168.0.1")); @@ -57,36 +57,36 @@ void DefaultPrint (void) udp.SetSource (1025); udp.SetDestination (80); udp.SetPayloadSize (1000); - p.AddHeader (udp); - p.AddHeader (ipv4); + p->AddHeader (udp); + p->AddHeader (ipv4); - std::cout << "full packet size=" << p.GetSize () << std::endl; + std::cout << "full packet size=" << p->GetSize () << std::endl; // Here, invoke the default Print routine, directed to std out - p.Print (std::cout); + p->Print (std::cout); std::cout << std::endl; // Now, we fragment our packet in 3 consecutive pieces. - Packet p1 = p.CreateFragment (0, 2); - Packet p2 = p.CreateFragment (2, 1000); - Packet p3 = p.CreateFragment (1002, 26); + Ptr p1 = p->CreateFragment (0, 2); + Ptr p2 = p->CreateFragment (2, 1000); + Ptr p3 = p->CreateFragment (1002, 26); std::cout << "fragment1" << std::endl; - p1.Print (std::cout); + p1->Print (std::cout); std::cout << std::endl; std::cout << "fragment2" << std::endl; - p2.Print (std::cout); + p2->Print (std::cout); std::cout << std::endl; std::cout << "fragment3" << std::endl; - p3.Print (std::cout); + p3->Print (std::cout); std::cout << std::endl; // And, finally, we re-aggregate the 3 consecutive pieces. - Packet aggregate = p1; - aggregate.AddAtEnd (p2); - aggregate.AddAtEnd (p3); + Ptr aggregate = p1->Copy (); + aggregate->AddAtEnd (p2); + aggregate->AddAtEnd (p3); std::cout << "aggregated" << std::endl; - aggregate.Print (std::cout); + aggregate->Print (std::cout); std::cout << std::endl; } @@ -128,7 +128,7 @@ void NonDefaultPrint (void) // We create a packet with 1000 bytes of zero payload - Packet p (1000); + Ptr p = Create (1000); Ipv4Header ipv4; UdpHeader udp; ipv4.SetSource (Ipv4Address ("192.168.0.1")); @@ -136,35 +136,35 @@ void NonDefaultPrint (void) udp.SetSource (1025); udp.SetDestination (80); udp.SetPayloadSize (1000); - p.AddHeader (udp); - p.AddHeader (ipv4); + p->AddHeader (udp); + p->AddHeader (ipv4); - std::cout << "full packet size=" << p.GetSize () << std::endl; - p.Print (std::cout, printer); + std::cout << "full packet size=" << p->GetSize () << std::endl; + p->Print (std::cout, printer); std::cout << std::endl; // fragment our packet in 3 pieces - Packet p1 = p.CreateFragment (0, 2); - Packet p2 = p.CreateFragment (2, 1000); - Packet p3 = p.CreateFragment (1002, 26); + Ptr p1 = p->CreateFragment (0, 2); + Ptr p2 = p->CreateFragment (2, 1000); + Ptr p3 = p->CreateFragment (1002, 26); std::cout << "fragment1" << std::endl; - p1.Print (std::cout, printer); + p1->Print (std::cout, printer); std::cout << std::endl; std::cout << "fragment2" << std::endl; - p2.Print (std::cout, printer); + p2->Print (std::cout, printer); std::cout << std::endl; std::cout << "fragment3" << std::endl; - p3.Print (std::cout, printer); + p3->Print (std::cout, printer); std::cout << std::endl; // aggregate all 3 fragments of the original packet // to reconstruct a copy of the original packet. - Packet aggregate = p1; - aggregate.AddAtEnd (p2); - aggregate.AddAtEnd (p3); + Ptr aggregate = p1->Copy (); + aggregate->AddAtEnd (p2); + aggregate->AddAtEnd (p3); std::cout << "aggregated" << std::endl; - aggregate.Print (std::cout, printer); + aggregate->Print (std::cout, printer); std::cout << std::endl; } diff --git a/samples/main-packet-tag.cc b/samples/main-packet-tag.cc index a23a8a904..d5a8c6ec6 100644 --- a/samples/main-packet-tag.cc +++ b/samples/main-packet-tag.cc @@ -116,20 +116,20 @@ int main (int argc, char *argv[]) tag.SetSimpleValue (0x56); // store the tag in a packet. - Packet p; - p.AddTag (tag); + Ptr p = Create (); + p->AddTag (tag); // create a copy of the packet - Packet aCopy = p; + Ptr aCopy = p->Copy (); // read the tag from the packet copy MyTag tagCopy; - p.PeekTag (tagCopy); + p->PeekTag (tagCopy); // the copy and the original are the same ! NS_ASSERT (tagCopy.GetSimpleValue () == tag.GetSimpleValue ()); - aCopy.PrintTags (std::cout); + aCopy->PrintTags (std::cout); std::cout << std::endl; return 0; diff --git a/samples/main-simple.cc b/samples/main-simple.cc index 7285f4946..451665837 100644 --- a/samples/main-simple.cc +++ b/samples/main-simple.cc @@ -14,7 +14,7 @@ static void GenerateTraffic (Ptr socket, uint32_t size) { std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, tx bytes=" << size << std::endl; - socket->Send (Packet (size)); + socket->Send (Create (size)); if (size > 0) { Simulator::Schedule (Seconds (0.5), &GenerateTraffic, socket, size - 50); @@ -26,9 +26,9 @@ GenerateTraffic (Ptr socket, uint32_t size) } static void -SocketPrinter (Ptr socket, const Packet &packet, const Address &from) +SocketPrinter (Ptr socket, Ptr packet, const Address &from) { - std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, rx bytes=" << packet.GetSize () << std::endl; + std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, rx bytes=" << packet->GetSize () << std::endl; } static void diff --git a/src/applications/onoff/onoff-application.cc b/src/applications/onoff/onoff-application.cc index 9801cc996..4a2687d1d 100644 --- a/src/applications/onoff/onoff-application.cc +++ b/src/applications/onoff/onoff-application.cc @@ -240,7 +240,8 @@ void OnOffApplication::SendPacket() NS_LOG_FUNCTION; NS_ASSERT (m_sendEvent.IsExpired ()); - m_socket->Send(Packet (m_pktSize)); + Ptr packet = Create (m_pktSize); + m_socket->Send (packet); m_totBytes += m_pktSize; m_lastStartTime = Simulator::Now(); m_residualBits = 0; diff --git a/src/applications/packet-sink/packet-sink.cc b/src/applications/packet-sink/packet-sink.cc index 23ca70296..e6bc0d024 100644 --- a/src/applications/packet-sink/packet-sink.cc +++ b/src/applications/packet-sink/packet-sink.cc @@ -78,6 +78,7 @@ void PacketSink::StartApplication() // Called at time specified by Start m_socket = socketFactory->CreateSocket (); m_socket->Bind (m_local); } + m_socket->SetRecvCallback (MakeCallback(&PacketSink::Receive, this)); } @@ -86,21 +87,20 @@ void PacketSink::StopApplication() // Called at time specified by Stop if (!m_socket) { m_socket->SetRecvCallback (MakeNullCallback, - const Packet &, const Address &> ()); - + Ptr, const Address &> ()); } } // This LOG output inspired by the application on Joseph Kopena's wiki -void PacketSink::Receive(Ptr socket, const Packet &packet, +void PacketSink::Receive(Ptr socket, Ptr packet, const Address &from) { if (InetSocketAddress::IsMatchingType (from)) { InetSocketAddress address = InetSocketAddress::ConvertFrom (from); - NS_LOG_INFO ("Received " << packet.GetSize() << " bytes from " << + NS_LOG_INFO ("Received " << packet->GetSize() << " bytes from " << address.GetIpv4() << " [" << address << "]---'" << - packet.PeekData() << "'"); + packet->PeekData() << "'"); // TODO: Add a tracing source here } } diff --git a/src/applications/packet-sink/packet-sink.h b/src/applications/packet-sink/packet-sink.h index 8af7b3ab5..f13a4bca4 100644 --- a/src/applications/packet-sink/packet-sink.h +++ b/src/applications/packet-sink/packet-sink.h @@ -73,7 +73,7 @@ private: const Address &local, std::string iid); - virtual void Receive (Ptr socket, const Packet& packet, const Address& from); + virtual void Receive (Ptr socket, Ptr packet, const Address& from); Ptr m_socket; // Associated socket Address m_local; // Local address to bind to diff --git a/src/applications/udp-echo/udp-echo-client.cc b/src/applications/udp-echo/udp-echo-client.cc index 35a52e7b4..93450d467 100644 --- a/src/applications/udp-echo/udp-echo-client.cc +++ b/src/applications/udp-echo/udp-echo-client.cc @@ -99,8 +99,7 @@ UdpEchoClient::StartApplication (void) m_socket->Connect (m_peer); } - m_socket->SetRecvCallback((Callback, const Packet &, - const Address &>) MakeCallback(&UdpEchoClient::Receive, this)); + m_socket->SetRecvCallback(MakeCallback(&UdpEchoClient::Receive, this)); ScheduleTransmit (Seconds(0.)); } @@ -112,8 +111,8 @@ UdpEchoClient::StopApplication () if (!m_socket) { - m_socket->SetRecvCallback((Callback, const Packet &, - const Address &>) NULL); + m_socket->SetRecvCallback(MakeNullCallback, Ptr, + const Address &> ()); } Simulator::Cancel(m_sendEvent); @@ -133,7 +132,7 @@ UdpEchoClient::Send (void) NS_ASSERT (m_sendEvent.IsExpired ()); - Packet p (m_size); + Ptr p = Create (m_size); m_socket->Send (p); ++m_sent; @@ -148,7 +147,7 @@ UdpEchoClient::Send (void) void UdpEchoClient::Receive( Ptr socket, - const Packet &packet, + Ptr packet, const Address &from) { NS_LOG_FUNCTION; @@ -157,7 +156,7 @@ UdpEchoClient::Receive( if (InetSocketAddress::IsMatchingType (from)) { InetSocketAddress address = InetSocketAddress::ConvertFrom (from); - NS_LOG_INFO ("Received " << packet.GetSize() << " bytes from " << + NS_LOG_INFO ("Received " << packet->GetSize() << " bytes from " << address.GetIpv4()); } } diff --git a/src/applications/udp-echo/udp-echo-client.h b/src/applications/udp-echo/udp-echo-client.h index 91914287d..dba160a3a 100644 --- a/src/applications/udp-echo/udp-echo-client.h +++ b/src/applications/udp-echo/udp-echo-client.h @@ -50,7 +50,7 @@ private: void ScheduleTransmit (Time dt); void Send (void); - void Receive(Ptr socket, const Packet &packet, const Address &from); + void Receive(Ptr socket, Ptr packet, const Address &from); Ptr m_node; Ipv4Address m_serverAddress; diff --git a/src/applications/udp-echo/udp-echo-server.cc b/src/applications/udp-echo/udp-echo-server.cc index 5d2d5b361..e7a812eae 100644 --- a/src/applications/udp-echo/udp-echo-server.cc +++ b/src/applications/udp-echo/udp-echo-server.cc @@ -94,15 +94,15 @@ UdpEchoServer::StopApplication () if (!m_socket) { - m_socket->SetRecvCallback (MakeNullCallback, - const Packet &, const Address &> ()); + m_socket->SetRecvCallback(MakeNullCallback, + Ptr, const Address &> ()); } } void UdpEchoServer::Receive( Ptr socket, - const Packet &packet, + Ptr packet, const Address &from) { NS_LOG_FUNCTION; @@ -111,7 +111,7 @@ UdpEchoServer::Receive( if (InetSocketAddress::IsMatchingType (from)) { InetSocketAddress address = InetSocketAddress::ConvertFrom (from); - NS_LOG_INFO ("Received " << packet.GetSize() << " bytes from " << + NS_LOG_INFO ("Received " << packet->GetSize() << " bytes from " << address.GetIpv4()); NS_LOG_LOGIC ("Echoing packet"); diff --git a/src/applications/udp-echo/udp-echo-server.h b/src/applications/udp-echo/udp-echo-server.h index 597fef8fe..82dbf7126 100644 --- a/src/applications/udp-echo/udp-echo-server.h +++ b/src/applications/udp-echo/udp-echo-server.h @@ -44,7 +44,7 @@ private: virtual void StartApplication (void); virtual void StopApplication (void); - void Receive(Ptr socket, const Packet &packet, const Address &from); + void Receive(Ptr socket, Ptr packet, const Address &from); Ptr m_node; uint16_t m_port; diff --git a/src/common/error-model.cc b/src/common/error-model.cc index 938cced29..71b84d441 100644 --- a/src/common/error-model.cc +++ b/src/common/error-model.cc @@ -62,7 +62,7 @@ ErrorModel::CreateDefault (void) } bool -ErrorModel::IsCorrupt (Packet& p) +ErrorModel::IsCorrupt (Ptr p) { NS_LOG_FUNCTION; bool result; @@ -176,7 +176,7 @@ RateErrorModel::SetRandomVariable (const RandomVariable &ranvar) } bool -RateErrorModel::DoCorrupt (Packet& p) +RateErrorModel::DoCorrupt (Ptr p) { NS_LOG_FUNCTION; if (!m_enable) @@ -199,27 +199,27 @@ RateErrorModel::DoCorrupt (Packet& p) } bool -RateErrorModel::DoCorruptPkt (Packet& p) +RateErrorModel::DoCorruptPkt (Ptr p) { NS_LOG_FUNCTION; return (m_ranvar->GetValue () < m_rate); } bool -RateErrorModel::DoCorruptByte (Packet& p) +RateErrorModel::DoCorruptByte (Ptr p) { NS_LOG_FUNCTION; // compute pkt error rate, assume uniformly distributed byte error - double per = 1 - pow (1.0 - m_rate, p.GetSize ()); + double per = 1 - pow (1.0 - m_rate, p->GetSize ()); return (m_ranvar->GetValue () < per); } bool -RateErrorModel::DoCorruptBit(Packet& p) +RateErrorModel::DoCorruptBit(Ptr p) { NS_LOG_FUNCTION; // compute pkt error rate, assume uniformly distributed bit error - double per = 1 - pow (1.0 - m_rate, (8 * p.GetSize ()) ); + double per = 1 - pow (1.0 - m_rate, (8 * p->GetSize ()) ); return (m_ranvar->GetValue () < per); } @@ -270,14 +270,14 @@ ListErrorModel::SetList (const std::list &packetlist) // converted to a dynamically-sized array of uint32_t to avoid // list iteration below. bool -ListErrorModel::DoCorrupt (Packet& p) +ListErrorModel::DoCorrupt (Ptr p) { NS_LOG_FUNCTION; if (!m_enable) { return false; } - uint32_t uid = p.GetUid (); + uint32_t uid = p->GetUid (); for (PacketListCI i = m_packetList.begin (); i != m_packetList.end (); i++) { diff --git a/src/common/error-model.h b/src/common/error-model.h index e386d2f94..a8a224ddd 100644 --- a/src/common/error-model.h +++ b/src/common/error-model.h @@ -52,7 +52,7 @@ class RandomVariable; * rem->SetRandomVariable (UniformVariable ()); * rem->SetRate (0.001); * ... - * Packet p; + * Ptr p; * if (rem->IsCorrupt (p)) * { * dropTrace(p); @@ -82,7 +82,7 @@ public: * \returns true if the Packet is to be considered as errored/corrupted * \param pkt Packet to apply error model to */ - bool IsCorrupt (Packet& pkt); + bool IsCorrupt (Ptr pkt); /** * Reset any state associated with the error model */ @@ -107,7 +107,7 @@ private: /* * These methods must be implemented by subclasses */ - virtual bool DoCorrupt (Packet&) = 0; + virtual bool DoCorrupt (Ptr) = 0; virtual void DoReset (void) = 0; }; @@ -167,10 +167,10 @@ public: void SetRandomVariable (const RandomVariable &ranvar); private: - virtual bool DoCorrupt (Packet& p); - virtual bool DoCorruptPkt (Packet& p); - virtual bool DoCorruptByte (Packet& p); - virtual bool DoCorruptBit (Packet& p); + virtual bool DoCorrupt (Ptr p); + virtual bool DoCorruptPkt (Ptr p); + virtual bool DoCorruptByte (Ptr p); + virtual bool DoCorruptBit (Ptr p); virtual void DoReset (void); enum ErrorUnit m_unit; @@ -221,7 +221,7 @@ public: void SetList (const std::list &packetlist); private: - virtual bool DoCorrupt (Packet& p); + virtual bool DoCorrupt (Ptr p); virtual void DoReset (void); typedef std::list PacketList; diff --git a/src/common/packet-metadata-test.cc b/src/common/packet-metadata-test.cc index ac4d1f994..fb32b1934 100644 --- a/src/common/packet-metadata-test.cc +++ b/src/common/packet-metadata-test.cc @@ -199,7 +199,7 @@ class PacketMetadataTest : public Test { public: PacketMetadataTest (); virtual ~PacketMetadataTest (); - bool CheckHistory (Packet p, const char *file, int line, uint32_t n, ...); + bool CheckHistory (Ptr p, const char *file, int line, uint32_t n, ...); virtual bool RunTests (void); private: template @@ -217,7 +217,7 @@ private: template void RegisterTrailer (void); void CleanupPrints (void); - Packet DoAddHeader (Packet p); + Ptr DoAddHeader (Ptr p); bool Check (const char *file, int line, std::list expected); @@ -358,7 +358,7 @@ PacketMetadataTest::Check (const char *file, int line, std::list expected) } bool -PacketMetadataTest::CheckHistory (Packet p, const char *file, int line, uint32_t n, ...) +PacketMetadataTest::CheckHistory (Ptr p, const char *file, int line, uint32_t n, ...) { m_headerError = false; m_trailerError = false; @@ -373,7 +373,7 @@ PacketMetadataTest::CheckHistory (Packet p, const char *file, int line, uint32_t va_end (ap); m_printer.PrintForward (); - p.Print (Failure (), m_printer); + p->Print (Failure (), m_printer); bool ok = Check (file, line, expected); CleanupPrints (); if (!ok) @@ -382,7 +382,7 @@ PacketMetadataTest::CheckHistory (Packet p, const char *file, int line, uint32_t } m_printer.PrintBackward (); - p.Print (Failure (), m_printer); + p->Print (Failure (), m_printer); expected.reverse (); ok = Check (file, line, expected); CleanupPrints (); @@ -393,25 +393,25 @@ PacketMetadataTest::CheckHistory (Packet p, const char *file, int line, uint32_t { \ HistoryHeader header; \ RegisterHeader (); \ - p.AddHeader (header); \ + p->AddHeader (header); \ } #define ADD_TRAILER(p, n) \ { \ HistoryTrailer trailer; \ RegisterTrailer (); \ - p.AddTrailer (trailer); \ + p->AddTrailer (trailer); \ } #define REM_HEADER(p, n) \ { \ HistoryHeader header; \ RegisterHeader (); \ - p.RemoveHeader (header); \ + p->RemoveHeader (header); \ } #define REM_TRAILER(p, n) \ { \ HistoryTrailer trailer; \ RegisterTrailer (); \ - p.RemoveTrailer (trailer); \ + p->RemoveTrailer (trailer); \ } #define CHECK_HISTORY(p, ...) \ { \ @@ -421,9 +421,9 @@ PacketMetadataTest::CheckHistory (Packet p, const char *file, int line, uint32_t ok = false; \ } \ Buffer buffer; \ - buffer = p.Serialize (); \ - Packet otherPacket; \ - otherPacket.Deserialize (buffer); \ + buffer = p->Serialize (); \ + Ptr otherPacket = Create ();\ + otherPacket->Deserialize (buffer); \ if (!CheckHistory (otherPacket, __FILE__, \ __LINE__, __VA_ARGS__)) \ { \ @@ -432,8 +432,8 @@ PacketMetadataTest::CheckHistory (Packet p, const char *file, int line, uint32_t } -Packet -PacketMetadataTest::DoAddHeader (Packet p) +Ptr +PacketMetadataTest::DoAddHeader (Ptr p) { ADD_HEADER (p, 10); return p; @@ -446,14 +446,14 @@ PacketMetadataTest::RunTests (void) PacketMetadata::Enable (); - Packet p = Packet (0); - Packet p1 = Packet (0); + Ptr p = Create (0); + Ptr p1 = Create (0); - p = Packet (10); + p = Create (10); ADD_TRAILER (p, 100); CHECK_HISTORY (p, 2, 10, 100); - p = Packet (10); + p = Create (10); ADD_HEADER (p, 1); ADD_HEADER (p, 2); ADD_HEADER (p, 3); @@ -466,7 +466,7 @@ PacketMetadataTest::RunTests (void) CHECK_HISTORY (p, 6, 6, 5, 3, 2, 1, 10); - p = Packet (10); + p = Create (10); ADD_HEADER (p, 1); ADD_HEADER (p, 2); ADD_HEADER (p, 3); @@ -474,7 +474,7 @@ PacketMetadataTest::RunTests (void) CHECK_HISTORY (p, 3, 2, 1, 10); - p = Packet (10); + p = Create (10); ADD_HEADER (p, 1); ADD_HEADER (p, 2); ADD_HEADER (p, 3); @@ -483,7 +483,7 @@ PacketMetadataTest::RunTests (void) CHECK_HISTORY (p, 2, 1, 10); - p = Packet (10); + p = Create (10); ADD_HEADER (p, 1); ADD_HEADER (p, 2); ADD_HEADER (p, 3); @@ -492,11 +492,11 @@ PacketMetadataTest::RunTests (void) REM_HEADER (p, 1); CHECK_HISTORY (p, 1, 10); - p = Packet (10); + p = Create (10); ADD_HEADER (p, 1); ADD_HEADER (p, 2); ADD_HEADER (p, 3); - p1 = p; + p1 = p->Copy (); REM_HEADER (p1, 3); REM_HEADER (p1, 2); REM_HEADER (p1, 1); @@ -524,88 +524,88 @@ PacketMetadataTest::RunTests (void) REM_TRAILER (p, 5); CHECK_HISTORY (p, 5, 3, 2, 1, 10, 4); - p1 = p; + p1 = p->Copy (); REM_TRAILER (p, 4); CHECK_HISTORY (p, 4, 3, 2, 1, 10); CHECK_HISTORY (p1, 5, 3, 2, 1, 10, 4); - p1.RemoveAtStart (3); + p1->RemoveAtStart (3); CHECK_HISTORY (p1, 4, 2, 1, 10, 4); - p1.RemoveAtStart (1); + p1->RemoveAtStart (1); CHECK_HISTORY (p1, 4, 1, 1, 10, 4); - p1.RemoveAtStart (1); + p1->RemoveAtStart (1); CHECK_HISTORY (p1, 3, 1, 10, 4); - p1.RemoveAtEnd (4); + p1->RemoveAtEnd (4); CHECK_HISTORY (p1, 2, 1, 10); - p1.RemoveAtStart (1); + p1->RemoveAtStart (1); CHECK_HISTORY (p1, 1, 10); - p = Packet (10); + p = Create (10); ADD_HEADER (p, 8); ADD_TRAILER (p, 8); ADD_TRAILER (p, 8); - p.RemoveAtStart (8+10+8); + p->RemoveAtStart (8+10+8); CHECK_HISTORY (p, 1, 8); - p = Packet (10); + p = Create (10); ADD_HEADER (p, 10); ADD_HEADER (p, 8); ADD_TRAILER (p, 6); ADD_TRAILER (p, 7); ADD_TRAILER (p, 9); - p.RemoveAtStart (5); - p.RemoveAtEnd (12); + p->RemoveAtStart (5); + p->RemoveAtEnd (12); CHECK_HISTORY (p, 5, 3, 10, 10, 6, 4); - p = Packet (10); + p = Create (10); ADD_HEADER (p, 10); ADD_TRAILER (p, 6); - p.RemoveAtEnd (18); + p->RemoveAtEnd (18); ADD_TRAILER (p, 5); ADD_HEADER (p, 3); CHECK_HISTORY (p, 3, 3, 8, 5); - p.RemoveAtStart (12); + p->RemoveAtStart (12); CHECK_HISTORY (p, 1, 4); - p.RemoveAtEnd (2); + p->RemoveAtEnd (2); CHECK_HISTORY (p, 1, 2); ADD_HEADER (p, 10); CHECK_HISTORY (p, 2, 10, 2); - p.RemoveAtEnd (5); + p->RemoveAtEnd (5); CHECK_HISTORY (p, 1, 7); - Packet p2 = Packet (0); - Packet p3 = Packet (0); + Ptr p2 = Create (0); + Ptr p3 = Create (0); - p = Packet (40); + p = Create (40); ADD_HEADER (p, 5); ADD_HEADER (p, 8); CHECK_HISTORY (p, 3, 8, 5, 40); - p1 = p.CreateFragment (0, 5); - p2 = p.CreateFragment (5, 5); - p3 = p.CreateFragment (10, 43); + p1 = p->CreateFragment (0, 5); + p2 = p->CreateFragment (5, 5); + p3 = p->CreateFragment (10, 43); CHECK_HISTORY (p1, 1, 5); CHECK_HISTORY (p2, 2, 3, 2); CHECK_HISTORY (p3, 2, 3, 40); - p1.AddAtEnd (p2); + p1->AddAtEnd (p2); CHECK_HISTORY (p1, 2, 8, 2); CHECK_HISTORY (p2, 2, 3, 2); - p1.AddAtEnd (p3); + p1->AddAtEnd (p3); CHECK_HISTORY (p1, 3, 8, 5, 40); CHECK_HISTORY (p2, 2, 3, 2); CHECK_HISTORY (p3, 2, 3, 40); - p1 = p.CreateFragment (0, 5); + p1 = p->CreateFragment (0, 5); CHECK_HISTORY (p1, 1, 5); - p3 = Packet (50); + p3 = Create (50); ADD_HEADER (p3, 8); CHECK_HISTORY (p3, 2, 8, 50); CHECK_HISTORY (p1, 1, 5); - p1.AddAtEnd (p3); + p1->AddAtEnd (p3); CHECK_HISTORY (p1, 3, 5, 8, 50); ADD_HEADER (p1, 5); CHECK_HISTORY (p1, 4, 5, 5, 8, 50); @@ -613,71 +613,71 @@ PacketMetadataTest::RunTests (void) CHECK_HISTORY (p1, 5, 5, 5, 8, 50, 2); REM_HEADER (p1, 5); CHECK_HISTORY (p1, 4, 5, 8, 50, 2); - p1.RemoveAtEnd (60); + p1->RemoveAtEnd (60); CHECK_HISTORY (p1, 1, 5); - p1.AddAtEnd (p2); + p1->AddAtEnd (p2); CHECK_HISTORY (p1, 2, 8, 2); CHECK_HISTORY (p2, 2, 3, 2); - p3 = Packet (40); + p3 = Create (40); ADD_HEADER (p3, 5); ADD_HEADER (p3, 5); CHECK_HISTORY (p3, 3, 5, 5, 40); - p1 = p3.CreateFragment (0, 5); - p2 = p3.CreateFragment (5, 5); + p1 = p3->CreateFragment (0, 5); + p2 = p3->CreateFragment (5, 5); CHECK_HISTORY (p1, 1, 5); CHECK_HISTORY (p2, 1, 5); - p1.AddAtEnd (p2); + p1->AddAtEnd (p2); CHECK_HISTORY (p1, 2, 5, 5); - p = Packet (0); + p = Create (0); CHECK_HISTORY (p, 0); - p3 = Packet (0); + p3 = Create (0); ADD_HEADER (p3, 5); ADD_HEADER (p3, 5); CHECK_HISTORY (p3, 2, 5, 5); - p1 = p3.CreateFragment (0, 4); - p2 = p3.CreateFragment (9, 1); + p1 = p3->CreateFragment (0, 4); + p2 = p3->CreateFragment (9, 1); CHECK_HISTORY (p1, 1, 4); CHECK_HISTORY (p2, 1, 1); - p1.AddAtEnd (p2); + p1->AddAtEnd (p2); CHECK_HISTORY (p1, 2, 4, 1); - p = Packet (2000); + p = Create (2000); CHECK_HISTORY (p, 1, 2000); - p = Packet (); + p = Create (); ADD_TRAILER (p, 10); ADD_HEADER (p, 5); - p1 = p.CreateFragment (0, 8); - p2 = p.CreateFragment (8, 7); - p1.AddAtEnd (p2); + p1 = p->CreateFragment (0, 8); + p2 = p->CreateFragment (8, 7); + p1->AddAtEnd (p2); CHECK_HISTORY (p, 2, 5, 10); - p = Packet (); + p = Create (); ADD_TRAILER (p, 10); REM_TRAILER (p, 10); ADD_TRAILER (p, 10); CHECK_HISTORY (p, 1, 10); - p = Packet (); + p = Create (); ADD_HEADER (p, 10); REM_HEADER (p, 10); ADD_HEADER (p, 10); CHECK_HISTORY (p, 1, 10); - p = Packet (); + p = Create (); ADD_HEADER (p, 10); p = DoAddHeader (p); CHECK_HISTORY (p, 2, 10, 10); - p = Packet (10); + p = Create (10); ADD_HEADER (p, 8); ADD_TRAILER (p, 8); ADD_TRAILER (p, 8); - p.RemoveAtStart (8+10+8); + p->RemoveAtStart (8+10+8); CHECK_HISTORY (p, 1, 8); return ok; diff --git a/src/common/packet.cc b/src/common/packet.cc index 372dee8d3..4636bdd9c 100644 --- a/src/common/packet.cc +++ b/src/common/packet.cc @@ -26,22 +26,72 @@ namespace ns3 { uint32_t Packet::m_globalUid = 0; +void +Packet::Ref (void) const +{ + m_refCount++; +} +void +Packet::Unref (void) const +{ + m_refCount--; + if (m_refCount == 0) + { + delete this; + } +} + +Ptr +Packet::Copy (void) const +{ + // we need to invoke the copy constructor directly + // rather than calling Create because the copy constructor + // is private. + return Ptr (new Packet (*this), false); +} + Packet::Packet () : m_buffer (), - m_metadata (m_globalUid, 0) + m_tags (), + m_metadata (m_globalUid, 0), + m_refCount (1) { m_globalUid++; } +Packet::Packet (const Packet &o) + : m_buffer (o.m_buffer), + m_tags (o.m_tags), + m_metadata (o.m_metadata), + m_refCount (1) +{} + +Packet & +Packet::operator = (const Packet &o) +{ + if (this == &o) + { + return *this; + } + m_buffer = o.m_buffer; + m_tags = o.m_tags; + m_metadata = o.m_metadata; + return *this; +} + Packet::Packet (uint32_t size) : m_buffer (size), - m_metadata (m_globalUid, size) + m_tags (), + m_metadata (m_globalUid, size), + m_refCount (1) { m_globalUid++; } Packet::Packet (uint8_t const*buffer, uint32_t size) : m_buffer (), - m_metadata (m_globalUid, size) + m_tags (), + m_metadata (m_globalUid, size), + m_refCount (1) { m_globalUid++; m_buffer.AddAtStart (size); @@ -52,17 +102,20 @@ Packet::Packet (uint8_t const*buffer, uint32_t size) Packet::Packet (Buffer buffer, Tags tags, PacketMetadata metadata) : m_buffer (buffer), m_tags (tags), - m_metadata (metadata) + m_metadata (metadata), + m_refCount (1) {} -Packet +Ptr Packet::CreateFragment (uint32_t start, uint32_t length) const { Buffer buffer = m_buffer.CreateFragment (start, length); NS_ASSERT (m_buffer.GetSize () >= start + length); uint32_t end = m_buffer.GetSize () - (start + length); PacketMetadata metadata = m_metadata.CreateFragment (start, end); - return Packet (buffer, m_tags, metadata); + // again, call the constructor directly rather than + // through Create because it is private. + return Ptr (new Packet (buffer, m_tags, metadata), false); } uint32_t @@ -72,9 +125,9 @@ Packet::GetSize (void) const } void -Packet::AddAtEnd (Packet packet) +Packet::AddAtEnd (Ptr packet) { - Buffer src = packet.m_buffer.CreateFullCopy (); + Buffer src = packet->m_buffer.CreateFullCopy (); Buffer dst = m_buffer.CreateFullCopy (); dst.AddAtEnd (src.GetSize ()); @@ -86,7 +139,7 @@ Packet::AddAtEnd (Packet packet) * XXX: we might need to merge the tag list of the * other packet into the current packet. */ - m_metadata.AddAtEnd (packet.m_metadata); + m_metadata.AddAtEnd (packet->m_metadata); } void Packet::AddPaddingAtEnd (uint32_t size) @@ -233,20 +286,20 @@ PacketTest::RunTests (void) { bool ok = true; - Packet pkt1 (reinterpret_cast ("hello"), 5); - Packet pkt2 (reinterpret_cast (" world"), 6); - Packet packet; - packet.AddAtEnd (pkt1); - packet.AddAtEnd (pkt2); + Ptr pkt1 = Create (reinterpret_cast ("hello"), 5); + Ptr pkt2 = Create (reinterpret_cast (" world"), 6); + Ptr packet = Create (); + packet->AddAtEnd (pkt1); + packet->AddAtEnd (pkt2); - if (packet.GetSize () != 11) + if (packet->GetSize () != 11) { - Failure () << "expected size 11, got " << packet.GetSize () << std::endl; + Failure () << "expected size 11, got " << packet->GetSize () << std::endl; ok = false; } - std::string msg = std::string (reinterpret_cast(packet.PeekData ()), - packet.GetSize ()); + std::string msg = std::string (reinterpret_cast(packet->PeekData ()), + packet->GetSize ()); if (msg != "hello world") { Failure () << "expected 'hello world', got '" << msg << "'" << std::endl; diff --git a/src/common/packet.h b/src/common/packet.h index 58e842292..7fcdd32d2 100644 --- a/src/common/packet.h +++ b/src/common/packet.h @@ -30,6 +30,7 @@ #include "tag.h" #include "ns3/callback.h" #include "ns3/assert.h" +#include "ns3/ptr.h" namespace ns3 { @@ -74,6 +75,11 @@ class PacketPrinter; */ class Packet { public: + void Ref (void) const; + void Unref (void) const; + + Ptr Copy (void) const; + /** * Create an empty packet with a new uid (as returned * by getUid). @@ -107,7 +113,7 @@ public: * \param length length of fragment to create * \returns a fragment of the original packet */ - Packet CreateFragment (uint32_t start, uint32_t length) const; + Ptr CreateFragment (uint32_t start, uint32_t length) const; /** * \returns the size in bytes of the packet (including the zero-filled * initial payload) @@ -210,7 +216,7 @@ public: * * \param packet packet to concatenate */ - void AddAtEnd (Packet packet); + void AddAtEnd (Ptr packet); /** * \param size number of padding bytes to add. */ @@ -332,9 +338,12 @@ public: void Deserialize (Buffer buffer); private: Packet (Buffer buffer, Tags tags, PacketMetadata metadata); + Packet (const Packet &o); + Packet &operator = (const Packet &o); Buffer m_buffer; Tags m_tags; PacketMetadata m_metadata; + mutable uint32_t m_refCount; static uint32_t m_globalUid; }; diff --git a/src/common/pcap-writer.cc b/src/common/pcap-writer.cc index cb5c06ad3..1df9dda2d 100644 --- a/src/common/pcap-writer.cc +++ b/src/common/pcap-writer.cc @@ -89,7 +89,7 @@ PcapWriter::WriteHeader (uint32_t network) void -PcapWriter::WritePacket (Packet const packet) +PcapWriter::WritePacket (Ptr packet) { if (m_writer != 0) { @@ -98,9 +98,9 @@ PcapWriter::WritePacket (Packet const packet) uint64_t us = current % 1000000; Write32 (s & 0xffffffff); Write32 (us & 0xffffffff); - Write32 (packet.GetSize ()); - Write32 (packet.GetSize ()); - WriteData (packet.PeekData (), packet.GetSize ()); + Write32 (packet->GetSize ()); + Write32 (packet->GetSize ()); + WriteData (packet->PeekData (), packet->GetSize ()); } } diff --git a/src/common/pcap-writer.h b/src/common/pcap-writer.h index 29646a529..d113873aa 100644 --- a/src/common/pcap-writer.h +++ b/src/common/pcap-writer.h @@ -24,10 +24,11 @@ #include "ns3/callback.h" #include -#include "packet.h" namespace ns3 { +class Packet; + /** * \brief Pcap output for Packet logger * @@ -62,7 +63,7 @@ public: /** * \param packet packet to write to output file */ - void WritePacket (Packet const packet); + void WritePacket (Ptr packet); private: void WriteData (uint8_t const*buffer, uint32_t size); diff --git a/src/core/ptr.h b/src/core/ptr.h index 62f536f34..a0b3fa202 100644 --- a/src/core/ptr.h +++ b/src/core/ptr.h @@ -100,6 +100,8 @@ public: T *operator -> () const; T *operator -> (); + const T &operator * () const; + const T &operator * (); // allow if (!sp) bool operator! (); // allow if (sp) @@ -221,73 +223,49 @@ namespace ns3 { template Ptr Create (void) { - T *obj = new T (); - Ptr p = obj; - obj->Unref (); - return p; + return Ptr (new T (), false); } template Ptr Create (T1 a1) { - T *obj = new T (a1); - Ptr p = obj; - obj->Unref (); - return p; + return Ptr (new T (a1), false); } template Ptr Create (T1 a1, T2 a2) { - T *obj = new T (a1, a2); - Ptr p = obj; - obj->Unref (); - return p; + return Ptr (new T (a1, a2), false); } template Ptr Create (T1 a1, T2 a2, T3 a3) { - T *obj = new T (a1, a2, a3); - Ptr p = obj; - obj->Unref (); - return p; + return Ptr (new T (a1, a2, a3), false); } template Ptr Create (T1 a1, T2 a2, T3 a3, T4 a4) { - T *obj = new T (a1, a2, a3, a4); - Ptr p = obj; - obj->Unref (); - return p; + return Ptr (new T (a1, a2, a3, a4), false); } template Ptr Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) { - T *obj = new T (a1, a2, a3, a4, a5); - Ptr p = obj; - obj->Unref (); - return p; + return Ptr (new T (a1, a2, a3, a4, a5), false); } template Ptr Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) { - T *obj = new T (a1, a2, a3, a4, a5, a6); - Ptr p = obj; - obj->Unref (); - return p; + return Ptr (new T (a1, a2, a3, a4, a5, a6), false); } template Ptr Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) { - T *obj = new T (a1, a2, a3, a4, a5, a6, a7); - Ptr p = obj; - obj->Unref (); - return p; + return Ptr (new T (a1, a2, a3, a4, a5, a6, a7), false); } template @@ -456,6 +434,21 @@ Ptr::operator -> () const return m_ptr; } +template +const T & +Ptr::operator * () const +{ + return *m_ptr; +} + +template +const T & +Ptr::operator * () +{ + return *m_ptr; +} + + template bool Ptr::operator! () diff --git a/src/devices/csma/csma-channel.cc b/src/devices/csma/csma-channel.cc index 63ca27ea7..185d7b8ab 100644 --- a/src/devices/csma/csma-channel.cc +++ b/src/devices/csma/csma-channel.cc @@ -203,11 +203,11 @@ CsmaChannel::Detach(Ptr device) } bool -CsmaChannel::TransmitStart(Packet& p, uint32_t srcId) +CsmaChannel::TransmitStart(Ptr p, uint32_t srcId) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p << srcId); - NS_LOG_INFO ("UID is " << p.GetUid () << ")"); + NS_LOG_PARAMS (this << p << srcId); + NS_LOG_INFO ("UID is " << p->GetUid () << ")"); if (m_state != IDLE) { @@ -238,8 +238,8 @@ bool CsmaChannel::TransmitEnd() { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &m_currentPkt << m_currentSrc); - NS_LOG_INFO ("UID is " << m_currentPkt.GetUid () << ")"); + NS_LOG_PARAMS (this << m_currentPkt << m_currentSrc); + NS_LOG_INFO ("UID is " << m_currentPkt->GetUid () << ")"); NS_ASSERT(m_state == TRANSMITTING); m_state = PROPAGATING; @@ -264,8 +264,8 @@ void CsmaChannel::PropagationCompleteEvent() { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &m_currentPkt); - NS_LOG_INFO ("UID is " << m_currentPkt.GetUid () << ")"); + NS_LOG_PARAMS (this << m_currentPkt); + NS_LOG_INFO ("UID is " << m_currentPkt->GetUid () << ")"); NS_ASSERT(m_state == PROPAGATING); @@ -276,7 +276,7 @@ CsmaChannel::PropagationCompleteEvent() { if (it->IsActive()) { - it->devicePtr->Receive (m_currentPkt); + it->devicePtr->Receive (m_currentPkt->Copy ()); } } m_state = IDLE; diff --git a/src/devices/csma/csma-channel.h b/src/devices/csma/csma-channel.h index 171f080e6..5ad34f4fd 100644 --- a/src/devices/csma/csma-channel.h +++ b/src/devices/csma/csma-channel.h @@ -23,12 +23,13 @@ #include "ns3/channel.h" #include "ns3/ptr.h" -#include "ns3/packet.h" #include "ns3/nstime.h" #include "ns3/data-rate.h" namespace ns3 { +class Packet; + class CsmaNetDevice; /** @@ -185,7 +186,7 @@ public: * \return True if the channel is not busy and the transmitting net * device is currently active. */ - bool TransmitStart (Packet& p, uint32_t srcId); + bool TransmitStart (Ptr p, uint32_t srcId); /** * \brief Indicates that the net device has finished transmitting * the packet over the channel @@ -286,7 +287,7 @@ private: * packet to have been transmitted on the channel if the channel is * free.) */ - Packet m_currentPkt; + Ptr m_currentPkt; /** * Device Id of the source that is currently transmitting on the * channel. Or last source to have transmitted a packet on the diff --git a/src/devices/csma/csma-net-device.cc b/src/devices/csma/csma-net-device.cc index fef638271..77c91e21d 100644 --- a/src/devices/csma/csma-net-device.cc +++ b/src/devices/csma/csma-net-device.cc @@ -225,7 +225,7 @@ CsmaNetDevice::SetBackoffParams (Time slotTime, uint32_t minSlots, } void -CsmaNetDevice::AddHeader (Packet& p, Mac48Address dest, +CsmaNetDevice::AddHeader (Ptr p, Mac48Address dest, uint16_t protocolNumber) { NS_LOG_FUNCTION; @@ -243,7 +243,7 @@ CsmaNetDevice::AddHeader (Packet& p, Mac48Address dest, switch (m_encapMode) { case ETHERNET_V1: - lengthType = p.GetSize() + header.GetSerializedSize() + trailer.GetSerializedSize(); + lengthType = p->GetSize() + header.GetSerializedSize() + trailer.GetSerializedSize(); break; case IP_ARP: lengthType = protocolNumber; @@ -251,20 +251,20 @@ CsmaNetDevice::AddHeader (Packet& p, Mac48Address dest, case LLC: { LlcSnapHeader llc; llc.SetType (protocolNumber); - p.AddHeader (llc); + p->AddHeader (llc); } break; case RAW: NS_ASSERT (false); break; } header.SetLengthType (lengthType); - p.AddHeader(header); + p->AddHeader(header); trailer.CalcFcs(p); - p.AddTrailer(trailer); + p->AddTrailer(trailer); } bool -CsmaNetDevice::ProcessHeader (Packet& p, uint16_t & param) +CsmaNetDevice::ProcessHeader (Ptr p, uint16_t & param) { NS_LOG_FUNCTION; if (m_encapMode == RAW) @@ -274,9 +274,9 @@ CsmaNetDevice::ProcessHeader (Packet& p, uint16_t & param) EthernetHeader header (false); EthernetTrailer trailer; - p.RemoveTrailer(trailer); + p->RemoveTrailer(trailer); trailer.CheckFcs(p); - p.RemoveHeader(header); + p->RemoveHeader(header); if ((header.GetDestination() != GetBroadcast ()) && (header.GetDestination() != GetAddress ())) @@ -292,7 +292,7 @@ CsmaNetDevice::ProcessHeader (Packet& p, uint16_t & param) break; case LLC: { LlcSnapHeader llc; - p.RemoveHeader (llc); + p->RemoveHeader (llc); param = llc.GetType (); } break; case RAW: @@ -317,15 +317,13 @@ CsmaNetDevice::DoNeedsArp (void) const } bool -CsmaNetDevice::SendTo ( - const Packet& packet, - const Address& dest, - uint16_t protocolNumber) +CsmaNetDevice::SendTo (Ptr packet, + const Address& dest, + uint16_t protocolNumber) { NS_LOG_FUNCTION; - Packet p = packet; - NS_LOG_LOGIC ("p=" << &p); - NS_LOG_LOGIC ("UID is " << p.GetUid () << ")"); + NS_LOG_LOGIC ("p=" << packet); + NS_LOG_LOGIC ("UID is " << packet->GetUid () << ")"); NS_ASSERT (IsLinkUp ()); @@ -334,10 +332,10 @@ CsmaNetDevice::SendTo ( return false; Mac48Address destination = Mac48Address::ConvertFrom (dest); - AddHeader(p, destination, protocolNumber); + AddHeader(packet, destination, protocolNumber); // Place the packet to be sent on the send queue - if (m_queue->Enqueue(p) == false ) + if (m_queue->Enqueue(packet) == false ) { return false; } @@ -347,7 +345,8 @@ CsmaNetDevice::SendTo ( if (m_txMachineState == READY) { // Store the next packet to be transmitted - if (m_queue->Dequeue (m_currentPkt)) + m_currentPkt = m_queue->Dequeue (); + if (m_currentPkt != 0) { TransmitStart(); } @@ -359,8 +358,8 @@ void CsmaNetDevice::TransmitStart () { NS_LOG_FUNCTION; - NS_LOG_LOGIC ("m_currentPkt=" << &m_currentPkt); - NS_LOG_LOGIC ("UID is " << m_currentPkt.GetUid ()); + NS_LOG_LOGIC ("m_currentPkt=" << m_currentPkt); + NS_LOG_LOGIC ("UID is " << m_currentPkt->GetUid ()); // // This function is called to start the process of transmitting a packet. // We need to tell the channel that we've started wiggling the wire and @@ -399,7 +398,7 @@ CsmaNetDevice::TransmitStart () { // Channel is free, transmit packet m_txMachineState = BUSY; - Time tEvent = Seconds (m_bps.CalculateTxTime(m_currentPkt.GetSize())); + Time tEvent = Seconds (m_bps.CalculateTxTime(m_currentPkt->GetSize())); NS_LOG_LOGIC ("Schedule TransmitCompleteEvent in " << tEvent.GetSeconds () << "sec"); @@ -426,12 +425,11 @@ void CsmaNetDevice::TransmitAbort (void) { NS_LOG_FUNCTION; - NS_LOG_LOGIC ("Pkt UID is " << m_currentPkt.GetUid () << ")"); + NS_LOG_LOGIC ("Pkt UID is " << m_currentPkt->GetUid () << ")"); // Try to transmit a new packet - bool found; - found = m_queue->Dequeue (m_currentPkt); - NS_ASSERT_MSG(found, "IsEmpty false but no Packet on queue?"); + m_currentPkt = m_queue->Dequeue (); + NS_ASSERT_MSG(m_currentPkt != 0, "IsEmpty false but no Packet on queue?"); m_backoff.ResetBackoffTime(); m_txMachineState = READY; TransmitStart (); @@ -452,7 +450,7 @@ CsmaNetDevice::TransmitCompleteEvent (void) NS_ASSERT(m_channel->GetState() == TRANSMITTING); m_txMachineState = GAP; - NS_LOG_LOGIC ("Pkt UID is " << m_currentPkt.GetUid () << ")"); + NS_LOG_LOGIC ("Pkt UID is " << m_currentPkt->GetUid () << ")"); m_channel->TransmitEnd (); NS_LOG_LOGIC ("Schedule TransmitReadyEvent in " @@ -482,9 +480,8 @@ CsmaNetDevice::TransmitReadyEvent (void) } else { - bool found; - found = m_queue->Dequeue (m_currentPkt); - NS_ASSERT_MSG(found, "IsEmpty false but no Packet on queue?"); + m_currentPkt = m_queue->Dequeue (); + NS_ASSERT_MSG(m_currentPkt != 0, "IsEmpty false but no Packet on queue?"); TransmitStart (); } } @@ -497,12 +494,12 @@ CsmaNetDevice::GetTraceResolver (void) const resolver->AddComposite ("queue", m_queue); resolver->AddSource ("rx", TraceDoc ("receive MAC packet", - "const Packet &", "packet received"), + "Ptr", "packet received"), m_rxTrace, CsmaTraceType (CsmaTraceType::RX)); resolver->AddSource ("drop", TraceDoc ("drop MAC packet", - "const Packet &", "packet dropped"), + "Ptr", "packet dropped"), m_dropTrace, CsmaTraceType (CsmaTraceType::DROP)); resolver->SetParentResolver (NetDevice::GetTraceResolver ()); @@ -547,7 +544,7 @@ void CsmaNetDevice::AddReceiveErrorModel (Ptr em) } void -CsmaNetDevice::Receive (const Packet& packet) +CsmaNetDevice::Receive (Ptr packet) { NS_LOG_FUNCTION; @@ -556,26 +553,25 @@ CsmaNetDevice::Receive (const Packet& packet) Mac48Address broadcast; Mac48Address multicast; Mac48Address destination; - Packet p = packet; - NS_LOG_LOGIC ("UID is " << p.GetUid()); + NS_LOG_LOGIC ("UID is " << packet->GetUid()); // Only receive if send side of net device is enabled if (!IsReceiveEnabled()) { - m_dropTrace (p); + m_dropTrace (packet); return; } if (m_encapMode == RAW) { ForwardUp (packet, 0, GetBroadcast ()); - m_dropTrace (p); + m_dropTrace (packet); return; } - p.RemoveTrailer(trailer); - trailer.CheckFcs(p); - p.RemoveHeader(header); + packet->RemoveTrailer(trailer); + trailer.CheckFcs(packet); + packet->RemoveHeader(header); NS_LOG_LOGIC ("Pkt destination is " << header.GetDestination ()); // @@ -604,11 +600,11 @@ CsmaNetDevice::Receive (const Packet& packet) (header.GetDestination () != destination)) { NS_LOG_LOGIC ("Dropping pkt "); - m_dropTrace (p); + m_dropTrace (packet); return; } - if (m_receiveErrorModel && m_receiveErrorModel->IsCorrupt (p) ) + if (m_receiveErrorModel && m_receiveErrorModel->IsCorrupt (packet) ) { NS_LOG_LOGIC ("Dropping pkt due to error model "); m_dropTrace (packet); @@ -616,7 +612,7 @@ CsmaNetDevice::Receive (const Packet& packet) } else { - m_rxTrace (p); + m_rxTrace (packet); // // protocol must be initialized to avoid a compiler warning in the RAW // case that breaks the optimized build. @@ -632,7 +628,7 @@ CsmaNetDevice::Receive (const Packet& packet) case LLC: { LlcSnapHeader llc; - p.RemoveHeader (llc); + packet->RemoveHeader (llc); protocol = llc.GetType (); } break; @@ -640,8 +636,7 @@ CsmaNetDevice::Receive (const Packet& packet) NS_ASSERT (false); break; } - ForwardUp (p, protocol, header.GetSource ()); - return; + ForwardUp (packet, protocol, header.GetSource ()); } } diff --git a/src/devices/csma/csma-net-device.h b/src/devices/csma/csma-net-device.h index 1ce38d098..42a7e55d2 100644 --- a/src/devices/csma/csma-net-device.h +++ b/src/devices/csma/csma-net-device.h @@ -214,7 +214,7 @@ enum CsmaEncapsulationMode { * @see CsmaChannel * \param p a reference to the received packet */ - void Receive (const Packet& p); + void Receive (Ptr p); /** * @brief Make and return a MAC multicast address using the provided @@ -290,7 +290,7 @@ protected: * \param protocolNumber In some protocols, identifies the type of * payload contained in this packet. */ - void AddHeader (Packet& p, Mac48Address dest, + void AddHeader (Ptr p, Mac48Address dest, uint16_t protocolNumber); /** * Removes, from a packet of data, all headers and trailers that @@ -302,7 +302,7 @@ protected: * \return Returns true if the packet should be forwarded up the * protocol stack. */ - bool ProcessHeader (Packet& p, uint16_t & param); + bool ProcessHeader (Ptr p, uint16_t & param); private: // disable copy constructor and operator = @@ -327,7 +327,7 @@ private: * \param protocolNumber -- this parameter is not used here * \return true if success, false on failure */ - virtual bool SendTo (const Packet& p, const Address& dest, uint16_t protocolNumber); + virtual bool SendTo (Ptr p, const Address& dest, uint16_t protocolNumber); /** * Start Sending a Packet Down the Wire. @@ -449,7 +449,7 @@ private: * currently transmitting) or packet that is currently being * transmitted. */ - Packet m_currentPkt; + Ptr m_currentPkt; /** * The CsmaChannel to which this CsmaNetDevice has been * attached. @@ -478,8 +478,8 @@ private: * @see class CallBackTraceSource * @see class TraceResolver */ - CallbackTraceSource m_rxTrace; - CallbackTraceSource m_dropTrace; + CallbackTraceSource > m_rxTrace; + CallbackTraceSource > m_dropTrace; }; diff --git a/src/devices/point-to-point/point-to-point-channel.cc b/src/devices/point-to-point/point-to-point-channel.cc index 3760848fb..d8018af1c 100644 --- a/src/devices/point-to-point/point-to-point-channel.cc +++ b/src/devices/point-to-point/point-to-point-channel.cc @@ -92,13 +92,13 @@ PointToPointChannel::Attach(Ptr device) } bool -PointToPointChannel::TransmitStart(Packet& p, - Ptr src, - const Time& txTime) +PointToPointChannel::TransmitStart(Ptr p, + Ptr src, + const Time& txTime) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p << src); - NS_LOG_LOGIC ("UID is " << p.GetUid () << ")"); + NS_LOG_PARAMS (this << p << src); + NS_LOG_LOGIC ("UID is " << p->GetUid () << ")"); NS_ASSERT(m_link[0].m_state != INITIALIZING); NS_ASSERT(m_link[1].m_state != INITIALIZING); diff --git a/src/devices/point-to-point/point-to-point-channel.h b/src/devices/point-to-point/point-to-point-channel.h index 64fba4f08..8fe9d27a0 100644 --- a/src/devices/point-to-point/point-to-point-channel.h +++ b/src/devices/point-to-point/point-to-point-channel.h @@ -22,13 +22,13 @@ #include #include "ns3/channel.h" #include "ns3/ptr.h" -#include "ns3/packet.h" #include "ns3/nstime.h" #include "ns3/data-rate.h" namespace ns3 { class PointToPointNetDevice; +class Packet; /** * \brief Simple Point To Point Channel. @@ -75,7 +75,7 @@ public: * \param delay Transmission delay through the channel */ PointToPointChannel (const std::string& name, - const DataRate& bps, const Time& delay); + const DataRate& bps, const Time& delay); /** * \brief Attach a given netdevice to this channel @@ -89,8 +89,9 @@ public: * \param src Source PointToPointNetDevice * \param txTime Transmit time to apply */ - bool TransmitStart (Packet& p, Ptr src, + bool TransmitStart (Ptr p, Ptr src, const Time& txTime); + /** * \brief Get number of devices on this channel * \returns number of devices on this channel diff --git a/src/devices/point-to-point/point-to-point-net-device.cc b/src/devices/point-to-point/point-to-point-net-device.cc index e28b2350c..c0ec4fab5 100644 --- a/src/devices/point-to-point/point-to-point-net-device.cc +++ b/src/devices/point-to-point/point-to-point-net-device.cc @@ -121,20 +121,20 @@ PointToPointNetDevice::~PointToPointNetDevice() } void -PointToPointNetDevice::AddHeader(Packet& p, uint16_t protocolNumber) +PointToPointNetDevice::AddHeader(Ptr p, uint16_t protocolNumber) { NS_LOG_FUNCTION; LlcSnapHeader llc; llc.SetType (protocolNumber); - p.AddHeader (llc); + p->AddHeader (llc); } bool -PointToPointNetDevice::ProcessHeader(Packet& p, uint16_t& param) +PointToPointNetDevice::ProcessHeader(Ptr p, uint16_t& param) { NS_LOG_FUNCTION; LlcSnapHeader llc; - p.RemoveHeader (llc); + p->RemoveHeader (llc); param = llc.GetType (); @@ -163,19 +163,18 @@ void PointToPointNetDevice::SetInterframeGap(const Time& t) m_tInterframeGap = t; } -bool PointToPointNetDevice::SendTo (const Packet& packet, const Address& dest, +bool PointToPointNetDevice::SendTo (Ptr packet, const Address& dest, uint16_t protocolNumber) { NS_LOG_FUNCTION; - Packet p = packet; - NS_LOG_LOGIC ("p=" << &p << ", dest=" << &dest); - NS_LOG_LOGIC ("UID is " << p.GetUid ()); + NS_LOG_LOGIC ("p=" << packet << ", dest=" << &dest); + NS_LOG_LOGIC ("UID is " << packet->GetUid ()); // GFR Comment. Why is this an assertion? Can't a link legitimately // "go down" during the simulation? Shouldn't we just wait for it // to come back up? NS_ASSERT (IsLinkUp ()); - AddHeader(p, protocolNumber); + AddHeader(packet, protocolNumber); // // This class simulates a point to point device. In the case of a serial @@ -187,22 +186,22 @@ bool PointToPointNetDevice::SendTo (const Packet& packet, const Address& dest, if (m_txMachineState == READY) { // We still enqueue and dequeue it to hit the tracing hooks - m_queue->Enqueue (p); - m_queue->Dequeue (p); - return TransmitStart (p); + m_queue->Enqueue (packet); + packet = m_queue->Dequeue (); + return TransmitStart (packet); } else { - return m_queue->Enqueue(p); + return m_queue->Enqueue(packet); } } bool -PointToPointNetDevice::TransmitStart (Packet &p) +PointToPointNetDevice::TransmitStart (Ptr p) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); - NS_LOG_LOGIC ("UID is " << p.GetUid () << ")"); + NS_LOG_PARAMS (this << p); + NS_LOG_LOGIC ("UID is " << p->GetUid () << ")"); // // This function is called to start the process of transmitting a packet. // We need to tell the channel that we've started wiggling the wire and @@ -210,7 +209,7 @@ PointToPointNetDevice::TransmitStart (Packet &p) // NS_ASSERT_MSG(m_txMachineState == READY, "Must be READY to transmit"); m_txMachineState = BUSY; - Time txTime = Seconds (m_bps.CalculateTxTime(p.GetSize())); + Time txTime = Seconds (m_bps.CalculateTxTime(p->GetSize())); Time txCompleteTime = txTime + m_tInterframeGap; NS_LOG_LOGIC ("Schedule TransmitCompleteEvent in " << @@ -233,8 +232,11 @@ void PointToPointNetDevice::TransmitComplete (void) // NS_ASSERT_MSG(m_txMachineState == BUSY, "Must be BUSY if transmitting"); m_txMachineState = READY; - Packet p; - if (!m_queue->Dequeue(p)) return; // Nothing to do at this point + Ptr p = m_queue->Dequeue (); + if (p == 0) + { + return; // Nothing to do at this point + } TransmitStart(p); } @@ -246,7 +248,7 @@ PointToPointNetDevice::GetTraceResolver (void) const resolver->AddComposite ("queue", m_queue); resolver->AddSource ("rx", TraceDoc ("receive MAC packet", - "const Packet &", "packet received"), + "Ptr", "packet received"), m_rxTrace, PointToPointTraceType (PointToPointTraceType::RX)); resolver->AddSource ("drop", @@ -303,14 +305,13 @@ void PointToPointNetDevice::AddReceiveErrorModel (Ptr em) AddInterface (em); } -void PointToPointNetDevice::Receive (Packet& p) +void PointToPointNetDevice::Receive (Ptr packet) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); + NS_LOG_PARAMS (this << packet); uint16_t protocol = 0; - Packet packet = p; - if (m_receiveErrorModel && m_receiveErrorModel->IsCorrupt (p) ) + if (m_receiveErrorModel && m_receiveErrorModel->IsCorrupt (packet) ) { m_dropTrace (packet); // Do not forward up; let this packet go diff --git a/src/devices/point-to-point/point-to-point-net-device.h b/src/devices/point-to-point/point-to-point-net-device.h index e597773ad..d33a47a4d 100644 --- a/src/devices/point-to-point/point-to-point-net-device.h +++ b/src/devices/point-to-point/point-to-point-net-device.h @@ -166,7 +166,7 @@ public: * @see PointToPointChannel * @param p a reference to the received packet */ - void Receive (Packet& p); + void Receive (Ptr p); private: /** @@ -215,14 +215,14 @@ private: * Adds the necessary headers and trailers to a packet of data in order to * respect the protocol implemented by the agent. */ - void AddHeader(Packet& p, uint16_t protocolNumber); + void AddHeader(Ptr p, uint16_t protocolNumber); /** * Removes, from a packet of data, all headers and trailers that * relate to the protocol implemented by the agent * \return Returns true if the packet should be forwarded up the * protocol stack. */ - bool ProcessHeader(Packet& p, uint16_t& param); + bool ProcessHeader(Ptr p, uint16_t& param); /** * Send a Packet Down the Wire. * @@ -236,7 +236,7 @@ private: * @param protocolNumber Protocol Number used to find protocol touse * @returns true if success, false on failure */ - virtual bool SendTo (const Packet& p, const Address& dest, + virtual bool SendTo (Ptr p, const Address& dest, uint16_t protocolNumber); /** * Start Sending a Packet Down the Wire. @@ -253,7 +253,7 @@ private: * @param p a reference to the packet to send * @returns true if success, false on failure */ - bool TransmitStart (Packet &p); + bool TransmitStart (Ptr p); /** * Stop Sending a Packet Down the Wire and Begin the Interframe Gap. * @@ -309,7 +309,7 @@ private: * @see class CallBackTraceSource * @see class TraceResolver */ - CallbackTraceSource m_rxTrace; + CallbackTraceSource > m_rxTrace; /** * The trace source for the packet drop events that the device can * fire. @@ -317,7 +317,7 @@ private: * @see class CallBackTraceSource * @see class TraceResolver */ - CallbackTraceSource m_dropTrace; + CallbackTraceSource > m_dropTrace; /** * Default data rate. Used for all newly created p2p net devices */ diff --git a/src/internet-node/arp-cache.cc b/src/internet-node/arp-cache.cc index 15a1d9316..4ab94a2d3 100644 --- a/src/internet-node/arp-cache.cc +++ b/src/internet-node/arp-cache.cc @@ -147,7 +147,7 @@ ArpCache::Entry::MarkDead (void) //NS_ASSERT (m_waiting != 0); UpdateSeen (); } -Packet +Ptr ArpCache::Entry::MarkAlive (Address macAddress) { NS_ASSERT (m_state == WAIT_REPLY); @@ -155,25 +155,25 @@ ArpCache::Entry::MarkAlive (Address macAddress) m_macAddress = macAddress; m_state = ALIVE; UpdateSeen (); - Packet waiting = m_waiting; + Ptr waiting = m_waiting; //m_waiting = 0; return waiting; } -Packet -ArpCache::Entry::UpdateWaitReply (Packet waiting) +Ptr +ArpCache::Entry::UpdateWaitReply (Ptr waiting) { NS_ASSERT (m_state == WAIT_REPLY); /* We are already waiting for an answer so * we dump the previously waiting packet and * replace it with this one. */ - Packet old = m_waiting; + Ptr old = m_waiting; m_waiting = waiting; return old; } void -ArpCache::Entry::MarkWaitReply (Packet waiting) +ArpCache::Entry::MarkWaitReply (Ptr waiting) { NS_ASSERT (m_state == ALIVE || m_state == DEAD); //NS_ASSERT (m_waiting == 0); diff --git a/src/internet-node/arp-cache.h b/src/internet-node/arp-cache.h index adf106009..1ae92db5e 100644 --- a/src/internet-node/arp-cache.h +++ b/src/internet-node/arp-cache.h @@ -101,16 +101,16 @@ public: * \param macAddress * \return */ - Packet MarkAlive (Address macAddress); + Ptr MarkAlive (Address macAddress); /** * \param waiting */ - void MarkWaitReply (Packet waiting); + void MarkWaitReply (Ptr waiting); /** * \param waiting * \return */ - Packet UpdateWaitReply (Packet waiting); + Ptr UpdateWaitReply (Ptr waiting); /** * \return True if the state of this entry is dead; false otherwise. */ @@ -144,7 +144,7 @@ public: ArpCacheEntryState_e m_state; Time m_lastSeen; Address m_macAddress; - Packet m_waiting; + Ptr m_waiting; }; private: diff --git a/src/internet-node/arp-ipv4-interface.cc b/src/internet-node/arp-ipv4-interface.cc index 3dc95f5a4..94ea7b8bd 100644 --- a/src/internet-node/arp-ipv4-interface.cc +++ b/src/internet-node/arp-ipv4-interface.cc @@ -61,10 +61,10 @@ ArpIpv4Interface::GetTraceResolver (void) const } void -ArpIpv4Interface::SendTo (Packet p, Ipv4Address dest) +ArpIpv4Interface::SendTo (Ptr p, Ipv4Address dest) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p << dest); + NS_LOG_PARAMS (this << p << dest); NS_ASSERT (GetDevice () != 0); if (GetDevice ()->NeedsArp ()) diff --git a/src/internet-node/arp-ipv4-interface.h b/src/internet-node/arp-ipv4-interface.h index c5d36a29f..cfb4bbe23 100644 --- a/src/internet-node/arp-ipv4-interface.h +++ b/src/internet-node/arp-ipv4-interface.h @@ -45,7 +45,7 @@ class ArpIpv4Interface : public Ipv4Interface protected: virtual Ptr GetTraceResolver (void) const; private: - virtual void SendTo (Packet p, Ipv4Address dest); + virtual void SendTo (Ptr p, Ipv4Address dest); Ptr m_node; }; diff --git a/src/internet-node/arp-l3-protocol.cc b/src/internet-node/arp-l3-protocol.cc index e32e07fde..129a64dca 100644 --- a/src/internet-node/arp-l3-protocol.cc +++ b/src/internet-node/arp-l3-protocol.cc @@ -82,13 +82,12 @@ ArpL3Protocol::FindCache (Ptr device) } void -ArpL3Protocol::Receive(Ptr device, const Packet& p, uint16_t protocol, const Address &from) +ArpL3Protocol::Receive(Ptr device, Ptr packet, uint16_t protocol, const Address &from) { NS_LOG_FUNCTION; ArpCache *cache = FindCache (device); ArpHeader arp; - Packet packet = p; - packet.RemoveHeader (arp); + packet->RemoveHeader (arp); NS_LOG_LOGIC ("ARP: received "<< (arp.IsRequest ()? "request" : "reply") << " node="<GetId ()<<", got request from " << @@ -118,7 +117,7 @@ ArpL3Protocol::Receive(Ptr device, const Packet& p, uint16_t protocol arp.GetSourceIpv4Address () << " for waiting entry -- flush"); Address from_mac = arp.GetSourceHardwareAddress (); - Packet waiting = entry->MarkAlive (from_mac); + Ptr waiting = entry->MarkAlive (from_mac); cache->GetInterface ()->Send (waiting, arp.GetSourceIpv4Address ()); } else @@ -145,7 +144,7 @@ ArpL3Protocol::Receive(Ptr device, const Packet& p, uint16_t protocol } } bool -ArpL3Protocol::Lookup (Packet &packet, Ipv4Address destination, +ArpL3Protocol::Lookup (Ptr packet, Ipv4Address destination, Ptr device, Address *hardwareDestination) { @@ -197,7 +196,7 @@ ArpL3Protocol::Lookup (Packet &packet, Ipv4Address destination, { NS_LOG_LOGIC ("node="<GetId ()<< ", wait reply for " << destination << " valid -- drop previous"); - Packet old = entry->UpdateWaitReply (packet); + Ptr old = entry->UpdateWaitReply (packet); // XXX report 'old' packet as 'dropped' } } @@ -229,8 +228,8 @@ ArpL3Protocol::SendArpRequest (ArpCache const *cache, Ipv4Address to) cache->GetInterface ()->GetAddress (), cache->GetDevice ()->GetBroadcast (), to); - Packet packet; - packet.AddHeader (arp); + Ptr packet = Create (); + packet->AddHeader (arp); cache->GetDevice ()->Send (packet, cache->GetDevice ()->GetBroadcast (), PROT_NUMBER); } @@ -246,8 +245,8 @@ ArpL3Protocol::SendArpReply (ArpCache const *cache, Ipv4Address toIp, Address to arp.SetReply (cache->GetDevice ()->GetAddress (), cache->GetInterface ()->GetAddress (), toMac, toIp); - Packet packet; - packet.AddHeader (arp); + Ptr packet = Create (); + packet->AddHeader (arp); cache->GetDevice ()->Send (packet, toMac, PROT_NUMBER); } diff --git a/src/internet-node/arp-l3-protocol.h b/src/internet-node/arp-l3-protocol.h index 5f6819df6..395801834 100644 --- a/src/internet-node/arp-l3-protocol.h +++ b/src/internet-node/arp-l3-protocol.h @@ -51,7 +51,7 @@ public: /** * \brief Recieve a packet */ - void Receive(Ptr device, const Packet& p, uint16_t protocol, const Address &from); + void Receive(Ptr device, Ptr p, uint16_t protocol, const Address &from); /** * \brief Perform an ARP lookup * \param p @@ -60,7 +60,7 @@ public: * \param hardwareDestination * \return */ - bool Lookup (Packet &p, Ipv4Address destination, + bool Lookup (Ptr p, Ipv4Address destination, Ptr device, Address *hardwareDestination); protected: diff --git a/src/internet-node/ascii-trace.cc b/src/internet-node/ascii-trace.cc index 6c4d11c87..b50c51243 100644 --- a/src/internet-node/ascii-trace.cc +++ b/src/internet-node/ascii-trace.cc @@ -58,46 +58,46 @@ AsciiTrace::TraceAllNetDeviceRx (void) void AsciiTrace::LogDevQueueEnqueue (TraceContext const &context, - Packet const &packet) + Ptr packet) { m_os << "+ "; m_os << Simulator::Now ().GetSeconds () << " "; context.Print (m_os); - m_os << " pkt-uid=" << packet.GetUid () << " "; - packet.Print (m_os); + m_os << " pkt-uid=" << packet->GetUid () << " "; + packet->Print (m_os); m_os << std::endl; } void AsciiTrace::LogDevQueueDequeue (TraceContext const &context, - Packet const &packet) + Ptr packet) { m_os << "- "; m_os << Simulator::Now ().GetSeconds () << " "; context.Print (m_os); - m_os << " pkt-uid=" << packet.GetUid () << " "; - packet.Print (m_os); + m_os << " pkt-uid=" << packet->GetUid () << " "; + packet->Print (m_os); m_os << std::endl; } void AsciiTrace::LogDevQueueDrop (TraceContext const &context, - Packet const &packet) + Ptr packet) { m_os << "d "; m_os << Simulator::Now ().GetSeconds () << " "; context.Print (m_os); - m_os << " pkt-uid=" << packet.GetUid () << " "; - packet.Print (m_os); + m_os << " pkt-uid=" << packet->GetUid () << " "; + packet->Print (m_os); m_os << std::endl; } void -AsciiTrace::LogDevRx (TraceContext const &context, const Packet &p) +AsciiTrace::LogDevRx (TraceContext const &context, Ptr p) { m_os << "r " << Simulator::Now ().GetSeconds () << " "; context.Print (m_os); - m_os << " pkt-uid=" << p.GetUid () << " "; - p.Print (m_os); + m_os << " pkt-uid=" << p->GetUid () << " "; + p->Print (m_os); m_os << std::endl; } diff --git a/src/internet-node/ascii-trace.h b/src/internet-node/ascii-trace.h index 084f82830..230e9db38 100644 --- a/src/internet-node/ascii-trace.h +++ b/src/internet-node/ascii-trace.h @@ -23,6 +23,7 @@ #include #include +#include "ns3/ptr.h" namespace ns3 { @@ -37,10 +38,10 @@ public: void TraceAllQueues (void); void TraceAllNetDeviceRx (void); private: - void LogDevQueueEnqueue (TraceContext const &context, const Packet &p); - void LogDevQueueDequeue (TraceContext const &context, const Packet &p); - void LogDevQueueDrop (TraceContext const &context, const Packet &p); - void LogDevRx (TraceContext const &context, const Packet &p); + void LogDevQueueEnqueue (TraceContext const &context, Ptr p); + void LogDevQueueDequeue (TraceContext const &context, Ptr p); + void LogDevQueueDrop (TraceContext const &context, Ptr p); + void LogDevRx (TraceContext const &context, Ptr p); std::ofstream m_os; }; diff --git a/src/internet-node/internet-node.h b/src/internet-node/internet-node.h index 0c855029e..5298ecb2d 100644 --- a/src/internet-node/internet-node.h +++ b/src/internet-node/internet-node.h @@ -31,8 +31,6 @@ namespace ns3 { -class Packet; - class InternetNode : public Node { public: @@ -44,7 +42,6 @@ protected: virtual void DoDispose(void); virtual Ptr GetTraceResolver (void) const; private: - bool ReceiveFromDevice (Ptr device, const Packet &p, uint16_t protocolNumber) const; void Construct (void); }; diff --git a/src/internet-node/ipv4-end-point.cc b/src/internet-node/ipv4-end-point.cc index 42cb45e37..50abdb7ae 100644 --- a/src/internet-node/ipv4-end-point.cc +++ b/src/internet-node/ipv4-end-point.cc @@ -20,6 +20,7 @@ */ #include "ipv4-end-point.h" +#include "ns3/packet.h" namespace ns3 { @@ -72,7 +73,7 @@ Ipv4EndPoint::SetPeer (Ipv4Address address, uint16_t port) } void -Ipv4EndPoint::SetRxCallback (Callback callback) +Ipv4EndPoint::SetRxCallback (Callback, Ipv4Address, uint16_t> callback) { m_rxCallback = callback; } @@ -84,7 +85,7 @@ Ipv4EndPoint::SetDestroyCallback (Callback callback) } void -Ipv4EndPoint::ForwardUp (const Packet &p, Ipv4Address saddr, uint16_t sport) +Ipv4EndPoint::ForwardUp (Ptr p, Ipv4Address saddr, uint16_t sport) { if (!m_rxCallback.IsNull ()) { diff --git a/src/internet-node/ipv4-end-point.h b/src/internet-node/ipv4-end-point.h index dfd0e6c57..eac324c86 100644 --- a/src/internet-node/ipv4-end-point.h +++ b/src/internet-node/ipv4-end-point.h @@ -44,17 +44,17 @@ public: void SetPeer (Ipv4Address address, uint16_t port); - void SetRxCallback (Callback callback); + void SetRxCallback (Callback, Ipv4Address, uint16_t> callback); void SetDestroyCallback (Callback callback); - void ForwardUp (const Packet &p, Ipv4Address saddr, uint16_t sport); + void ForwardUp (Ptr p, Ipv4Address saddr, uint16_t sport); private: Ipv4Address m_localAddr; uint16_t m_localPort; Ipv4Address m_peerAddr; uint16_t m_peerPort; - Callback m_rxCallback; + Callback, Ipv4Address, uint16_t> m_rxCallback; Callback m_destroyCallback; }; diff --git a/src/internet-node/ipv4-interface.cc b/src/internet-node/ipv4-interface.cc index 81e6bca65..5d9c90a8e 100644 --- a/src/internet-node/ipv4-interface.cc +++ b/src/internet-node/ipv4-interface.cc @@ -24,6 +24,7 @@ #include "ns3/net-device.h" #include "ns3/trace-resolver.h" #include "ns3/log.h" +#include "ns3/packet.h" NS_LOG_COMPONENT_DEFINE ("Ipv4Interface"); @@ -166,7 +167,7 @@ Ipv4Interface::SetDown (void) // public wrapper on private virtual function void -Ipv4Interface::Send(Packet p, Ipv4Address dest) +Ipv4Interface::Send(Ptr p, Ipv4Address dest) { NS_LOG_FUNCTION; if (IsUp()) { diff --git a/src/internet-node/ipv4-interface.h b/src/internet-node/ipv4-interface.h index 6a1808b23..9b0f517c2 100644 --- a/src/internet-node/ipv4-interface.h +++ b/src/internet-node/ipv4-interface.h @@ -145,12 +145,12 @@ public: * This method will eventually call the private * SendTo method which must be implemented by subclasses. */ - void Send(Packet p, Ipv4Address dest); + void Send(Ptr p, Ipv4Address dest); protected: virtual void DoDispose (void); private: - virtual void SendTo (Packet p, Ipv4Address dest) = 0; + virtual void SendTo (Ptr p, Ipv4Address dest) = 0; Ptr m_netdevice; bool m_ifup; Ipv4Address m_address; diff --git a/src/internet-node/ipv4-l3-protocol.cc b/src/internet-node/ipv4-l3-protocol.cc index 367a03895..f824abf6e 100644 --- a/src/internet-node/ipv4-l3-protocol.cc +++ b/src/internet-node/ipv4-l3-protocol.cc @@ -201,17 +201,17 @@ Ipv4L3Protocol::GetTraceResolver (void) const Ptr resolver = Create (); resolver->AddSource ("tx", TraceDoc ("send ipv4 packet to outgoing interface", - "const Packet &", "packet sent", + "Ptr", "packet sent", "uint32_t", "index of output ipv4 interface"), m_txTrace, Ipv4L3ProtocolTraceContextElement(Ipv4L3ProtocolTraceContextElement::TX)); resolver->AddSource ("rx", TraceDoc ("receive ipv4 packet from incoming interface", - "const Packet &", "packet received", + "Ptr", "packet received", "uint32_t", "index of input ipv4 interface"), m_rxTrace, Ipv4L3ProtocolTraceContextElement(Ipv4L3ProtocolTraceContextElement::RX)); resolver->AddSource ("drop", TraceDoc ("drop ipv4 packet", - "const Packet &", "packet dropped"), + "Ptr", "packet dropped"), m_dropTrace, Ipv4L3ProtocolTraceContextElement (Ipv4L3ProtocolTraceContextElement::DROP)); resolver->AddArray ("interfaces", m_interfaces.begin (), m_interfaces.end (), @@ -279,11 +279,11 @@ Ipv4L3Protocol::SetDefaultRoute (Ipv4Address nextHop, void Ipv4L3Protocol::Lookup ( Ipv4Header const &ipHeader, - Packet packet, + Ptr packet, Ipv4RoutingProtocol::RouteReplyCallback routeReply) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &ipHeader << &packet << &routeReply); + NS_LOG_PARAMS (this << &ipHeader << packet << &routeReply); Lookup (Ipv4RoutingProtocol::IF_INDEX_ANY, ipHeader, packet, routeReply); } @@ -292,11 +292,11 @@ void Ipv4L3Protocol::Lookup ( uint32_t ifIndex, Ipv4Header const &ipHeader, - Packet packet, + Ptr packet, Ipv4RoutingProtocol::RouteReplyCallback routeReply) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << ifIndex << &ipHeader << &packet << &routeReply); + NS_LOG_PARAMS (this << ifIndex << &ipHeader << packet << &routeReply); for (Ipv4RoutingProtocolList::const_iterator rprotoIter = m_routingProtocols.begin (); @@ -532,10 +532,10 @@ Ipv4L3Protocol::FindInterfaceForDevice (Ptr device) } void -Ipv4L3Protocol::Receive( Ptr device, const Packet& p, uint16_t protocol, const Address &from) +Ipv4L3Protocol::Receive( Ptr device, Ptr packet, uint16_t protocol, const Address &from) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &device << &p << protocol << from); + NS_LOG_PARAMS (this << &device << packet << protocol << from); NS_LOG_LOGIC ("Packet from " << from); @@ -548,14 +548,13 @@ Ipv4L3Protocol::Receive( Ptr device, const Packet& p, uint16_t protoc ipv4Interface = *i; if (ipv4Interface->GetDevice () == device) { - m_rxTrace (p, index); + m_rxTrace (packet, index); break; } index++; } - Packet packet = p; Ipv4Header ipHeader; - packet.RemoveHeader (ipHeader); + packet->RemoveHeader (ipHeader); if (!ipHeader.IsChecksumOk ()) { @@ -573,20 +572,20 @@ Ipv4L3Protocol::Receive( Ptr device, const Packet& p, uint16_t protoc void -Ipv4L3Protocol::Send (Packet const &packet, +Ipv4L3Protocol::Send (Ptr packet, Ipv4Address source, Ipv4Address destination, uint8_t protocol) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &packet << source << destination << protocol); + NS_LOG_PARAMS (this << packet << source << destination << protocol); Ipv4Header ipHeader; ipHeader.SetSource (source); ipHeader.SetDestination (destination); ipHeader.SetProtocol (protocol); - ipHeader.SetPayloadSize (packet.GetSize ()); + ipHeader.SetPayloadSize (packet->GetSize ()); ipHeader.SetTtl (m_defaultTtl); ipHeader.SetMayFragment (); ipHeader.SetIdentification (m_identification); @@ -600,10 +599,10 @@ Ipv4L3Protocol::Send (Packet const &packet, ifaceIter != m_interfaces.end (); ifaceIter++, ifaceIndex++) { Ptr outInterface = *ifaceIter; - Packet packetCopy = packet; + Ptr packetCopy = packet->Copy (); - NS_ASSERT (packetCopy.GetSize () <= outInterface->GetMtu ()); - packetCopy.AddHeader (ipHeader); + NS_ASSERT (packetCopy->GetSize () <= outInterface->GetMtu ()); + packetCopy->AddHeader (ipHeader); m_txTrace (packetCopy, ifaceIndex); outInterface->Send (packetCopy, destination); } @@ -626,11 +625,11 @@ Ipv4L3Protocol::Send (Packet const &packet, void Ipv4L3Protocol::SendRealOut (bool found, Ipv4Route const &route, - Packet packet, + Ptr packet, Ipv4Header const &ipHeader) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << found << &route << &packet << &ipHeader); + NS_LOG_PARAMS (this << found << &route << packet << &ipHeader); if (!found) { @@ -641,9 +640,9 @@ Ipv4L3Protocol::SendRealOut (bool found, NS_LOG_LOGIC ("Send via interface " << route.GetInterface ()); - packet.AddHeader (ipHeader); + packet->AddHeader (ipHeader); Ptr outInterface = GetInterface (route.GetInterface ()); - NS_ASSERT (packet.GetSize () <= outInterface->GetMtu ()); + NS_ASSERT (packet->GetSize () <= outInterface->GetMtu ()); m_txTrace (packet, route.GetInterface ()); if (route.IsGateway ()) { @@ -660,12 +659,12 @@ Ipv4L3Protocol::SendRealOut (bool found, bool Ipv4L3Protocol::Forwarding ( uint32_t ifIndex, - Packet const &packet, + Ptr packet, Ipv4Header &ipHeader, Ptr device) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (ifIndex << &packet << &ipHeader<< device); + NS_LOG_PARAMS (ifIndex << packet << &ipHeader<< device); for (Ipv4InterfaceList::const_iterator i = m_interfaces.begin (); i != m_interfaces.end (); i++) @@ -738,11 +737,11 @@ Ipv4L3Protocol::Forwarding ( } void -Ipv4L3Protocol::ForwardUp (Packet p, Ipv4Header const&ip, +Ipv4L3Protocol::ForwardUp (Ptr p, Ipv4Header const&ip, Ptr incomingInterface) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p << &ip); + NS_LOG_PARAMS (this << p << &ip); Ptr demux = m_node->QueryInterface (Ipv4L4Demux::iid); Ptr protocol = demux->GetProtocol (ip.GetProtocol ()); diff --git a/src/internet-node/ipv4-l3-protocol.h b/src/internet-node/ipv4-l3-protocol.h index 54dec0678..cd912e9f1 100644 --- a/src/internet-node/ipv4-l3-protocol.h +++ b/src/internet-node/ipv4-l3-protocol.h @@ -129,7 +129,7 @@ public: * - implement a per-NetDevice ARP cache * - send back arp replies on the right device */ - void Receive( Ptr device, const Packet& p, uint16_t protocol, const Address &from); + void Receive( Ptr device, Ptr p, uint16_t protocol, const Address &from); /** * \param packet packet to send @@ -140,7 +140,7 @@ public: * Higher-level layers call this method to send a packet * down the stack to the MAC and PHY layers. */ - void Send (Packet const &packet, Ipv4Address source, + void Send (Ptr packet, Ipv4Address source, Ipv4Address destination, uint8_t protocol); @@ -162,7 +162,7 @@ public: uint32_t interface); void Lookup (Ipv4Header const &ipHeader, - Packet packet, + Ptr packet, Ipv4RoutingProtocol::RouteReplyCallback routeReply); uint32_t GetNRoutes (void); @@ -218,18 +218,18 @@ protected: private: void Lookup (uint32_t ifIndex, Ipv4Header const &ipHeader, - Packet packet, + Ptr packet, Ipv4RoutingProtocol::RouteReplyCallback routeReply); void SendRealOut (bool found, Ipv4Route const &route, - Packet packet, + Ptr packet, Ipv4Header const &ipHeader); bool Forwarding (uint32_t ifIndex, - Packet const &packet, + Ptr packet, Ipv4Header &ipHeader, Ptr device); - void ForwardUp (Packet p, Ipv4Header const&ip, Ptr incomingInterface); + void ForwardUp (Ptr p, Ipv4Header const&ip, Ptr incomingInterface); uint32_t AddIpv4Interface (Ptr interface); void SetupLoopback (void); @@ -243,9 +243,9 @@ private: uint8_t m_defaultTtl; uint16_t m_identification; Ptr m_node; - CallbackTraceSource m_txTrace; - CallbackTraceSource m_rxTrace; - CallbackTraceSource m_dropTrace; + CallbackTraceSource, uint32_t> m_txTrace; + CallbackTraceSource, uint32_t> m_rxTrace; + CallbackTraceSource > m_dropTrace; Ipv4RoutingProtocolList m_routingProtocols; diff --git a/src/internet-node/ipv4-l4-protocol.h b/src/internet-node/ipv4-l4-protocol.h index 6f1dad714..2dc172bc9 100644 --- a/src/internet-node/ipv4-l4-protocol.h +++ b/src/internet-node/ipv4-l4-protocol.h @@ -65,7 +65,7 @@ public: * Called from lower-level layers to send the packet up * in the stack. */ - virtual void Receive(Packet& p, + virtual void Receive(Ptr p, Ipv4Address const &source, Ipv4Address const &destination, Ptr incomingInterface) = 0; diff --git a/src/internet-node/ipv4-loopback-interface.cc b/src/internet-node/ipv4-loopback-interface.cc index 30f18ad9e..317ae94ff 100644 --- a/src/internet-node/ipv4-loopback-interface.cc +++ b/src/internet-node/ipv4-loopback-interface.cc @@ -24,6 +24,7 @@ #include "ns3/net-device.h" #include "ns3/node.h" #include "ns3/mac48-address.h" +#include "ns3/packet.h" #include "ipv4-loopback-interface.h" #include "ipv4-l3-protocol.h" @@ -44,10 +45,10 @@ Ipv4LoopbackInterface::~Ipv4LoopbackInterface () } void -Ipv4LoopbackInterface::SendTo (Packet packet, Ipv4Address dest) +Ipv4LoopbackInterface::SendTo (Ptr packet, Ipv4Address dest) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &packet << dest); + NS_LOG_PARAMS (this << packet << dest); Ptr ipv4 = m_node->QueryInterface (Ipv4L3Protocol::iid); diff --git a/src/internet-node/ipv4-loopback-interface.h b/src/internet-node/ipv4-loopback-interface.h index 8e33f81d7..865d806d4 100644 --- a/src/internet-node/ipv4-loopback-interface.h +++ b/src/internet-node/ipv4-loopback-interface.h @@ -42,7 +42,7 @@ class Ipv4LoopbackInterface : public Ipv4Interface virtual ~Ipv4LoopbackInterface (); private: - virtual void SendTo (Packet p, Ipv4Address dest); + virtual void SendTo (Ptr p, Ipv4Address dest); Ptr m_node; }; diff --git a/src/internet-node/ipv4-static-routing.cc b/src/internet-node/ipv4-static-routing.cc index 8636631d8..ab9626ced 100644 --- a/src/internet-node/ipv4-static-routing.cc +++ b/src/internet-node/ipv4-static-routing.cc @@ -518,11 +518,11 @@ bool Ipv4StaticRouting::RequestRoute ( uint32_t ifIndex, Ipv4Header const &ipHeader, - Packet packet, + Ptr packet, RouteReplyCallback routeReply) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << ifIndex << &ipHeader << &packet << &routeReply); + NS_LOG_PARAMS (this << ifIndex << &ipHeader << packet << &routeReply); NS_LOG_LOGIC ("source = " << ipHeader.GetSource ()); @@ -541,7 +541,7 @@ Ipv4StaticRouting::RequestRoute ( for (uint32_t i = 0; i < mRoute->GetNOutputInterfaces (); ++i) { - Packet p = packet; + Ptr p = packet->Copy (); Ipv4Header h = ipHeader; Ipv4Route route = Ipv4Route::CreateHostRouteTo(h.GetDestination (), diff --git a/src/internet-node/ipv4-static-routing.h b/src/internet-node/ipv4-static-routing.h index cfa5408b9..8d92c49e7 100644 --- a/src/internet-node/ipv4-static-routing.h +++ b/src/internet-node/ipv4-static-routing.h @@ -141,7 +141,7 @@ public: */ virtual bool RequestRoute (uint32_t ifIndex, Ipv4Header const &ipHeader, - Packet packet, + Ptr packet, RouteReplyCallback routeReply); /** diff --git a/src/internet-node/pcap-trace.cc b/src/internet-node/pcap-trace.cc index 3378b52c5..495b25087 100644 --- a/src/internet-node/pcap-trace.cc +++ b/src/internet-node/pcap-trace.cc @@ -28,6 +28,7 @@ #include "ns3/pcap-writer.h" #include "ns3/node-list.h" #include "ns3/node.h" +#include "ns3/packet.h" #include "ipv4-l3-protocol.h" @@ -80,7 +81,7 @@ PcapTrace::GetStream (uint32_t nodeId, uint32_t interfaceId) } void -PcapTrace::LogIp (TraceContext const &context, Packet const &p, uint32_t interfaceIndex) +PcapTrace::LogIp (TraceContext const &context, Ptr p, uint32_t interfaceIndex) { NodeListIndex nodeIndex; context.GetElement (nodeIndex); diff --git a/src/internet-node/pcap-trace.h b/src/internet-node/pcap-trace.h index 3d0f6547a..dbe2ff29a 100644 --- a/src/internet-node/pcap-trace.h +++ b/src/internet-node/pcap-trace.h @@ -23,6 +23,7 @@ #include #include +#include "ns3/ptr.h" namespace ns3 { @@ -39,7 +40,7 @@ public: void TraceAllIp (void); private: PcapWriter *GetStream (uint32_t nodeId, uint32_t interfaceId); - void LogIp (TraceContext const &context, Packet const &p, uint32_t interfaceIndex); + void LogIp (TraceContext const &context, Ptr p, uint32_t interfaceIndex); std::string m_filename; struct Trace { uint32_t nodeId; diff --git a/src/internet-node/udp-l4-protocol.cc b/src/internet-node/udp-l4-protocol.cc index cd7246536..beb925e87 100644 --- a/src/internet-node/udp-l4-protocol.cc +++ b/src/internet-node/udp-l4-protocol.cc @@ -121,43 +121,43 @@ UdpL4Protocol::DeAllocate (Ipv4EndPoint *endPoint) } void -UdpL4Protocol::Receive(Packet& packet, +UdpL4Protocol::Receive(Ptr packet, Ipv4Address const &source, Ipv4Address const &destination, Ptr interface) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &packet << source << destination); + NS_LOG_PARAMS (this << packet << source << destination); UdpHeader udpHeader; - packet.RemoveHeader (udpHeader); + packet->RemoveHeader (udpHeader); Ipv4EndPointDemux::EndPoints endPoints = m_endPoints->Lookup (destination, udpHeader.GetDestination (), source, udpHeader.GetSource (), interface); for (Ipv4EndPointDemux::EndPointsI endPoint = endPoints.begin (); endPoint != endPoints.end (); endPoint++) { - (*endPoint)->ForwardUp (packet, source, udpHeader.GetSource ()); + (*endPoint)->ForwardUp (packet->Copy (), source, udpHeader.GetSource ()); } } void -UdpL4Protocol::Send (Packet packet, - Ipv4Address saddr, Ipv4Address daddr, - uint16_t sport, uint16_t dport) +UdpL4Protocol::Send (Ptr packet, + Ipv4Address saddr, Ipv4Address daddr, + uint16_t sport, uint16_t dport) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &packet << saddr << daddr << sport << dport); + NS_LOG_PARAMS (this << packet << saddr << daddr << sport << dport); UdpHeader udpHeader; udpHeader.SetDestination (dport); udpHeader.SetSource (sport); - udpHeader.SetPayloadSize (packet.GetSize ()); + udpHeader.SetPayloadSize (packet->GetSize ()); udpHeader.InitializeChecksum (saddr, - daddr, - PROT_NUMBER); + daddr, + PROT_NUMBER); - packet.AddHeader (udpHeader); + packet->AddHeader (udpHeader); Ptr ipv4 = m_node->QueryInterface (Ipv4L3Protocol::iid); if (ipv4 != 0) diff --git a/src/internet-node/udp-l4-protocol.h b/src/internet-node/udp-l4-protocol.h index 2fe4750cd..eb42add87 100644 --- a/src/internet-node/udp-l4-protocol.h +++ b/src/internet-node/udp-l4-protocol.h @@ -73,7 +73,7 @@ public: * \param sport The source port number * \param dport The destination port number */ - void Send (Packet packet, + void Send (Ptr packet, Ipv4Address saddr, Ipv4Address daddr, uint16_t sport, uint16_t dport); /** @@ -84,7 +84,7 @@ public: * \param interface the interface from which the packet is coming. */ // inherited from Ipv4L4Protocol - virtual void Receive(Packet& p, + virtual void Receive(Ptr p, Ipv4Address const &source, Ipv4Address const &destination, Ptr interface); diff --git a/src/internet-node/udp-socket.cc b/src/internet-node/udp-socket.cc index ff695cbfd..5a56673b3 100644 --- a/src/internet-node/udp-socket.cc +++ b/src/internet-node/udp-socket.cc @@ -187,10 +187,10 @@ UdpSocket::Connect(const Address & address) } int -UdpSocket::Send (const Packet &p) +UdpSocket::Send (Ptr p) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); + NS_LOG_PARAMS (this << p); if (!m_connected) { @@ -201,7 +201,7 @@ UdpSocket::Send (const Packet &p) } int -UdpSocket::DoSend (const Packet &p) +UdpSocket::DoSend (Ptr p) { NS_LOG_FUNCTION; if (m_endPoint == 0) @@ -223,10 +223,10 @@ UdpSocket::DoSend (const Packet &p) } int -UdpSocket::DoSendTo (const Packet &p, const Address &address) +UdpSocket::DoSendTo (Ptr p, const Address &address) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p << address); + NS_LOG_PARAMS (this << p << address); if (!m_connected) { @@ -245,10 +245,10 @@ UdpSocket::DoSendTo (const Packet &p, const Address &address) } int -UdpSocket::DoSendTo (const Packet &p, Ipv4Address dest, uint16_t port) +UdpSocket::DoSendTo (Ptr p, Ipv4Address dest, uint16_t port) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p << dest << port); + NS_LOG_PARAMS (this << p << dest << port); Ipv4Route routeToDest; @@ -281,9 +281,9 @@ UdpSocket::DoSendTo (const Packet &p, Ipv4Address dest, uint16_t port) { Ipv4Address addri = ipv4->GetAddress (i); Ipv4Mask maski = ipv4->GetNetworkMask (i); - m_udp->Send (p, addri, addri.GetSubnetDirectedBroadcast (maski), + m_udp->Send (p->Copy (), addri, addri.GetSubnetDirectedBroadcast (maski), m_endPoint->GetLocalPort (), port); - NotifyDataSent (p.GetSize ()); + NotifyDataSent (p->GetSize ()); } } else if (ipv4->GetIfIndexForDestination(dest, localIfIndex)) @@ -291,7 +291,7 @@ UdpSocket::DoSendTo (const Packet &p, Ipv4Address dest, uint16_t port) NS_LOG_LOGIC ("Route exists"); m_udp->Send (p, ipv4->GetAddress (localIfIndex), dest, m_endPoint->GetLocalPort (), port); - NotifyDataSent (p.GetSize ()); + NotifyDataSent (p->GetSize ()); return 0; } else @@ -305,10 +305,10 @@ UdpSocket::DoSendTo (const Packet &p, Ipv4Address dest, uint16_t port) } int -UdpSocket::SendTo(const Address &address, const Packet &p) +UdpSocket::SendTo(const Address &address, Ptr p) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << address << &p); + NS_LOG_PARAMS (this << address << p); InetSocketAddress transport = InetSocketAddress::ConvertFrom (address); Ipv4Address ipv4 = transport.GetIpv4 (); uint16_t port = transport.GetPort (); @@ -316,10 +316,10 @@ UdpSocket::SendTo(const Address &address, const Packet &p) } void -UdpSocket::ForwardUp (const Packet &packet, Ipv4Address ipv4, uint16_t port) +UdpSocket::ForwardUp (Ptr packet, Ipv4Address ipv4, uint16_t port) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &packet << ipv4 << port); + NS_LOG_PARAMS (this << packet << ipv4 << port); if (m_shutdownRecv) { @@ -327,8 +327,7 @@ UdpSocket::ForwardUp (const Packet &packet, Ipv4Address ipv4, uint16_t port) } Address address = InetSocketAddress (ipv4, port); - Packet p = packet; - NotifyDataReceived (p, address); + NotifyDataReceived (packet, address); } } //namespace ns3 @@ -350,15 +349,15 @@ namespace ns3 { class UdpSocketTest: public Test { - Packet m_receivedPacket; - Packet m_receivedPacket2; + Ptr m_receivedPacket; + Ptr m_receivedPacket2; public: virtual bool RunTests (void); UdpSocketTest (); - void ReceivePacket (Ptr socket, const Packet &packet, const Address &from); - void ReceivePacket2 (Ptr socket, const Packet &packet, const Address &from); + void ReceivePacket (Ptr socket, Ptr packet, const Address &from); + void ReceivePacket2 (Ptr socket, Ptr packet, const Address &from); }; @@ -366,12 +365,12 @@ UdpSocketTest::UdpSocketTest () : Test ("UdpSocket") {} -void UdpSocketTest::ReceivePacket (Ptr socket, const Packet &packet, const Address &from) +void UdpSocketTest::ReceivePacket (Ptr socket, Ptr packet, const Address &from) { m_receivedPacket = packet; } -void UdpSocketTest::ReceivePacket2 (Ptr socket, const Packet &packet, const Address &from) +void UdpSocketTest::ReceivePacket2 (Ptr socket, Ptr packet, const Address &from) { m_receivedPacket2 = packet; } @@ -421,20 +420,21 @@ UdpSocketTest::RunTests (void) // ------ Now the tests ------------ // Unicast test - m_receivedPacket = Packet (); + m_receivedPacket = Create (); NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("10.0.0.1"), 1234), - Packet (123)), 0); + Create (123)), 0); Simulator::Run (); - NS_TEST_ASSERT_EQUAL (m_receivedPacket.GetSize (), 123); + NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); // Simple broadcast test - m_receivedPacket = Packet (); + m_receivedPacket = Create (); NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234), - Packet (123)), 0); + Create (123)), 0); Simulator::Run (); - NS_TEST_ASSERT_EQUAL (m_receivedPacket.GetSize (), 123); + NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); + // Broadcast test with multiple receiving sockets @@ -444,13 +444,13 @@ UdpSocketTest::RunTests (void) rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket2, this)); NS_TEST_ASSERT_EQUAL (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("0.0.0.0"), 1234)), 0); - m_receivedPacket = Packet (); - m_receivedPacket2 = Packet (); + m_receivedPacket = Create (); + m_receivedPacket2 = Create (); NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234), - Packet (123)), 0); + Create (123)), 0); Simulator::Run (); - NS_TEST_ASSERT_EQUAL (m_receivedPacket.GetSize (), 123); - NS_TEST_ASSERT_EQUAL (m_receivedPacket2.GetSize (), 123); + NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); + NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 123); Simulator::Destroy (); diff --git a/src/internet-node/udp-socket.h b/src/internet-node/udp-socket.h index 332e679d7..eaa0cec43 100644 --- a/src/internet-node/udp-socket.h +++ b/src/internet-node/udp-socket.h @@ -51,8 +51,8 @@ public: virtual int ShutdownSend (void); virtual int ShutdownRecv (void); virtual int Connect(const Address &address); - virtual int Send (const Packet &p); - virtual int SendTo(const Address &address,const Packet &p); + virtual int Send (Ptr p); + virtual int SendTo(const Address &address,Ptr p); private: @@ -60,11 +60,11 @@ private: friend class Udp; // invoked by Udp class int FinishBind (void); - void ForwardUp (const Packet &p, Ipv4Address ipv4, uint16_t port); + void ForwardUp (Ptr p, Ipv4Address ipv4, uint16_t port); void Destroy (void); - int DoSend (const Packet &p); - int DoSendTo (const Packet &p, const Address &daddr); - int DoSendTo (const Packet &p, Ipv4Address daddr, uint16_t dport); + int DoSend (Ptr p); + int DoSendTo (Ptr p, const Address &daddr); + int DoSendTo (Ptr p, Ipv4Address daddr, uint16_t dport); Ipv4EndPoint *m_endPoint; Ptr m_node; diff --git a/src/node/drop-tail-queue.cc b/src/node/drop-tail-queue.cc index 456af4bcc..3e843564d 100644 --- a/src/node/drop-tail-queue.cc +++ b/src/node/drop-tail-queue.cc @@ -58,10 +58,10 @@ DropTailQueue::GetMaxPackets (void) } bool -DropTailQueue::DoEnqueue (const Packet& p) +DropTailQueue::DoEnqueue (Ptr p) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); + NS_LOG_PARAMS (this << p); if (m_packets.size () >= m_maxPackets) { @@ -74,11 +74,11 @@ DropTailQueue::DoEnqueue (const Packet& p) return true; } -bool -DropTailQueue::DoDequeue (Packet& p) +Ptr +DropTailQueue::DoDequeue (void) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); + NS_LOG_PARAMS (this); if (m_packets.empty()) { @@ -86,19 +86,19 @@ DropTailQueue::DoDequeue (Packet& p) return false; } - p = m_packets.front (); + Ptr p = m_packets.front (); m_packets.pop (); - NS_LOG_LOGIC ("Popped " << &p); + NS_LOG_LOGIC ("Popped " << p); - return true; + return p; } -bool -DropTailQueue::DoPeek (Packet& p) const +Ptr +DropTailQueue::DoPeek (void) const { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); + NS_LOG_PARAMS (this); if (m_packets.empty()) { @@ -106,9 +106,9 @@ DropTailQueue::DoPeek (Packet& p) const return false; } - p = m_packets.front (); + Ptr p = m_packets.front (); - return true; + return p; } } // namespace ns3 @@ -139,7 +139,11 @@ DropTailQueueTest::RunTests (void) DropTailQueue queue; queue.SetMaxPackets (3); - Packet p1, p2, p3, p4; + Ptr p1, p2, p3, p4; + p1 = Create (); + p2 = Create (); + p3 = Create (); + p4 = Create (); NS_TEST_ASSERT_EQUAL (queue.GetNPackets (), 0); queue.Enqueue (p1); @@ -151,21 +155,25 @@ DropTailQueueTest::RunTests (void) queue.Enqueue (p4); // will be dropped NS_TEST_ASSERT_EQUAL (queue.GetNPackets (), 3); - Packet p; + Ptr p; - NS_TEST_ASSERT (queue.Dequeue (p)); + p = queue.Dequeue (); + NS_TEST_ASSERT (p != 0); NS_TEST_ASSERT_EQUAL (queue.GetNPackets (), 2); - NS_TEST_ASSERT_EQUAL (p.GetUid (), p1.GetUid ()); + NS_TEST_ASSERT_EQUAL (p->GetUid (), p1->GetUid ()); - NS_TEST_ASSERT (queue.Dequeue (p)); + p = queue.Dequeue (); + NS_TEST_ASSERT (p != 0); NS_TEST_ASSERT_EQUAL (queue.GetNPackets (), 1); - NS_TEST_ASSERT_EQUAL (p.GetUid (), p2.GetUid ()); + NS_TEST_ASSERT_EQUAL (p->GetUid (), p2->GetUid ()); - NS_TEST_ASSERT (queue.Dequeue (p)); + p = queue.Dequeue (); + NS_TEST_ASSERT (p != 0); NS_TEST_ASSERT_EQUAL (queue.GetNPackets (), 0); - NS_TEST_ASSERT_EQUAL (p.GetUid (), p3.GetUid ()); + NS_TEST_ASSERT_EQUAL (p->GetUid (), p3->GetUid ()); - NS_TEST_ASSERT (!queue.Dequeue (p)); + p = queue.Dequeue (); + NS_TEST_ASSERT (p == 0); return result; } diff --git a/src/node/drop-tail-queue.h b/src/node/drop-tail-queue.h index 15fd1faee..3569db468 100644 --- a/src/node/drop-tail-queue.h +++ b/src/node/drop-tail-queue.h @@ -57,12 +57,12 @@ public: uint32_t GetMaxPackets (void); private: - virtual bool DoEnqueue (const Packet& p); - virtual bool DoDequeue (Packet &p); - virtual bool DoPeek (Packet &p) const; + virtual bool DoEnqueue (Ptr p); + virtual Ptr DoDequeue (void); + virtual Ptr DoPeek (void) const; private: - std::queue m_packets; + std::queue > m_packets; uint32_t m_maxPackets; }; diff --git a/src/node/ethernet-trailer.cc b/src/node/ethernet-trailer.cc index 049fe24d0..055b21aee 100644 --- a/src/node/ethernet-trailer.cc +++ b/src/node/ethernet-trailer.cc @@ -56,7 +56,7 @@ EthernetTrailer::EnableFcs (bool enable) } bool -EthernetTrailer::CheckFcs (const Packet& p) const +EthernetTrailer::CheckFcs (Ptr p) const { if (!m_calcFcs) { @@ -68,7 +68,7 @@ EthernetTrailer::CheckFcs (const Packet& p) const } void -EthernetTrailer::CalcFcs (const Packet& p) +EthernetTrailer::CalcFcs (Ptr p) { NS_LOG_WARN ("FCS calculation is not yet enabled"); } diff --git a/src/node/ethernet-trailer.h b/src/node/ethernet-trailer.h index c6deeb6ab..5c574c6d8 100644 --- a/src/node/ethernet-trailer.h +++ b/src/node/ethernet-trailer.h @@ -23,10 +23,12 @@ #define ETHERNET_TRAILER_H #include "ns3/trailer.h" -#include "ns3/packet.h" #include namespace ns3 { + +class Packet; + /** * \brief Packet trailer for Ethernet * @@ -55,7 +57,7 @@ public: * calculated. The packet should not currently contain an FCS * trailer. */ - void CalcFcs (const Packet& p); + void CalcFcs (Ptr p); /** * \brief Sets the FCS to a new value * \param fcs New FCS value @@ -74,7 +76,7 @@ public: * If FCS checking is disabled, this method will always * return true. */ - bool CheckFcs (const Packet& p) const; + bool CheckFcs (Ptr p) const; /** *\return Returns the size of the trailer diff --git a/src/node/ipv4.h b/src/node/ipv4.h index 0cd1d129e..a0ece2823 100644 --- a/src/node/ipv4.h +++ b/src/node/ipv4.h @@ -66,7 +66,7 @@ public: * inserted and consequently the protocol type has to change). * */ - typedef Callback RouteReplyCallback; + typedef Callback, const Ipv4Header&> RouteReplyCallback; /** * \brief Asynchronously requests a route for a given packet and IP header @@ -103,7 +103,7 @@ public: */ virtual bool RequestRoute (uint32_t ifIndex, const Ipv4Header &ipHeader, - Packet packet, + Ptr packet, RouteReplyCallback routeReply) = 0; /** diff --git a/src/node/net-device.cc b/src/node/net-device.cc index 888243c0f..cf2a38977 100644 --- a/src/node/net-device.cc +++ b/src/node/net-device.cc @@ -24,6 +24,7 @@ #include "ns3/object.h" #include "ns3/log.h" #include "ns3/trace-resolver.h" +#include "ns3/packet.h" #include "channel.h" #include "net-device.h" #include "node.h" @@ -212,7 +213,7 @@ NetDevice::DisablePointToPoint (void) // Receive packet from above bool -NetDevice::Send(const Packet& p, const Address& dest, uint16_t protocolNumber) +NetDevice::Send(Ptr p, const Address& dest, uint16_t protocolNumber) { NS_LOG_FUNCTION; if (m_isUp) @@ -234,12 +235,12 @@ NetDevice::GetChannel (void) const // Receive packets from below bool -NetDevice::ForwardUp(const Packet& p, uint16_t param, const Address &from) +NetDevice::ForwardUp(Ptr p, uint16_t param, const Address &from) { NS_LOG_FUNCTION; bool retval = false; - NS_LOG_LOGIC ("UID is " << p.GetUid() << " device is: " << GetName()); + NS_LOG_LOGIC ("UID is " << p->GetUid() << " device is: " << GetName()); if (!m_receiveCallback.IsNull ()) { diff --git a/src/node/net-device.h b/src/node/net-device.h index 7c95d5b84..7212c98d2 100644 --- a/src/node/net-device.h +++ b/src/node/net-device.h @@ -25,7 +25,6 @@ #include #include #include "ns3/callback.h" -#include "ns3/packet.h" #include "ns3/object.h" #include "ns3/ptr.h" #include "address.h" @@ -37,6 +36,7 @@ class Node; class TraceResolver; class TraceContext; class Channel; +class Packet; /** * \brief Network layer to device interface @@ -210,7 +210,7 @@ public: * * \return whether the Send operation succeeded */ - bool Send(const Packet& p, const Address& dest, uint16_t protocolNumber); + bool Send(Ptr packet, const Address& dest, uint16_t protocolNumber); /** * \returns the node base class which contains this network * interface. @@ -239,7 +239,7 @@ public: * \returns true if the callback could handle the packet successfully, false * otherwise. */ - typedef Callback,const Packet &,uint16_t,const Address &> ReceiveCallback; + typedef Callback,Ptr,uint16_t,const Address &> ReceiveCallback; /** * \param cb callback to invoke whenever a packet has been received and must @@ -304,7 +304,7 @@ public: * forwards it to the higher layers by calling this method * which is responsible for passing it up to the Rx callback. */ - bool ForwardUp (const Packet& p, uint16_t param, const Address &address); + bool ForwardUp (Ptr p, uint16_t param, const Address &address); /** @@ -327,7 +327,7 @@ public: * method. When the link is Up, this method is invoked to ask * subclasses to forward packets. Subclasses MUST override this method. */ - virtual bool SendTo (const Packet& p, const Address &dest, uint16_t protocolNumber) = 0; + virtual bool SendTo (Ptr p, const Address &dest, uint16_t protocolNumber) = 0; /** * \returns true if this NetDevice needs the higher-layers * to perform ARP over it, false otherwise. diff --git a/src/node/node.cc b/src/node/node.cc index 171af4e2d..8aaa56f16 100644 --- a/src/node/node.cc +++ b/src/node/node.cc @@ -23,6 +23,7 @@ #include "net-device.h" #include "application.h" #include "packet-socket-factory.h" +#include "ns3/packet.h" #include "ns3/simulator.h" #include "ns3/composite-trace-resolver.h" @@ -199,7 +200,7 @@ Node::UnregisterProtocolHandler (ProtocolHandler handler) } bool -Node::ReceiveFromDevice (Ptr device, const Packet &packet, +Node::ReceiveFromDevice (Ptr device, Ptr packet, uint16_t protocol, const Address &from) { bool found = false; diff --git a/src/node/node.h b/src/node/node.h index cd032e2e0..bc4639b48 100644 --- a/src/node/node.h +++ b/src/node/node.h @@ -26,6 +26,7 @@ #include "ns3/object.h" #include "ns3/callback.h" #include "ns3/trace-context-element.h" +#include "ns3/ptr.h" namespace ns3 { @@ -154,7 +155,7 @@ public: /** * A protocol handler */ - typedef Callback, const Packet &,uint16_t,const Address &> ProtocolHandler; + typedef Callback, Ptr,uint16_t,const Address &> ProtocolHandler; /** * \param handler the handler to register * \param protocolType the type of protocol this handler is @@ -198,7 +199,7 @@ private: */ virtual void NotifyDeviceAdded (Ptr device); - bool ReceiveFromDevice (Ptr device, const Packet &packet, + bool ReceiveFromDevice (Ptr device, Ptr, uint16_t protocol, const Address &from); void Construct (void); diff --git a/src/node/packet-socket.cc b/src/node/packet-socket.cc index 000d95966..8fbdecffa 100644 --- a/src/node/packet-socket.cc +++ b/src/node/packet-socket.cc @@ -23,6 +23,7 @@ #include "packet-socket-address.h" #include "ns3/log.h" #include "ns3/node.h" +#include "ns3/packet.h" NS_LOG_COMPONENT_DEFINE ("PacketSocket"); @@ -203,7 +204,7 @@ PacketSocket::Connect(const Address &ad) } int -PacketSocket::Send (const Packet &p) +PacketSocket::Send (Ptr p) { NS_LOG_FUNCTION; if (m_state == STATE_OPEN || @@ -216,7 +217,7 @@ PacketSocket::Send (const Packet &p) } int -PacketSocket::SendTo(const Address &address, const Packet &p) +PacketSocket::SendTo(const Address &address, Ptr p) { NS_LOG_FUNCTION; PacketSocketAddress ad; @@ -272,7 +273,7 @@ PacketSocket::SendTo(const Address &address, const Packet &p) } if (!error) { - NotifyDataSent (p.GetSize ()); + NotifyDataSent (p->GetSize ()); } if (error) @@ -288,7 +289,7 @@ PacketSocket::SendTo(const Address &address, const Packet &p) } void -PacketSocket::ForwardUp (Ptr device, const Packet &packet, +PacketSocket::ForwardUp (Ptr device, Ptr packet, uint16_t protocol, const Address &from) { NS_LOG_FUNCTION; @@ -297,15 +298,13 @@ PacketSocket::ForwardUp (Ptr device, const Packet &packet, return; } - Packet p = packet; - PacketSocketAddress address; address.SetPhysicalAddress (from); address.SetSingleDevice (device->GetIfIndex ()); address.SetProtocol (protocol); - NS_LOG_LOGIC ("UID is " << packet.GetUid() << " PacketSocket " << this); - NotifyDataReceived (p, address); + NS_LOG_LOGIC ("UID is " << packet->GetUid() << " PacketSocket " << this); + NotifyDataReceived (packet, address); } }//namespace ns3 diff --git a/src/node/packet-socket.h b/src/node/packet-socket.h index 8dc1b9e62..9fc07f1ff 100644 --- a/src/node/packet-socket.h +++ b/src/node/packet-socket.h @@ -82,15 +82,15 @@ public: virtual int ShutdownSend (void); virtual int ShutdownRecv (void); virtual int Connect(const Address &address); - virtual int Send (const Packet &p); - virtual int SendTo(const Address &address,const Packet &p); + virtual int Send (Ptr p); + virtual int SendTo(const Address &address,Ptr p); private: private: void Init (void); - void ForwardUp (Ptr device, const Packet &packet, + void ForwardUp (Ptr device, Ptr packet, uint16_t protocol, const Address &from); int DoBind (const PacketSocketAddress &address); virtual void DoDispose (void); diff --git a/src/node/queue.cc b/src/node/queue.cc index a6c3ac514..95811683f 100644 --- a/src/node/queue.cc +++ b/src/node/queue.cc @@ -121,25 +121,25 @@ Queue::GetTraceResolver (void) const Ptr resolver = Create (); resolver->AddSource ("enqueue", TraceDoc ("store packet in queue", - "const Packet &", "packet queued"), + "Ptr", "packet queued"), m_traceEnqueue, QueueTraceType (QueueTraceType::ENQUEUE)); resolver->AddSource ("dequeue", TraceDoc ("remove packet from queue", - "const Packet &", "packet dequeued"), + "Ptr", "packet dequeued"), m_traceDequeue, QueueTraceType (QueueTraceType::DEQUEUE)); resolver->AddSource ("drop", TraceDoc ("drop packet from queue", - "const Packet &", "packet dropped"), + "Ptr", "packet dropped"), m_traceDrop, QueueTraceType (QueueTraceType::DROP)); resolver->SetParentResolver (Object::GetTraceResolver ()); return resolver; } bool -Queue::Enqueue (const Packet& p) +Queue::Enqueue (Ptr p) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); + NS_LOG_PARAMS (this << p); NS_LOG_LOGIC ("m_traceEnqueue (p)"); m_traceEnqueue (p); @@ -147,35 +147,33 @@ Queue::Enqueue (const Packet& p) bool retval = DoEnqueue (p); if (retval) { - m_nBytes += p.GetSize (); + m_nBytes += p->GetSize (); m_nPackets++; } return retval; } -bool -Queue::Dequeue (Packet &p) +Ptr +Queue::Dequeue (void) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); + NS_LOG_PARAMS (this); - bool retval = DoDequeue (p); + Ptr packet = DoDequeue (); - if (retval) + if (packet != 0) { - m_nBytes -= p.GetSize (); + m_nBytes -= packet->GetSize (); m_nPackets--; NS_ASSERT (m_nBytes >= 0); NS_ASSERT (m_nPackets >= 0); - NS_LOG_LOGIC("m_traceDequeue (p)"); + NS_LOG_LOGIC("m_traceDequeue (packet)"); - const Packet packet = p; m_traceDequeue (packet); } - - return retval; + return packet; } void @@ -185,12 +183,12 @@ Queue::DequeueAll (void) NS_ASSERT_MSG (0, "Don't know what to do with dequeued packets!"); } -bool -Queue::Peek (Packet &p) const +Ptr +Queue::Peek (void) const { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); - return DoPeek (p); + NS_LOG_PARAMS (this); + return DoPeek (); } @@ -261,13 +259,13 @@ Queue::ResetStatistics (void) } void -Queue::Drop (const Packet& p) +Queue::Drop (Ptr p) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << &p); + NS_LOG_PARAMS (this << p); m_nTotalDroppedPackets++; - m_nTotalDroppedBytes += p.GetSize (); + m_nTotalDroppedBytes += p->GetSize (); NS_LOG_LOGIC ("m_traceDrop (p)"); m_traceDrop (p); diff --git a/src/node/queue.h b/src/node/queue.h index f0f014709..0f5aa277a 100644 --- a/src/node/queue.h +++ b/src/node/queue.h @@ -91,17 +91,17 @@ public: * Place a packet into the rear of the Queue * \return True if the operation was successful; false otherwise */ - bool Enqueue (const Packet& p); + bool Enqueue (Ptr p); /** * Remove a packet from the front of the Queue - * \return True if the operation was successful; false otherwise + * \return 0 if the operation was not successful; the packet otherwise. */ - bool Dequeue (Packet &p); + Ptr Dequeue (void); /** * Get a copy of the item at the front of the queue without removing it - * \return True if the operation was successful; false otherwise + * \return 0 if the operation was not successful; the packet otherwise. */ - bool Peek (Packet &p) const; + Ptr Peek (void) const; /** * XXX Doesn't do anything right now, think its supposed to flush the queue @@ -173,19 +173,19 @@ public: private: - virtual bool DoEnqueue (const Packet& p) = 0; - virtual bool DoDequeue (Packet &p) = 0; - virtual bool DoPeek (Packet &p) const = 0; + virtual bool DoEnqueue (Ptr p) = 0; + virtual Ptr DoDequeue (void) = 0; + virtual Ptr DoPeek (void) const = 0; protected: Ptr GetTraceResolver (void) const; // called by subclasses to notify parent of packet drops. - void Drop (const Packet& p); + void Drop (Ptr packet); private: - CallbackTraceSource m_traceEnqueue; - CallbackTraceSource m_traceDequeue; - CallbackTraceSource m_traceDrop; + CallbackTraceSource > m_traceEnqueue; + CallbackTraceSource > m_traceDequeue; + CallbackTraceSource > m_traceDrop; uint32_t m_nBytes; uint32_t m_nTotalReceivedBytes; diff --git a/src/node/socket.cc b/src/node/socket.cc index 48623abbe..78d8cbf72 100644 --- a/src/node/socket.cc +++ b/src/node/socket.cc @@ -72,7 +72,7 @@ Socket::SetSendCallback (Callback, uint32_t> dataSent) } void -Socket::SetRecvCallback (Callback, const Packet &,const Address&> receivedData) +Socket::SetRecvCallback (Callback, Ptr,const Address&> receivedData) { NS_LOG_FUNCTION; m_receivedData = receivedData; @@ -164,7 +164,7 @@ Socket::NotifyDataSent (uint32_t size) } void -Socket::NotifyDataReceived (const Packet &p, const Address &from) +Socket::NotifyDataReceived (Ptr p, const Address &from) { NS_LOG_FUNCTION; if (!m_receivedData.IsNull ()) diff --git a/src/node/socket.h b/src/node/socket.h index fb62fdca3..4e6bb2a19 100644 --- a/src/node/socket.h +++ b/src/node/socket.h @@ -121,7 +121,7 @@ public: * \param receivedData Invoked whenever new data is received. * */ - void SetRecvCallback (Callback, const Packet &,const Address&> receivedData); + void SetRecvCallback (Callback, Ptr,const Address&> receivedData); /** * \param address the address to try to allocate @@ -174,7 +174,7 @@ public: * \returns -1 in case of error or the number of bytes copied in the * internal buffer and accepted for transmission. */ - virtual int Send (const Packet &p) = 0; + virtual int Send (Ptr p) = 0; /** * \brief Send data to a specified peer. @@ -183,7 +183,7 @@ public: * \returns -1 in case of error or the number of bytes copied in the * internal buffer and accepted for transmission. */ - virtual int SendTo(const Address &address,const Packet &p) = 0; + virtual int SendTo(const Address &address,Ptr p) = 0; protected: void NotifyCloseCompleted (void); @@ -194,7 +194,7 @@ protected: void NotifyNewConnectionCreated (Ptr socket, const Address &from); void NotifyCloseRequested (void); void NotifyDataSent (uint32_t size); - void NotifyDataReceived (const Packet &p, const Address &from); + void NotifyDataReceived (Ptr p, const Address &from); Callback > m_closeCompleted; Callback > m_connectionSucceeded; @@ -204,7 +204,7 @@ protected: Callback, const Address &> m_connectionRequest; Callback, const Address&> m_newConnectionCreated; Callback, uint32_t> m_dataSent; - Callback, const Packet &,const Address&> m_receivedData; + Callback, Ptr,const Address&> m_receivedData; }; } //namespace ns3 diff --git a/src/routing/olsr/olsr-agent-impl.cc b/src/routing/olsr/olsr-agent-impl.cc index 48c30d029..f0be4cd50 100644 --- a/src/routing/olsr/olsr-agent-impl.cc +++ b/src/routing/olsr/olsr-agent-impl.cc @@ -281,8 +281,8 @@ AgentImpl::GetTraceResolver (void) const // \brief Processes an incoming %OLSR packet following RFC 3626 specification. void AgentImpl::RecvOlsr (Ptr socket, - const Packet &receivedPacket, - const Address &sourceAddress) + Ptr receivedPacket, + const Address &sourceAddress) { NS_LOG_DEBUG ("OLSR node " << m_mainAddress << " received a OLSR packet"); InetSocketAddress inetSourceAddr = InetSocketAddress::ConvertFrom (sourceAddress); @@ -291,10 +291,10 @@ AgentImpl::RecvOlsr (Ptr socket, // so we check it. NS_ASSERT (inetSourceAddr.GetPort () == OLSR_PORT_NUMBER); - Packet packet = receivedPacket; + Ptr packet = receivedPacket; olsr::PacketHeader olsrPacketHeader; - packet.RemoveHeader (olsrPacketHeader); + packet->RemoveHeader (olsrPacketHeader); NS_ASSERT (olsrPacketHeader.GetPacketLength () >= olsrPacketHeader.GetSerializedSize ()); uint32_t sizeLeft = olsrPacketHeader.GetPacketLength () - olsrPacketHeader.GetSerializedSize (); @@ -303,7 +303,7 @@ AgentImpl::RecvOlsr (Ptr socket, while (sizeLeft) { MessageHeader messageHeader; - if (packet.RemoveHeader (messageHeader) == 0) + if (packet->RemoveHeader (messageHeader) == 0) NS_ASSERT (false); sizeLeft -= messageHeader.GetSerializedSize (); @@ -327,8 +327,8 @@ AgentImpl::RecvOlsr (Ptr socket, if (messageHeader.GetTimeToLive () == 0 || messageHeader.GetOriginatorAddress () == m_mainAddress) { - packet.RemoveAtStart (messageHeader.GetSerializedSize () - - messageHeader.GetSerializedSize ()); + packet->RemoveAtStart (messageHeader.GetSerializedSize () + - messageHeader.GetSerializedSize ()); continue; } @@ -1090,15 +1090,16 @@ AgentImpl::QueueMessage (const olsr::MessageHeader &message, Time delay) } void -AgentImpl::SendPacket (Packet packet, const MessageList &containedMessages) +AgentImpl::SendPacket (Ptr packet, + const MessageList &containedMessages) { NS_LOG_DEBUG ("OLSR node " << m_mainAddress << " sending a OLSR packet"); // Add a header olsr::PacketHeader header; - header.SetPacketLength (header.GetSerializedSize () + packet.GetSize ()); + header.SetPacketLength (header.GetSerializedSize () + packet->GetSize ()); header.SetPacketSequenceNumber (GetPacketSequenceNumber ()); - packet.AddHeader (header); + packet->AddHeader (header); // Trace it m_txPacketTrace (header, containedMessages); @@ -1117,7 +1118,7 @@ AgentImpl::SendPacket (Packet packet, const MessageList &containedMessages) void AgentImpl::SendQueuedMessages () { - Packet packet; + Ptr packet = Create (); int numMessages = 0; NS_LOG_DEBUG ("Olsr node " << m_mainAddress << ": SendQueuedMessages"); @@ -1128,9 +1129,9 @@ AgentImpl::SendQueuedMessages () message != m_queuedMessages.end (); message++) { - Packet p; - p.AddHeader (*message); - packet.AddAtEnd (p); + Ptr p = Create (); + p->AddHeader (*message); + packet->AddAtEnd (p); msglist.push_back (*message); if (++numMessages == OLSR_MAX_MSGS) { @@ -1138,11 +1139,11 @@ AgentImpl::SendQueuedMessages () msglist.clear (); // Reset variables for next packet numMessages = 0; - packet = Packet (); + packet = Create (); } } - if (packet.GetSize ()) + if (packet->GetSize ()) { SendPacket (packet, msglist); } @@ -1560,7 +1561,7 @@ AgentImpl::PopulateMprSelectorSet (const olsr::MessageHeader &msg, /// \param p the packet which couldn't be delivered by the MAC layer. /// void -OLSR::mac_failed(Packet* p) { +OLSR::mac_failed(Ptr p) { double now = Simulator::Now (); struct hdr_ip* ih = HDR_IP(p); struct hdr_cmn* ch = HDR_CMN(p); diff --git a/src/routing/olsr/olsr-agent-impl.h b/src/routing/olsr/olsr-agent-impl.h index 5c21264af..22722c852 100644 --- a/src/routing/olsr/olsr-agent-impl.h +++ b/src/routing/olsr/olsr-agent-impl.h @@ -89,7 +89,7 @@ protected: void DoDispose (); Ptr GetTraceResolver (void) const; - void SendPacket (Packet packet, const MessageList &containedMessages); + void SendPacket (Ptr packet, const MessageList &containedMessages); /// Increments packet sequence number and returns the new value. inline uint16_t GetPacketSequenceNumber (); @@ -97,7 +97,7 @@ protected: inline uint16_t GetMessageSequenceNumber (); void RecvOlsr (Ptr socket, - const Packet &receivedPacket, + Ptr receivedPacket, const Address &sourceAddress); void MprComputation (); diff --git a/src/routing/olsr/routing-table.cc b/src/routing/olsr/routing-table.cc index 454d51532..f655907df 100644 --- a/src/routing/olsr/routing-table.cc +++ b/src/routing/olsr/routing-table.cc @@ -106,7 +106,7 @@ RoutingTable::FindSendEntry (RoutingTableEntry const &entry, bool RoutingTable::RequestRoute (uint32_t ifIndex, const Ipv4Header &ipHeader, - Packet packet, + Ptr packet, RouteReplyCallback routeReply) { RoutingTableEntry entry1, entry2; diff --git a/src/routing/olsr/routing-table.h b/src/routing/olsr/routing-table.h index c987106b0..7f1212109 100644 --- a/src/routing/olsr/routing-table.h +++ b/src/routing/olsr/routing-table.h @@ -100,7 +100,7 @@ public: // From Ipv4RoutingProtocol virtual bool RequestRoute (uint32_t ifIndex, const Ipv4Header &ipHeader, - Packet packet, + Ptr packet, RouteReplyCallback routeReply); virtual bool RequestIfIndex (Ipv4Address destination, uint32_t& ifIndex); diff --git a/utils/bench-packets.cc b/utils/bench-packets.cc index b35a2379c..5d4776ef9 100644 --- a/utils/bench-packets.cc +++ b/utils/bench-packets.cc @@ -115,12 +115,12 @@ benchPtrA (uint32_t n) BenchHeader<8> udp; for (uint32_t i = 0; i < n; i++) { - Packet p (2000); - p.AddHeader (udp); - p.AddHeader (ipv4); - Packet o = p; - o.RemoveHeader (ipv4); - o.RemoveHeader (udp); + Ptr p = Create (2000); + p->AddHeader (udp); + p->AddHeader (ipv4); + Ptr o = p->Copy (); + o->RemoveHeader (ipv4); + o->RemoveHeader (udp); } } @@ -131,25 +131,25 @@ benchPtrB (uint32_t n) BenchHeader<8> udp; for (uint32_t i = 0; i < n; i++) { - Packet p (2000); - p.AddHeader (udp); - p.AddHeader (ipv4); + Ptr p = Create (2000); + p->AddHeader (udp); + p->AddHeader (ipv4); } } static void -ptrC2 (Packet p) +ptrC2 (Ptr p) { BenchHeader<8> udp; - p.RemoveHeader (udp); + p->RemoveHeader (udp); } static void -ptrC1 (Packet p) +ptrC1 (Ptr p) { BenchHeader<25> ipv4; - p.RemoveHeader (ipv4); + p->RemoveHeader (ipv4); ptrC2 (p); } @@ -160,10 +160,10 @@ benchPtrC (uint32_t n) BenchHeader<8> udp; for (uint32_t i = 0; i < n; i++) { - Packet p (2000); - p.AddHeader (udp); - p.AddHeader (ipv4); - ptrC1 (p); + Ptr p = Create (2000); + p->AddHeader (udp); + p->AddHeader (ipv4); + ptrC1 (p); } } @@ -174,13 +174,13 @@ benchPrint (uint32_t n) PacketPrinter printer; BenchHeader<25> ipv4; BenchHeader<8> udp; - Packet p (2000); - p.AddHeader (udp); - p.AddHeader (ipv4); + Ptr p = Create (2000); + p->AddHeader (udp); + p->AddHeader (ipv4); for (uint32_t i = 0; i < n; i++) { - p.Print (std::cerr, printer); + p->Print (std::cerr, printer); } } #endif