--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/wscript Thu Nov 22 10:44:48 2007 +0100
@@ -0,0 +1,44 @@
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+import Object
+
+def build(bld):
+ env = bld.env_of_name('default')
+
+ if env['NS3_ENABLED_MODULES']:
+ modules = env['NS3_ENABLED_MODULES']
+ changed = True
+ while changed:
+ changed = False
+ for module in modules:
+ module_obj = Object.name_to_obj(module)
+ if module_obj is None:
+ raise ValueError("module %s not found" % module)
+ for dep in module_obj.add_objects:
+ if not dep.startswith('ns3-'):
+ continue
+ if dep not in modules:
+ modules.append(dep)
+ changed = True
+
+ ## remove objects that depend on modules not listed
+ for obj in list(Object.g_allobjs):
+ if hasattr(obj, 'ns3_module_dependencies'):
+ for dep in obj.ns3_module_dependencies:
+ if dep not in modules:
+ Object.g_allobjs.remove(obj)
+ break
+ if obj.name in env['NS3_MODULES'] and obj.name not in modules:
+ Object.g_allobjs.remove(obj)
+
+
+
+ ## Create a single ns3 library containing all modules
+ lib = bld.create_obj('cpp', 'shlib')
+ lib.name = 'ns3'
+ lib.target = 'ns3'
+ if env['NS3_ENABLED_MODULES']:
+ lib.add_objects = list(modules)
+ else:
+ lib.add_objects = list(env['NS3_MODULES'])
+
+
--- a/samples/main-packet-printer.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/samples/main-packet-printer.cc Thu Nov 22 10:44:48 2007 +0100
@@ -49,7 +49,7 @@
{
// 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 @@
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 @@
// 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 @@
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;
}
--- a/samples/main-packet-tag.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/samples/main-packet-tag.cc Thu Nov 22 10:44:48 2007 +0100
@@ -116,20 +116,20 @@
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;
--- a/samples/main-simple.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/samples/main-simple.cc Thu Nov 22 10:44:48 2007 +0100
@@ -14,7 +14,7 @@
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 @@
}
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
--- a/src/applications/onoff/onoff-application.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/applications/onoff/onoff-application.cc Thu Nov 22 10:44:48 2007 +0100
@@ -95,7 +95,7 @@
m_pktSize = size;
m_residualBits = 0;
m_lastStartTime = Seconds (0);
- m_maxBytes = 0xffffffff;
+ m_maxBytes = 0;
m_totBytes = 0;
m_iid = iid;
}
@@ -201,7 +201,7 @@
{
NS_LOG_FUNCTION;
- if (m_totBytes < m_maxBytes)
+ if (m_maxBytes != 0 || m_totBytes < m_maxBytes)
{
uint32_t bits = m_pktSize * 8 - m_residualBits;
NS_LOG_LOGIC ("bits = " << bits);
@@ -240,7 +240,8 @@
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;
--- a/src/applications/onoff/wscript Wed Nov 21 11:12:02 2007 +0100
+++ b/src/applications/onoff/wscript Thu Nov 22 10:44:48 2007 +0100
@@ -1,7 +1,7 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def build(bld):
- module = bld.create_ns3_module('onoff', ['core'])
+ module = bld.create_ns3_module('onoff', ['core', 'simulator', 'node'])
module.source = [
'onoff-application.cc',
]
--- a/src/applications/packet-sink/packet-sink.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/applications/packet-sink/packet-sink.cc Thu Nov 22 10:44:48 2007 +0100
@@ -78,6 +78,7 @@
m_socket = socketFactory->CreateSocket ();
m_socket->Bind (m_local);
}
+
m_socket->SetRecvCallback (MakeCallback(&PacketSink::Receive, this));
}
@@ -86,21 +87,20 @@
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
}
}
--- a/src/applications/packet-sink/packet-sink.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/applications/packet-sink/packet-sink.h Thu Nov 22 10:44:48 2007 +0100
@@ -73,7 +73,7 @@
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
--- a/src/applications/udp-echo/udp-echo-client.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/applications/udp-echo/udp-echo-client.cc Thu Nov 22 10:44:48 2007 +0100
@@ -99,8 +99,7 @@
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 @@
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 @@
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 @@
void
UdpEchoClient::Receive(
Ptr<Socket> socket,
- const Packet &packet,
+ Ptr<Packet> packet,
const Address &from)
{
NS_LOG_FUNCTION;
@@ -157,7 +156,7 @@
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());
}
}
--- a/src/applications/udp-echo/udp-echo-client.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/applications/udp-echo/udp-echo-client.h Thu Nov 22 10:44:48 2007 +0100
@@ -50,7 +50,7 @@
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;
--- a/src/applications/udp-echo/udp-echo-server.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/applications/udp-echo/udp-echo-server.cc Thu Nov 22 10:44:48 2007 +0100
@@ -94,15 +94,15 @@
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 @@
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");
--- a/src/applications/udp-echo/udp-echo-server.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/applications/udp-echo/udp-echo-server.h Thu Nov 22 10:44:48 2007 +0100
@@ -44,7 +44,7 @@
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;
--- a/src/common/error-model.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/common/error-model.cc Thu Nov 22 10:44:48 2007 +0100
@@ -62,7 +62,7 @@
}
bool
-ErrorModel::IsCorrupt (Packet& p)
+ErrorModel::IsCorrupt (Ptr<Packet> p)
{
NS_LOG_FUNCTION;
bool result;
@@ -176,7 +176,7 @@
}
bool
-RateErrorModel::DoCorrupt (Packet& p)
+RateErrorModel::DoCorrupt (Ptr<Packet> p)
{
NS_LOG_FUNCTION;
if (!m_enable)
@@ -199,27 +199,27 @@
}
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 @@
// 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++)
{
--- a/src/common/error-model.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/common/error-model.h Thu Nov 22 10:44:48 2007 +0100
@@ -52,7 +52,7 @@
* rem->SetRandomVariable (UniformVariable ());
* rem->SetRate (0.001);
* ...
- * Packet p;
+ * Ptr<Packet> p;
* if (rem->IsCorrupt (p))
* {
* dropTrace(p);
@@ -82,7 +82,7 @@
* \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 @@
/*
* 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 @@
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 @@
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;
--- a/src/common/packet-metadata-test.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/common/packet-metadata-test.cc Thu Nov 22 10:44:48 2007 +0100
@@ -199,7 +199,7 @@
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 @@
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 @@
}
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 @@
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 @@
}
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 @@
{ \
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 @@
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 @@
}
-Packet
-PacketMetadataTest::DoAddHeader (Packet p)
+Ptr<Packet>
+PacketMetadataTest::DoAddHeader (Ptr<Packet> p)
{
ADD_HEADER (p, 10);
return p;
@@ -446,14 +446,14 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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;
--- a/src/common/packet.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/common/packet.cc Thu Nov 22 10:44:48 2007 +0100
@@ -26,22 +26,72 @@
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 (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 @@
}
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 @@
* 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 @@
{
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;
--- a/src/common/packet.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/common/packet.h Thu Nov 22 10:44:48 2007 +0100
@@ -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 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 @@
* \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 @@
*
* \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 @@
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;
};
--- a/src/common/pcap-writer.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/common/pcap-writer.cc Thu Nov 22 10:44:48 2007 +0100
@@ -89,7 +89,7 @@
void
-PcapWriter::WritePacket (Packet const packet)
+PcapWriter::WritePacket (Ptr<const Packet> packet)
{
if (m_writer != 0)
{
@@ -98,9 +98,9 @@
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 ());
}
}
--- a/src/common/pcap-writer.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/common/pcap-writer.h Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
/**
* \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);
--- a/src/core/log.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/core/log.cc Thu Nov 22 10:44:48 2007 +0100
@@ -39,6 +39,12 @@
typedef std::list<std::pair <std::string, LogComponent *> > ComponentList;
typedef std::list<std::pair <std::string, LogComponent *> >::iterator ComponentListI;
+static class PrintList
+{
+public:
+ PrintList ();
+} g_printList;
+
static
ComponentList *GetComponentList (void)
{
@@ -46,6 +52,35 @@
return &components;
}
+
+
+PrintList::PrintList ()
+{
+#ifdef HAVE_GETENV
+ char *envVar = getenv("NS_LOG");
+ if (envVar == 0)
+ {
+ return;
+ }
+ std::string env = envVar;
+ std::string::size_type cur = 0;
+ std::string::size_type next = 0;
+ while (next != std::string::npos)
+ {
+ next = env.find_first_of (";", cur);
+ std::string tmp = std::string (env, cur, next-cur);
+ if (tmp == "print-list")
+ {
+ LogComponentPrintList ();
+ exit (0);
+ break;
+ }
+ cur = next + 1;
+ }
+#endif
+}
+
+
LogComponent::LogComponent (char const * name)
: m_levels (0), m_name (name)
{
@@ -75,23 +110,10 @@
std::string::size_type cur = 0;
std::string::size_type next = 0;
- while (true)
+ while (next != std::string::npos)
{
next = env.find_first_of (";", cur);
- std::string tmp = std::string (env, cur, next);
- {
- /* The following code is a workaround for a bug in the g++
- * c++ string library. Its goal is to remove any trailing ';'
- * from the string even though there should not be any in
- * it. This code should be safe even if the bug is not there.
- */
- std::string::size_type trailing = tmp.find_first_of (";");
- tmp = tmp.substr (0, trailing);
- }
- if (tmp.size () == 0)
- {
- break;
- }
+ std::string tmp = std::string (env, cur, next-cur);
std::string::size_type equal = tmp.find ("=");
std::string component;
if (equal == std::string::npos)
@@ -189,15 +211,7 @@
Enable ((enum LogLevel)level);
}
}
- if (next == std::string::npos)
- {
- break;
- }
cur = next + 1;
- if (cur >= env.size ())
- {
- break;
- }
}
#endif
}
--- a/src/core/ptr.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/core/ptr.h Thu Nov 22 10:44:48 2007 +0100
@@ -100,6 +100,8 @@
T *operator -> () const;
T *operator -> ();
+ const T &operator * () const;
+ const T &operator * ();
// allow if (!sp)
bool operator! ();
// allow if (sp)
@@ -221,73 +223,49 @@
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>
@@ -457,6 +435,21 @@
}
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! ()
{
--- a/src/devices/csma/csma-channel.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/devices/csma/csma-channel.cc Thu Nov 22 10:44:48 2007 +0100
@@ -203,11 +203,11 @@
}
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 @@
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 @@
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 @@
{
if (it->IsActive())
{
- it->devicePtr->Receive (m_currentPkt);
+ it->devicePtr->Receive (m_currentPkt->Copy ());
}
}
m_state = IDLE;
--- a/src/devices/csma/csma-channel.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/devices/csma/csma-channel.h Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
* \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 @@
* 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
--- a/src/devices/csma/csma-net-device.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/devices/csma/csma-net-device.cc Thu Nov 22 10:44:48 2007 +0100
@@ -225,7 +225,7 @@
}
void
-CsmaNetDevice::AddHeader (Packet& p, Mac48Address dest,
+CsmaNetDevice::AddHeader (Ptr<Packet> p, Mac48Address dest,
uint16_t protocolNumber)
{
NS_LOG_FUNCTION;
@@ -243,7 +243,7 @@
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 @@
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 @@
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 @@
break;
case LLC: {
LlcSnapHeader llc;
- p.RemoveHeader (llc);
+ p->RemoveHeader (llc);
param = llc.GetType ();
} break;
case RAW:
@@ -317,15 +317,13 @@
}
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 @@
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 @@
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 @@
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 @@
{
// 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 @@
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 @@
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 @@
}
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 @@
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::Receive (const Packet& packet)
+CsmaNetDevice::Receive (Ptr<Packet> packet)
{
NS_LOG_FUNCTION;
@@ -556,26 +553,25 @@
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 @@
(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 @@
}
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 @@
case LLC:
{
LlcSnapHeader llc;
- p.RemoveHeader (llc);
+ packet->RemoveHeader (llc);
protocol = llc.GetType ();
}
break;
@@ -640,8 +636,7 @@
NS_ASSERT (false);
break;
}
- ForwardUp (p, protocol, header.GetSource ());
- return;
+ ForwardUp (packet, protocol, header.GetSource ());
}
}
--- a/src/devices/csma/csma-net-device.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/devices/csma/csma-net-device.h Thu Nov 22 10:44:48 2007 +0100
@@ -214,7 +214,7 @@
* @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 @@
* \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 @@
* \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 @@
* \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 @@
* 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 @@
* @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;
};
--- a/src/devices/point-to-point/point-to-point-channel.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/devices/point-to-point/point-to-point-channel.cc Thu Nov 22 10:44:48 2007 +0100
@@ -92,13 +92,13 @@
}
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);
--- a/src/devices/point-to-point/point-to-point-channel.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/devices/point-to-point/point-to-point-channel.h Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
* \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 @@
* \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
--- a/src/devices/point-to-point/point-to-point-net-device.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/devices/point-to-point/point-to-point-net-device.cc Thu Nov 22 10:44:48 2007 +0100
@@ -121,20 +121,20 @@
}
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 @@
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 @@
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 @@
//
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 @@
//
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 @@
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 @@
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
--- a/src/devices/point-to-point/point-to-point-net-device.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/devices/point-to-point/point-to-point-net-device.h Thu Nov 22 10:44:48 2007 +0100
@@ -166,7 +166,7 @@
* @see PointToPointChannel
* @param p a reference to the received packet
*/
- void Receive (Packet& p);
+ void Receive (Ptr<Packet> p);
private:
/**
@@ -215,14 +215,14 @@
* 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 @@
* @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 @@
* @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 @@
* @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 @@
* @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
*/
--- a/src/internet-node/arp-cache.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/arp-cache.cc Thu Nov 22 10:44:48 2007 +0100
@@ -147,7 +147,7 @@
//NS_ASSERT (m_waiting != 0);
UpdateSeen ();
}
-Packet
+Ptr<Packet>
ArpCache::Entry::MarkAlive (Address macAddress)
{
NS_ASSERT (m_state == WAIT_REPLY);
@@ -155,25 +155,25 @@
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);
--- a/src/internet-node/arp-cache.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/arp-cache.h Thu Nov 22 10:44:48 2007 +0100
@@ -101,16 +101,16 @@
* \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 @@
ArpCacheEntryState_e m_state;
Time m_lastSeen;
Address m_macAddress;
- Packet m_waiting;
+ Ptr<Packet> m_waiting;
};
private:
--- a/src/internet-node/arp-ipv4-interface.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/arp-ipv4-interface.cc Thu Nov 22 10:44:48 2007 +0100
@@ -61,10 +61,10 @@
}
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 ())
--- a/src/internet-node/arp-ipv4-interface.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/arp-ipv4-interface.h Thu Nov 22 10:44:48 2007 +0100
@@ -45,7 +45,7 @@
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;
};
--- a/src/internet-node/arp-l3-protocol.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/arp-l3-protocol.cc Thu Nov 22 10:44:48 2007 +0100
@@ -82,13 +82,12 @@
}
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 @@
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 @@
}
}
bool
-ArpL3Protocol::Lookup (Packet &packet, Ipv4Address destination,
+ArpL3Protocol::Lookup (Ptr<Packet> packet, Ipv4Address destination,
Ptr<NetDevice> device,
Address *hardwareDestination)
{
@@ -197,7 +196,7 @@
{
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 @@
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 @@
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);
}
--- a/src/internet-node/arp-l3-protocol.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/arp-l3-protocol.h Thu Nov 22 10:44:48 2007 +0100
@@ -51,7 +51,7 @@
/**
* \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 @@
* \param hardwareDestination
* \return
*/
- bool Lookup (Packet &p, Ipv4Address destination,
+ bool Lookup (Ptr<Packet> p, Ipv4Address destination,
Ptr<NetDevice> device,
Address *hardwareDestination);
protected:
--- a/src/internet-node/ascii-trace.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ascii-trace.cc Thu Nov 22 10:44:48 2007 +0100
@@ -58,46 +58,46 @@
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;
}
--- a/src/internet-node/ascii-trace.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ascii-trace.h Thu Nov 22 10:44:48 2007 +0100
@@ -23,6 +23,7 @@
#include <string>
#include <fstream>
+#include "ns3/ptr.h"
namespace ns3 {
@@ -37,10 +38,10 @@
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;
};
--- a/src/internet-node/internet-node.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/internet-node.h Thu Nov 22 10:44:48 2007 +0100
@@ -31,8 +31,6 @@
namespace ns3 {
-class Packet;
-
class InternetNode : public Node
{
public:
@@ -44,7 +42,6 @@
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);
};
--- a/src/internet-node/ipv4-end-point.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-end-point.cc Thu Nov 22 10:44:48 2007 +0100
@@ -20,6 +20,7 @@
*/
#include "ipv4-end-point.h"
+#include "ns3/packet.h"
namespace ns3 {
@@ -72,7 +73,7 @@
}
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 @@
}
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 ())
{
--- a/src/internet-node/ipv4-end-point.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-end-point.h Thu Nov 22 10:44:48 2007 +0100
@@ -44,17 +44,17 @@
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;
};
--- a/src/internet-node/ipv4-interface.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-interface.cc Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
// 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()) {
--- a/src/internet-node/ipv4-interface.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-interface.h Thu Nov 22 10:44:48 2007 +0100
@@ -145,12 +145,12 @@
* 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;
--- a/src/internet-node/ipv4-l3-protocol.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-l3-protocol.cc Thu Nov 22 10:44:48 2007 +0100
@@ -201,17 +201,17 @@
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 @@
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 @@
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 @@
}
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
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 ());
--- a/src/internet-node/ipv4-l3-protocol.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-l3-protocol.h Thu Nov 22 10:44:48 2007 +0100
@@ -129,7 +129,7 @@
* - 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 @@
* 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 @@
uint32_t interface);
void Lookup (Ipv4Header const &ipHeader,
- Packet packet,
+ Ptr<Packet> packet,
Ipv4RoutingProtocol::RouteReplyCallback routeReply);
uint32_t GetNRoutes (void);
@@ -218,18 +218,18 @@
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 @@
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;
--- a/src/internet-node/ipv4-l4-protocol.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-l4-protocol.h Thu Nov 22 10:44:48 2007 +0100
@@ -65,7 +65,7 @@
* 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;
--- a/src/internet-node/ipv4-loopback-interface.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-loopback-interface.cc Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
}
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);
--- a/src/internet-node/ipv4-loopback-interface.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-loopback-interface.h Thu Nov 22 10:44:48 2007 +0100
@@ -42,7 +42,7 @@
virtual ~Ipv4LoopbackInterface ();
private:
- virtual void SendTo (Packet p, Ipv4Address dest);
+ virtual void SendTo (Ptr<Packet> p, Ipv4Address dest);
Ptr<Node> m_node;
};
--- a/src/internet-node/ipv4-static-routing.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-static-routing.cc Thu Nov 22 10:44:48 2007 +0100
@@ -518,11 +518,11 @@
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 @@
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 (),
--- a/src/internet-node/ipv4-static-routing.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/ipv4-static-routing.h Thu Nov 22 10:44:48 2007 +0100
@@ -141,7 +141,7 @@
*/
virtual bool RequestRoute (uint32_t ifIndex,
Ipv4Header const &ipHeader,
- Packet packet,
+ Ptr<Packet> packet,
RouteReplyCallback routeReply);
/**
--- a/src/internet-node/pcap-trace.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/pcap-trace.cc Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
}
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);
--- a/src/internet-node/pcap-trace.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/pcap-trace.h Thu Nov 22 10:44:48 2007 +0100
@@ -23,6 +23,7 @@
#include <string>
#include <vector>
+#include "ns3/ptr.h"
namespace ns3 {
@@ -39,7 +40,7 @@
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;
--- a/src/internet-node/udp-l4-protocol.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/udp-l4-protocol.cc Thu Nov 22 10:44:48 2007 +0100
@@ -121,43 +121,43 @@
}
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)
--- a/src/internet-node/udp-l4-protocol.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/udp-l4-protocol.h Thu Nov 22 10:44:48 2007 +0100
@@ -73,7 +73,7 @@
* \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 @@
* \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);
--- a/src/internet-node/udp-socket.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/udp-socket.cc Thu Nov 22 10:44:48 2007 +0100
@@ -187,10 +187,10 @@
}
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 @@
}
int
-UdpSocket::DoSend (const Packet &p)
+UdpSocket::DoSend (Ptr<Packet> p)
{
NS_LOG_FUNCTION;
if (m_endPoint == 0)
@@ -223,10 +223,10 @@
}
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 @@
}
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 @@
{
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 @@
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 @@
}
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 @@
}
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 @@
}
Address address = InetSocketAddress (ipv4, port);
- Packet p = packet;
- NotifyDataReceived (p, address);
+ NotifyDataReceived (packet, address);
}
} //namespace ns3
@@ -350,15 +349,15 @@
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 @@
: 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 @@
// ------ 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 @@
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 ();
--- a/src/internet-node/udp-socket.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/internet-node/udp-socket.h Thu Nov 22 10:44:48 2007 +0100
@@ -51,8 +51,8 @@
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 @@
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;
--- a/src/node/drop-tail-queue.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/drop-tail-queue.cc Thu Nov 22 10:44:48 2007 +0100
@@ -58,10 +58,10 @@
}
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 @@
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 @@
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)
+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 @@
return false;
}
- p = m_packets.front ();
+ Ptr<Packet> p = m_packets.front ();
- return true;
+ return p;
}
} // namespace ns3
@@ -139,7 +139,11 @@
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 @@
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;
}
--- a/src/node/drop-tail-queue.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/drop-tail-queue.h Thu Nov 22 10:44:48 2007 +0100
@@ -57,12 +57,12 @@
uint32_t GetMaxPackets (void);
private:
- virtual bool DoEnqueue (const Packet& p);
- virtual bool DoDequeue (Packet &p);
- virtual bool DoPeek (Packet &p);
+ 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;
};
--- a/src/node/ethernet-trailer.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/ethernet-trailer.cc Thu Nov 22 10:44:48 2007 +0100
@@ -56,7 +56,7 @@
}
bool
-EthernetTrailer::CheckFcs (const Packet& p) const
+EthernetTrailer::CheckFcs (Ptr<Packet> p) const
{
if (!m_calcFcs)
{
@@ -68,7 +68,7 @@
}
void
-EthernetTrailer::CalcFcs (const Packet& p)
+EthernetTrailer::CalcFcs (Ptr<Packet> p)
{
NS_LOG_WARN ("FCS calculation is not yet enabled");
}
--- a/src/node/ethernet-trailer.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/ethernet-trailer.h Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
* 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 @@
* 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
--- a/src/node/ipv4.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/ipv4.h Thu Nov 22 10:44:48 2007 +0100
@@ -66,7 +66,7 @@
* 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 @@
*/
virtual bool RequestRoute (uint32_t ifIndex,
const Ipv4Header &ipHeader,
- Packet packet,
+ Ptr<Packet> packet,
RouteReplyCallback routeReply) = 0;
/**
--- a/src/node/net-device.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/net-device.cc Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
// 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 @@
// 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 ())
{
--- a/src/node/net-device.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/net-device.h Thu Nov 22 10:44:48 2007 +0100
@@ -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 TraceResolver;
class TraceContext;
class Channel;
+class Packet;
/**
* \brief Network layer to device interface
@@ -210,7 +210,7 @@
*
* \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 @@
* \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 @@
* 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 @@
* 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.
--- a/src/node/node.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/node.cc Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
}
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;
--- a/src/node/node.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/node.h Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
/**
* 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 @@
*/
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);
--- a/src/node/packet-socket.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/packet-socket.cc Thu Nov 22 10:44:48 2007 +0100
@@ -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 @@
}
int
-PacketSocket::Send (const Packet &p)
+PacketSocket::Send (Ptr<Packet> p)
{
NS_LOG_FUNCTION;
if (m_state == STATE_OPEN ||
@@ -216,7 +217,7 @@
}
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 @@
}
if (!error)
{
- NotifyDataSent (p.GetSize ());
+ NotifyDataSent (p->GetSize ());
}
if (error)
@@ -288,7 +289,7 @@
}
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 @@
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
--- a/src/node/packet-socket.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/packet-socket.h Thu Nov 22 10:44:48 2007 +0100
@@ -82,15 +82,15 @@
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);
--- a/src/node/queue.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/queue.cc Thu Nov 22 10:44:48 2007 +0100
@@ -121,25 +121,25 @@
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 @@
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,17 +183,17 @@
NS_ASSERT_MSG (0, "Don't know what to do with dequeued packets!");
}
-bool
-Queue::Peek (Packet &p)
+Ptr<Packet>
+Queue::Peek (void) const
{
NS_LOG_FUNCTION;
- NS_LOG_PARAMS (this << &p);
- return DoPeek (p);
+ NS_LOG_PARAMS (this);
+ return DoPeek ();
}
uint32_t
-Queue::GetNPackets (void)
+Queue::GetNPackets (void) const
{
NS_LOG_FUNCTION;
NS_LOG_LOGIC ("returns " << m_nPackets);
@@ -203,7 +201,7 @@
}
uint32_t
-Queue::GetNBytes (void)
+Queue::GetNBytes (void) const
{
NS_LOG_FUNCTION;
NS_LOG_LOGIC (" returns " << m_nBytes);
@@ -211,7 +209,7 @@
}
bool
-Queue::IsEmpty (void)
+Queue::IsEmpty (void) const
{
NS_LOG_FUNCTION;
NS_LOG_LOGIC ("returns " << (m_nPackets == 0));
@@ -219,7 +217,7 @@
}
uint32_t
-Queue::GetTotalReceivedBytes (void)
+Queue::GetTotalReceivedBytes (void) const
{
NS_LOG_FUNCTION;
NS_LOG_LOGIC("returns " << m_nTotalReceivedBytes);
@@ -227,7 +225,7 @@
}
uint32_t
-Queue::GetTotalReceivedPackets (void)
+Queue::GetTotalReceivedPackets (void) const
{
NS_LOG_FUNCTION;
NS_LOG_LOGIC ("returns " << m_nTotalReceivedPackets);
@@ -235,7 +233,7 @@
}
uint32_t
-Queue:: GetTotalDroppedBytes (void)
+Queue:: GetTotalDroppedBytes (void) const
{
NS_LOG_FUNCTION;
NS_LOG_LOGIC ("returns " << m_nTotalDroppedBytes);
@@ -243,7 +241,7 @@
}
uint32_t
-Queue::GetTotalDroppedPackets (void)
+Queue::GetTotalDroppedPackets (void) const
{
NS_LOG_FUNCTION;
NS_LOG_LOGIC("returns " << m_nTotalDroppedPackets);
@@ -261,13 +259,13 @@
}
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);
--- a/src/node/queue.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/queue.h Thu Nov 22 10:44:48 2007 +0100
@@ -86,22 +86,22 @@
/**
* \return true if the queue is empty; false otherwise
*/
- bool IsEmpty (void);
+ bool IsEmpty (void) const;
/**
* 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);
+ Ptr<Packet> Peek (void) const;
/**
* XXX Doesn't do anything right now, think its supposed to flush the queue
@@ -110,11 +110,11 @@
/**
* \return The number of packets currently stored in the Queue
*/
- uint32_t GetNPackets (void);
+ uint32_t GetNPackets (void) const;
/**
* \return The number of bytes currently occupied by the packets in the Queue
*/
- uint32_t GetNBytes (void);
+ uint32_t GetNBytes (void) const;
/**
* \return The total number of bytes recieved by this Queue since the
@@ -122,25 +122,25 @@
* whichever happened more recently
*
*/
- uint32_t GetTotalReceivedBytes (void);
+ uint32_t GetTotalReceivedBytes (void) const;
/**
* \return The total number of packets recieved by this Queue since the
* simulation began, or since ResetStatistics was called, according to
* whichever happened more recently
*/
- uint32_t GetTotalReceivedPackets (void);
+ uint32_t GetTotalReceivedPackets (void) const;
/**
* \return The total number of bytes dropped by this Queue since the
* simulation began, or since ResetStatistics was called, according to
* whichever happened more recently
*/
- uint32_t GetTotalDroppedBytes (void);
+ uint32_t GetTotalDroppedBytes (void) const;
/**
* \return The total number of bytes dropped by this Queue since the
* simulation began, or since ResetStatistics was called, according to
* whichever happened more recently
*/
- uint32_t GetTotalDroppedPackets (void);
+ uint32_t GetTotalDroppedPackets (void) const;
/**
* Resets the counts for dropped packets, dropped bytes, recieved packets, and
* recieved bytes.
@@ -173,19 +173,19 @@
private:
- virtual bool DoEnqueue (const Packet& p) = 0;
- virtual bool DoDequeue (Packet &p) = 0;
- virtual bool DoPeek (Packet &p) = 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;
--- a/src/node/socket.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/socket.cc Thu Nov 22 10:44:48 2007 +0100
@@ -72,7 +72,7 @@
}
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 @@
}
void
-Socket::NotifyDataReceived (const Packet &p, const Address &from)
+Socket::NotifyDataReceived (Ptr<Packet> p, const Address &from)
{
NS_LOG_FUNCTION;
if (!m_receivedData.IsNull ())
--- a/src/node/socket.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/node/socket.h Thu Nov 22 10:44:48 2007 +0100
@@ -121,7 +121,7 @@
* \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 @@
* \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 @@
* \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 @@
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 @@
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
--- a/src/routing/olsr/olsr-agent-impl.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/routing/olsr/olsr-agent-impl.cc Thu Nov 22 10:44:48 2007 +0100
@@ -281,8 +281,8 @@
// \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 @@
// 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 @@
while (sizeLeft)
{
MessageHeader messageHeader;
- if (packet.RemoveHeader (messageHeader) == 0)
+ if (packet->RemoveHeader (messageHeader) == 0)
NS_ASSERT (false);
sizeLeft -= messageHeader.GetSerializedSize ();
@@ -327,8 +327,8 @@
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 @@
}
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 @@
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 @@
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 @@
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 @@
/// \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);
--- a/src/routing/olsr/olsr-agent-impl.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/routing/olsr/olsr-agent-impl.h Thu Nov 22 10:44:48 2007 +0100
@@ -89,7 +89,7 @@
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 @@
inline uint16_t GetMessageSequenceNumber ();
void RecvOlsr (Ptr<Socket> socket,
- const Packet &receivedPacket,
+ Ptr<Packet> receivedPacket,
const Address &sourceAddress);
void MprComputation ();
--- a/src/routing/olsr/routing-table.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/routing/olsr/routing-table.cc Thu Nov 22 10:44:48 2007 +0100
@@ -106,7 +106,7 @@
bool
RoutingTable::RequestRoute (uint32_t ifIndex,
const Ipv4Header &ipHeader,
- Packet packet,
+ Ptr<Packet> packet,
RouteReplyCallback routeReply)
{
RoutingTableEntry entry1, entry2;
--- a/src/routing/olsr/routing-table.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/routing/olsr/routing-table.h Thu Nov 22 10:44:48 2007 +0100
@@ -100,7 +100,7 @@
// 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);
--- a/src/simulator/simulator.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/src/simulator/simulator.cc Thu Nov 22 10:44:48 2007 +0100
@@ -70,6 +70,7 @@
void Run (void);
Time Now (void) const;
Time GetDelayLeft (const EventId &id) const;
+ Time GetMaximumSimulationTime (void) const;
private:
void ProcessOneEvent (void);
@@ -333,6 +334,15 @@
}
}
+Time
+SimulatorPrivate::GetMaximumSimulationTime (void) const
+{
+ // XXX: I am fairly certain other compilers use other non-standard
+ // post-fixes to indicate 64 bit constants.
+ return TimeStep (0x7fffffffffffffffLL);
+}
+
+
}; // namespace ns3
@@ -504,7 +514,13 @@
return Time (Simulator::Now ());
}
-}; // namespace ns3
+Time
+Simulator::GetMaximumSimulationTime (void)
+{
+ return GetPriv ()->GetMaximumSimulationTime ();
+}
+
+} // namespace ns3
#ifdef RUN_SELF_TESTS
--- a/src/simulator/simulator.h Wed Nov 21 11:12:02 2007 +0100
+++ b/src/simulator/simulator.h Thu Nov 22 10:44:48 2007 +0100
@@ -558,6 +558,14 @@
* zero.
*/
static Time GetDelayLeft (const EventId &id);
+
+ /**
+ * \returns the maximum simulation time at which an event
+ * can be scheduled.
+ *
+ * The returned value will always be bigger than or equal to Simulator::Now.
+ */
+ static Time GetMaximumSimulationTime (void);
private:
Simulator ();
~Simulator ();
--- a/src/wscript Wed Nov 21 11:12:02 2007 +0100
+++ b/src/wscript Thu Nov 22 10:44:48 2007 +0100
@@ -37,19 +37,28 @@
" specific platforms, such as Linux and Solaris)"),
action="store_true", dest='enable_rpath', default=False)
+ opt.add_option('--enable-modules',
+ help=("Build only these modules (and dependencies)"),
+ dest='enable_modules')
+
def configure(conf):
conf.sub_config('core')
conf.sub_config('simulator')
blddir = os.path.abspath(os.path.join(conf.m_blddir, conf.env.variant()))
- conf.env['NS3_MODULE_PATH'] = [os.path.join(blddir)]
+ conf.env['NS3_MODULE_PATH'] = [os.path.join(blddir, 'lib')]
if Params.g_options.enable_rpath:
conf.env.append_value('RPATH', '-Wl,-rpath=%s' % (os.path.join(blddir),))
## Used to link the 'run-tests' program with all of ns-3 code
conf.env['NS3_MODULES'] = ['ns3-' + module.split('/')[-1] for module in all_modules]
+ if Params.g_options.enable_modules:
+ conf.env['NS3_ENABLED_MODULES'] = ['ns3-'+mod for mod in
+ Params.g_options.enable_modules.split(',')]
+
+
def create_ns3_module(bld, name, dependencies=()):
module = bld.create_obj('cpp', 'objects')
module.name = 'ns3-' + name
--- a/tutorial/wscript Wed Nov 21 11:12:02 2007 +0100
+++ b/tutorial/wscript Thu Nov 22 10:44:48 2007 +0100
@@ -1,36 +1,36 @@
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def build(bld):
- obj = bld.create_ns3_program('hello-simulator', ['core'])
+ obj = bld.create_ns3_program('hello-simulator', ['simulator'])
obj.source = 'hello-simulator.cc'
- obj = bld.create_ns3_program('tutorial-csma-echo', ['core'])
+ obj = bld.create_ns3_program('tutorial-csma-echo', ['internet-node', 'csma'])
obj.source = 'tutorial-csma-echo.cc'
- obj = bld.create_ns3_program('tutorial-csma-echo-ascii-trace', ['core'])
+ obj = bld.create_ns3_program('tutorial-csma-echo-ascii-trace', ['internet-node', 'csma'])
obj.source = 'tutorial-csma-echo-ascii-trace.cc'
- obj = bld.create_ns3_program('tutorial-csma-echo-pcap-trace', ['core'])
+ obj = bld.create_ns3_program('tutorial-csma-echo-pcap-trace', ['internet-node', 'csma'])
obj.source = 'tutorial-csma-echo-pcap-trace.cc'
- obj = bld.create_ns3_program('tutorial-point-to-point', ['core'])
+ obj = bld.create_ns3_program('tutorial-point-to-point', ['internet-node', 'point-to-point'])
obj.source = 'tutorial-point-to-point.cc'
- obj = bld.create_ns3_program('tutorial-star', ['core'])
+ obj = bld.create_ns3_program('tutorial-star', ['internet-node', 'point-to-point'])
obj.source = ['tutorial-star.cc',
'point-to-point-ipv4-topology.cc']
- obj = bld.create_ns3_program('tutorial-star-routing', ['core'])
+ obj = bld.create_ns3_program('tutorial-star-routing', ['internet-node', 'point-to-point'])
obj.source = ['tutorial-star-routing.cc',
'point-to-point-ipv4-topology.cc']
- obj = bld.create_ns3_program('tutorial-linear-dumbbell', ['core'])
+ obj = bld.create_ns3_program('tutorial-linear-dumbbell', ['internet-node', 'point-to-point'])
obj.source = 'tutorial-linear-dumbbell.cc'
- obj = bld.create_ns3_program('testipv4', ['core'])
+ obj = bld.create_ns3_program('testipv4', ['node'])
obj.source = ['testipv4.cc', 'ipv4-address-generator.cc']
- obj = bld.create_ns3_program('tutorial-bus-network', ['core'])
+ obj = bld.create_ns3_program('tutorial-bus-network', ['internet-node'])
obj.source = ['tutorial-bus-network.cc',
'ipv4-bus-network.cc',
'ipv4-address-generator.cc']
--- a/utils/bench-packets.cc Wed Nov 21 11:12:02 2007 +0100
+++ b/utils/bench-packets.cc Thu Nov 22 10:44:48 2007 +0100
@@ -115,12 +115,12 @@
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 @@
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 @@
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 @@
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
--- a/utils/wscript Wed Nov 21 11:12:02 2007 +0100
+++ b/utils/wscript Thu Nov 22 10:44:48 2007 +0100
@@ -12,7 +12,7 @@
def build(bld):
env = bld.env_of_name('default')
- unit_tests = bld.create_ns3_program('run-tests')
+ unit_tests = bld.create_ns3_program('run-tests', ['common'])
unit_tests.install_var = 0 # do not install
unit_tests.unit_test = 1 # runs on 'waf check'
unit_tests.source = 'run-tests.cc'
--- a/wscript Wed Nov 21 11:12:02 2007 +0100
+++ b/wscript Thu Nov 22 10:44:48 2007 +0100
@@ -150,6 +150,7 @@
program.name = name
program.target = program.name
program.uselib_local = 'ns3'
+ program.ns3_module_dependencies = ['ns3-'+dep for dep in dependencies]
return program
@@ -178,14 +179,10 @@
raise SystemExit(0)
# process subfolders from here
+ bld.add_subdirs('lib') # first subdirs are processed last by WAF
bld.add_subdirs('src')
bld.add_subdirs('samples utils examples tutorial')
- ## Create a single ns3 library containing all modules
- lib = bld.create_obj('cpp', 'shlib')
- lib.name = 'ns3'
- lib.target = 'ns3'
- lib.add_objects = list(bld.env_of_name('default')['NS3_MODULES'])
def shutdown():
@@ -214,11 +211,17 @@
## generate the trace sources list docs
env = Params.g_build.env_of_name('default')
proc_env = _get_proc_env()
- prog = _find_program('print-introspected-doxygen', env).m_linktask.m_outputs[0].abspath(env)
- out = open('doc/introspected-doxygen.h', 'w')
- if subprocess.Popen([prog], stdout=out, env=proc_env).wait():
- raise SystemExit(1)
- out.close()
+ try:
+ prog = _find_program('print-introspected-doxygen', env).m_linktask.m_outputs[0].abspath(env)
+ except ValueError: # could happen if print-introspected-doxygen is
+ # not built because of waf configure
+ # --enable-modules=xxx
+ pass
+ else:
+ out = open('doc/introspected-doxygen.h', 'w')
+ if subprocess.Popen([prog], stdout=out, env=proc_env).wait():
+ raise SystemExit(1)
+ out.close()
run_program('run-tests')