merge
This commit is contained in:
@@ -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<Packet> p = Create<Packet> (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<Packet> p1 = p->CreateFragment (0, 2);
|
||||
Ptr<Packet> p2 = p->CreateFragment (2, 1000);
|
||||
Ptr<Packet> 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<Packet> 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<Packet> p = Create<Packet> (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<Packet> p1 = p->CreateFragment (0, 2);
|
||||
Ptr<Packet> p2 = p->CreateFragment (2, 1000);
|
||||
Ptr<Packet> 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<Packet> 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Packet> p = Create<Packet> ();
|
||||
p->AddTag (tag);
|
||||
|
||||
// create a copy of the packet
|
||||
Packet aCopy = p;
|
||||
Ptr<Packet> 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;
|
||||
|
||||
@@ -14,7 +14,7 @@ static void
|
||||
GenerateTraffic (Ptr<Socket> socket, uint32_t size)
|
||||
{
|
||||
std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, tx bytes=" << size << std::endl;
|
||||
socket->Send (Packet (size));
|
||||
socket->Send (Create<Packet> (size));
|
||||
if (size > 0)
|
||||
{
|
||||
Simulator::Schedule (Seconds (0.5), &GenerateTraffic, socket, size - 50);
|
||||
@@ -26,9 +26,9 @@ GenerateTraffic (Ptr<Socket> socket, uint32_t size)
|
||||
}
|
||||
|
||||
static void
|
||||
SocketPrinter (Ptr<Socket> socket, const Packet &packet, const Address &from)
|
||||
SocketPrinter (Ptr<Socket> socket, Ptr<Packet> 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
|
||||
|
||||
@@ -240,7 +240,8 @@ void OnOffApplication::SendPacket()
|
||||
NS_LOG_FUNCTION;
|
||||
|
||||
NS_ASSERT (m_sendEvent.IsExpired ());
|
||||
m_socket->Send(Packet (m_pktSize));
|
||||
Ptr<Packet> packet = Create<Packet> (m_pktSize);
|
||||
m_socket->Send (packet);
|
||||
m_totBytes += m_pktSize;
|
||||
m_lastStartTime = Simulator::Now();
|
||||
m_residualBits = 0;
|
||||
|
||||
@@ -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<void, Ptr<Socket>,
|
||||
const Packet &, const Address &> ());
|
||||
|
||||
Ptr<Packet>, const Address &> ());
|
||||
}
|
||||
}
|
||||
|
||||
// This LOG output inspired by the application on Joseph Kopena's wiki
|
||||
void PacketSink::Receive(Ptr<Socket> socket, const Packet &packet,
|
||||
void PacketSink::Receive(Ptr<Socket> socket, Ptr<Packet> 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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ private:
|
||||
const Address &local,
|
||||
std::string iid);
|
||||
|
||||
virtual void Receive (Ptr<Socket> socket, const Packet& packet, const Address& from);
|
||||
virtual void Receive (Ptr<Socket> socket, Ptr<Packet> packet, const Address& from);
|
||||
|
||||
Ptr<Socket> m_socket; // Associated socket
|
||||
Address m_local; // Local address to bind to
|
||||
|
||||
@@ -99,8 +99,7 @@ UdpEchoClient::StartApplication (void)
|
||||
m_socket->Connect (m_peer);
|
||||
}
|
||||
|
||||
m_socket->SetRecvCallback((Callback<void, Ptr<Socket>, 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<void, Ptr<Socket>, const Packet &,
|
||||
const Address &>) NULL);
|
||||
m_socket->SetRecvCallback(MakeNullCallback<void, Ptr<Socket>, Ptr<Packet>,
|
||||
const Address &> ());
|
||||
}
|
||||
|
||||
Simulator::Cancel(m_sendEvent);
|
||||
@@ -133,7 +132,7 @@ UdpEchoClient::Send (void)
|
||||
|
||||
NS_ASSERT (m_sendEvent.IsExpired ());
|
||||
|
||||
Packet p (m_size);
|
||||
Ptr<Packet> p = Create<Packet> (m_size);
|
||||
m_socket->Send (p);
|
||||
++m_sent;
|
||||
|
||||
@@ -148,7 +147,7 @@ UdpEchoClient::Send (void)
|
||||
void
|
||||
UdpEchoClient::Receive(
|
||||
Ptr<Socket> socket,
|
||||
const Packet &packet,
|
||||
Ptr<Packet> 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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ private:
|
||||
void ScheduleTransmit (Time dt);
|
||||
void Send (void);
|
||||
|
||||
void Receive(Ptr<Socket> socket, const Packet &packet, const Address &from);
|
||||
void Receive(Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
|
||||
|
||||
Ptr<Node> m_node;
|
||||
Ipv4Address m_serverAddress;
|
||||
|
||||
@@ -94,15 +94,15 @@ UdpEchoServer::StopApplication ()
|
||||
|
||||
if (!m_socket)
|
||||
{
|
||||
m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket>,
|
||||
const Packet &, const Address &> ());
|
||||
m_socket->SetRecvCallback(MakeNullCallback<void, Ptr<Socket>,
|
||||
Ptr<Packet>, const Address &> ());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
UdpEchoServer::Receive(
|
||||
Ptr<Socket> socket,
|
||||
const Packet &packet,
|
||||
Ptr<Packet> 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");
|
||||
|
||||
@@ -44,7 +44,7 @@ private:
|
||||
virtual void StartApplication (void);
|
||||
virtual void StopApplication (void);
|
||||
|
||||
void Receive(Ptr<Socket> socket, const Packet &packet, const Address &from);
|
||||
void Receive(Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
|
||||
|
||||
Ptr<Node> m_node;
|
||||
uint16_t m_port;
|
||||
|
||||
@@ -62,7 +62,7 @@ ErrorModel::CreateDefault (void)
|
||||
}
|
||||
|
||||
bool
|
||||
ErrorModel::IsCorrupt (Packet& p)
|
||||
ErrorModel::IsCorrupt (Ptr<Packet> p)
|
||||
{
|
||||
NS_LOG_FUNCTION;
|
||||
bool result;
|
||||
@@ -176,7 +176,7 @@ RateErrorModel::SetRandomVariable (const RandomVariable &ranvar)
|
||||
}
|
||||
|
||||
bool
|
||||
RateErrorModel::DoCorrupt (Packet& p)
|
||||
RateErrorModel::DoCorrupt (Ptr<Packet> p)
|
||||
{
|
||||
NS_LOG_FUNCTION;
|
||||
if (!m_enable)
|
||||
@@ -199,27 +199,27 @@ RateErrorModel::DoCorrupt (Packet& p)
|
||||
}
|
||||
|
||||
bool
|
||||
RateErrorModel::DoCorruptPkt (Packet& p)
|
||||
RateErrorModel::DoCorruptPkt (Ptr<Packet> p)
|
||||
{
|
||||
NS_LOG_FUNCTION;
|
||||
return (m_ranvar->GetValue () < m_rate);
|
||||
}
|
||||
|
||||
bool
|
||||
RateErrorModel::DoCorruptByte (Packet& p)
|
||||
RateErrorModel::DoCorruptByte (Ptr<Packet> 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<Packet> 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<uint32_t> &packetlist)
|
||||
// converted to a dynamically-sized array of uint32_t to avoid
|
||||
// list iteration below.
|
||||
bool
|
||||
ListErrorModel::DoCorrupt (Packet& p)
|
||||
ListErrorModel::DoCorrupt (Ptr<Packet> 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++)
|
||||
{
|
||||
|
||||
@@ -52,7 +52,7 @@ class RandomVariable;
|
||||
* rem->SetRandomVariable (UniformVariable ());
|
||||
* rem->SetRate (0.001);
|
||||
* ...
|
||||
* Packet p;
|
||||
* Ptr<Packet> 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<Packet> 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<Packet>) = 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<Packet> p);
|
||||
virtual bool DoCorruptPkt (Ptr<Packet> p);
|
||||
virtual bool DoCorruptByte (Ptr<Packet> p);
|
||||
virtual bool DoCorruptBit (Ptr<Packet> p);
|
||||
virtual void DoReset (void);
|
||||
|
||||
enum ErrorUnit m_unit;
|
||||
@@ -221,7 +221,7 @@ public:
|
||||
void SetList (const std::list<uint32_t> &packetlist);
|
||||
|
||||
private:
|
||||
virtual bool DoCorrupt (Packet& p);
|
||||
virtual bool DoCorrupt (Ptr<Packet> p);
|
||||
virtual void DoReset (void);
|
||||
|
||||
typedef std::list<uint32_t> PacketList;
|
||||
|
||||
@@ -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<Packet> p, const char *file, int line, uint32_t n, ...);
|
||||
virtual bool RunTests (void);
|
||||
private:
|
||||
template <int N>
|
||||
@@ -217,7 +217,7 @@ private:
|
||||
template <int N>
|
||||
void RegisterTrailer (void);
|
||||
void CleanupPrints (void);
|
||||
Packet DoAddHeader (Packet p);
|
||||
Ptr<Packet> DoAddHeader (Ptr<Packet> p);
|
||||
bool Check (const char *file, int line, std::list<int> expected);
|
||||
|
||||
|
||||
@@ -358,7 +358,7 @@ PacketMetadataTest::Check (const char *file, int line, std::list<int> expected)
|
||||
}
|
||||
|
||||
bool
|
||||
PacketMetadataTest::CheckHistory (Packet p, const char *file, int line, uint32_t n, ...)
|
||||
PacketMetadataTest::CheckHistory (Ptr<Packet> 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<n> header; \
|
||||
RegisterHeader<n> (); \
|
||||
p.AddHeader (header); \
|
||||
p->AddHeader (header); \
|
||||
}
|
||||
#define ADD_TRAILER(p, n) \
|
||||
{ \
|
||||
HistoryTrailer<n> trailer; \
|
||||
RegisterTrailer<n> (); \
|
||||
p.AddTrailer (trailer); \
|
||||
p->AddTrailer (trailer); \
|
||||
}
|
||||
#define REM_HEADER(p, n) \
|
||||
{ \
|
||||
HistoryHeader<n> header; \
|
||||
RegisterHeader<n> (); \
|
||||
p.RemoveHeader (header); \
|
||||
p->RemoveHeader (header); \
|
||||
}
|
||||
#define REM_TRAILER(p, n) \
|
||||
{ \
|
||||
HistoryTrailer<n> trailer; \
|
||||
RegisterTrailer<n> (); \
|
||||
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<Packet> otherPacket = Create<Packet> ();\
|
||||
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<Packet>
|
||||
PacketMetadataTest::DoAddHeader (Ptr<Packet> 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<Packet> p = Create<Packet> (0);
|
||||
Ptr<Packet> p1 = Create<Packet> (0);
|
||||
|
||||
p = Packet (10);
|
||||
p = Create<Packet> (10);
|
||||
ADD_TRAILER (p, 100);
|
||||
CHECK_HISTORY (p, 2, 10, 100);
|
||||
|
||||
p = Packet (10);
|
||||
p = Create<Packet> (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<Packet> (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<Packet> (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<Packet> (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<Packet> (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<Packet> (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<Packet> (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<Packet> (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<Packet> p2 = Create<Packet> (0);
|
||||
Ptr<Packet> p3 = Create<Packet> (0);
|
||||
|
||||
p = Packet (40);
|
||||
p = Create<Packet> (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<Packet> (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<Packet> (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<Packet> (0);
|
||||
CHECK_HISTORY (p, 0);
|
||||
|
||||
p3 = Packet (0);
|
||||
p3 = Create<Packet> (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<Packet> (2000);
|
||||
CHECK_HISTORY (p, 1, 2000);
|
||||
|
||||
p = Packet ();
|
||||
p = Create<Packet> ();
|
||||
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<Packet> ();
|
||||
ADD_TRAILER (p, 10);
|
||||
REM_TRAILER (p, 10);
|
||||
ADD_TRAILER (p, 10);
|
||||
CHECK_HISTORY (p, 1, 10);
|
||||
|
||||
p = Packet ();
|
||||
p = Create<Packet> ();
|
||||
ADD_HEADER (p, 10);
|
||||
REM_HEADER (p, 10);
|
||||
ADD_HEADER (p, 10);
|
||||
CHECK_HISTORY (p, 1, 10);
|
||||
|
||||
p = Packet ();
|
||||
p = Create<Packet> ();
|
||||
ADD_HEADER (p, 10);
|
||||
p = DoAddHeader (p);
|
||||
CHECK_HISTORY (p, 2, 10, 10);
|
||||
|
||||
p = Packet (10);
|
||||
p = Create<Packet> (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;
|
||||
|
||||
@@ -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>
|
||||
Packet::Copy (void) const
|
||||
{
|
||||
// we need to invoke the copy constructor directly
|
||||
// rather than calling Create because the copy constructor
|
||||
// is private.
|
||||
return Ptr<Packet> (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>
|
||||
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<Packet> (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<const Packet> 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<const uint8_t*> ("hello"), 5);
|
||||
Packet pkt2 (reinterpret_cast<const uint8_t*> (" world"), 6);
|
||||
Packet packet;
|
||||
packet.AddAtEnd (pkt1);
|
||||
packet.AddAtEnd (pkt2);
|
||||
Ptr<Packet> pkt1 = Create<Packet> (reinterpret_cast<const uint8_t*> ("hello"), 5);
|
||||
Ptr<Packet> pkt2 = Create<Packet> (reinterpret_cast<const uint8_t*> (" world"), 6);
|
||||
Ptr<Packet> packet = Create<Packet> ();
|
||||
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<const char *>(packet.PeekData ()),
|
||||
packet.GetSize ());
|
||||
std::string msg = std::string (reinterpret_cast<const char *>(packet->PeekData ()),
|
||||
packet->GetSize ());
|
||||
if (msg != "hello world")
|
||||
{
|
||||
Failure () << "expected 'hello world', got '" << msg << "'" << std::endl;
|
||||
|
||||
@@ -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<Packet> 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<Packet> 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<const Packet> 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;
|
||||
};
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ PcapWriter::WriteHeader (uint32_t network)
|
||||
|
||||
|
||||
void
|
||||
PcapWriter::WritePacket (Packet const packet)
|
||||
PcapWriter::WritePacket (Ptr<const Packet> 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 ());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,10 +24,11 @@
|
||||
|
||||
#include "ns3/callback.h"
|
||||
#include <stdint.h>
|
||||
#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<const Packet> packet);
|
||||
|
||||
private:
|
||||
void WriteData (uint8_t const*buffer, uint32_t size);
|
||||
|
||||
@@ -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 <typename T>
|
||||
Ptr<T> Create (void)
|
||||
{
|
||||
T *obj = new T ();
|
||||
Ptr<T> p = obj;
|
||||
obj->Unref ();
|
||||
return p;
|
||||
return Ptr<T> (new T (), false);
|
||||
}
|
||||
|
||||
template <typename T, typename T1>
|
||||
Ptr<T> Create (T1 a1)
|
||||
{
|
||||
T *obj = new T (a1);
|
||||
Ptr<T> p = obj;
|
||||
obj->Unref ();
|
||||
return p;
|
||||
return Ptr<T> (new T (a1), false);
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2>
|
||||
Ptr<T> Create (T1 a1, T2 a2)
|
||||
{
|
||||
T *obj = new T (a1, a2);
|
||||
Ptr<T> p = obj;
|
||||
obj->Unref ();
|
||||
return p;
|
||||
return Ptr<T> (new T (a1, a2), false);
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2, typename T3>
|
||||
Ptr<T> Create (T1 a1, T2 a2, T3 a3)
|
||||
{
|
||||
T *obj = new T (a1, a2, a3);
|
||||
Ptr<T> p = obj;
|
||||
obj->Unref ();
|
||||
return p;
|
||||
return Ptr<T> (new T (a1, a2, a3), false);
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2, typename T3, typename T4>
|
||||
Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4)
|
||||
{
|
||||
T *obj = new T (a1, a2, a3, a4);
|
||||
Ptr<T> p = obj;
|
||||
obj->Unref ();
|
||||
return p;
|
||||
return Ptr<T> (new T (a1, a2, a3, a4), false);
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5>
|
||||
Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
|
||||
{
|
||||
T *obj = new T (a1, a2, a3, a4, a5);
|
||||
Ptr<T> p = obj;
|
||||
obj->Unref ();
|
||||
return p;
|
||||
return Ptr<T> (new T (a1, a2, a3, a4, a5), false);
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
|
||||
Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
|
||||
{
|
||||
T *obj = new T (a1, a2, a3, a4, a5, a6);
|
||||
Ptr<T> p = obj;
|
||||
obj->Unref ();
|
||||
return p;
|
||||
return Ptr<T> (new T (a1, a2, a3, a4, a5, a6), false);
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
|
||||
Ptr<T> 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<T> p = obj;
|
||||
obj->Unref ();
|
||||
return p;
|
||||
return Ptr<T> (new T (a1, a2, a3, a4, a5, a6, a7), false);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -456,6 +434,21 @@ Ptr<T>::operator -> () const
|
||||
return m_ptr;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
const T &
|
||||
Ptr<T>::operator * () const
|
||||
{
|
||||
return *m_ptr;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
const T &
|
||||
Ptr<T>::operator * ()
|
||||
{
|
||||
return *m_ptr;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
bool
|
||||
Ptr<T>::operator! ()
|
||||
|
||||
@@ -203,11 +203,11 @@ CsmaChannel::Detach(Ptr<CsmaNetDevice> device)
|
||||
}
|
||||
|
||||
bool
|
||||
CsmaChannel::TransmitStart(Packet& p, uint32_t srcId)
|
||||
CsmaChannel::TransmitStart(Ptr<Packet> 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;
|
||||
|
||||
@@ -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<Packet> 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<Packet> m_currentPkt;
|
||||
/**
|
||||
* Device Id of the source that is currently transmitting on the
|
||||
* channel. Or last source to have transmitted a packet on the
|
||||
|
||||
@@ -225,7 +225,7 @@ CsmaNetDevice::SetBackoffParams (Time slotTime, uint32_t minSlots,
|
||||
}
|
||||
|
||||
void
|
||||
CsmaNetDevice::AddHeader (Packet& p, Mac48Address dest,
|
||||
CsmaNetDevice::AddHeader (Ptr<Packet> 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<Packet> 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> 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<const Packet>", "packet received"),
|
||||
m_rxTrace,
|
||||
CsmaTraceType (CsmaTraceType::RX));
|
||||
resolver->AddSource ("drop",
|
||||
TraceDoc ("drop MAC packet",
|
||||
"const Packet &", "packet dropped"),
|
||||
"Ptr<const Packet>", "packet dropped"),
|
||||
m_dropTrace,
|
||||
CsmaTraceType (CsmaTraceType::DROP));
|
||||
resolver->SetParentResolver (NetDevice::GetTraceResolver ());
|
||||
@@ -547,7 +544,7 @@ void CsmaNetDevice::AddReceiveErrorModel (Ptr<ErrorModel> em)
|
||||
}
|
||||
|
||||
void
|
||||
CsmaNetDevice::Receive (const Packet& packet)
|
||||
CsmaNetDevice::Receive (Ptr<Packet> 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 ());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@ enum CsmaEncapsulationMode {
|
||||
* @see CsmaChannel
|
||||
* \param p a reference to the received packet
|
||||
*/
|
||||
void Receive (const Packet& p);
|
||||
void Receive (Ptr<Packet> 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<Packet> 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<Packet> 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<Packet> 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<Packet> m_currentPkt;
|
||||
/**
|
||||
* The CsmaChannel to which this CsmaNetDevice has been
|
||||
* attached.
|
||||
@@ -478,8 +478,8 @@ private:
|
||||
* @see class CallBackTraceSource
|
||||
* @see class TraceResolver
|
||||
*/
|
||||
CallbackTraceSource<const Packet &> m_rxTrace;
|
||||
CallbackTraceSource<const Packet &> m_dropTrace;
|
||||
CallbackTraceSource<Ptr<const Packet> > m_rxTrace;
|
||||
CallbackTraceSource<Ptr<const Packet> > m_dropTrace;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -92,13 +92,13 @@ PointToPointChannel::Attach(Ptr<PointToPointNetDevice> device)
|
||||
}
|
||||
|
||||
bool
|
||||
PointToPointChannel::TransmitStart(Packet& p,
|
||||
Ptr<PointToPointNetDevice> src,
|
||||
const Time& txTime)
|
||||
PointToPointChannel::TransmitStart(Ptr<Packet> p,
|
||||
Ptr<PointToPointNetDevice> 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);
|
||||
|
||||
@@ -22,13 +22,13 @@
|
||||
#include <list>
|
||||
#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<PointToPointNetDevice> src,
|
||||
bool TransmitStart (Ptr<Packet> p, Ptr<PointToPointNetDevice> src,
|
||||
const Time& txTime);
|
||||
|
||||
/**
|
||||
* \brief Get number of devices on this channel
|
||||
* \returns number of devices on this channel
|
||||
|
||||
@@ -121,20 +121,20 @@ PointToPointNetDevice::~PointToPointNetDevice()
|
||||
}
|
||||
|
||||
void
|
||||
PointToPointNetDevice::AddHeader(Packet& p, uint16_t protocolNumber)
|
||||
PointToPointNetDevice::AddHeader(Ptr<Packet> 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<Packet> 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> 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<Packet> 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<Packet> 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<const Packet>", "packet received"),
|
||||
m_rxTrace,
|
||||
PointToPointTraceType (PointToPointTraceType::RX));
|
||||
resolver->AddSource ("drop",
|
||||
@@ -303,14 +305,13 @@ void PointToPointNetDevice::AddReceiveErrorModel (Ptr<ErrorModel> em)
|
||||
AddInterface (em);
|
||||
}
|
||||
|
||||
void PointToPointNetDevice::Receive (Packet& p)
|
||||
void PointToPointNetDevice::Receive (Ptr<Packet> 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
|
||||
|
||||
@@ -166,7 +166,7 @@ public:
|
||||
* @see PointToPointChannel
|
||||
* @param p a reference to the received packet
|
||||
*/
|
||||
void Receive (Packet& p);
|
||||
void Receive (Ptr<Packet> 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<Packet> 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<Packet> 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<Packet> 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<Packet> 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<const Packet &> m_rxTrace;
|
||||
CallbackTraceSource<Ptr<const Packet> > 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<const Packet &> m_dropTrace;
|
||||
CallbackTraceSource<Ptr<const Packet> > m_dropTrace;
|
||||
/**
|
||||
* Default data rate. Used for all newly created p2p net devices
|
||||
*/
|
||||
|
||||
@@ -147,7 +147,7 @@ ArpCache::Entry::MarkDead (void)
|
||||
//NS_ASSERT (m_waiting != 0);
|
||||
UpdateSeen ();
|
||||
}
|
||||
Packet
|
||||
Ptr<Packet>
|
||||
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<Packet> waiting = m_waiting;
|
||||
//m_waiting = 0;
|
||||
return waiting;
|
||||
}
|
||||
|
||||
Packet
|
||||
ArpCache::Entry::UpdateWaitReply (Packet waiting)
|
||||
Ptr<Packet>
|
||||
ArpCache::Entry::UpdateWaitReply (Ptr<Packet> 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<Packet> old = m_waiting;
|
||||
m_waiting = waiting;
|
||||
return old;
|
||||
}
|
||||
void
|
||||
ArpCache::Entry::MarkWaitReply (Packet waiting)
|
||||
ArpCache::Entry::MarkWaitReply (Ptr<Packet> waiting)
|
||||
{
|
||||
NS_ASSERT (m_state == ALIVE || m_state == DEAD);
|
||||
//NS_ASSERT (m_waiting == 0);
|
||||
|
||||
@@ -101,16 +101,16 @@ public:
|
||||
* \param macAddress
|
||||
* \return
|
||||
*/
|
||||
Packet MarkAlive (Address macAddress);
|
||||
Ptr<Packet> MarkAlive (Address macAddress);
|
||||
/**
|
||||
* \param waiting
|
||||
*/
|
||||
void MarkWaitReply (Packet waiting);
|
||||
void MarkWaitReply (Ptr<Packet> waiting);
|
||||
/**
|
||||
* \param waiting
|
||||
* \return
|
||||
*/
|
||||
Packet UpdateWaitReply (Packet waiting);
|
||||
Ptr<Packet> UpdateWaitReply (Ptr<Packet> 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<Packet> m_waiting;
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
@@ -61,10 +61,10 @@ ArpIpv4Interface::GetTraceResolver (void) const
|
||||
}
|
||||
|
||||
void
|
||||
ArpIpv4Interface::SendTo (Packet p, Ipv4Address dest)
|
||||
ArpIpv4Interface::SendTo (Ptr<Packet> 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 ())
|
||||
|
||||
@@ -45,7 +45,7 @@ class ArpIpv4Interface : public Ipv4Interface
|
||||
protected:
|
||||
virtual Ptr<TraceResolver> GetTraceResolver (void) const;
|
||||
private:
|
||||
virtual void SendTo (Packet p, Ipv4Address dest);
|
||||
virtual void SendTo (Ptr<Packet> p, Ipv4Address dest);
|
||||
Ptr<Node> m_node;
|
||||
};
|
||||
|
||||
|
||||
@@ -82,13 +82,12 @@ ArpL3Protocol::FindCache (Ptr<NetDevice> device)
|
||||
}
|
||||
|
||||
void
|
||||
ArpL3Protocol::Receive(Ptr<NetDevice> device, const Packet& p, uint16_t protocol, const Address &from)
|
||||
ArpL3Protocol::Receive(Ptr<NetDevice> device, Ptr<Packet> 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="<<m_node->GetId ()<<", got request from " <<
|
||||
@@ -118,7 +117,7 @@ ArpL3Protocol::Receive(Ptr<NetDevice> 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<Packet> waiting = entry->MarkAlive (from_mac);
|
||||
cache->GetInterface ()->Send (waiting, arp.GetSourceIpv4Address ());
|
||||
}
|
||||
else
|
||||
@@ -145,7 +144,7 @@ ArpL3Protocol::Receive(Ptr<NetDevice> device, const Packet& p, uint16_t protocol
|
||||
}
|
||||
}
|
||||
bool
|
||||
ArpL3Protocol::Lookup (Packet &packet, Ipv4Address destination,
|
||||
ArpL3Protocol::Lookup (Ptr<Packet> packet, Ipv4Address destination,
|
||||
Ptr<NetDevice> device,
|
||||
Address *hardwareDestination)
|
||||
{
|
||||
@@ -197,7 +196,7 @@ ArpL3Protocol::Lookup (Packet &packet, Ipv4Address destination,
|
||||
{
|
||||
NS_LOG_LOGIC ("node="<<m_node->GetId ()<<
|
||||
", wait reply for " << destination << " valid -- drop previous");
|
||||
Packet old = entry->UpdateWaitReply (packet);
|
||||
Ptr<Packet> 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> packet = Create<Packet> ();
|
||||
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> packet = Create<Packet> ();
|
||||
packet->AddHeader (arp);
|
||||
cache->GetDevice ()->Send (packet, toMac, PROT_NUMBER);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public:
|
||||
/**
|
||||
* \brief Recieve a packet
|
||||
*/
|
||||
void Receive(Ptr<NetDevice> device, const Packet& p, uint16_t protocol, const Address &from);
|
||||
void Receive(Ptr<NetDevice> device, Ptr<Packet> 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<Packet> p, Ipv4Address destination,
|
||||
Ptr<NetDevice> device,
|
||||
Address *hardwareDestination);
|
||||
protected:
|
||||
|
||||
@@ -58,46 +58,46 @@ AsciiTrace::TraceAllNetDeviceRx (void)
|
||||
|
||||
void
|
||||
AsciiTrace::LogDevQueueEnqueue (TraceContext const &context,
|
||||
Packet const &packet)
|
||||
Ptr<const Packet> 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<const Packet> 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<const Packet> 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<const Packet> 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#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<const Packet> p);
|
||||
void LogDevQueueDequeue (TraceContext const &context, Ptr<const Packet> p);
|
||||
void LogDevQueueDrop (TraceContext const &context, Ptr<const Packet> p);
|
||||
void LogDevRx (TraceContext const &context, Ptr<const Packet> p);
|
||||
std::ofstream m_os;
|
||||
};
|
||||
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
class Packet;
|
||||
|
||||
class InternetNode : public Node
|
||||
{
|
||||
public:
|
||||
@@ -44,7 +42,6 @@ protected:
|
||||
virtual void DoDispose(void);
|
||||
virtual Ptr<TraceResolver> GetTraceResolver (void) const;
|
||||
private:
|
||||
bool ReceiveFromDevice (Ptr<NetDevice> device, const Packet &p, uint16_t protocolNumber) const;
|
||||
void Construct (void);
|
||||
};
|
||||
|
||||
|
||||
@@ -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<void,const Packet &, Ipv4Address, uint16_t> callback)
|
||||
Ipv4EndPoint::SetRxCallback (Callback<void,Ptr<Packet>, Ipv4Address, uint16_t> callback)
|
||||
{
|
||||
m_rxCallback = callback;
|
||||
}
|
||||
@@ -84,7 +85,7 @@ Ipv4EndPoint::SetDestroyCallback (Callback<void> callback)
|
||||
}
|
||||
|
||||
void
|
||||
Ipv4EndPoint::ForwardUp (const Packet &p, Ipv4Address saddr, uint16_t sport)
|
||||
Ipv4EndPoint::ForwardUp (Ptr<Packet> p, Ipv4Address saddr, uint16_t sport)
|
||||
{
|
||||
if (!m_rxCallback.IsNull ())
|
||||
{
|
||||
|
||||
@@ -44,17 +44,17 @@ public:
|
||||
|
||||
void SetPeer (Ipv4Address address, uint16_t port);
|
||||
|
||||
void SetRxCallback (Callback<void,const Packet &, Ipv4Address, uint16_t> callback);
|
||||
void SetRxCallback (Callback<void,Ptr<Packet>, Ipv4Address, uint16_t> callback);
|
||||
void SetDestroyCallback (Callback<void> callback);
|
||||
|
||||
void ForwardUp (const Packet &p, Ipv4Address saddr, uint16_t sport);
|
||||
void ForwardUp (Ptr<Packet> p, Ipv4Address saddr, uint16_t sport);
|
||||
|
||||
private:
|
||||
Ipv4Address m_localAddr;
|
||||
uint16_t m_localPort;
|
||||
Ipv4Address m_peerAddr;
|
||||
uint16_t m_peerPort;
|
||||
Callback<void,const Packet &, Ipv4Address, uint16_t> m_rxCallback;
|
||||
Callback<void,Ptr<Packet>, Ipv4Address, uint16_t> m_rxCallback;
|
||||
Callback<void> m_destroyCallback;
|
||||
};
|
||||
|
||||
|
||||
@@ -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<Packet> p, Ipv4Address dest)
|
||||
{
|
||||
NS_LOG_FUNCTION;
|
||||
if (IsUp()) {
|
||||
|
||||
@@ -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<Packet> p, Ipv4Address dest);
|
||||
|
||||
protected:
|
||||
virtual void DoDispose (void);
|
||||
private:
|
||||
virtual void SendTo (Packet p, Ipv4Address dest) = 0;
|
||||
virtual void SendTo (Ptr<Packet> p, Ipv4Address dest) = 0;
|
||||
Ptr<NetDevice> m_netdevice;
|
||||
bool m_ifup;
|
||||
Ipv4Address m_address;
|
||||
|
||||
@@ -201,17 +201,17 @@ Ipv4L3Protocol::GetTraceResolver (void) const
|
||||
Ptr<CompositeTraceResolver> resolver = Create<CompositeTraceResolver> ();
|
||||
resolver->AddSource ("tx",
|
||||
TraceDoc ("send ipv4 packet to outgoing interface",
|
||||
"const Packet &", "packet sent",
|
||||
"Ptr<const Packet>", "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<const Packet>", "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<const Packet>", "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> 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> 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<const NetDevice> device)
|
||||
}
|
||||
|
||||
void
|
||||
Ipv4L3Protocol::Receive( Ptr<NetDevice> device, const Packet& p, uint16_t protocol, const Address &from)
|
||||
Ipv4L3Protocol::Receive( Ptr<NetDevice> device, Ptr<Packet> 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<NetDevice> 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<NetDevice> device, const Packet& p, uint16_t protoc
|
||||
|
||||
|
||||
void
|
||||
Ipv4L3Protocol::Send (Packet const &packet,
|
||||
Ipv4L3Protocol::Send (Ptr<Packet> 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<Ipv4Interface> outInterface = *ifaceIter;
|
||||
Packet packetCopy = packet;
|
||||
Ptr<Packet> 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> 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<Ipv4Interface> 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> packet,
|
||||
Ipv4Header &ipHeader,
|
||||
Ptr<NetDevice> 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<Packet> p, Ipv4Header const&ip,
|
||||
Ptr<Ipv4Interface> incomingInterface)
|
||||
{
|
||||
NS_LOG_FUNCTION;
|
||||
NS_LOG_PARAMS (this << &p << &ip);
|
||||
NS_LOG_PARAMS (this << p << &ip);
|
||||
|
||||
Ptr<Ipv4L4Demux> demux = m_node->QueryInterface<Ipv4L4Demux> (Ipv4L4Demux::iid);
|
||||
Ptr<Ipv4L4Protocol> protocol = demux->GetProtocol (ip.GetProtocol ());
|
||||
|
||||
@@ -129,7 +129,7 @@ public:
|
||||
* - implement a per-NetDevice ARP cache
|
||||
* - send back arp replies on the right device
|
||||
*/
|
||||
void Receive( Ptr<NetDevice> device, const Packet& p, uint16_t protocol, const Address &from);
|
||||
void Receive( Ptr<NetDevice> device, Ptr<Packet> 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> 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> 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> packet,
|
||||
Ipv4RoutingProtocol::RouteReplyCallback routeReply);
|
||||
|
||||
void SendRealOut (bool found,
|
||||
Ipv4Route const &route,
|
||||
Packet packet,
|
||||
Ptr<Packet> packet,
|
||||
Ipv4Header const &ipHeader);
|
||||
bool Forwarding (uint32_t ifIndex,
|
||||
Packet const &packet,
|
||||
Ptr<Packet> packet,
|
||||
Ipv4Header &ipHeader,
|
||||
Ptr<NetDevice> device);
|
||||
void ForwardUp (Packet p, Ipv4Header const&ip, Ptr<Ipv4Interface> incomingInterface);
|
||||
void ForwardUp (Ptr<Packet> p, Ipv4Header const&ip, Ptr<Ipv4Interface> incomingInterface);
|
||||
uint32_t AddIpv4Interface (Ptr<Ipv4Interface> interface);
|
||||
void SetupLoopback (void);
|
||||
|
||||
@@ -243,9 +243,9 @@ private:
|
||||
uint8_t m_defaultTtl;
|
||||
uint16_t m_identification;
|
||||
Ptr<Node> m_node;
|
||||
CallbackTraceSource<Packet const &, uint32_t> m_txTrace;
|
||||
CallbackTraceSource<Packet const &, uint32_t> m_rxTrace;
|
||||
CallbackTraceSource<Packet const &> m_dropTrace;
|
||||
CallbackTraceSource<Ptr<const Packet>, uint32_t> m_txTrace;
|
||||
CallbackTraceSource<Ptr<const Packet>, uint32_t> m_rxTrace;
|
||||
CallbackTraceSource<Ptr<const Packet> > m_dropTrace;
|
||||
|
||||
Ipv4RoutingProtocolList m_routingProtocols;
|
||||
|
||||
|
||||
@@ -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<Packet> p,
|
||||
Ipv4Address const &source,
|
||||
Ipv4Address const &destination,
|
||||
Ptr<Ipv4Interface> incomingInterface) = 0;
|
||||
|
||||
@@ -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> packet, Ipv4Address dest)
|
||||
{
|
||||
NS_LOG_FUNCTION;
|
||||
NS_LOG_PARAMS (this << &packet << dest);
|
||||
NS_LOG_PARAMS (this << packet << dest);
|
||||
|
||||
Ptr<Ipv4L3Protocol> ipv4 =
|
||||
m_node->QueryInterface<Ipv4L3Protocol> (Ipv4L3Protocol::iid);
|
||||
|
||||
@@ -42,7 +42,7 @@ class Ipv4LoopbackInterface : public Ipv4Interface
|
||||
virtual ~Ipv4LoopbackInterface ();
|
||||
|
||||
private:
|
||||
virtual void SendTo (Packet p, Ipv4Address dest);
|
||||
virtual void SendTo (Ptr<Packet> p, Ipv4Address dest);
|
||||
|
||||
Ptr<Node> m_node;
|
||||
};
|
||||
|
||||
@@ -518,11 +518,11 @@ bool
|
||||
Ipv4StaticRouting::RequestRoute (
|
||||
uint32_t ifIndex,
|
||||
Ipv4Header const &ipHeader,
|
||||
Packet packet,
|
||||
Ptr<Packet> 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<Packet> p = packet->Copy ();
|
||||
Ipv4Header h = ipHeader;
|
||||
Ipv4Route route =
|
||||
Ipv4Route::CreateHostRouteTo(h.GetDestination (),
|
||||
|
||||
@@ -141,7 +141,7 @@ public:
|
||||
*/
|
||||
virtual bool RequestRoute (uint32_t ifIndex,
|
||||
Ipv4Header const &ipHeader,
|
||||
Packet packet,
|
||||
Ptr<Packet> packet,
|
||||
RouteReplyCallback routeReply);
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<const Packet> p, uint32_t interfaceIndex)
|
||||
{
|
||||
NodeListIndex nodeIndex;
|
||||
context.GetElement (nodeIndex);
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#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<const Packet> p, uint32_t interfaceIndex);
|
||||
std::string m_filename;
|
||||
struct Trace {
|
||||
uint32_t nodeId;
|
||||
|
||||
@@ -121,43 +121,43 @@ UdpL4Protocol::DeAllocate (Ipv4EndPoint *endPoint)
|
||||
}
|
||||
|
||||
void
|
||||
UdpL4Protocol::Receive(Packet& packet,
|
||||
UdpL4Protocol::Receive(Ptr<Packet> packet,
|
||||
Ipv4Address const &source,
|
||||
Ipv4Address const &destination,
|
||||
Ptr<Ipv4Interface> 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> 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<Ipv4L3Protocol> ipv4 = m_node->QueryInterface<Ipv4L3Protocol> (Ipv4L3Protocol::iid);
|
||||
if (ipv4 != 0)
|
||||
|
||||
@@ -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> 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<Packet> p,
|
||||
Ipv4Address const &source,
|
||||
Ipv4Address const &destination,
|
||||
Ptr<Ipv4Interface> interface);
|
||||
|
||||
@@ -187,10 +187,10 @@ UdpSocket::Connect(const Address & address)
|
||||
}
|
||||
|
||||
int
|
||||
UdpSocket::Send (const Packet &p)
|
||||
UdpSocket::Send (Ptr<Packet> 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<Packet> 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<Packet> 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<Packet> 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<Packet> 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> 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<Packet> m_receivedPacket;
|
||||
Ptr<Packet> m_receivedPacket2;
|
||||
|
||||
public:
|
||||
virtual bool RunTests (void);
|
||||
UdpSocketTest ();
|
||||
|
||||
void ReceivePacket (Ptr<Socket> socket, const Packet &packet, const Address &from);
|
||||
void ReceivePacket2 (Ptr<Socket> socket, const Packet &packet, const Address &from);
|
||||
void ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
|
||||
void ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
|
||||
};
|
||||
|
||||
|
||||
@@ -366,12 +365,12 @@ UdpSocketTest::UdpSocketTest ()
|
||||
: Test ("UdpSocket") {}
|
||||
|
||||
|
||||
void UdpSocketTest::ReceivePacket (Ptr<Socket> socket, const Packet &packet, const Address &from)
|
||||
void UdpSocketTest::ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
|
||||
{
|
||||
m_receivedPacket = packet;
|
||||
}
|
||||
|
||||
void UdpSocketTest::ReceivePacket2 (Ptr<Socket> socket, const Packet &packet, const Address &from)
|
||||
void UdpSocketTest::ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> 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<Packet> ();
|
||||
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("10.0.0.1"), 1234),
|
||||
Packet (123)), 0);
|
||||
Create<Packet> (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<Packet> ();
|
||||
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234),
|
||||
Packet (123)), 0);
|
||||
Create<Packet> (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<Packet> ();
|
||||
m_receivedPacket2 = Create<Packet> ();
|
||||
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234),
|
||||
Packet (123)), 0);
|
||||
Create<Packet> (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 ();
|
||||
|
||||
|
||||
@@ -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<Packet> p);
|
||||
virtual int SendTo(const Address &address,Ptr<Packet> 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<Packet> 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<Packet> p);
|
||||
int DoSendTo (Ptr<Packet> p, const Address &daddr);
|
||||
int DoSendTo (Ptr<Packet> p, Ipv4Address daddr, uint16_t dport);
|
||||
|
||||
Ipv4EndPoint *m_endPoint;
|
||||
Ptr<Node> m_node;
|
||||
|
||||
@@ -58,10 +58,10 @@ DropTailQueue::GetMaxPackets (void)
|
||||
}
|
||||
|
||||
bool
|
||||
DropTailQueue::DoEnqueue (const Packet& p)
|
||||
DropTailQueue::DoEnqueue (Ptr<Packet> 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<Packet>
|
||||
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<Packet> 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<Packet>
|
||||
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<Packet> 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<Packet> p1, p2, p3, p4;
|
||||
p1 = Create<Packet> ();
|
||||
p2 = Create<Packet> ();
|
||||
p3 = Create<Packet> ();
|
||||
p4 = Create<Packet> ();
|
||||
|
||||
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<Packet> 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;
|
||||
}
|
||||
|
||||
@@ -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<Packet> p);
|
||||
virtual Ptr<Packet> DoDequeue (void);
|
||||
virtual Ptr<Packet> DoPeek (void) const;
|
||||
|
||||
private:
|
||||
std::queue<Packet> m_packets;
|
||||
std::queue<Ptr<Packet> > m_packets;
|
||||
uint32_t m_maxPackets;
|
||||
};
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ EthernetTrailer::EnableFcs (bool enable)
|
||||
}
|
||||
|
||||
bool
|
||||
EthernetTrailer::CheckFcs (const Packet& p) const
|
||||
EthernetTrailer::CheckFcs (Ptr<Packet> p) const
|
||||
{
|
||||
if (!m_calcFcs)
|
||||
{
|
||||
@@ -68,7 +68,7 @@ EthernetTrailer::CheckFcs (const Packet& p) const
|
||||
}
|
||||
|
||||
void
|
||||
EthernetTrailer::CalcFcs (const Packet& p)
|
||||
EthernetTrailer::CalcFcs (Ptr<Packet> p)
|
||||
{
|
||||
NS_LOG_WARN ("FCS calculation is not yet enabled");
|
||||
}
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
#define ETHERNET_TRAILER_H
|
||||
|
||||
#include "ns3/trailer.h"
|
||||
#include "ns3/packet.h"
|
||||
#include <string>
|
||||
|
||||
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<Packet> 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<Packet> p) const;
|
||||
|
||||
/**
|
||||
*\return Returns the size of the trailer
|
||||
|
||||
@@ -66,7 +66,7 @@ public:
|
||||
* inserted and consequently the protocol type has to change).
|
||||
*
|
||||
*/
|
||||
typedef Callback<void, bool, const Ipv4Route&, Packet, const Ipv4Header&> RouteReplyCallback;
|
||||
typedef Callback<void, bool, const Ipv4Route&, Ptr<Packet>, 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> packet,
|
||||
RouteReplyCallback routeReply) = 0;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<Packet> 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<Packet> 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 ())
|
||||
{
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include <string>
|
||||
#include <stdint.h>
|
||||
#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> 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<bool,Ptr<NetDevice>,const Packet &,uint16_t,const Address &> ReceiveCallback;
|
||||
typedef Callback<bool,Ptr<NetDevice>,Ptr<Packet>,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<Packet> 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<Packet> p, const Address &dest, uint16_t protocolNumber) = 0;
|
||||
/**
|
||||
* \returns true if this NetDevice needs the higher-layers
|
||||
* to perform ARP over it, false otherwise.
|
||||
|
||||
@@ -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<NetDevice> device, const Packet &packet,
|
||||
Node::ReceiveFromDevice (Ptr<NetDevice> device, Ptr<Packet> packet,
|
||||
uint16_t protocol, const Address &from)
|
||||
{
|
||||
bool found = false;
|
||||
|
||||
@@ -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<void,Ptr<NetDevice>, const Packet &,uint16_t,const Address &> ProtocolHandler;
|
||||
typedef Callback<void,Ptr<NetDevice>, Ptr<Packet>,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<NetDevice> device);
|
||||
|
||||
bool ReceiveFromDevice (Ptr<NetDevice> device, const Packet &packet,
|
||||
bool ReceiveFromDevice (Ptr<NetDevice> device, Ptr<Packet>,
|
||||
uint16_t protocol, const Address &from);
|
||||
void Construct (void);
|
||||
|
||||
|
||||
@@ -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<Packet> 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<Packet> 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<NetDevice> device, const Packet &packet,
|
||||
PacketSocket::ForwardUp (Ptr<NetDevice> device, Ptr<Packet> packet,
|
||||
uint16_t protocol, const Address &from)
|
||||
{
|
||||
NS_LOG_FUNCTION;
|
||||
@@ -297,15 +298,13 @@ PacketSocket::ForwardUp (Ptr<NetDevice> 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
|
||||
|
||||
@@ -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<Packet> p);
|
||||
virtual int SendTo(const Address &address,Ptr<Packet> p);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
private:
|
||||
void Init (void);
|
||||
void ForwardUp (Ptr<NetDevice> device, const Packet &packet,
|
||||
void ForwardUp (Ptr<NetDevice> device, Ptr<Packet> packet,
|
||||
uint16_t protocol, const Address &from);
|
||||
int DoBind (const PacketSocketAddress &address);
|
||||
virtual void DoDispose (void);
|
||||
|
||||
@@ -121,25 +121,25 @@ Queue::GetTraceResolver (void) const
|
||||
Ptr<CompositeTraceResolver> resolver = Create<CompositeTraceResolver> ();
|
||||
resolver->AddSource ("enqueue",
|
||||
TraceDoc ("store packet in queue",
|
||||
"const Packet &", "packet queued"),
|
||||
"Ptr<const Packet>", "packet queued"),
|
||||
m_traceEnqueue, QueueTraceType (QueueTraceType::ENQUEUE));
|
||||
resolver->AddSource ("dequeue",
|
||||
TraceDoc ("remove packet from queue",
|
||||
"const Packet &", "packet dequeued"),
|
||||
"Ptr<const Packet>", "packet dequeued"),
|
||||
m_traceDequeue, QueueTraceType (QueueTraceType::DEQUEUE));
|
||||
resolver->AddSource ("drop",
|
||||
TraceDoc ("drop packet from queue",
|
||||
"const Packet &", "packet dropped"),
|
||||
"Ptr<const Packet>", "packet dropped"),
|
||||
m_traceDrop, QueueTraceType (QueueTraceType::DROP));
|
||||
resolver->SetParentResolver (Object::GetTraceResolver ());
|
||||
return resolver;
|
||||
}
|
||||
|
||||
bool
|
||||
Queue::Enqueue (const Packet& p)
|
||||
Queue::Enqueue (Ptr<Packet> 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<Packet>
|
||||
Queue::Dequeue (void)
|
||||
{
|
||||
NS_LOG_FUNCTION;
|
||||
NS_LOG_PARAMS (this << &p);
|
||||
NS_LOG_PARAMS (this);
|
||||
|
||||
bool retval = DoDequeue (p);
|
||||
Ptr<Packet> 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<Packet>
|
||||
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<Packet> 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);
|
||||
|
||||
@@ -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<Packet> 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<Packet> 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<Packet> 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<Packet> p) = 0;
|
||||
virtual Ptr<Packet> DoDequeue (void) = 0;
|
||||
virtual Ptr<Packet> DoPeek (void) const = 0;
|
||||
|
||||
protected:
|
||||
Ptr<TraceResolver> GetTraceResolver (void) const;
|
||||
// called by subclasses to notify parent of packet drops.
|
||||
void Drop (const Packet& p);
|
||||
void Drop (Ptr<Packet> packet);
|
||||
|
||||
private:
|
||||
CallbackTraceSource<const Packet &> m_traceEnqueue;
|
||||
CallbackTraceSource<const Packet &> m_traceDequeue;
|
||||
CallbackTraceSource<const Packet &> m_traceDrop;
|
||||
CallbackTraceSource<Ptr<const Packet> > m_traceEnqueue;
|
||||
CallbackTraceSource<Ptr<const Packet> > m_traceDequeue;
|
||||
CallbackTraceSource<Ptr<const Packet> > m_traceDrop;
|
||||
|
||||
uint32_t m_nBytes;
|
||||
uint32_t m_nTotalReceivedBytes;
|
||||
|
||||
@@ -72,7 +72,7 @@ Socket::SetSendCallback (Callback<void, Ptr<Socket>, uint32_t> dataSent)
|
||||
}
|
||||
|
||||
void
|
||||
Socket::SetRecvCallback (Callback<void, Ptr<Socket>, const Packet &,const Address&> receivedData)
|
||||
Socket::SetRecvCallback (Callback<void, Ptr<Socket>, Ptr<Packet>,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<Packet> p, const Address &from)
|
||||
{
|
||||
NS_LOG_FUNCTION;
|
||||
if (!m_receivedData.IsNull ())
|
||||
|
||||
@@ -121,7 +121,7 @@ public:
|
||||
* \param receivedData Invoked whenever new data is received.
|
||||
*
|
||||
*/
|
||||
void SetRecvCallback (Callback<void, Ptr<Socket>, const Packet &,const Address&> receivedData);
|
||||
void SetRecvCallback (Callback<void, Ptr<Socket>, Ptr<Packet>,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<Packet> 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<Packet> p) = 0;
|
||||
|
||||
protected:
|
||||
void NotifyCloseCompleted (void);
|
||||
@@ -194,7 +194,7 @@ protected:
|
||||
void NotifyNewConnectionCreated (Ptr<Socket> socket, const Address &from);
|
||||
void NotifyCloseRequested (void);
|
||||
void NotifyDataSent (uint32_t size);
|
||||
void NotifyDataReceived (const Packet &p, const Address &from);
|
||||
void NotifyDataReceived (Ptr<Packet> p, const Address &from);
|
||||
|
||||
Callback<void,Ptr<Socket> > m_closeCompleted;
|
||||
Callback<void, Ptr<Socket> > m_connectionSucceeded;
|
||||
@@ -204,7 +204,7 @@ protected:
|
||||
Callback<bool, Ptr<Socket>, const Address &> m_connectionRequest;
|
||||
Callback<void, Ptr<Socket>, const Address&> m_newConnectionCreated;
|
||||
Callback<void, Ptr<Socket>, uint32_t> m_dataSent;
|
||||
Callback<void, Ptr<Socket>, const Packet &,const Address&> m_receivedData;
|
||||
Callback<void, Ptr<Socket>, Ptr<Packet>,const Address&> m_receivedData;
|
||||
};
|
||||
|
||||
} //namespace ns3
|
||||
|
||||
@@ -281,8 +281,8 @@ AgentImpl::GetTraceResolver (void) const
|
||||
// \brief Processes an incoming %OLSR packet following RFC 3626 specification.
|
||||
void
|
||||
AgentImpl::RecvOlsr (Ptr<Socket> socket,
|
||||
const Packet &receivedPacket,
|
||||
const Address &sourceAddress)
|
||||
Ptr<Packet> 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> socket,
|
||||
// so we check it.
|
||||
NS_ASSERT (inetSourceAddr.GetPort () == OLSR_PORT_NUMBER);
|
||||
|
||||
Packet packet = receivedPacket;
|
||||
Ptr<Packet> 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> 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> 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> 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> packet = Create<Packet> ();
|
||||
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<Packet> p = Create<Packet> ();
|
||||
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<Packet> ();
|
||||
}
|
||||
}
|
||||
|
||||
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<Packet> p) {
|
||||
double now = Simulator::Now ();
|
||||
struct hdr_ip* ih = HDR_IP(p);
|
||||
struct hdr_cmn* ch = HDR_CMN(p);
|
||||
|
||||
@@ -89,7 +89,7 @@ protected:
|
||||
void DoDispose ();
|
||||
Ptr<TraceResolver> GetTraceResolver (void) const;
|
||||
|
||||
void SendPacket (Packet packet, const MessageList &containedMessages);
|
||||
void SendPacket (Ptr<Packet> 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> socket,
|
||||
const Packet &receivedPacket,
|
||||
Ptr<Packet> receivedPacket,
|
||||
const Address &sourceAddress);
|
||||
|
||||
void MprComputation ();
|
||||
|
||||
@@ -106,7 +106,7 @@ RoutingTable::FindSendEntry (RoutingTableEntry const &entry,
|
||||
bool
|
||||
RoutingTable::RequestRoute (uint32_t ifIndex,
|
||||
const Ipv4Header &ipHeader,
|
||||
Packet packet,
|
||||
Ptr<Packet> packet,
|
||||
RouteReplyCallback routeReply)
|
||||
{
|
||||
RoutingTableEntry entry1, entry2;
|
||||
|
||||
@@ -100,7 +100,7 @@ public:
|
||||
// From Ipv4RoutingProtocol
|
||||
virtual bool RequestRoute (uint32_t ifIndex,
|
||||
const Ipv4Header &ipHeader,
|
||||
Packet packet,
|
||||
Ptr<Packet> packet,
|
||||
RouteReplyCallback routeReply);
|
||||
virtual bool RequestIfIndex (Ipv4Address destination,
|
||||
uint32_t& ifIndex);
|
||||
|
||||
@@ -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<Packet> p = Create<Packet> (2000);
|
||||
p->AddHeader (udp);
|
||||
p->AddHeader (ipv4);
|
||||
Ptr<Packet> 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<Packet> p = Create<Packet> (2000);
|
||||
p->AddHeader (udp);
|
||||
p->AddHeader (ipv4);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ptrC2 (Packet p)
|
||||
ptrC2 (Ptr<Packet> p)
|
||||
{
|
||||
BenchHeader<8> udp;
|
||||
|
||||
p.RemoveHeader (udp);
|
||||
p->RemoveHeader (udp);
|
||||
}
|
||||
|
||||
static void
|
||||
ptrC1 (Packet p)
|
||||
ptrC1 (Ptr<Packet> 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<Packet> p = Create<Packet> (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<Packet> p = Create<Packet> (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
|
||||
|
||||
Reference in New Issue
Block a user