use Ptr<> everywhere Object or NsUnknown are used
This commit is contained in:
@@ -107,15 +107,15 @@ int main (int argc, char *argv[])
|
||||
Ptr<Node> n3 = new InternetNode ();
|
||||
|
||||
// We create the channels first without any IP addressing information
|
||||
PointToPointChannel *channel0 =
|
||||
Ptr<PointToPointChannel> channel0 =
|
||||
PointToPointTopology::AddPointToPointLink (
|
||||
n0, n2, DataRate(5000000), MilliSeconds(2));
|
||||
|
||||
PointToPointChannel *channel1 =
|
||||
Ptr<PointToPointChannel> channel1 =
|
||||
PointToPointTopology::AddPointToPointLink (
|
||||
n1, n2, DataRate(5000000), MilliSeconds(2));
|
||||
|
||||
PointToPointChannel *channel2 =
|
||||
Ptr<PointToPointChannel> channel2 =
|
||||
PointToPointTopology::AddPointToPointLink (
|
||||
n2, n3, DataRate(1500000), MilliSeconds(10));
|
||||
|
||||
@@ -123,17 +123,14 @@ int main (int argc, char *argv[])
|
||||
PointToPointTopology::AddIpv4Addresses (
|
||||
channel0, n0, Ipv4Address("10.1.1.1"),
|
||||
n2, Ipv4Address("10.1.1.2"));
|
||||
channel0->Unref ();
|
||||
|
||||
PointToPointTopology::AddIpv4Addresses (
|
||||
channel1, n1, Ipv4Address("10.1.2.1"),
|
||||
n2, Ipv4Address("10.1.2.2"));
|
||||
channel1->Unref ();
|
||||
|
||||
PointToPointTopology::AddIpv4Addresses (
|
||||
channel2, n2, Ipv4Address("10.1.3.1"),
|
||||
n3, Ipv4Address("10.1.3.2"));
|
||||
channel2->Unref ();
|
||||
|
||||
// Create the OnOff application to send UDP datagrams of size
|
||||
// 210 bytes at a rate of 448 Kb/s
|
||||
@@ -146,10 +143,8 @@ int main (int argc, char *argv[])
|
||||
DataRate(448000),
|
||||
210);
|
||||
// Add to Node's ApplicationList (takes ownership of pointer)
|
||||
ApplicationList *apl0 = n0->QueryInterface<ApplicationList>
|
||||
(ApplicationList::iid);
|
||||
Ptr<ApplicationList> apl0 = n0->QueryInterface<ApplicationList> (ApplicationList::iid);
|
||||
apl0->Add(ooff0);
|
||||
apl0->Unref ();
|
||||
|
||||
// Start the application
|
||||
ooff0->Start(Seconds(1.0));
|
||||
@@ -165,22 +160,19 @@ int main (int argc, char *argv[])
|
||||
DataRate(448000),
|
||||
210);
|
||||
// Add to Node's ApplicationList (takes ownership of pointer)
|
||||
ApplicationList *apl3 = n3->QueryInterface<ApplicationList> (ApplicationList::iid);
|
||||
Ptr<ApplicationList> apl3 = n3->QueryInterface<ApplicationList> (ApplicationList::iid);
|
||||
apl3->Add(ooff1);
|
||||
apl3->Unref ();
|
||||
// Start the application
|
||||
ooff1->Start(Seconds(1.1));
|
||||
ooff1->Stop (Seconds(10.0));
|
||||
|
||||
// Here, finish off packet routing configuration
|
||||
// This will likely set by some global StaticRouting object in the future
|
||||
IIpv4 *ipv4;
|
||||
Ptr<IIpv4> ipv4;
|
||||
ipv4 = n0->QueryInterface<IIpv4> (IIpv4::iid);
|
||||
ipv4->SetDefaultRoute (Ipv4Address ("10.1.1.2"), 1);
|
||||
ipv4->Unref ();
|
||||
ipv4 = n3->QueryInterface<IIpv4> (IIpv4::iid);
|
||||
ipv4->SetDefaultRoute (Ipv4Address ("10.1.3.1"), 1);
|
||||
ipv4->Unref ();
|
||||
|
||||
n0 = 0;
|
||||
n1 = 0;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
using namespace ns3;
|
||||
|
||||
static void
|
||||
GenerateTraffic (Socket *socket, uint32_t size)
|
||||
GenerateTraffic (Ptr<Socket> socket, uint32_t size)
|
||||
{
|
||||
std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, tx bytes=" << size << std::endl;
|
||||
socket->Send (0, size);
|
||||
@@ -24,13 +24,13 @@ GenerateTraffic (Socket *socket, uint32_t size)
|
||||
}
|
||||
|
||||
static void
|
||||
SocketPrinter (Socket *socket, uint32_t size, const Ipv4Address &from, uint16_t fromPort)
|
||||
SocketPrinter (Ptr<Socket> socket, uint32_t size, const Ipv4Address &from, uint16_t fromPort)
|
||||
{
|
||||
std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, rx bytes=" << size << std::endl;
|
||||
}
|
||||
|
||||
static void
|
||||
PrintTraffic (Socket *socket)
|
||||
PrintTraffic (Ptr<Socket> socket)
|
||||
{
|
||||
socket->RecvDummy (MakeCallback (&SocketPrinter));
|
||||
}
|
||||
@@ -40,17 +40,14 @@ RunSimulation (void)
|
||||
{
|
||||
Ptr<InternetNode> a = new InternetNode ();
|
||||
|
||||
IUdp *udp;
|
||||
udp = a->QueryInterface<IUdp> (IUdp::iid);
|
||||
Ptr<IUdp> udp = a->QueryInterface<IUdp> (IUdp::iid);
|
||||
|
||||
Socket *sink = udp->CreateSocket ();
|
||||
Ptr<Socket> sink = udp->CreateSocket ();
|
||||
sink->Bind (80);
|
||||
|
||||
Socket *source = udp->CreateSocket ();
|
||||
Ptr<Socket> source = udp->CreateSocket ();
|
||||
source->Connect (Ipv4Address::GetLoopback (), 80);
|
||||
|
||||
udp->Unref ();
|
||||
|
||||
GenerateTraffic (source, 500);
|
||||
PrintTraffic (sink);
|
||||
|
||||
@@ -58,11 +55,6 @@ RunSimulation (void)
|
||||
Simulator::Run ();
|
||||
|
||||
Simulator::Destroy ();
|
||||
|
||||
sink->Unref ();
|
||||
source->Unref ();
|
||||
|
||||
std::cout << "o" << std::endl;
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
|
||||
@@ -92,11 +92,7 @@ OnOffApplication::~OnOffApplication()
|
||||
void
|
||||
OnOffApplication::DoDispose (void)
|
||||
{
|
||||
if (m_socket != 0)
|
||||
{
|
||||
m_socket->Unref ();
|
||||
m_socket = 0;
|
||||
}
|
||||
m_socket = 0;
|
||||
delete m_onTime;
|
||||
delete m_offTime;
|
||||
|
||||
@@ -170,9 +166,8 @@ void OnOffApplication::StartApplication() // Called at time specified by Star
|
||||
this));
|
||||
#endif
|
||||
|
||||
IUdp *udp = GetNode ()->QueryInterface<IUdp> (IUdp::iid);
|
||||
Ptr<IUdp> udp = GetNode ()->QueryInterface<IUdp> (IUdp::iid);
|
||||
m_socket = udp->CreateSocket ();
|
||||
udp->Unref ();
|
||||
m_socket->Connect (m_peerIP, m_peerPort);
|
||||
}
|
||||
StopApplication(); // Insure no pending event
|
||||
@@ -263,13 +258,13 @@ void OnOffApplication::SendPacket()
|
||||
ScheduleNextTx();
|
||||
}
|
||||
|
||||
void OnOffApplication::ConnectionSucceeded(Socket*)
|
||||
void OnOffApplication::ConnectionSucceeded(Ptr<Socket>)
|
||||
{
|
||||
m_connected = true;
|
||||
ScheduleStartEvent();
|
||||
}
|
||||
|
||||
void OnOffApplication::ConnectionFailed(Socket*)
|
||||
void OnOffApplication::ConnectionFailed(Ptr<Socket>)
|
||||
{
|
||||
cout << "OnOffApplication, Connection Failed" << endl;
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ public: // Static methods
|
||||
static void DefaultSize(uint32_t s) { g_defaultSize = s;}
|
||||
|
||||
public:
|
||||
Socket * m_socket; // Associated socket
|
||||
Ptr<Socket> m_socket; // Associated socket
|
||||
Ipv4Address m_peerIP; // Peer IP address
|
||||
uint16_t m_peerPort; // Peer port
|
||||
bool m_connected; // True if connected
|
||||
@@ -97,9 +97,9 @@ private:
|
||||
void ScheduleNextTx();
|
||||
void ScheduleStartEvent();
|
||||
void ScheduleStopEvent();
|
||||
void ConnectionSucceeded(Socket*);
|
||||
void ConnectionFailed(Socket*);
|
||||
void Ignore(Socket*);
|
||||
void ConnectionSucceeded(Ptr<Socket>);
|
||||
void ConnectionFailed(Ptr<Socket>);
|
||||
void Ignore(Ptr<Socket>);
|
||||
protected:
|
||||
};
|
||||
|
||||
|
||||
@@ -49,10 +49,10 @@ bool operator == (const ClassId &a, const ClassId &b)
|
||||
return a.m_classId == b.m_classId;
|
||||
}
|
||||
|
||||
NsUnknown *
|
||||
Ptr<NsUnknown>
|
||||
NsUnknownManager::Create (ClassId classId)
|
||||
{
|
||||
Callback<NsUnknown *> callback = DoGetCallback<empty,empty,empty,empty,empty> (classId);
|
||||
Callback<Ptr<NsUnknown> > callback = DoGetCallback<empty,empty,empty,empty,empty> (classId);
|
||||
return callback ();
|
||||
}
|
||||
|
||||
@@ -141,9 +141,8 @@ A::A ()
|
||||
m_oneBoolInvoked (false),
|
||||
m_oneUi32Invoked (false)
|
||||
{
|
||||
B *b = new B ();
|
||||
ns3::Ptr<B> b = new B ();
|
||||
AddInterface (b);
|
||||
b->Unref ();
|
||||
}
|
||||
|
||||
A::A (bool bo)
|
||||
@@ -153,9 +152,8 @@ A::A (bool bo)
|
||||
m_oneUi32Invoked (false),
|
||||
m_bool (bo)
|
||||
{
|
||||
B *b = new B ();
|
||||
ns3::Ptr<B> b = new B ();
|
||||
AddInterface (b);
|
||||
b->Unref ();
|
||||
}
|
||||
|
||||
A::A (uint32_t i)
|
||||
@@ -165,9 +163,8 @@ A::A (uint32_t i)
|
||||
m_oneUi32Invoked (true),
|
||||
m_ui32 (i)
|
||||
{
|
||||
B *b = new B ();
|
||||
ns3::Ptr<B> b = new B ();
|
||||
AddInterface (b);
|
||||
b->Unref ();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -189,14 +186,13 @@ NsUnknownManagerTest::RunTests (void)
|
||||
{
|
||||
bool ok = true;
|
||||
|
||||
A *a = 0;
|
||||
Ptr<A> a = 0;
|
||||
a = NsUnknownManager::Create<A> (A::cidZero, A::iid);
|
||||
if (a == 0 ||
|
||||
!a->m_zeroInvoked)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
a->Unref ();
|
||||
|
||||
a = NsUnknownManager::Create<A,bool> (A::cidOneBool, A::iid, true);
|
||||
if (a == 0 ||
|
||||
@@ -205,7 +201,6 @@ NsUnknownManagerTest::RunTests (void)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
a->Unref ();
|
||||
|
||||
a = NsUnknownManager::Create<A,bool> (A::cidOneBool, A::iid, false);
|
||||
if (a == 0 ||
|
||||
@@ -214,7 +209,6 @@ NsUnknownManagerTest::RunTests (void)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
a->Unref ();
|
||||
|
||||
a = NsUnknownManager::Create<A,uint32_t> (A::cidOneUi32, A::iid, 10);
|
||||
if (a == 0 ||
|
||||
@@ -223,7 +217,6 @@ NsUnknownManagerTest::RunTests (void)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
a->Unref ();
|
||||
|
||||
a = NsUnknownManager::Create<A> (A::cidOneUi32, A::iid, (uint32_t)10);
|
||||
if (a == 0 ||
|
||||
@@ -232,14 +225,12 @@ NsUnknownManagerTest::RunTests (void)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
a->Unref ();
|
||||
|
||||
B *b = NsUnknownManager::Create<B,uint32_t> (A::cidOneUi32, B::iid, 10);
|
||||
Ptr<B> b = NsUnknownManager::Create<B,uint32_t> (A::cidOneUi32, B::iid, 10);
|
||||
if (b == 0)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
b->Unref ();
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "callback.h"
|
||||
#include "ns-unknown.h"
|
||||
#include "fatal-error.h"
|
||||
#include "ptr.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -82,51 +83,51 @@ public:
|
||||
* Create an instance of the object identified by its
|
||||
* ClassId. This method invokes the default constructor.
|
||||
*/
|
||||
static NsUnknown *Create (ClassId classId);
|
||||
static Ptr<NsUnknown> Create (ClassId classId);
|
||||
|
||||
/**
|
||||
* \param classId class id of the constructor to invoke.
|
||||
* \param a1 argument to pass to the constructor.
|
||||
* \return a pointer to the instance created.
|
||||
* \overload NsUnknown *Create (ClassId)
|
||||
* \overload Create (ClassId)
|
||||
*
|
||||
* Create an instance of the object identified by its
|
||||
* ClassId.
|
||||
*/
|
||||
template <typename T1>
|
||||
static NsUnknown *Create (ClassId classId, T1 a1);
|
||||
static Ptr<NsUnknown> Create (ClassId classId, T1 a1);
|
||||
|
||||
/**
|
||||
* \param classId class id of the constructor to invoke.
|
||||
* \param a1 first argument to pass to the constructor.
|
||||
* \param a2 second argument to pass to the constructor.
|
||||
* \return a pointer to the instance created.
|
||||
* \overload NsUnknown *Create (ClassId)
|
||||
* \overload Create (ClassId)
|
||||
*
|
||||
* Create an instance of the object identified by its
|
||||
* ClassId.
|
||||
*/
|
||||
template <typename T1, typename T2>
|
||||
static NsUnknown *Create (ClassId classId, T1 a1, T2 a2);
|
||||
static Ptr<NsUnknown> Create (ClassId classId, T1 a1, T2 a2);
|
||||
|
||||
/**
|
||||
* \param classId class id of the constructor to invoke.
|
||||
* \param iid interface id to query for
|
||||
* \return a pointer to the instance created.
|
||||
* \overload NsUnknown *Create (ClassId)
|
||||
* \overload Create (ClassId)
|
||||
*
|
||||
* Create an instance of the object identified by its
|
||||
* ClassId, call QueryInterface on it, and return the
|
||||
* result.
|
||||
*/
|
||||
template <typename T>
|
||||
static T *Create (ClassId classId, Iid iid);
|
||||
static Ptr<T> Create (ClassId classId, Iid iid);
|
||||
|
||||
template <typename T, typename T1>
|
||||
static T *Create (ClassId classId, Iid iid, T1 a1);
|
||||
static Ptr<T> Create (ClassId classId, Iid iid, T1 a1);
|
||||
|
||||
template <typename T, typename T1, typename T2>
|
||||
static T *Create (ClassId classId, Iid iid, T1 a1, T2 a2);
|
||||
static Ptr<T> Create (ClassId classId, Iid iid, T1 a1, T2 a2);
|
||||
|
||||
/**
|
||||
* \param name the symbolic name to associate to this
|
||||
@@ -136,7 +137,7 @@ public:
|
||||
template <typename T>
|
||||
static ClassId RegisterConstructor (std::string name)
|
||||
{
|
||||
static Callback<NsUnknown *> callback =
|
||||
static Callback<Ptr<NsUnknown> > callback =
|
||||
MakeCallback (&NsUnknownManager::MakeObjectZero<T>);
|
||||
return NsUnknownManager::Register (name, &callback);
|
||||
}
|
||||
@@ -150,7 +151,7 @@ public:
|
||||
template <typename T, typename T1>
|
||||
static ClassId RegisterConstructor (std::string name)
|
||||
{
|
||||
static Callback<NsUnknown *,T1> callback = MakeCallback (&NsUnknownManager::MakeObjectOne<T,T1>);
|
||||
static Callback<Ptr<NsUnknown> ,T1> callback = MakeCallback (&NsUnknownManager::MakeObjectOne<T,T1>);
|
||||
return NsUnknownManager::Register (name, &callback);
|
||||
}
|
||||
|
||||
@@ -163,7 +164,7 @@ public:
|
||||
template <typename T, typename T1, typename T2>
|
||||
static ClassId RegisterConstructor (std::string name)
|
||||
{
|
||||
static Callback<NsUnknown *,T1,T2> callback = MakeCallback (&NsUnknownManager::MakeObjectTwo<T,T1,T2>);
|
||||
static Callback<Ptr<NsUnknown>,T1,T2> callback = MakeCallback (&NsUnknownManager::MakeObjectTwo<T,T1,T2>);
|
||||
return NsUnknownManager::Register (name, &callback);
|
||||
}
|
||||
private:
|
||||
@@ -172,16 +173,16 @@ private:
|
||||
template <typename T1, typename T2,
|
||||
typename T3, typename T4,
|
||||
typename T5>
|
||||
static Callback<NsUnknown *,T1,T2,T3,T4,T5> DoGetCallback (ClassId classId);
|
||||
static Callback<Ptr<NsUnknown>,T1,T2,T3,T4,T5> DoGetCallback (ClassId classId);
|
||||
|
||||
template <typename T>
|
||||
static NsUnknown *MakeObjectZero (void);
|
||||
static Ptr<NsUnknown> MakeObjectZero (void);
|
||||
|
||||
template <typename T, typename T1>
|
||||
static NsUnknown *MakeObjectOne (T1 a1);
|
||||
static Ptr<NsUnknown> MakeObjectOne (T1 a1);
|
||||
|
||||
template <typename T, typename T1, typename T2>
|
||||
static NsUnknown *MakeObjectTwo (T1 a1, T2 a2);
|
||||
static Ptr<NsUnknown> MakeObjectTwo (T1 a1, T2 a2);
|
||||
|
||||
typedef std::vector<std::pair<ClassId, CallbackBase *> > List;
|
||||
static List *GetList (void);
|
||||
@@ -196,7 +197,7 @@ namespace ns3 {
|
||||
template <typename T1, typename T2,
|
||||
typename T3, typename T4,
|
||||
typename T5>
|
||||
Callback<NsUnknown *,T1,T2,T3,T4,T5>
|
||||
Callback<Ptr<NsUnknown>,T1,T2,T3,T4,T5>
|
||||
NsUnknownManager::DoGetCallback (ClassId classId)
|
||||
{
|
||||
CallbackBase *callback = Lookup (classId);
|
||||
@@ -204,73 +205,70 @@ NsUnknownManager::DoGetCallback (ClassId classId)
|
||||
{
|
||||
NS_FATAL_ERROR ("Invalid Class Id.");
|
||||
}
|
||||
Callback<NsUnknown *, T1,T2,T3,T4,T5> reference;
|
||||
Callback<Ptr<NsUnknown>, T1,T2,T3,T4,T5> reference;
|
||||
reference.Assign (*callback);
|
||||
return reference;
|
||||
}
|
||||
|
||||
|
||||
template <typename T1>
|
||||
NsUnknown *
|
||||
Ptr<NsUnknown>
|
||||
NsUnknownManager::Create (ClassId classId, T1 a1)
|
||||
{
|
||||
Callback<NsUnknown *, T1> callback = DoGetCallback<T1,empty,empty,empty,empty> (classId);
|
||||
Callback<Ptr<NsUnknown>, T1> callback = DoGetCallback<T1,empty,empty,empty,empty> (classId);
|
||||
return callback (a1);
|
||||
}
|
||||
|
||||
template <typename T1, typename T2>
|
||||
NsUnknown *
|
||||
Ptr<NsUnknown>
|
||||
NsUnknownManager::Create (ClassId classId, T1 a1, T2 a2)
|
||||
{
|
||||
Callback<NsUnknown *, T1,T2> callback = DoGetCallback<T1,T2,empty,empty,empty> (classId);
|
||||
Callback<Ptr<NsUnknown> , T1,T2> callback = DoGetCallback<T1,T2,empty,empty,empty> (classId);
|
||||
return callback (a1, a2);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T *
|
||||
Ptr<T>
|
||||
NsUnknownManager::Create (ClassId classId, Iid iid)
|
||||
{
|
||||
NsUnknown *obj = Create (classId);
|
||||
T *i = obj->QueryInterface<T> (iid);
|
||||
obj->Unref ();
|
||||
Ptr<NsUnknown> obj = Create (classId);
|
||||
Ptr<T> i = obj->QueryInterface<T> (iid);
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename T, typename T1>
|
||||
T *
|
||||
Ptr<T>
|
||||
NsUnknownManager::Create (ClassId classId, Iid iid, T1 a1)
|
||||
{
|
||||
NsUnknown *obj = Create (classId, a1);
|
||||
T *i = obj->QueryInterface<T> (iid);
|
||||
obj->Unref ();
|
||||
Ptr<NsUnknown> obj = Create (classId, a1);
|
||||
Ptr<T> i = obj->QueryInterface<T> (iid);
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2>
|
||||
T *
|
||||
Ptr<T>
|
||||
NsUnknownManager::Create (ClassId classId, Iid iid, T1 a1, T2 a2)
|
||||
{
|
||||
NsUnknown *obj = Create (classId, a1, a2);
|
||||
T *i = obj->QueryInterface<T> (iid);
|
||||
obj->Unref ();
|
||||
Ptr<NsUnknown> obj = Create (classId, a1, a2);
|
||||
Ptr<T> i = obj->QueryInterface<T> (iid);
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
NsUnknown *
|
||||
Ptr<NsUnknown>
|
||||
NsUnknownManager::MakeObjectZero (void)
|
||||
{
|
||||
return new T ();
|
||||
}
|
||||
template <typename T, typename T1>
|
||||
NsUnknown *
|
||||
Ptr<NsUnknown>
|
||||
NsUnknownManager::MakeObjectOne (T1 a1)
|
||||
{
|
||||
return new T (a1);
|
||||
}
|
||||
template <typename T, typename T1, typename T2>
|
||||
NsUnknown *
|
||||
Ptr<NsUnknown>
|
||||
NsUnknownManager::MakeObjectTwo (T1 a1, T2 a2)
|
||||
{
|
||||
return new T (a1, a2);
|
||||
|
||||
@@ -53,9 +53,9 @@ public:
|
||||
void RefAll (NsUnknownImpl *other);
|
||||
void Unref (void);
|
||||
void UnrefAll (void);
|
||||
NsUnknown *DoQueryInterface (Iid iid) const;
|
||||
NsUnknown *PeekQueryInterface (Iid iid) const;
|
||||
void DoDisposeAll (void);
|
||||
void AddInterface (NsUnknown *interface);
|
||||
void AddInterface (NsUnknown * interface);
|
||||
void AddSelfInterface (Iid iid, NsUnknown *interface);
|
||||
private:
|
||||
typedef std::list<std::pair<Iid,NsUnknown *> > List;
|
||||
@@ -64,7 +64,7 @@ private:
|
||||
bool m_disposed;
|
||||
};
|
||||
|
||||
NsUnknownImpl::NsUnknownImpl (Iid iid, NsUnknown *interface)
|
||||
NsUnknownImpl::NsUnknownImpl (Iid iid, NsUnknown * interface)
|
||||
: m_ref (0),
|
||||
m_disposed (false)
|
||||
{
|
||||
@@ -124,14 +124,13 @@ NsUnknownImpl::DoDisposeAll (void)
|
||||
m_disposed = true;
|
||||
}
|
||||
NsUnknown *
|
||||
NsUnknownImpl::DoQueryInterface (Iid iid) const
|
||||
NsUnknownImpl::PeekQueryInterface (Iid iid) const
|
||||
{
|
||||
for (List::const_iterator i = m_list.begin ();
|
||||
i != m_list.end (); i++)
|
||||
{
|
||||
if (i->first == iid)
|
||||
{
|
||||
i->second->Ref ();
|
||||
return i->second;
|
||||
}
|
||||
}
|
||||
@@ -206,25 +205,26 @@ NsUnknown::UnrefInternal (void)
|
||||
}
|
||||
}
|
||||
|
||||
NsUnknown *
|
||||
Ptr<NsUnknown>
|
||||
NsUnknown::DoQueryInterface (Iid iid) const
|
||||
{
|
||||
return m_impl->DoQueryInterface (iid);
|
||||
return m_impl->PeekQueryInterface (iid);
|
||||
}
|
||||
|
||||
void
|
||||
NsUnknown::AddInterface (NsUnknown *interface)
|
||||
NsUnknown::AddInterface (Ptr<NsUnknown> interface)
|
||||
{
|
||||
m_impl->AddInterface (interface);
|
||||
m_impl->RefAll (interface->m_impl);
|
||||
interface->m_impl->UnrefAll ();
|
||||
interface->m_impl = m_impl;
|
||||
NsUnknown *p = interface.Peek ();
|
||||
m_impl->AddInterface (p);
|
||||
m_impl->RefAll (p->m_impl);
|
||||
p->m_impl->UnrefAll ();
|
||||
p->m_impl = m_impl;
|
||||
}
|
||||
|
||||
void
|
||||
NsUnknown::AddSelfInterface (Iid iid, NsUnknown *interface)
|
||||
NsUnknown::AddSelfInterface (Iid iid, Ptr<NsUnknown> interface)
|
||||
{
|
||||
m_impl->AddSelfInterface (iid, interface);
|
||||
m_impl->AddSelfInterface (iid, interface.Peek ());
|
||||
}
|
||||
|
||||
|
||||
@@ -316,31 +316,26 @@ InterfaceTest::RunTests (void)
|
||||
//DerivedAB *derivedAB;
|
||||
|
||||
|
||||
A *a = new A ();
|
||||
a->Unref ();
|
||||
Ptr<A> a = new A ();
|
||||
|
||||
a = new A ();
|
||||
A *a1 = a->QueryInterface<A> (A::iid);
|
||||
Ptr<A> a1 = a->QueryInterface<A> (A::iid);
|
||||
if (a1 == 0 || a1 != a)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
a1->Unref ();
|
||||
a1 = a->QueryInterface<A> (A::iid);
|
||||
if (a1 == 0 || a1 != a)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
a1->Unref ();
|
||||
a->Unref ();
|
||||
|
||||
B *b = new B ();
|
||||
B *b1 = b->QueryInterface<B> (B::iid);
|
||||
Ptr<B> b = new B ();
|
||||
Ptr<B> b1 = b->QueryInterface<B> (B::iid);
|
||||
if (b1 == 0 || b1 != b)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
b1->Unref ();
|
||||
|
||||
a = new A ();
|
||||
a->AddInterface (b);
|
||||
@@ -349,43 +344,33 @@ InterfaceTest::RunTests (void)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
b1->Unref ();
|
||||
a1 = b->QueryInterface<A> (A::iid);
|
||||
if (a1 == 0 || a1 != a)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
a1->Unref ();
|
||||
a1 = a->QueryInterface<A> (A::iid);
|
||||
if (a1 == 0 || a1 != a)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
a1->Unref ();
|
||||
b1 = a->QueryInterface<B> (B::iid);
|
||||
if (b1 == 0 || b1 != b)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
b1->Unref ();
|
||||
|
||||
a->Unref ();
|
||||
b->Unref ();
|
||||
|
||||
Derived *derived = new Derived ();
|
||||
Base *base = derived->QueryInterface<Base> (Base::iid);
|
||||
Ptr<Derived> derived = new Derived ();
|
||||
Ptr<Base> base = derived->QueryInterface<Base> (Base::iid);
|
||||
if (base == 0)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
Derived *derived1 = base->QueryInterface<Derived> (Derived::iid);
|
||||
Ptr<Derived> derived1 = base->QueryInterface<Derived> (Derived::iid);
|
||||
if (derived1 == 0 || derived1 != derived)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
derived1->Unref ();
|
||||
base->Unref ();
|
||||
derived->Unref ();
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#define INTERFACE_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "ptr.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
* \param iid the NsUnknown id of the requested interface
|
||||
*/
|
||||
template <typename T>
|
||||
T *QueryInterface (Iid iid) const;
|
||||
Ptr<T> QueryInterface (Iid iid) const;
|
||||
|
||||
/**
|
||||
* \param interface another interface
|
||||
@@ -66,7 +66,7 @@ public:
|
||||
* will be able to perform QI on each other and their lifetimes
|
||||
* will be found by the same reference count.
|
||||
*/
|
||||
void AddInterface (NsUnknown *interface);
|
||||
void AddInterface (Ptr<NsUnknown> interface);
|
||||
|
||||
void Dispose (void);
|
||||
protected:
|
||||
@@ -87,7 +87,7 @@ protected:
|
||||
* (typically, your subclass has added API), you need to call
|
||||
* this method to associate an interface id to your interface.
|
||||
*/
|
||||
void AddSelfInterface (Iid iid, NsUnknown *interface);
|
||||
void AddSelfInterface (Iid iid, Ptr<NsUnknown> interface);
|
||||
protected:
|
||||
/**
|
||||
* Subclasses who want to handle the "dispose" event should
|
||||
@@ -99,7 +99,7 @@ protected:
|
||||
private:
|
||||
friend class NsUnknownImpl;
|
||||
NsUnknown ();
|
||||
NsUnknown *DoQueryInterface (Iid iid) const;
|
||||
Ptr<NsUnknown> DoQueryInterface (Iid iid) const;
|
||||
void RefInternal (void);
|
||||
void UnrefInternal (void);
|
||||
NsUnknownImpl *m_impl;
|
||||
@@ -111,13 +111,13 @@ private:
|
||||
namespace ns3 {
|
||||
|
||||
template <typename T>
|
||||
T *
|
||||
Ptr<T>
|
||||
NsUnknown::QueryInterface (Iid iid) const
|
||||
{
|
||||
NsUnknown *found = DoQueryInterface (iid);
|
||||
Ptr<NsUnknown> found = DoQueryInterface (iid);
|
||||
if (found != 0)
|
||||
{
|
||||
return dynamic_cast<T *> (found);
|
||||
return Ptr<T> (dynamic_cast<T *> (found.Peek ()));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -70,11 +70,11 @@ PointToPointChannel::PointToPointChannel(
|
||||
}
|
||||
|
||||
void
|
||||
PointToPointChannel::Attach(PointToPointNetDevice *device)
|
||||
PointToPointChannel::Attach(Ptr<PointToPointNetDevice> device)
|
||||
{
|
||||
NS_DEBUG("PointToPointChannel::Attach (" << device << ")");
|
||||
NS_ASSERT(m_nDevices < N_DEVICES && "Only two devices permitted");
|
||||
NS_ASSERT(device);
|
||||
NS_ASSERT(device != 0);
|
||||
|
||||
m_link[m_nDevices].m_src = device;
|
||||
++m_nDevices;
|
||||
@@ -92,7 +92,7 @@ PointToPointChannel::Attach(PointToPointNetDevice *device)
|
||||
}
|
||||
|
||||
bool
|
||||
PointToPointChannel::TransmitStart(Packet& p, PointToPointNetDevice* src)
|
||||
PointToPointChannel::TransmitStart(Packet& p, Ptr<PointToPointNetDevice> src)
|
||||
{
|
||||
NS_DEBUG ("PointToPointChannel::TransmitStart (" << &p << ", " << src <<
|
||||
")");
|
||||
@@ -117,7 +117,7 @@ PointToPointChannel::TransmitStart(Packet& p, PointToPointNetDevice* src)
|
||||
}
|
||||
|
||||
bool
|
||||
PointToPointChannel::TransmitEnd(Packet& p, PointToPointNetDevice* src)
|
||||
PointToPointChannel::TransmitEnd(Packet& p, Ptr<PointToPointNetDevice> src)
|
||||
{
|
||||
NS_DEBUG("PointToPointChannel::TransmitEnd (" << &p << ", " << src << ")");
|
||||
NS_DEBUG ("PointToPointChannel::TransmitEnd (): UID is " <<
|
||||
@@ -147,7 +147,7 @@ PointToPointChannel::TransmitEnd(Packet& p, PointToPointNetDevice* src)
|
||||
void
|
||||
PointToPointChannel::PropagationCompleteEvent(
|
||||
Packet p,
|
||||
PointToPointNetDevice *src)
|
||||
Ptr<PointToPointNetDevice> src)
|
||||
{
|
||||
NS_DEBUG("PointToPointChannel::PropagationCompleteEvent (" << &p << ", " <<
|
||||
src << ")");
|
||||
@@ -169,7 +169,7 @@ PointToPointChannel::GetNDevices (void) const
|
||||
return m_nDevices;
|
||||
}
|
||||
|
||||
NetDevice *
|
||||
Ptr<NetDevice>
|
||||
PointToPointChannel::GetDevice (uint32_t i) const
|
||||
{
|
||||
NS_ASSERT(i < 2);
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
#include <list>
|
||||
#include "ns3/channel.h"
|
||||
#include "ns3/ptr.h"
|
||||
#include "ns3/packet.h"
|
||||
#include "ns3/nstime.h"
|
||||
#include "ns3/data-rate.h"
|
||||
@@ -62,13 +63,13 @@ public:
|
||||
PointToPointChannel (const std::string& name,
|
||||
const DataRate& bps, const Time& delay);
|
||||
|
||||
void Attach (PointToPointNetDevice* device);
|
||||
bool TransmitStart (Packet& p, PointToPointNetDevice *src);
|
||||
bool TransmitEnd (Packet &p, PointToPointNetDevice *src);
|
||||
void PropagationCompleteEvent(Packet p, PointToPointNetDevice *src);
|
||||
void Attach (Ptr<PointToPointNetDevice> device);
|
||||
bool TransmitStart (Packet& p, Ptr<PointToPointNetDevice> src);
|
||||
bool TransmitEnd (Packet &p, Ptr<PointToPointNetDevice> src);
|
||||
void PropagationCompleteEvent(Packet p, Ptr<PointToPointNetDevice> src);
|
||||
|
||||
virtual uint32_t GetNDevices (void) const;
|
||||
virtual NetDevice *GetDevice (uint32_t i) const;
|
||||
virtual Ptr<NetDevice> GetDevice (uint32_t i) const;
|
||||
|
||||
virtual DataRate GetDataRate (void);
|
||||
virtual Time GetDelay (void);
|
||||
@@ -92,8 +93,8 @@ private:
|
||||
public:
|
||||
Link() : m_state (INITIALIZING), m_src (0), m_dst (0) {}
|
||||
WireState m_state;
|
||||
PointToPointNetDevice *m_src;
|
||||
PointToPointNetDevice *m_dst;
|
||||
Ptr<PointToPointNetDevice> m_src;
|
||||
Ptr<PointToPointNetDevice> m_dst;
|
||||
};
|
||||
|
||||
Link m_link[N_DEVICES];
|
||||
|
||||
@@ -81,18 +81,12 @@ PointToPointNetDevice::PointToPointNetDevice (const PointToPointNetDevice& nd)
|
||||
m_txMachineState(READY),
|
||||
m_bps (nd.m_bps),
|
||||
m_tInterframeGap (nd.m_tInterframeGap),
|
||||
m_channel(0),
|
||||
m_channel(nd.m_channel),
|
||||
m_queue(0),
|
||||
m_rxTrace ()
|
||||
{
|
||||
NS_DEBUG ("PointToPointNetDevice::PointToPointNetDevice (" << &nd << ")");
|
||||
|
||||
if (nd.m_channel)
|
||||
{
|
||||
m_channel = nd.m_channel;
|
||||
m_channel->Ref ();
|
||||
}
|
||||
|
||||
if (nd.m_queue)
|
||||
{
|
||||
m_queue = nd.m_queue;
|
||||
@@ -102,12 +96,8 @@ PointToPointNetDevice::PointToPointNetDevice (const PointToPointNetDevice& nd)
|
||||
|
||||
void PointToPointNetDevice::DoDispose()
|
||||
{
|
||||
if (m_channel != 0)
|
||||
{
|
||||
m_channel->Unref ();
|
||||
m_channel = 0;
|
||||
}
|
||||
NetDevice::DoDispose ();
|
||||
m_channel = 0;
|
||||
NetDevice::DoDispose ();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -305,18 +295,11 @@ PointToPointNetDevice::DoCreateTraceResolver (TraceContext const &context)
|
||||
}
|
||||
|
||||
bool
|
||||
PointToPointNetDevice::Attach (PointToPointChannel* ch)
|
||||
PointToPointNetDevice::Attach (Ptr<PointToPointChannel> ch)
|
||||
{
|
||||
NS_DEBUG ("PointToPointNetDevice::Attach (" << &ch << ")");
|
||||
|
||||
if (m_channel)
|
||||
{
|
||||
m_channel->Unref ();
|
||||
m_channel = 0;
|
||||
}
|
||||
|
||||
m_channel = ch;
|
||||
m_channel->Ref ();
|
||||
|
||||
m_channel->Attach(this);
|
||||
m_bps = m_channel->GetDataRate ();
|
||||
@@ -358,10 +341,9 @@ PointToPointNetDevice::GetQueue(void) const
|
||||
return m_queue;
|
||||
}
|
||||
|
||||
Channel*
|
||||
Ptr<Channel>
|
||||
PointToPointNetDevice::DoGetChannel(void) const
|
||||
{
|
||||
m_channel->Ref();
|
||||
return m_channel;
|
||||
}
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@ public:
|
||||
* @see SetInterframeGap ()
|
||||
* @param ch a pointer to the channel to which this object is being attached.
|
||||
*/
|
||||
bool Attach(PointToPointChannel* ch);
|
||||
bool Attach(Ptr<PointToPointChannel> ch);
|
||||
/**
|
||||
* Attach a queue to the PointToPointNetDevice.
|
||||
*
|
||||
@@ -189,7 +189,7 @@ protected:
|
||||
* @see PointToPointChannel
|
||||
* @returns a pointer to the channel
|
||||
*/
|
||||
virtual Channel *DoGetChannel(void) const;
|
||||
virtual Ptr<Channel> DoGetChannel(void) const;
|
||||
private:
|
||||
/**
|
||||
* Send a Packet Down the Wire.
|
||||
@@ -288,7 +288,7 @@ private:
|
||||
* attached.
|
||||
* @see class PointToPointChannel
|
||||
*/
|
||||
PointToPointChannel* m_channel;
|
||||
Ptr<PointToPointChannel> m_channel;
|
||||
/**
|
||||
* The Queue which this PointToPointNetDevice uses as a packet source.
|
||||
* Management of this Queue has been delegated to the PointToPointNetDevice
|
||||
|
||||
@@ -38,38 +38,33 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
PointToPointChannel *
|
||||
Ptr<PointToPointChannel>
|
||||
PointToPointTopology::AddPointToPointLink(
|
||||
Ptr<Node> n1,
|
||||
Ptr<Node> n2,
|
||||
const DataRate& bps,
|
||||
const Time& delay)
|
||||
{
|
||||
PointToPointChannel* channel = new PointToPointChannel(bps, delay);
|
||||
channel->Ref ();
|
||||
Ptr<PointToPointChannel> channel = new PointToPointChannel(bps, delay);
|
||||
|
||||
PointToPointNetDevice* net1 = new PointToPointNetDevice(n1);
|
||||
net1->Ref ();
|
||||
Ptr<PointToPointNetDevice> net1 = new PointToPointNetDevice(n1);
|
||||
|
||||
net1->AddQueue(Queue::Default().Copy());
|
||||
n1->AddDevice (net1);
|
||||
net1->Attach (channel);
|
||||
net1->Unref ();
|
||||
|
||||
PointToPointNetDevice* net2 = new PointToPointNetDevice(n2);
|
||||
net2->Ref ();
|
||||
Ptr<PointToPointNetDevice> net2 = new PointToPointNetDevice(n2);
|
||||
|
||||
net2->AddQueue(Queue::Default().Copy());
|
||||
n2->AddDevice (net2);
|
||||
net2->Attach (channel);
|
||||
net2->Unref ();
|
||||
|
||||
return channel;
|
||||
}
|
||||
|
||||
bool
|
||||
PointToPointTopology::AddIpv4Addresses(
|
||||
const PointToPointChannel *chan,
|
||||
Ptr<const PointToPointChannel> chan,
|
||||
Ptr<Node> n1, const Ipv4Address& addr1,
|
||||
Ptr<Node> n2, const Ipv4Address& addr2)
|
||||
{
|
||||
@@ -81,8 +76,8 @@ PointToPointTopology::AddIpv4Addresses(
|
||||
|
||||
// The PointToPoint channel is used to find the relevant NetDevices
|
||||
NS_ASSERT (chan->GetNDevices () == 2);
|
||||
NetDevice* nd1 = chan->GetDevice (0);
|
||||
NetDevice* nd2 = chan->GetDevice (1);
|
||||
Ptr<NetDevice> nd1 = chan->GetDevice (0);
|
||||
Ptr<NetDevice> nd2 = chan->GetDevice (1);
|
||||
// Make sure that nd1 belongs to n1 and nd2 to n2
|
||||
if ( (nd1->GetNode ()->GetId () == n2->GetId () ) &&
|
||||
(nd2->GetNode ()->GetId () == n1->GetId () ) )
|
||||
@@ -92,14 +87,14 @@ PointToPointTopology::AddIpv4Addresses(
|
||||
NS_ASSERT (nd1->GetNode ()->GetId () == n1->GetId ());
|
||||
NS_ASSERT (nd2->GetNode ()->GetId () == n2->GetId ());
|
||||
|
||||
IIpv4 *ip1 = n1->QueryInterface<IIpv4> (IIpv4::iid);
|
||||
Ptr<IIpv4> ip1 = n1->QueryInterface<IIpv4> (IIpv4::iid);
|
||||
uint32_t index1 = ip1->AddInterface (nd1);
|
||||
|
||||
ip1->SetAddress (index1, addr1);
|
||||
ip1->SetNetworkMask (index1, netmask);
|
||||
ip1->SetUp (index1);
|
||||
|
||||
IIpv4 *ip2 = n2->QueryInterface<IIpv4> (IIpv4::iid);
|
||||
Ptr<IIpv4> ip2 = n2->QueryInterface<IIpv4> (IIpv4::iid);
|
||||
uint32_t index2 = ip2->AddInterface (nd2);
|
||||
|
||||
ip2->SetAddress (index2, addr2);
|
||||
@@ -108,10 +103,7 @@ PointToPointTopology::AddIpv4Addresses(
|
||||
|
||||
ip1->AddHostRouteTo (addr2, index1);
|
||||
ip2->AddHostRouteTo (addr1, index2);
|
||||
|
||||
ip1->Unref ();
|
||||
ip2->Unref ();
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -121,18 +113,13 @@ PointToPointTopology::AddIpv4Addresses(
|
||||
// there are possibly multiple devices connecting n1 and n2 (for example
|
||||
// wireless with two devices on different channels) this will return
|
||||
// the first one found.
|
||||
PointToPointNetDevice* PointToPointTopology::GetNetDevice(Ptr<Node> n1, Ptr<Node> n2)
|
||||
Ptr<PointToPointNetDevice> PointToPointTopology::GetNetDevice(Ptr<Node> n1, Ptr<Node> n2)
|
||||
{
|
||||
// First get the NetDeviceList capability from node 1
|
||||
NetDeviceList* ndl1 = n1->GetNetDeviceList();
|
||||
if (!ndl1) return 0; // No devices, return nil
|
||||
// Get the list of devices
|
||||
const NetDeviceList::NetDevices_t& dlist = ndl1->GetAll();
|
||||
for (NetDeviceList::NetDevices_t::const_iterator i = dlist.Begin();
|
||||
i != dlist.End(); ++i)
|
||||
{ // Check each device
|
||||
NetDevice* nd = *i; // next device
|
||||
Channel* c = nd->GetChannel();
|
||||
Ptr<NetDevice> nd = *i; // next device
|
||||
Ptr<Channel> c = nd->GetChannel();
|
||||
if (!c) continue; // No channel
|
||||
if (c->NodeIsPeer(n2)) return nd; // found it
|
||||
}
|
||||
@@ -140,26 +127,26 @@ PointToPointNetDevice* PointToPointTopology::GetNetDevice(Ptr<Node> n1, Ptr<Node
|
||||
}
|
||||
|
||||
// Get the channel connecting node n1 to node n2
|
||||
PointToPointChannel* PointToPointTopology::GetChannel(
|
||||
Ptr<PointToPointChannel> PointToPointTopology::GetChannel(
|
||||
Ptr<Node> n1,
|
||||
Ptr<Node> n2
|
||||
)
|
||||
{
|
||||
NetDevice* nd = GetNetDevice(n1, n2);
|
||||
Ptr<NetDevice> nd = GetNetDevice(n1, n2);
|
||||
if (!nd) return 0; // No net device, so no channel
|
||||
return nd->GetChannel();
|
||||
}
|
||||
|
||||
Queue* PointToPointTopology::GetQueue(Ptr<Node> n1, Ptr<Node> n2)
|
||||
{
|
||||
NetDevice* nd = GetNetDevice(n1, n2);
|
||||
Ptr<NetDevice> nd = GetNetDevice(n1, n2);
|
||||
if (!nd) return 0; // No net device, so in queue
|
||||
return nd->GetQueue();
|
||||
}
|
||||
|
||||
Queue* PointToPointTopology::SetQueue(Ptr<Node> n1, Ptr<Node> n2, const Queue& q)
|
||||
{
|
||||
NetDevice* nd = GetNetDevice(n1, n2);
|
||||
Ptr<NetDevice> nd = GetNetDevice(n1, n2);
|
||||
if (!nd) return 0; // No net device, can't set queue
|
||||
// Add the specified queue to the netdevice
|
||||
return nd->SetQueue(q);
|
||||
@@ -168,22 +155,18 @@ Queue* PointToPointTopology::SetQueue(Ptr<Node> n1, Ptr<Node> n2, const Queue& q
|
||||
#endif
|
||||
|
||||
#ifdef GFR
|
||||
P2PChannel* Topology::AddDuplexLink(Ptr<Node> n1, const IPAddr& ip1,
|
||||
P2PChannel Topology::AddDuplexLink(Ptr<Node> n1, const IPAddr& ip1,
|
||||
Ptr<Node> n2, const IPAddr& ip2,
|
||||
const Rate& rate, const Time& delay)
|
||||
{
|
||||
// First get the NetDeviceList capability from each node
|
||||
NetDeviceList* ndl1 = n1->GetNetDeviceList();
|
||||
NetDeviceList* ndl2 = n2->GetNetDeviceList();
|
||||
if (!ndl1 || !ndl2) return nil; // Both ends must have NetDeviceList
|
||||
// Get the net devices
|
||||
P2PNetDevice* nd1 = ndl1->Add(P2PNetDevice(n1, rate, nil));
|
||||
P2PNetDevice* nd2 = ndl2->Add(P2PNetDevice(n1, rate, nd1->GetChannel()));
|
||||
// Not implemented yet. Add appropriate layer 2 protocol for
|
||||
// the net devices.
|
||||
// Get the L3 proto for node 1 and configure it with this device
|
||||
L3Demux* l3demux1 = n1->GetL3Demux();
|
||||
L3Protocol* l3proto1 = nil;
|
||||
Ptr<L3Demux> l3demux1 = n1->GetL3Demux();
|
||||
Ptr<L3Protocol> l3proto1 = nil;
|
||||
// If the node 1 l3 demux exists, find the coresponding l3 protocol
|
||||
if (l3demux1) l3proto1 = l3demux1->Lookup(ip1.L3Proto());
|
||||
// If the l3 protocol exists, configure this net device. Use a mask
|
||||
@@ -191,8 +174,8 @@ P2PChannel* Topology::AddDuplexLink(Ptr<Node> n1, const IPAddr& ip1,
|
||||
// of this link
|
||||
if (l3proto1) l3proto1->AddNetDevice(nd1, ip1, ip1.GetMask(ip1.Size()*8));
|
||||
// Same for node 2
|
||||
L3Demux* l3demux2 = n2->GetL3Demux();
|
||||
L3Protocol* l3proto2 = nil;
|
||||
Ptr<L3Demux> l3demux2 = n2->GetL3Demux();
|
||||
Ptr<L3Protocol> l3proto2 = nil;
|
||||
// If the node 2 l3 demux exists, find the coresponding l3 protocol
|
||||
if (l3demux2) l3proto2 = l3demux2->Lookup(ip2.L3Proto());
|
||||
if (l3proto2) l3proto2->AddNetDevice(nd2, ip2, ip2.GetMask(ip2.Size()*8));
|
||||
@@ -200,23 +183,23 @@ P2PChannel* Topology::AddDuplexLink(Ptr<Node> n1, const IPAddr& ip1,
|
||||
}
|
||||
|
||||
// Get the channel connecting node n1 to node n2
|
||||
Channel* Topology::GetChannel(Ptr<Node> n1, Ptr<Node> n2)
|
||||
Ptr<Channel> Topology::GetChannel(Ptr<Node> n1, Ptr<Node> n2)
|
||||
{
|
||||
NetDevice* nd = GetNetDevice(n1, n2);
|
||||
Ptr<NetDevice> nd = GetNetDevice(n1, n2);
|
||||
if (!nd) return 0; // No net device, so no channel
|
||||
return nd->GetChannel();
|
||||
}
|
||||
|
||||
Queue* Topology::GetQueue(Ptr<Node> n1, Ptr<Node> n2)
|
||||
{
|
||||
NetDevice* nd = GetNetDevice(n1, n2);
|
||||
Ptr<NetDevice> nd = GetNetDevice(n1, n2);
|
||||
if (!nd) return 0; // No net device, so in queue
|
||||
return nd->GetQueue();
|
||||
}
|
||||
|
||||
Queue* Topology::SetQueue(Ptr<Node> n1, Ptr<Node> n2, const Queue& q)
|
||||
{
|
||||
NetDevice* nd = GetNetDevice(n1, n2);
|
||||
Ptr<NetDevice> nd = GetNetDevice(n1, n2);
|
||||
if (!nd) return 0; // No net device, can't set queue
|
||||
// Add the specified queue to the netdevice
|
||||
return nd->SetQueue(q);
|
||||
|
||||
@@ -51,22 +51,22 @@ public:
|
||||
* with the specified IP addresses, with specified maximum transmission rate
|
||||
* and propagation delay.
|
||||
*/
|
||||
static PointToPointChannel* AddPointToPointLink(
|
||||
static Ptr<PointToPointChannel> AddPointToPointLink(
|
||||
Ptr<Node>, Ptr<Node>, const DataRate&, const Time&);
|
||||
|
||||
static bool AddIpv4Addresses(
|
||||
const PointToPointChannel*,
|
||||
Ptr<const PointToPointChannel>,
|
||||
Ptr<Node>, const Ipv4Address&,
|
||||
Ptr<Node>, const Ipv4Address&);
|
||||
|
||||
/**
|
||||
* Get the connecting node n1 to node n2
|
||||
*/
|
||||
static PointToPointChannel* GetChannel(Ptr<Node>, Ptr<Node>);
|
||||
static Ptr<PointToPointChannel> GetChannel(Ptr<Node>, Ptr<Node>);
|
||||
/**
|
||||
* Get the NetDevice connecting node n1 to n2
|
||||
*/
|
||||
static PointToPointNetDevice* GetNetDevice(Ptr<Node>, Ptr<Node>);
|
||||
static Ptr<PointToPointNetDevice> GetNetDevice(Ptr<Node>, Ptr<Node>);
|
||||
/**
|
||||
* Get the queue associated with a link between two nodes
|
||||
*/
|
||||
|
||||
@@ -28,24 +28,21 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
ArpCache::ArpCache (NetDevice *device, Ipv4Interface *interface)
|
||||
ArpCache::ArpCache (Ptr<NetDevice> device, Ipv4Interface *interface)
|
||||
: m_device (device),
|
||||
m_interface (interface),
|
||||
m_aliveTimeout (Seconds (120)),
|
||||
m_deadTimeout (Seconds (100)),
|
||||
m_waitReplyTimeout (Seconds (1))
|
||||
{
|
||||
m_device->Ref ();
|
||||
}
|
||||
{}
|
||||
|
||||
ArpCache::~ArpCache ()
|
||||
{
|
||||
m_device->Unref ();
|
||||
Flush ();
|
||||
}
|
||||
|
||||
NetDevice *
|
||||
ArpCache::PeekDevice (void) const
|
||||
Ptr<NetDevice>
|
||||
ArpCache::GetDevice (void) const
|
||||
{
|
||||
return m_device;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "ns3/net-device.h"
|
||||
#include "ns3/ipv4-address.h"
|
||||
#include "ns3/mac-address.h"
|
||||
#include "ns3/ptr.h"
|
||||
#include "sgi-hashmap.h"
|
||||
|
||||
namespace ns3 {
|
||||
@@ -38,10 +39,10 @@ class ArpCache {
|
||||
public:
|
||||
class Entry;
|
||||
|
||||
ArpCache (NetDevice *device, Ipv4Interface *interface);
|
||||
ArpCache (Ptr<NetDevice> device, Ipv4Interface *interface);
|
||||
~ArpCache ();
|
||||
|
||||
NetDevice *PeekDevice (void) const;
|
||||
Ptr<NetDevice> GetDevice (void) const;
|
||||
Ipv4Interface *GetInterface (void) const;
|
||||
|
||||
void SetAliveTimeout (Time aliveTimeout);
|
||||
@@ -91,7 +92,7 @@ private:
|
||||
typedef sgi::hash_map<Ipv4Address, ArpCache::Entry *, Ipv4AddressHash> Cache;
|
||||
typedef sgi::hash_map<Ipv4Address, ArpCache::Entry *, Ipv4AddressHash>::iterator CacheI;
|
||||
|
||||
NetDevice *m_device;
|
||||
Ptr<NetDevice> m_device;
|
||||
Ipv4Interface *m_interface;
|
||||
Time m_aliveTimeout;
|
||||
Time m_deadTimeout;
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
ArpIpv4Interface::ArpIpv4Interface (Ptr<Node> node, NetDevice *device)
|
||||
ArpIpv4Interface::ArpIpv4Interface (Ptr<Node> node, Ptr<NetDevice> device)
|
||||
: Ipv4Interface (device),
|
||||
m_node (node)
|
||||
{}
|
||||
@@ -42,10 +42,10 @@ TraceResolver *
|
||||
ArpIpv4Interface::DoCreateTraceResolver (TraceContext const &context)
|
||||
{
|
||||
CompositeTraceResolver *resolver = new CompositeTraceResolver (context);
|
||||
if (PeekDevice () != 0)
|
||||
if (GetDevice () != 0)
|
||||
{
|
||||
resolver->Add ("netdevice",
|
||||
MakeCallback (&NetDevice::CreateTraceResolver, PeekDevice ()),
|
||||
MakeCallback (&NetDevice::CreateTraceResolver, GetDevice ().Peek ()),
|
||||
ArpIpv4Interface::NETDEVICE);
|
||||
}
|
||||
|
||||
@@ -55,21 +55,20 @@ ArpIpv4Interface::DoCreateTraceResolver (TraceContext const &context)
|
||||
void
|
||||
ArpIpv4Interface::SendTo (Packet p, Ipv4Address dest)
|
||||
{
|
||||
NS_ASSERT (PeekDevice () != 0);
|
||||
if (PeekDevice ()->NeedsArp ())
|
||||
NS_ASSERT (GetDevice () != 0);
|
||||
if (GetDevice ()->NeedsArp ())
|
||||
{
|
||||
IArpPrivate * arp = m_node->QueryInterface<IArpPrivate> (IArpPrivate::iid);
|
||||
Ptr<IArpPrivate> arp = m_node->QueryInterface<IArpPrivate> (IArpPrivate::iid);
|
||||
MacAddress hardwareDestination;
|
||||
bool found = arp->Lookup (p, dest, PeekDevice (), &hardwareDestination);
|
||||
bool found = arp->Lookup (p, dest, GetDevice (), &hardwareDestination);
|
||||
if (found)
|
||||
{
|
||||
PeekDevice ()->Send (p, hardwareDestination, Ipv4::PROT_NUMBER);
|
||||
GetDevice ()->Send (p, hardwareDestination, Ipv4::PROT_NUMBER);
|
||||
}
|
||||
arp->Unref ();
|
||||
}
|
||||
else
|
||||
{
|
||||
PeekDevice ()->Send (p, PeekDevice ()->GetBroadcast (), Ipv4::PROT_NUMBER);
|
||||
GetDevice ()->Send (p, GetDevice ()->GetBroadcast (), Ipv4::PROT_NUMBER);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ class ArpIpv4Interface : public Ipv4Interface
|
||||
NETDEVICE,
|
||||
ARP,
|
||||
};
|
||||
ArpIpv4Interface (Ptr<Node> node, NetDevice *device);
|
||||
ArpIpv4Interface (Ptr<Node> node, Ptr<NetDevice> device);
|
||||
virtual ~ArpIpv4Interface ();
|
||||
|
||||
private:
|
||||
|
||||
@@ -63,18 +63,17 @@ Arp::CreateTraceResolver (TraceContext const &context)
|
||||
}
|
||||
|
||||
ArpCache *
|
||||
Arp::FindCache (NetDevice *device)
|
||||
Arp::FindCache (Ptr<NetDevice> device)
|
||||
{
|
||||
for (CacheList::const_iterator i = m_cacheList.begin (); i != m_cacheList.end (); i++)
|
||||
{
|
||||
if ((*i)->PeekDevice () == device)
|
||||
if ((*i)->GetDevice () == device)
|
||||
{
|
||||
return *i;
|
||||
}
|
||||
}
|
||||
IIpv4Private *ipv4 = m_node->QueryInterface<IIpv4Private> (IIpv4Private::iid);
|
||||
Ptr<IIpv4Private> ipv4 = m_node->QueryInterface<IIpv4Private> (IIpv4Private::iid);
|
||||
Ipv4Interface *interface = ipv4->FindInterfaceForDevice (device);
|
||||
ipv4->Unref ();
|
||||
ArpCache * cache = new ArpCache (device, interface);
|
||||
NS_ASSERT (device->IsBroadcast ());
|
||||
device->SetLinkChangeCallback (MakeCallback (&ArpCache::Flush, cache));
|
||||
@@ -83,7 +82,7 @@ Arp::FindCache (NetDevice *device)
|
||||
}
|
||||
|
||||
void
|
||||
Arp::Receive(Packet& packet, NetDevice *device)
|
||||
Arp::Receive(Packet& packet, Ptr<NetDevice> device)
|
||||
{
|
||||
ArpCache *cache = FindCache (device);
|
||||
ArpHeader arp;
|
||||
@@ -132,7 +131,7 @@ Arp::Receive(Packet& packet, NetDevice *device)
|
||||
}
|
||||
bool
|
||||
Arp::Lookup (Packet &packet, Ipv4Address destination,
|
||||
NetDevice *device,
|
||||
Ptr<NetDevice> device,
|
||||
MacAddress *hardwareDestination)
|
||||
{
|
||||
ArpCache *cache = FindCache (device);
|
||||
@@ -204,25 +203,25 @@ void
|
||||
Arp::SendArpRequest (ArpCache const *cache, Ipv4Address to)
|
||||
{
|
||||
ArpHeader arp;
|
||||
arp.SetRequest (cache->PeekDevice ()->GetAddress (),
|
||||
arp.SetRequest (cache->GetDevice ()->GetAddress (),
|
||||
cache->GetInterface ()->GetAddress (),
|
||||
cache->PeekDevice ()->GetBroadcast (),
|
||||
cache->GetDevice ()->GetBroadcast (),
|
||||
to);
|
||||
Packet packet;
|
||||
packet.AddHeader (arp);
|
||||
cache->PeekDevice ()->Send (packet, cache->PeekDevice ()->GetBroadcast (), PROT_NUMBER);
|
||||
cache->GetDevice ()->Send (packet, cache->GetDevice ()->GetBroadcast (), PROT_NUMBER);
|
||||
}
|
||||
|
||||
void
|
||||
Arp::SendArpReply (ArpCache const *cache, Ipv4Address toIp, MacAddress toMac)
|
||||
{
|
||||
ArpHeader arp;
|
||||
arp.SetReply (cache->PeekDevice ()->GetAddress (),
|
||||
arp.SetReply (cache->GetDevice ()->GetAddress (),
|
||||
cache->GetInterface ()->GetAddress (),
|
||||
toMac, toIp);
|
||||
Packet packet;
|
||||
packet.AddHeader (arp);
|
||||
cache->PeekDevice ()->Send (packet, toMac, PROT_NUMBER);
|
||||
cache->GetDevice ()->Send (packet, toMac, PROT_NUMBER);
|
||||
}
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
@@ -46,15 +46,15 @@ public:
|
||||
|
||||
virtual TraceResolver *CreateTraceResolver (TraceContext const &context);
|
||||
|
||||
virtual void Receive(Packet& p, NetDevice *device);
|
||||
virtual void Receive(Packet& p, Ptr<NetDevice> device);
|
||||
bool Lookup (Packet &p, Ipv4Address destination,
|
||||
NetDevice *device,
|
||||
Ptr<NetDevice> device,
|
||||
MacAddress *hardwareDestination);
|
||||
protected:
|
||||
virtual void DoDispose (void);
|
||||
private:
|
||||
typedef std::list<ArpCache *> CacheList;
|
||||
ArpCache *FindCache (NetDevice *device);
|
||||
ArpCache *FindCache (Ptr<NetDevice> device);
|
||||
void SendArpRequest (ArpCache const *cache, Ipv4Address to);
|
||||
void SendArpReply (ArpCache const *cache, Ipv4Address toIp, MacAddress toMac);
|
||||
CacheList m_cacheList;
|
||||
|
||||
@@ -21,17 +21,16 @@
|
||||
#include "i-arp-private.h"
|
||||
#include "arp.h"
|
||||
#include "ns3/assert.h"
|
||||
#include "ns3/net-device.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const Iid IArpPrivate::iid ("IArpPrivate");
|
||||
|
||||
IArpPrivate::IArpPrivate (Arp *arp)
|
||||
IArpPrivate::IArpPrivate (Ptr<Arp> arp)
|
||||
: NsUnknown (IArpPrivate::iid),
|
||||
m_arp (arp)
|
||||
{
|
||||
m_arp->Ref ();
|
||||
}
|
||||
{}
|
||||
IArpPrivate::~IArpPrivate ()
|
||||
{
|
||||
NS_ASSERT (m_arp == 0);
|
||||
@@ -39,7 +38,7 @@ IArpPrivate::~IArpPrivate ()
|
||||
|
||||
bool
|
||||
IArpPrivate::Lookup (Packet &p, Ipv4Address destination,
|
||||
NetDevice *device,
|
||||
Ptr<NetDevice> device,
|
||||
MacAddress *hardwareDestination)
|
||||
{
|
||||
return m_arp->Lookup (p, destination, device, hardwareDestination);
|
||||
@@ -48,7 +47,6 @@ IArpPrivate::Lookup (Packet &p, Ipv4Address destination,
|
||||
void
|
||||
IArpPrivate::DoDispose (void)
|
||||
{
|
||||
m_arp->Unref ();
|
||||
m_arp = 0;
|
||||
NsUnknown::DoDispose ();
|
||||
}
|
||||
|
||||
@@ -35,15 +35,15 @@ class IArpPrivate : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const Iid iid;
|
||||
IArpPrivate (Arp *arp);
|
||||
IArpPrivate (Ptr<Arp> arp);
|
||||
virtual ~IArpPrivate ();
|
||||
bool Lookup (Packet &p, Ipv4Address destination,
|
||||
NetDevice *device,
|
||||
Ptr<NetDevice> device,
|
||||
MacAddress *hardwareDestination);
|
||||
protected:
|
||||
virtual void DoDispose (void);
|
||||
private:
|
||||
Arp *m_arp;
|
||||
Ptr<Arp> m_arp;
|
||||
};
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -21,14 +21,13 @@
|
||||
#include "i-ipv4-impl.h"
|
||||
#include "ipv4.h"
|
||||
#include "ns3/assert.h"
|
||||
#include "ns3/net-device.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
IIpv4Impl::IIpv4Impl (Ipv4 *ipv4)
|
||||
IIpv4Impl::IIpv4Impl (Ptr<Ipv4> ipv4)
|
||||
: m_ipv4 (ipv4)
|
||||
{
|
||||
m_ipv4->Ref ();
|
||||
}
|
||||
{}
|
||||
IIpv4Impl::~IIpv4Impl ()
|
||||
{
|
||||
NS_ASSERT (m_ipv4 == 0);
|
||||
@@ -36,7 +35,6 @@ IIpv4Impl::~IIpv4Impl ()
|
||||
void
|
||||
IIpv4Impl::DoDispose (void)
|
||||
{
|
||||
m_ipv4->Unref ();
|
||||
m_ipv4 = 0;
|
||||
}
|
||||
|
||||
@@ -90,7 +88,7 @@ IIpv4Impl::RemoveRoute (uint32_t i)
|
||||
return m_ipv4->RemoveRoute (i);
|
||||
}
|
||||
uint32_t
|
||||
IIpv4Impl::AddInterface (NetDevice *device)
|
||||
IIpv4Impl::AddInterface (Ptr<NetDevice> device)
|
||||
{
|
||||
return m_ipv4->AddInterface (device);
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#define I_IPV4_IMPL_H
|
||||
|
||||
#include "ns3/i-ipv4.h"
|
||||
#include "ns3/ptr.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -30,7 +31,7 @@ class Ipv4;
|
||||
class IIpv4Impl : public IIpv4
|
||||
{
|
||||
public:
|
||||
IIpv4Impl (Ipv4 *ipv4);
|
||||
IIpv4Impl (Ptr<Ipv4> ipv4);
|
||||
|
||||
virtual ~IIpv4Impl ();
|
||||
|
||||
@@ -51,7 +52,7 @@ public:
|
||||
virtual uint32_t GetNRoutes (void);
|
||||
virtual Ipv4Route *GetRoute (uint32_t i);
|
||||
virtual void RemoveRoute (uint32_t i);
|
||||
virtual uint32_t AddInterface (NetDevice *device);
|
||||
virtual uint32_t AddInterface (Ptr<NetDevice> device);
|
||||
virtual uint32_t GetNInterfaces (void);
|
||||
|
||||
virtual void SetAddress (uint32_t i, Ipv4Address address);
|
||||
@@ -65,7 +66,7 @@ public:
|
||||
protected:
|
||||
virtual void DoDispose (void);
|
||||
private:
|
||||
Ipv4 *m_ipv4;
|
||||
Ptr<Ipv4> m_ipv4;
|
||||
};
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -21,17 +21,16 @@
|
||||
#include "i-ipv4-private.h"
|
||||
#include "ipv4.h"
|
||||
#include "ns3/assert.h"
|
||||
#include "ns3/net-device.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
const Iid IIpv4Private::iid ("IIpv4Private");
|
||||
|
||||
IIpv4Private::IIpv4Private (Ipv4 *ipv4)
|
||||
IIpv4Private::IIpv4Private (Ptr<Ipv4> ipv4)
|
||||
: NsUnknown (IIpv4Private::iid),
|
||||
m_ipv4 (ipv4)
|
||||
{
|
||||
m_ipv4->Ref ();
|
||||
}
|
||||
{}
|
||||
IIpv4Private::~IIpv4Private ()
|
||||
{
|
||||
NS_ASSERT (m_ipv4 == 0);
|
||||
@@ -48,19 +47,18 @@ IIpv4Private::Send (Packet const &packet, Ipv4Address source,
|
||||
m_ipv4->Send (packet, source, destination, protocol);
|
||||
}
|
||||
Ipv4Interface *
|
||||
IIpv4Private::FindInterfaceForDevice (NetDevice const*device)
|
||||
IIpv4Private::FindInterfaceForDevice (Ptr<const NetDevice>device)
|
||||
{
|
||||
return m_ipv4->FindInterfaceForDevice (device);
|
||||
}
|
||||
void
|
||||
IIpv4Private::Receive(Packet& p, NetDevice *device)
|
||||
IIpv4Private::Receive(Packet& p, Ptr<NetDevice> device)
|
||||
{
|
||||
m_ipv4->Receive (p, device);
|
||||
}
|
||||
void
|
||||
IIpv4Private::DoDispose (void)
|
||||
{
|
||||
m_ipv4->Unref ();
|
||||
m_ipv4 = 0;
|
||||
NsUnknown::DoDispose ();
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "ns3/ns-unknown.h"
|
||||
#include "ns3/ipv4-address.h"
|
||||
#include "ns3/ptr.h"
|
||||
#include <stdint.h>
|
||||
|
||||
namespace ns3 {
|
||||
@@ -38,18 +39,18 @@ class IIpv4Private : public NsUnknown
|
||||
{
|
||||
public:
|
||||
static const Iid iid;
|
||||
IIpv4Private (Ipv4 *ipv4);
|
||||
IIpv4Private (Ptr<Ipv4> ipv4);
|
||||
virtual ~IIpv4Private ();
|
||||
|
||||
TraceResolver *CreateTraceResolver (TraceContext const &context);
|
||||
void Send (Packet const &packet, Ipv4Address source,
|
||||
Ipv4Address destination, uint8_t protocol);
|
||||
Ipv4Interface *FindInterfaceForDevice (NetDevice const*device);
|
||||
void Receive(Packet& p, NetDevice *device);
|
||||
Ipv4Interface *FindInterfaceForDevice (Ptr<const NetDevice>device);
|
||||
void Receive(Packet& p, Ptr<NetDevice> device);
|
||||
protected:
|
||||
virtual void DoDispose (void);
|
||||
private:
|
||||
Ipv4 *m_ipv4;
|
||||
Ptr<Ipv4> m_ipv4;
|
||||
};
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -20,21 +20,20 @@
|
||||
*/
|
||||
#include "i-udp-impl.h"
|
||||
#include "udp.h"
|
||||
#include "ns3/socket.h"
|
||||
#include "ns3/assert.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
IUdpImpl::IUdpImpl (Udp *udp)
|
||||
IUdpImpl::IUdpImpl (Ptr<Udp> udp)
|
||||
: m_udp (udp)
|
||||
{
|
||||
m_udp->Ref ();
|
||||
}
|
||||
{}
|
||||
IUdpImpl::~IUdpImpl ()
|
||||
{
|
||||
NS_ASSERT (m_udp == 0);
|
||||
}
|
||||
|
||||
Socket *
|
||||
Ptr<Socket>
|
||||
IUdpImpl::CreateSocket (void)
|
||||
{
|
||||
return m_udp->CreateSocket ();
|
||||
@@ -43,11 +42,7 @@ IUdpImpl::CreateSocket (void)
|
||||
void
|
||||
IUdpImpl::DoDispose (void)
|
||||
{
|
||||
if (m_udp != 0)
|
||||
{
|
||||
m_udp->Unref ();
|
||||
m_udp = 0;
|
||||
}
|
||||
m_udp = 0;
|
||||
IUdp::DoDispose ();
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#define I_UDP_IMPL_H
|
||||
|
||||
#include "ns3/i-udp.h"
|
||||
#include "ns3/ptr.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -30,15 +31,15 @@ class Udp;
|
||||
class IUdpImpl : public IUdp
|
||||
{
|
||||
public:
|
||||
IUdpImpl (Udp *udp);
|
||||
IUdpImpl (Ptr<Udp> udp);
|
||||
virtual ~IUdpImpl ();
|
||||
|
||||
virtual Socket *CreateSocket (void);
|
||||
virtual Ptr<Socket> CreateSocket (void);
|
||||
|
||||
protected:
|
||||
virtual void DoDispose (void);
|
||||
private:
|
||||
Udp *m_udp;
|
||||
Ptr<Udp> m_udp;
|
||||
};
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -41,35 +41,22 @@ namespace ns3 {
|
||||
|
||||
InternetNode::InternetNode()
|
||||
{
|
||||
Ipv4 *ipv4 = new Ipv4 (this);
|
||||
Arp *arp = new Arp (this);
|
||||
Udp *udp = new Udp (this);
|
||||
Ptr<Ipv4> ipv4 = new Ipv4 (this);
|
||||
Ptr<Arp> arp = new Arp (this);
|
||||
Ptr<Udp> udp = new Udp (this);
|
||||
|
||||
ipv4->Ref ();
|
||||
arp->Ref ();
|
||||
udp->Ref ();
|
||||
|
||||
ApplicationList *applicationList = new ApplicationList(this);
|
||||
L3Demux *l3Demux = new L3Demux(this);
|
||||
Ipv4L4Demux *ipv4L4Demux = new Ipv4L4Demux(this);
|
||||
|
||||
applicationList->Ref ();
|
||||
l3Demux->Ref ();
|
||||
ipv4L4Demux->Ref ();
|
||||
Ptr<ApplicationList> applicationList = new ApplicationList(this);
|
||||
Ptr<L3Demux> l3Demux = new L3Demux(this);
|
||||
Ptr<Ipv4L4Demux> ipv4L4Demux = new Ipv4L4Demux(this);
|
||||
|
||||
l3Demux->Insert (ipv4);
|
||||
l3Demux->Insert (arp);
|
||||
ipv4L4Demux->Insert (udp);
|
||||
|
||||
IUdpImpl *udpImpl = new IUdpImpl (udp);
|
||||
IArpPrivate *arpPrivate = new IArpPrivate (arp);
|
||||
IIpv4Impl *ipv4Impl = new IIpv4Impl (ipv4);
|
||||
IIpv4Private *ipv4Private = new IIpv4Private (ipv4);
|
||||
|
||||
udpImpl->Ref ();
|
||||
arpPrivate->Ref ();
|
||||
ipv4Impl->Ref ();
|
||||
ipv4Private->Ref ();
|
||||
Ptr<IUdpImpl> udpImpl = new IUdpImpl (udp);
|
||||
Ptr<IArpPrivate> arpPrivate = new IArpPrivate (arp);
|
||||
Ptr<IIpv4Impl> ipv4Impl = new IIpv4Impl (ipv4);
|
||||
Ptr<IIpv4Private> ipv4Private = new IIpv4Private (ipv4);
|
||||
|
||||
NsUnknown::AddInterface (ipv4Private);
|
||||
NsUnknown::AddInterface (ipv4Impl);
|
||||
@@ -78,18 +65,6 @@ InternetNode::InternetNode()
|
||||
NsUnknown::AddInterface (applicationList);
|
||||
NsUnknown::AddInterface (l3Demux);
|
||||
NsUnknown::AddInterface (ipv4L4Demux);
|
||||
|
||||
|
||||
applicationList->Unref ();
|
||||
l3Demux->Unref ();
|
||||
ipv4L4Demux->Unref ();
|
||||
arp->Unref ();
|
||||
ipv4->Unref ();
|
||||
udp->Unref ();
|
||||
udpImpl->Unref ();
|
||||
arpPrivate->Unref ();
|
||||
ipv4Impl->Unref ();
|
||||
ipv4Private->Unref ();
|
||||
}
|
||||
|
||||
InternetNode::~InternetNode ()
|
||||
@@ -105,11 +80,10 @@ TraceResolver *
|
||||
InternetNode::CreateTraceResolver (TraceContext const &context)
|
||||
{
|
||||
CompositeTraceResolver *resolver = new CompositeTraceResolver (context);
|
||||
IIpv4Private *ipv4 = QueryInterface<IIpv4Private> (IIpv4Private::iid);
|
||||
Ptr<IIpv4Private> ipv4 = QueryInterface<IIpv4Private> (IIpv4Private::iid);
|
||||
resolver->Add ("ipv4",
|
||||
MakeCallback (&IIpv4Private::CreateTraceResolver, ipv4),
|
||||
MakeCallback (&IIpv4Private::CreateTraceResolver, ipv4.Peek ()),
|
||||
InternetNode::IPV4);
|
||||
ipv4->Unref ();
|
||||
|
||||
return resolver;
|
||||
}
|
||||
@@ -121,17 +95,16 @@ InternetNode::DoDispose()
|
||||
}
|
||||
|
||||
void
|
||||
InternetNode::DoAddDevice (NetDevice *device) const
|
||||
InternetNode::DoAddDevice (Ptr<NetDevice> device) const
|
||||
{
|
||||
device->SetReceiveCallback (MakeCallback (&InternetNode::ReceiveFromDevice, this));
|
||||
}
|
||||
|
||||
bool
|
||||
InternetNode::ReceiveFromDevice (NetDevice *device, const Packet &p, uint16_t protocolNumber) const
|
||||
InternetNode::ReceiveFromDevice (Ptr<NetDevice> device, const Packet &p, uint16_t protocolNumber) const
|
||||
{
|
||||
L3Demux *demux = QueryInterface<L3Demux> (L3Demux::iid);
|
||||
L3Protocol *target = demux->PeekProtocol (protocolNumber);
|
||||
demux->Unref ();
|
||||
Ptr<L3Demux> demux = QueryInterface<L3Demux> (L3Demux::iid);
|
||||
Ptr<L3Protocol> target = demux->GetProtocol (protocolNumber);
|
||||
if (target != 0)
|
||||
{
|
||||
Packet packet = p;
|
||||
|
||||
@@ -47,8 +47,8 @@ public:
|
||||
protected:
|
||||
virtual void DoDispose(void);
|
||||
private:
|
||||
virtual void DoAddDevice (NetDevice *device) const;
|
||||
bool ReceiveFromDevice (NetDevice *device, const Packet &p, uint16_t protocolNumber) const;
|
||||
virtual void DoAddDevice (Ptr<NetDevice> device) const;
|
||||
bool ReceiveFromDevice (Ptr<NetDevice> device, const Packet &p, uint16_t protocolNumber) const;
|
||||
std::string m_name;
|
||||
};
|
||||
|
||||
|
||||
@@ -31,26 +31,16 @@ namespace ns3 {
|
||||
* becoming useable, the user must invoke SetUp on them
|
||||
* once the final Ipv4 address and mask has been set.
|
||||
*/
|
||||
Ipv4Interface::Ipv4Interface (NetDevice *nd)
|
||||
Ipv4Interface::Ipv4Interface (Ptr<NetDevice> nd)
|
||||
: m_netdevice (nd),
|
||||
m_ifup(false)
|
||||
{
|
||||
if (m_netdevice != 0)
|
||||
{
|
||||
m_netdevice->Ref ();
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
Ipv4Interface::~Ipv4Interface ()
|
||||
{
|
||||
if (m_netdevice != 0)
|
||||
{
|
||||
m_netdevice->Unref ();
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
NetDevice*
|
||||
Ipv4Interface::PeekDevice (void) const
|
||||
Ptr<NetDevice>
|
||||
Ipv4Interface::GetDevice (void) const
|
||||
{
|
||||
return m_netdevice;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
#include <list>
|
||||
#include "ns3/ipv4-address.h"
|
||||
#include "ns3/ptr.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -69,7 +70,7 @@ public:
|
||||
* This value can be zero in which case the MTU
|
||||
* of this interface will be 2^(16-1).
|
||||
*/
|
||||
Ipv4Interface (NetDevice *nd);
|
||||
Ipv4Interface (Ptr<NetDevice> nd);
|
||||
virtual ~Ipv4Interface();
|
||||
|
||||
/**
|
||||
@@ -87,7 +88,7 @@ public:
|
||||
* \returns the underlying NetDevice. This method can return
|
||||
* zero if this interface has no associated NetDevice.
|
||||
*/
|
||||
NetDevice *PeekDevice (void) const;
|
||||
Ptr<NetDevice> GetDevice (void) const;
|
||||
|
||||
/**
|
||||
* \param a set the ipv4 address of this interface.
|
||||
@@ -153,7 +154,7 @@ public:
|
||||
private:
|
||||
virtual void SendTo (Packet p, Ipv4Address dest) = 0;
|
||||
virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context) = 0;
|
||||
NetDevice* m_netdevice;
|
||||
Ptr<NetDevice> m_netdevice;
|
||||
bool m_ifup;
|
||||
Ipv4Address m_address;
|
||||
Ipv4Mask m_netmask;
|
||||
|
||||
@@ -43,10 +43,10 @@ Ipv4L4Demux::~Ipv4L4Demux()
|
||||
void
|
||||
Ipv4L4Demux::DoDispose (void)
|
||||
{
|
||||
for (L4List_t::const_iterator i = m_protocols.begin(); i != m_protocols.end(); ++i)
|
||||
for (L4List_t::iterator i = m_protocols.begin(); i != m_protocols.end(); ++i)
|
||||
{
|
||||
(*i)->Dispose ();
|
||||
(*i)->Unref ();
|
||||
*i = 0;
|
||||
}
|
||||
m_protocols.clear ();
|
||||
m_node = 0;
|
||||
@@ -59,25 +59,24 @@ Ipv4L4Demux::CreateTraceResolver (TraceContext const &context)
|
||||
CompositeTraceResolver *resolver = new CompositeTraceResolver (context);
|
||||
for (L4List_t::const_iterator i = m_protocols.begin(); i != m_protocols.end(); ++i)
|
||||
{
|
||||
Ipv4L4Protocol *protocol = *i;
|
||||
Ptr<Ipv4L4Protocol> protocol = *i;
|
||||
std::string protValue;
|
||||
std::ostringstream oss (protValue);
|
||||
oss << (*i)->GetProtocolNumber ();
|
||||
Ipv4L4ProtocolTraceType protocolNumber = (*i)->GetProtocolNumber ();
|
||||
resolver->Add (protValue,
|
||||
MakeCallback (&Ipv4L4Protocol::CreateTraceResolver, protocol),
|
||||
MakeCallback (&Ipv4L4Protocol::CreateTraceResolver, protocol.Peek ()),
|
||||
protocolNumber);
|
||||
}
|
||||
return resolver;
|
||||
}
|
||||
void
|
||||
Ipv4L4Demux::Insert(Ipv4L4Protocol *protocol)
|
||||
Ipv4L4Demux::Insert(Ptr<Ipv4L4Protocol> protocol)
|
||||
{
|
||||
protocol->Ref ();
|
||||
m_protocols.push_back (protocol);
|
||||
}
|
||||
Ipv4L4Protocol*
|
||||
Ipv4L4Demux::PeekProtocol(int protocolNumber)
|
||||
Ptr<Ipv4L4Protocol>
|
||||
Ipv4L4Demux::GetProtocol(int protocolNumber)
|
||||
{
|
||||
for (L4List_t::iterator i = m_protocols.begin(); i != m_protocols.end(); ++i)
|
||||
{
|
||||
@@ -89,7 +88,7 @@ Ipv4L4Demux::PeekProtocol(int protocolNumber)
|
||||
return 0;
|
||||
}
|
||||
void
|
||||
Ipv4L4Demux::Erase(Ipv4L4Protocol*protocol)
|
||||
Ipv4L4Demux::Erase(Ptr<Ipv4L4Protocol> protocol)
|
||||
{
|
||||
m_protocols.remove (protocol);
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
* a working L4 Protocol and returned from this method.
|
||||
* The caller does not get ownership of the returned pointer.
|
||||
*/
|
||||
void Insert(Ipv4L4Protocol *protocol);
|
||||
void Insert(Ptr<Ipv4L4Protocol> protocol);
|
||||
/**
|
||||
* \param protocolNumber number of protocol to lookup
|
||||
* in this L4 Demux
|
||||
@@ -75,17 +75,17 @@ public:
|
||||
* to forward packets up the stack to the right protocol.
|
||||
* It is also called from InternetNode::GetUdp for example.
|
||||
*/
|
||||
Ipv4L4Protocol* PeekProtocol(int protocolNumber);
|
||||
Ptr<Ipv4L4Protocol> GetProtocol(int protocolNumber);
|
||||
/**
|
||||
* \param protocol protocol to remove from this demux.
|
||||
*
|
||||
* The input value to this method should be the value
|
||||
* returned from the Ipv4L4Protocol::Insert method.
|
||||
*/
|
||||
void Erase(Ipv4L4Protocol*protocol);
|
||||
void Erase (Ptr<Ipv4L4Protocol> protocol);
|
||||
private:
|
||||
virtual void DoDispose (void);
|
||||
typedef std::list<Ipv4L4Protocol*> L4List_t;
|
||||
typedef std::list<Ptr<Ipv4L4Protocol> > L4List_t;
|
||||
L4List_t m_protocols;
|
||||
Ptr<Node> m_node;
|
||||
};
|
||||
|
||||
@@ -43,9 +43,8 @@ Ipv4LoopbackInterface::DoCreateTraceResolver (TraceContext const &context)
|
||||
void
|
||||
Ipv4LoopbackInterface::SendTo (Packet packet, Ipv4Address dest)
|
||||
{
|
||||
IIpv4Private *ipv4 = m_node->QueryInterface<IIpv4Private> (IIpv4Private::iid);
|
||||
ipv4->Receive (packet, PeekDevice ());
|
||||
ipv4->Unref ();
|
||||
Ptr<IIpv4Private> ipv4 = m_node->QueryInterface<IIpv4Private> (IIpv4Private::iid);
|
||||
ipv4->Receive (packet, GetDevice ());
|
||||
}
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "ns3/ipv4-address.h"
|
||||
#include "ns3/ipv4-route.h"
|
||||
#include "ns3/node.h"
|
||||
#include "ns3/net-device.h"
|
||||
|
||||
#include "ipv4.h"
|
||||
#include "ipv4-l4-protocol.h"
|
||||
@@ -310,7 +311,7 @@ Ipv4::RemoveRoute (uint32_t index)
|
||||
|
||||
|
||||
uint32_t
|
||||
Ipv4::AddInterface (NetDevice *device)
|
||||
Ipv4::AddInterface (Ptr<NetDevice> device)
|
||||
{
|
||||
Ipv4Interface *interface = new ArpIpv4Interface (m_node, device);
|
||||
return AddIpv4Interface (interface);
|
||||
@@ -344,11 +345,11 @@ Ipv4::GetNInterfaces (void) const
|
||||
}
|
||||
|
||||
Ipv4Interface *
|
||||
Ipv4::FindInterfaceForDevice (NetDevice const*device)
|
||||
Ipv4::FindInterfaceForDevice (Ptr<const NetDevice> device)
|
||||
{
|
||||
for (Ipv4InterfaceList::const_iterator i = m_interfaces.begin (); i != m_interfaces.end (); i++)
|
||||
{
|
||||
if ((*i)->PeekDevice () == device)
|
||||
if ((*i)->GetDevice () == device)
|
||||
{
|
||||
return *i;
|
||||
}
|
||||
@@ -357,12 +358,12 @@ Ipv4::FindInterfaceForDevice (NetDevice const*device)
|
||||
}
|
||||
|
||||
void
|
||||
Ipv4::Receive(Packet& packet, NetDevice *device)
|
||||
Ipv4::Receive(Packet& packet, Ptr<NetDevice> device)
|
||||
{
|
||||
uint32_t index = 0;
|
||||
for (Ipv4InterfaceList::const_iterator i = m_interfaces.begin (); i != m_interfaces.end (); i++)
|
||||
{
|
||||
if ((*i)->PeekDevice () == device)
|
||||
if ((*i)->GetDevice () == device)
|
||||
{
|
||||
m_rxTrace (packet, index);
|
||||
break;
|
||||
@@ -442,7 +443,7 @@ Ipv4::SendRealOut (Packet const &p, Ipv4Header const &ip, Ipv4Route const &route
|
||||
|
||||
|
||||
bool
|
||||
Ipv4::Forwarding (Packet const &packet, Ipv4Header &ipHeader, NetDevice *device)
|
||||
Ipv4::Forwarding (Packet const &packet, Ipv4Header &ipHeader, Ptr<NetDevice> device)
|
||||
{
|
||||
for (Ipv4InterfaceList::const_iterator i = m_interfaces.begin ();
|
||||
i != m_interfaces.end (); i++)
|
||||
@@ -458,7 +459,7 @@ Ipv4::Forwarding (Packet const &packet, Ipv4Header &ipHeader, NetDevice *device)
|
||||
i != m_interfaces.end (); i++)
|
||||
{
|
||||
Ipv4Interface *interface = *i;
|
||||
if (interface->PeekDevice () == device)
|
||||
if (interface->GetDevice () == device)
|
||||
{
|
||||
if (ipHeader.GetDestination ().IsEqual (interface->GetBroadcast ()))
|
||||
{
|
||||
@@ -504,9 +505,8 @@ Ipv4::Forwarding (Packet const &packet, Ipv4Header &ipHeader, NetDevice *device)
|
||||
void
|
||||
Ipv4::ForwardUp (Packet p, Ipv4Header const&ip)
|
||||
{
|
||||
Ipv4L4Demux *demux = m_node->QueryInterface<Ipv4L4Demux> (Ipv4L4Demux::iid);
|
||||
Ipv4L4Protocol *protocol = demux->PeekProtocol (ip.GetProtocol ());
|
||||
demux->Unref ();
|
||||
Ptr<Ipv4L4Demux> demux = m_node->QueryInterface<Ipv4L4Demux> (Ipv4L4Demux::iid);
|
||||
Ptr<Ipv4L4Protocol> protocol = demux->GetProtocol (ip.GetProtocol ());
|
||||
protocol->Receive (p, ip.GetSource (), ip.GetDestination ());
|
||||
}
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ public:
|
||||
* to disable it, you can invoke Ipv4Interface::SetDown which will
|
||||
* make sure that it is never used during packet forwarding.
|
||||
*/
|
||||
uint32_t AddInterface (NetDevice *device);
|
||||
uint32_t AddInterface (Ptr<NetDevice> device);
|
||||
/**
|
||||
* \param i index of interface to return
|
||||
* \returns the requested interface
|
||||
@@ -182,7 +182,7 @@ public:
|
||||
* Try to find an Ipv4Interface whose NetDevice is equal to
|
||||
* the input NetDevice.
|
||||
*/
|
||||
Ipv4Interface *FindInterfaceForDevice (NetDevice const*device);
|
||||
Ipv4Interface *FindInterfaceForDevice (Ptr<const NetDevice> device);
|
||||
|
||||
|
||||
/**
|
||||
@@ -192,7 +192,7 @@ public:
|
||||
* - implement a per-NetDevice ARP cache
|
||||
* - send back arp replies on the right device
|
||||
*/
|
||||
virtual void Receive(Packet& p, NetDevice *device);
|
||||
virtual void Receive(Packet& p, Ptr<NetDevice> device);
|
||||
|
||||
/**
|
||||
* \param packet packet to send
|
||||
@@ -220,7 +220,7 @@ protected:
|
||||
virtual void DoDispose (void);
|
||||
private:
|
||||
void SendRealOut (Packet const &packet, Ipv4Header const &ip, Ipv4Route const &route);
|
||||
bool Forwarding (Packet const &packet, Ipv4Header &ipHeader, NetDevice *device);
|
||||
bool Forwarding (Packet const &packet, Ipv4Header &ipHeader, Ptr<NetDevice> device);
|
||||
void ForwardUp (Packet p, Ipv4Header const&ip);
|
||||
uint32_t AddIpv4Interface (Ipv4Interface *interface);
|
||||
void SetupLoopback (void);
|
||||
|
||||
@@ -45,7 +45,7 @@ L3Demux::DoDispose (void)
|
||||
for (L3Map_t::iterator i = m_protocols.begin(); i != m_protocols.end(); ++i)
|
||||
{
|
||||
i->second->Dispose ();
|
||||
i->second->Unref ();
|
||||
i->second = 0;
|
||||
}
|
||||
m_protocols.clear ();
|
||||
m_node = 0;
|
||||
@@ -63,23 +63,25 @@ L3Demux::CreateTraceResolver (TraceContext const &context) const
|
||||
oss << i->second->GetProtocolNumber ();
|
||||
ProtocolTraceType context = i->second->GetProtocolNumber ();
|
||||
resolver->Add (protValue,
|
||||
MakeCallback (&L3Protocol::CreateTraceResolver, i->second),
|
||||
MakeCallback (&L3Protocol::CreateTraceResolver, i->second.Peek ()),
|
||||
context);
|
||||
}
|
||||
return resolver;
|
||||
}
|
||||
|
||||
void L3Demux::Insert(L3Protocol *p)
|
||||
void L3Demux::Insert(Ptr<L3Protocol> p)
|
||||
{
|
||||
p->Ref ();
|
||||
m_protocols.insert(L3Map_t::value_type(p->GetProtocolNumber (), p));
|
||||
}
|
||||
|
||||
L3Protocol*
|
||||
L3Demux::PeekProtocol (int p)
|
||||
Ptr<L3Protocol>
|
||||
L3Demux::GetProtocol (int p)
|
||||
{ // Look up a protocol by protocol number
|
||||
L3Map_t::iterator i = m_protocols.find(p);
|
||||
if (i == m_protocols.end()) return 0; // Not found
|
||||
if (i == m_protocols.end())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return i->second; // Return the protocol
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ public:
|
||||
* a working L3 Protocol and returned from this method.
|
||||
* The caller does not get ownership of the returned pointer.
|
||||
*/
|
||||
void Insert(ns3::L3Protocol * protocol);
|
||||
void Insert(Ptr<L3Protocol> protocol);
|
||||
/**
|
||||
* \param protocolNumber number of protocol to lookup
|
||||
* in this L4 Demux
|
||||
@@ -78,18 +78,18 @@ public:
|
||||
* to forward packets up the stack to the right protocol.
|
||||
* It is also called from InternetNode::GetIpv4 for example.
|
||||
*/
|
||||
ns3::L3Protocol* PeekProtocol (int protocolNumber);
|
||||
Ptr<L3Protocol> GetProtocol (int protocolNumber);
|
||||
/**
|
||||
* \param protocol protocol to remove from this demux.
|
||||
*
|
||||
* The input value to this method should be the value
|
||||
* returned from the L3Protocol::Insert method.
|
||||
*/
|
||||
void Erase(ns3::L3Protocol*protocol);
|
||||
void Erase(Ptr<L3Protocol> protocol);
|
||||
protected:
|
||||
virtual void DoDispose (void);
|
||||
private:
|
||||
typedef std::map<int, ns3::L3Protocol*> L3Map_t;
|
||||
typedef std::map<int, Ptr<ns3::L3Protocol> > L3Map_t;
|
||||
|
||||
Ptr<Node> m_node;
|
||||
L3Map_t m_protocols;
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#define L3_PROTOCOL_H
|
||||
|
||||
#include "ns3/object.h"
|
||||
#include "ns3/ptr.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -53,7 +54,7 @@ public:
|
||||
* - implement a per-NetDevice ARP cache
|
||||
* - send back arp replies on the right device
|
||||
*/
|
||||
virtual void Receive(Packet& p, NetDevice *device) = 0;
|
||||
virtual void Receive(Packet& p, Ptr<NetDevice> device) = 0;
|
||||
|
||||
protected:
|
||||
virtual void DoDispose (void);
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
UdpSocket::UdpSocket (Ptr<Node> node, Udp *udp)
|
||||
UdpSocket::UdpSocket (Ptr<Node> node, Ptr<Udp> udp)
|
||||
: m_endPoint (0),
|
||||
m_node (node),
|
||||
m_udp (udp),
|
||||
@@ -34,9 +34,7 @@ UdpSocket::UdpSocket (Ptr<Node> node, Udp *udp)
|
||||
m_shutdownSend (false),
|
||||
m_shutdownRecv (false),
|
||||
m_connected (false)
|
||||
{
|
||||
m_udp->Ref ();
|
||||
}
|
||||
{}
|
||||
UdpSocket::~UdpSocket ()
|
||||
{
|
||||
m_node = 0;
|
||||
@@ -55,11 +53,7 @@ UdpSocket::~UdpSocket ()
|
||||
m_udp->DeAllocate (m_endPoint);
|
||||
NS_ASSERT (m_endPoint == 0);
|
||||
}
|
||||
if (m_udp != 0)
|
||||
{
|
||||
m_udp->Unref ();
|
||||
m_udp = 0;
|
||||
}
|
||||
m_udp = 0;
|
||||
}
|
||||
|
||||
Ptr<Node>
|
||||
@@ -73,11 +67,7 @@ UdpSocket::Destroy (void)
|
||||
{
|
||||
m_node = 0;
|
||||
m_endPoint = 0;
|
||||
if (m_udp != 0)
|
||||
{
|
||||
m_udp->Unref ();
|
||||
m_udp = 0;
|
||||
}
|
||||
m_udp = 0;
|
||||
}
|
||||
int
|
||||
UdpSocket::FinishBind (void)
|
||||
@@ -135,7 +125,7 @@ UdpSocket::ShutdownRecv (void)
|
||||
}
|
||||
|
||||
void
|
||||
UdpSocket::DoClose(ns3::Callback<void, Socket*> closeCompleted)
|
||||
UdpSocket::DoClose(ns3::Callback<void, Ptr<Socket> > closeCompleted)
|
||||
{
|
||||
// XXX: we should set the close state and check it in all API methods.
|
||||
if (!closeCompleted.IsNull ())
|
||||
@@ -146,9 +136,9 @@ UdpSocket::DoClose(ns3::Callback<void, Socket*> closeCompleted)
|
||||
void
|
||||
UdpSocket::DoConnect(const Ipv4Address & address,
|
||||
uint16_t portNumber,
|
||||
ns3::Callback<void, Socket*> connectionSucceeded,
|
||||
ns3::Callback<void, Socket*> connectionFailed,
|
||||
ns3::Callback<void, Socket*> halfClose)
|
||||
ns3::Callback<void, Ptr<Socket> > connectionSucceeded,
|
||||
ns3::Callback<void, Ptr<Socket> > connectionFailed,
|
||||
ns3::Callback<void, Ptr<Socket> > halfClose)
|
||||
{
|
||||
m_defaultAddress = address;
|
||||
m_defaultPort = portNumber;
|
||||
@@ -159,9 +149,9 @@ UdpSocket::DoConnect(const Ipv4Address & address,
|
||||
m_connected = true;
|
||||
}
|
||||
int
|
||||
UdpSocket::DoAccept(ns3::Callback<bool, Socket*, const Ipv4Address&, uint16_t> connectionRequest,
|
||||
ns3::Callback<void, Socket*, const Ipv4Address&, uint16_t> newConnectionCreated,
|
||||
ns3::Callback<void, Socket*> closeRequested)
|
||||
UdpSocket::DoAccept(ns3::Callback<bool, Ptr<Socket>, const Ipv4Address&, uint16_t> connectionRequest,
|
||||
ns3::Callback<void, Ptr<Socket>, const Ipv4Address&, uint16_t> newConnectionCreated,
|
||||
ns3::Callback<void, Ptr<Socket> > closeRequested)
|
||||
{
|
||||
// calling accept on a udp socket is a programming error.
|
||||
m_errno = EOPNOTSUPP;
|
||||
@@ -170,7 +160,7 @@ UdpSocket::DoAccept(ns3::Callback<bool, Socket*, const Ipv4Address&, uint16_t> c
|
||||
int
|
||||
UdpSocket::DoSend (const uint8_t* buffer,
|
||||
uint32_t size,
|
||||
ns3::Callback<void, Socket*, uint32_t> dataSent)
|
||||
ns3::Callback<void, Ptr<Socket>, uint32_t> dataSent)
|
||||
{
|
||||
if (!m_connected)
|
||||
{
|
||||
@@ -190,7 +180,7 @@ UdpSocket::DoSend (const uint8_t* buffer,
|
||||
}
|
||||
int
|
||||
UdpSocket::DoSendPacketTo (const Packet &p, Ipv4Address daddr, uint16_t dport,
|
||||
ns3::Callback<void, Socket*, uint32_t> dataSent)
|
||||
ns3::Callback<void, Ptr<Socket>, uint32_t> dataSent)
|
||||
{
|
||||
if (m_endPoint == 0)
|
||||
{
|
||||
@@ -219,7 +209,7 @@ UdpSocket::DoSendTo(const Ipv4Address &address,
|
||||
uint16_t port,
|
||||
const uint8_t *buffer,
|
||||
uint32_t size,
|
||||
ns3::Callback<void, Socket*, uint32_t> dataSent)
|
||||
ns3::Callback<void, Ptr<Socket>, uint32_t> dataSent)
|
||||
{
|
||||
if (m_connected)
|
||||
{
|
||||
@@ -238,12 +228,12 @@ UdpSocket::DoSendTo(const Ipv4Address &address,
|
||||
return DoSendPacketTo (p, address, port, dataSent);
|
||||
}
|
||||
void
|
||||
UdpSocket::DoRecv(ns3::Callback<void, Socket*, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t> callback)
|
||||
UdpSocket::DoRecv(ns3::Callback<void, Ptr<Socket>, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t> callback)
|
||||
{
|
||||
m_rxCallback = callback;
|
||||
}
|
||||
void
|
||||
UdpSocket::DoRecvDummy(ns3::Callback<void, Socket*, uint32_t,const Ipv4Address&, uint16_t> callback)
|
||||
UdpSocket::DoRecvDummy(ns3::Callback<void, Ptr<Socket>, uint32_t,const Ipv4Address&, uint16_t> callback)
|
||||
{
|
||||
m_dummyRxCallback = callback;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ public:
|
||||
/**
|
||||
* Create an unbound udp socket.
|
||||
*/
|
||||
UdpSocket (Ptr<Node> node, Udp *udp);
|
||||
UdpSocket (Ptr<Node> node, Ptr<Udp> udp);
|
||||
virtual ~UdpSocket ();
|
||||
|
||||
virtual enum SocketErrno GetErrno (void) const;
|
||||
@@ -52,25 +52,25 @@ public:
|
||||
virtual int ShutdownRecv (void);
|
||||
|
||||
private:
|
||||
virtual void DoClose(ns3::Callback<void, Socket*> closeCompleted);
|
||||
virtual void DoClose(ns3::Callback<void, Ptr<Socket> > closeCompleted);
|
||||
virtual void DoConnect(const Ipv4Address & address,
|
||||
uint16_t portNumber,
|
||||
ns3::Callback<void, Socket*> connectionSucceeded,
|
||||
ns3::Callback<void, Socket*> connectionFailed,
|
||||
ns3::Callback<void, Socket*> halfClose);
|
||||
virtual int DoAccept(ns3::Callback<bool, Socket*, const Ipv4Address&, uint16_t> connectionRequest,
|
||||
ns3::Callback<void, Socket*, const Ipv4Address&, uint16_t> newConnectionCreated,
|
||||
ns3::Callback<void, Socket*> closeRequested);
|
||||
ns3::Callback<void, Ptr<Socket> > connectionSucceeded,
|
||||
ns3::Callback<void, Ptr<Socket> > connectionFailed,
|
||||
ns3::Callback<void, Ptr<Socket> > halfClose);
|
||||
virtual int DoAccept(ns3::Callback<bool, Ptr<Socket>, const Ipv4Address&, uint16_t> connectionRequest,
|
||||
ns3::Callback<void, Ptr<Socket>, const Ipv4Address&, uint16_t> newConnectionCreated,
|
||||
ns3::Callback<void, Ptr<Socket> > closeRequested);
|
||||
virtual int DoSend (const uint8_t* buffer,
|
||||
uint32_t size,
|
||||
ns3::Callback<void, Socket*, uint32_t> dataSent);
|
||||
ns3::Callback<void, Ptr<Socket>, uint32_t> dataSent);
|
||||
virtual int DoSendTo(const Ipv4Address &address,
|
||||
uint16_t port,
|
||||
const uint8_t *buffer,
|
||||
uint32_t size,
|
||||
ns3::Callback<void, Socket*, uint32_t> dataSent);
|
||||
virtual void DoRecv(ns3::Callback<void, Socket*, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t>);
|
||||
virtual void DoRecvDummy(ns3::Callback<void, Socket*, uint32_t,const Ipv4Address&, uint16_t>);
|
||||
ns3::Callback<void, Ptr<Socket>, uint32_t> dataSent);
|
||||
virtual void DoRecv(ns3::Callback<void, Ptr<Socket>, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t>);
|
||||
virtual void DoRecvDummy(ns3::Callback<void, Ptr<Socket>, uint32_t,const Ipv4Address&, uint16_t>);
|
||||
|
||||
private:
|
||||
friend class Udp;
|
||||
@@ -79,15 +79,15 @@ private:
|
||||
void ForwardUp (const Packet &p, Ipv4Address saddr, uint16_t sport);
|
||||
void Destroy (void);
|
||||
int DoSendPacketTo (const Packet &p, Ipv4Address daddr, uint16_t dport,
|
||||
ns3::Callback<void, Socket*, uint32_t> dataSent);
|
||||
ns3::Callback<void, Ptr<Socket>, uint32_t> dataSent);
|
||||
|
||||
Ipv4EndPoint *m_endPoint;
|
||||
Ptr<Node> m_node;
|
||||
Udp *m_udp;
|
||||
Ptr<Udp> m_udp;
|
||||
Ipv4Address m_defaultAddress;
|
||||
uint16_t m_defaultPort;
|
||||
Callback<void,Socket*,uint32_t,const Ipv4Address &,uint16_t> m_dummyRxCallback;
|
||||
Callback<void,Socket*,uint8_t const*,uint32_t,const Ipv4Address &,uint16_t> m_rxCallback;
|
||||
Callback<void,Ptr<Socket>,uint32_t,const Ipv4Address &,uint16_t> m_dummyRxCallback;
|
||||
Callback<void,Ptr<Socket>,uint8_t const*,uint32_t,const Ipv4Address &,uint16_t> m_rxCallback;
|
||||
enum SocketErrno m_errno;
|
||||
bool m_shutdownSend;
|
||||
bool m_shutdownRecv;
|
||||
|
||||
@@ -65,11 +65,10 @@ Udp::DoDispose (void)
|
||||
Ipv4L4Protocol::DoDispose ();
|
||||
}
|
||||
|
||||
Socket *
|
||||
Ptr<Socket>
|
||||
Udp::CreateSocket (void)
|
||||
{
|
||||
Socket *socket = new UdpSocket (m_node, this);
|
||||
socket->Ref ();
|
||||
Ptr<Socket> socket = new UdpSocket (m_node, this);
|
||||
return socket;
|
||||
}
|
||||
|
||||
@@ -138,11 +137,10 @@ Udp::Send (Packet packet,
|
||||
|
||||
packet.AddHeader (udpHeader);
|
||||
|
||||
IIpv4Private *ipv4 = m_node->QueryInterface<IIpv4Private> (IIpv4Private::iid);
|
||||
Ptr<IIpv4Private> ipv4 = m_node->QueryInterface<IIpv4Private> (IIpv4Private::iid);
|
||||
if (ipv4 != 0)
|
||||
{
|
||||
ipv4->Send (packet, saddr, daddr, PROT_NUMBER);
|
||||
ipv4->Unref ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ public:
|
||||
|
||||
virtual TraceResolver *CreateTraceResolver (TraceContext const &context);
|
||||
|
||||
Socket *CreateSocket (void);
|
||||
Ptr<Socket> CreateSocket (void);
|
||||
|
||||
Ipv4EndPoint *Allocate (void);
|
||||
Ipv4EndPoint *Allocate (Ipv4Address address);
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <string>
|
||||
#include <stdint.h>
|
||||
#include "ns3/object.h"
|
||||
#include "ns3/ptr.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -57,7 +58,7 @@ public:
|
||||
*
|
||||
* This method must be implemented by subclasses.
|
||||
*/
|
||||
virtual NetDevice *GetDevice (uint32_t i) const = 0;
|
||||
virtual Ptr<NetDevice> GetDevice (uint32_t i) const = 0;
|
||||
|
||||
protected:
|
||||
virtual ~Channel ();
|
||||
|
||||
@@ -116,7 +116,7 @@ public:
|
||||
* to disable it, you can invoke Ipv4Interface::SetDown which will
|
||||
* make sure that it is never used during packet forwarding.
|
||||
*/
|
||||
virtual uint32_t AddInterface (NetDevice *device) = 0;
|
||||
virtual uint32_t AddInterface (Ptr<NetDevice> device) = 0;
|
||||
/**
|
||||
* \returns the number of interfaces added by the user.
|
||||
*/
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#define I_UDP_H
|
||||
|
||||
#include "ns3/ns-unknown.h"
|
||||
#include "ns3/ptr.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -34,7 +35,7 @@ public:
|
||||
|
||||
IUdp ();
|
||||
|
||||
virtual Socket *CreateSocket (void) = 0;
|
||||
virtual Ptr<Socket> CreateSocket (void) = 0;
|
||||
};
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -183,7 +183,7 @@ NetDevice::CreateTraceResolver (TraceContext const &context)
|
||||
return DoCreateTraceResolver (context);
|
||||
}
|
||||
|
||||
Channel *
|
||||
Ptr<Channel>
|
||||
NetDevice::GetChannel (void) const
|
||||
{
|
||||
return DoGetChannel ();
|
||||
@@ -236,7 +236,7 @@ NetDevice::NeedsArp (void) const
|
||||
}
|
||||
|
||||
void
|
||||
NetDevice::SetReceiveCallback (Callback<bool,NetDevice *,const Packet &,uint16_t> cb)
|
||||
NetDevice::SetReceiveCallback (Callback<bool,Ptr<NetDevice>,const Packet &,uint16_t> cb)
|
||||
{
|
||||
m_receiveCallback = cb;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ public:
|
||||
* returned can be zero if the NetDevice is not yet connected
|
||||
* to any channel.
|
||||
*/
|
||||
Channel *GetChannel (void) const;
|
||||
Ptr<Channel> GetChannel (void) const;
|
||||
|
||||
/**
|
||||
* \return the current MacAddress of this interface.
|
||||
@@ -174,7 +174,7 @@ public:
|
||||
|
||||
bool NeedsArp (void) const;
|
||||
|
||||
void SetReceiveCallback (Callback<bool,NetDevice *,const Packet &,uint16_t> cb);
|
||||
void SetReceiveCallback (Callback<bool,Ptr<NetDevice>,const Packet &,uint16_t> cb);
|
||||
|
||||
protected:
|
||||
/**
|
||||
@@ -241,7 +241,7 @@ public:
|
||||
virtual bool SendTo (Packet& p, const MacAddress& dest) = 0;
|
||||
virtual bool DoNeedsArp (void) const = 0;
|
||||
virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context) = 0;
|
||||
virtual Channel *DoGetChannel (void) const = 0;
|
||||
virtual Ptr<Channel> DoGetChannel (void) const = 0;
|
||||
Ptr<Node> m_node;
|
||||
std::string m_name;
|
||||
uint16_t m_ifIndex;
|
||||
@@ -253,7 +253,7 @@ public:
|
||||
bool m_isMulticast;
|
||||
bool m_isPointToPoint;
|
||||
Callback<void> m_linkChangeCallback;
|
||||
Callback<bool,NetDevice *,const Packet &,uint16_t> m_receiveCallback;
|
||||
Callback<bool,Ptr<NetDevice>,const Packet &,uint16_t> m_receiveCallback;
|
||||
};
|
||||
|
||||
}; // namespace ns3
|
||||
|
||||
@@ -69,16 +69,15 @@ Node::SetSystemId(uint32_t s )
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Node::AddDevice (NetDevice *device)
|
||||
Node::AddDevice (Ptr<NetDevice> device)
|
||||
{
|
||||
device->Ref ();
|
||||
uint32_t index = m_devices.size ();
|
||||
m_devices.push_back (device);
|
||||
DoAddDevice (device);
|
||||
device->SetIfIndex(index);
|
||||
return index;
|
||||
}
|
||||
NetDevice *
|
||||
Ptr<NetDevice>
|
||||
Node::GetDevice (uint32_t index) const
|
||||
{
|
||||
return m_devices[index];
|
||||
@@ -91,12 +90,12 @@ Node::GetNDevices (void) const
|
||||
|
||||
void Node::DoDispose()
|
||||
{
|
||||
for (std::vector<NetDevice *>::iterator i = m_devices.begin ();
|
||||
for (std::vector<Ptr<NetDevice> >::iterator i = m_devices.begin ();
|
||||
i != m_devices.end (); i++)
|
||||
{
|
||||
NetDevice *device = *i;
|
||||
Ptr<NetDevice> device = *i;
|
||||
device->Dispose ();
|
||||
device->Unref ();
|
||||
*i = 0;
|
||||
}
|
||||
m_devices.clear ();
|
||||
NsUnknown::DoDispose ();
|
||||
|
||||
@@ -50,18 +50,18 @@ public:
|
||||
uint32_t GetSystemId (void) const;
|
||||
void SetSystemId(uint32_t s);
|
||||
|
||||
uint32_t AddDevice (NetDevice *device);
|
||||
NetDevice *GetDevice (uint32_t index) const;
|
||||
uint32_t AddDevice (Ptr<NetDevice> device);
|
||||
Ptr<NetDevice> GetDevice (uint32_t index) const;
|
||||
uint32_t GetNDevices (void) const;
|
||||
|
||||
protected:
|
||||
virtual void DoDispose (void);
|
||||
private:
|
||||
virtual void DoAddDevice (NetDevice *device) const = 0;
|
||||
virtual void DoAddDevice (Ptr<NetDevice> device) const = 0;
|
||||
|
||||
uint32_t m_id; // Node id for this node
|
||||
uint32_t m_sid; // System id for this node
|
||||
std::vector<NetDevice *> m_devices;
|
||||
std::vector<Ptr<NetDevice> > m_devices;
|
||||
};
|
||||
|
||||
} //namespace ns3
|
||||
|
||||
@@ -6,7 +6,7 @@ Socket::~Socket ()
|
||||
{}
|
||||
|
||||
void
|
||||
Socket::Close(Callback<void, Socket*> closeCompleted)
|
||||
Socket::Close(Callback<void, Ptr<Socket> > closeCompleted)
|
||||
{
|
||||
DoClose (closeCompleted);
|
||||
}
|
||||
@@ -14,23 +14,23 @@ Socket::Close(Callback<void, Socket*> closeCompleted)
|
||||
void
|
||||
Socket::Connect(const Ipv4Address & address,
|
||||
uint16_t portNumber,
|
||||
Callback<void, Socket*> connectionSucceeded,
|
||||
Callback<void, Socket*> connectionFailed,
|
||||
Callback<void, Socket*> halfClose)
|
||||
Callback<void, Ptr<Socket> > connectionSucceeded,
|
||||
Callback<void, Ptr<Socket> > connectionFailed,
|
||||
Callback<void, Ptr<Socket> > halfClose)
|
||||
{
|
||||
DoConnect (address, portNumber, connectionSucceeded, connectionFailed, halfClose);
|
||||
}
|
||||
int
|
||||
Socket::Accept(Callback<bool, Socket*, const Ipv4Address&, uint16_t> connectionRequest,
|
||||
Callback<void, Socket*, const Ipv4Address&, uint16_t> newConnectionCreated,
|
||||
Callback<void, Socket*> closeRequested)
|
||||
Socket::Accept(Callback<bool, Ptr<Socket>, const Ipv4Address&, uint16_t> connectionRequest,
|
||||
Callback<void, Ptr<Socket>, const Ipv4Address&, uint16_t> newConnectionCreated,
|
||||
Callback<void, Ptr<Socket> > closeRequested)
|
||||
{
|
||||
return DoAccept (connectionRequest, newConnectionCreated, closeRequested);
|
||||
}
|
||||
int
|
||||
Socket::Send (const uint8_t* buffer,
|
||||
uint32_t size,
|
||||
Callback<void, Socket*, uint32_t> dataSent)
|
||||
Callback<void, Ptr<Socket>, uint32_t> dataSent)
|
||||
{
|
||||
return DoSend (buffer, size, dataSent);
|
||||
}
|
||||
@@ -39,42 +39,42 @@ Socket::SendTo(const Ipv4Address &address,
|
||||
uint16_t port,
|
||||
const uint8_t *buffer,
|
||||
uint32_t size,
|
||||
Callback<void, Socket*, uint32_t> dataSent)
|
||||
Callback<void, Ptr<Socket>, uint32_t> dataSent)
|
||||
{
|
||||
return DoSendTo (address, port, buffer, size, dataSent);
|
||||
}
|
||||
void
|
||||
Socket::Recv(Callback<void, Socket*, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t> callback)
|
||||
Socket::Recv(Callback<void, Ptr<Socket>, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t> callback)
|
||||
{
|
||||
DoRecv (callback);
|
||||
}
|
||||
void
|
||||
Socket::RecvDummy(Callback<void, Socket*, uint32_t,const Ipv4Address&, uint16_t> callback)
|
||||
Socket::RecvDummy(Callback<void, Ptr<Socket>, uint32_t,const Ipv4Address&, uint16_t> callback)
|
||||
{
|
||||
DoRecvDummy (callback);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Socket::RefuseAllConnections (Socket* socket, const Ipv4Address& address, uint16_t port)
|
||||
Socket::RefuseAllConnections (Ptr<Socket> socket, const Ipv4Address& address, uint16_t port)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
void
|
||||
Socket::DummyCallbackVoidSocket (Socket *socket)
|
||||
Socket::DummyCallbackVoidSocket (Ptr<Socket> socket)
|
||||
{}
|
||||
void
|
||||
Socket::DummyCallbackVoidSocketUi32 (Socket *socket, uint32_t)
|
||||
Socket::DummyCallbackVoidSocketUi32 (Ptr<Socket> socket, uint32_t)
|
||||
{}
|
||||
void
|
||||
Socket::DummyCallbackVoidSocketUi32Ipv4AddressUi16 (Socket *socket, uint32_t, const Ipv4Address &, uint16_t)
|
||||
Socket::DummyCallbackVoidSocketUi32Ipv4AddressUi16 (Ptr<Socket> socket, uint32_t, const Ipv4Address &, uint16_t)
|
||||
{}
|
||||
void
|
||||
Socket::DummyCallbackVoidSocketBufferUi32Ipv4AddressUi16 (Socket *socket, const uint8_t *, uint32_t,
|
||||
Socket::DummyCallbackVoidSocketBufferUi32Ipv4AddressUi16 (Ptr<Socket> socket, const uint8_t *, uint32_t,
|
||||
const Ipv4Address &, uint16_t)
|
||||
{}
|
||||
void
|
||||
Socket::DummyCallbackVoidSocketIpv4AddressUi16 (Socket *socket, const Ipv4Address &, uint16_t)
|
||||
Socket::DummyCallbackVoidSocketIpv4AddressUi16 (Ptr<Socket> socket, const Ipv4Address &, uint16_t)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ public:
|
||||
* After the Close call, the socket is no longer valid, and cannot
|
||||
* safely be used for subsequent operations.
|
||||
*/
|
||||
void Close(Callback<void, Socket*> closeCompleted = MakeCallback (&Socket::DummyCallbackVoidSocket));
|
||||
void Close(Callback<void, Ptr<Socket> > closeCompleted = MakeCallback (&Socket::DummyCallbackVoidSocket));
|
||||
|
||||
/**
|
||||
* \returns zero on success, -1 on failure.
|
||||
@@ -147,9 +147,9 @@ public:
|
||||
*/
|
||||
void Connect(const Ipv4Address & address,
|
||||
uint16_t portNumber,
|
||||
Callback<void, Socket*> connectionSucceeded = MakeCallback(&Socket::DummyCallbackVoidSocket),
|
||||
Callback<void, Socket*> connectionFailed = MakeCallback(&Socket::DummyCallbackVoidSocket),
|
||||
Callback<void, Socket*> halfClose = MakeCallback(&Socket::DummyCallbackVoidSocket));
|
||||
Callback<void, Ptr<Socket> > connectionSucceeded = MakeCallback(&Socket::DummyCallbackVoidSocket),
|
||||
Callback<void, Ptr<Socket> > connectionFailed = MakeCallback(&Socket::DummyCallbackVoidSocket),
|
||||
Callback<void, Ptr<Socket> > halfClose = MakeCallback(&Socket::DummyCallbackVoidSocket));
|
||||
|
||||
/**
|
||||
* \brief Accept connection requests from remote hosts
|
||||
@@ -170,11 +170,11 @@ public:
|
||||
* \param closeRequested Callback for connection close request from peer.
|
||||
* XXX: when is this callback invoked ?
|
||||
*/
|
||||
int Accept(Callback<bool, Socket*, const Ipv4Address&, uint16_t> connectionRequest =
|
||||
int Accept(Callback<bool, Ptr<Socket>, const Ipv4Address&, uint16_t> connectionRequest =
|
||||
MakeCallback(&Socket::RefuseAllConnections),
|
||||
Callback<void, Socket*, const Ipv4Address&, uint16_t> newConnectionCreated =
|
||||
Callback<void, Ptr<Socket>, const Ipv4Address&, uint16_t> newConnectionCreated =
|
||||
MakeCallback (&Socket::DummyCallbackVoidSocketIpv4AddressUi16),
|
||||
Callback<void, Socket*> closeRequested = MakeCallback (&Socket::DummyCallbackVoidSocket));
|
||||
Callback<void, Ptr<Socket> > closeRequested = MakeCallback (&Socket::DummyCallbackVoidSocket));
|
||||
|
||||
/**
|
||||
* \brief Send data (or dummy data) to the remote host
|
||||
@@ -186,7 +186,7 @@ public:
|
||||
*/
|
||||
int Send (const uint8_t* buffer,
|
||||
uint32_t size,
|
||||
Callback<void, Socket*, uint32_t> dataSent = MakeCallback (&Socket::DummyCallbackVoidSocketUi32));
|
||||
Callback<void, Ptr<Socket>, uint32_t> dataSent = MakeCallback (&Socket::DummyCallbackVoidSocketUi32));
|
||||
|
||||
/**
|
||||
* \brief Send data to a specified peer.
|
||||
@@ -202,7 +202,7 @@ public:
|
||||
uint16_t port,
|
||||
const uint8_t *buffer,
|
||||
uint32_t size,
|
||||
Callback<void, Socket*, uint32_t> dataSent = MakeCallback (&Socket::DummyCallbackVoidSocketUi32));
|
||||
Callback<void, Ptr<Socket>, uint32_t> dataSent = MakeCallback (&Socket::DummyCallbackVoidSocketUi32));
|
||||
|
||||
/**
|
||||
* \brief Receive data
|
||||
@@ -213,7 +213,7 @@ public:
|
||||
* allocation to hold the dummy memory into a buffer which can be passed
|
||||
* to the user. Instead, consider using the RecvDummy method.
|
||||
*/
|
||||
void Recv(Callback<void, Socket*, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t> =
|
||||
void Recv(Callback<void, Ptr<Socket>, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t> =
|
||||
MakeCallback (&Socket::DummyCallbackVoidSocketBufferUi32Ipv4AddressUi16));
|
||||
|
||||
/**
|
||||
@@ -223,38 +223,38 @@ public:
|
||||
* This method is included because it is vastly more efficient than the
|
||||
* Recv method when you use dummy payload.
|
||||
*/
|
||||
void RecvDummy(Callback<void, Socket*, uint32_t,const Ipv4Address&, uint16_t> =
|
||||
void RecvDummy(Callback<void, Ptr<Socket>, uint32_t,const Ipv4Address&, uint16_t> =
|
||||
MakeCallback (&Socket::DummyCallbackVoidSocketUi32Ipv4AddressUi16));
|
||||
|
||||
private:
|
||||
virtual void DoClose(Callback<void, Socket*> closeCompleted) = 0;
|
||||
virtual void DoClose(Callback<void, Ptr<Socket> > closeCompleted) = 0;
|
||||
virtual void DoConnect(const Ipv4Address & address,
|
||||
uint16_t portNumber,
|
||||
Callback<void, Socket*> connectionSucceeded,
|
||||
Callback<void, Socket*> connectionFailed,
|
||||
Callback<void, Socket*> halfClose) = 0;
|
||||
virtual int DoAccept(Callback<bool, Socket*, const Ipv4Address&, uint16_t> connectionRequest,
|
||||
Callback<void, Socket*, const Ipv4Address&, uint16_t> newConnectionCreated,
|
||||
Callback<void, Socket*> closeRequested) = 0;
|
||||
Callback<void, Ptr<Socket> > connectionSucceeded,
|
||||
Callback<void, Ptr<Socket> > connectionFailed,
|
||||
Callback<void, Ptr<Socket> > halfClose) = 0;
|
||||
virtual int DoAccept(Callback<bool, Ptr<Socket>, const Ipv4Address&, uint16_t> connectionRequest,
|
||||
Callback<void, Ptr<Socket>, const Ipv4Address&, uint16_t> newConnectionCreated,
|
||||
Callback<void, Ptr<Socket> > closeRequested) = 0;
|
||||
virtual int DoSend (const uint8_t* buffer,
|
||||
uint32_t size,
|
||||
Callback<void, Socket*, uint32_t> dataSent) = 0;
|
||||
Callback<void, Ptr<Socket>, uint32_t> dataSent) = 0;
|
||||
virtual int DoSendTo(const Ipv4Address &address,
|
||||
uint16_t port,
|
||||
const uint8_t *buffer,
|
||||
uint32_t size,
|
||||
Callback<void, Socket*, uint32_t> dataSent) = 0;
|
||||
virtual void DoRecv(Callback<void, Socket*, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t> receive) = 0;
|
||||
virtual void DoRecvDummy(Callback<void, Socket*, uint32_t,const Ipv4Address&, uint16_t>) = 0;
|
||||
Callback<void, Ptr<Socket>, uint32_t> dataSent) = 0;
|
||||
virtual void DoRecv(Callback<void, Ptr<Socket>, const uint8_t*, uint32_t,const Ipv4Address&, uint16_t> receive) = 0;
|
||||
virtual void DoRecvDummy(Callback<void, Ptr<Socket>, uint32_t,const Ipv4Address&, uint16_t>) = 0;
|
||||
|
||||
|
||||
static bool RefuseAllConnections (Socket* socket, const Ipv4Address& address, uint16_t port);
|
||||
static void DummyCallbackVoidSocket (Socket *socket);
|
||||
static void DummyCallbackVoidSocketUi32 (Socket *socket, uint32_t);
|
||||
static void DummyCallbackVoidSocketUi32Ipv4AddressUi16 (Socket *socket, uint32_t, const Ipv4Address &, uint16_t);
|
||||
static void DummyCallbackVoidSocketBufferUi32Ipv4AddressUi16 (Socket *socket, const uint8_t *, uint32_t,
|
||||
static bool RefuseAllConnections (Ptr<Socket> socket, const Ipv4Address& address, uint16_t port);
|
||||
static void DummyCallbackVoidSocket (Ptr<Socket> socket);
|
||||
static void DummyCallbackVoidSocketUi32 (Ptr<Socket> socket, uint32_t);
|
||||
static void DummyCallbackVoidSocketUi32Ipv4AddressUi16 (Ptr<Socket> socket, uint32_t, const Ipv4Address &, uint16_t);
|
||||
static void DummyCallbackVoidSocketBufferUi32Ipv4AddressUi16 (Ptr<Socket> socket, const uint8_t *, uint32_t,
|
||||
const Ipv4Address &, uint16_t);
|
||||
static void DummyCallbackVoidSocketIpv4AddressUi16 (Socket *socket, const Ipv4Address &, uint16_t);
|
||||
static void DummyCallbackVoidSocketIpv4AddressUi16 (Ptr<Socket> socket, const Ipv4Address &, uint16_t);
|
||||
};
|
||||
|
||||
} //namespace ns3
|
||||
|
||||
Reference in New Issue
Block a user