This commit is contained in:
Mathieu Lacage
2007-11-22 10:30:29 +01:00
72 changed files with 663 additions and 597 deletions

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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
}
}

View File

@@ -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

View File

@@ -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());
}
}

View File

@@ -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;

View File

@@ -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");

View File

@@ -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;

View File

@@ -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++)
{

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
};

View File

@@ -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 ());
}
}

View File

@@ -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);

View File

@@ -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! ()

View File

@@ -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;

View File

@@ -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

View File

@@ -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 ());
}
}

View File

@@ -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;
};

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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
*/

View File

@@ -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);

View File

@@ -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:

View File

@@ -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 ())

View File

@@ -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;
};

View File

@@ -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);
}

View File

@@ -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:

View File

@@ -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;
}

View File

@@ -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;
};

View File

@@ -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);
};

View File

@@ -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 ())
{

View File

@@ -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;
};

View File

@@ -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()) {

View File

@@ -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;

View File

@@ -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 ());

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;
};

View File

@@ -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 (),

View File

@@ -141,7 +141,7 @@ public:
*/
virtual bool RequestRoute (uint32_t ifIndex,
Ipv4Header const &ipHeader,
Packet packet,
Ptr<Packet> packet,
RouteReplyCallback routeReply);
/**

View File

@@ -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);

View File

@@ -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;

View File

@@ -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)

View File

@@ -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);

View File

@@ -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 ();

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;
};

View File

@@ -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");
}

View File

@@ -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

View File

@@ -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;
/**

View File

@@ -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 ())
{

View File

@@ -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.

View File

@@ -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;

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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 ())

View File

@@ -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

View File

@@ -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);

View File

@@ -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 ();

View File

@@ -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;

View File

@@ -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);

View File

@@ -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