--- a/SConstruct Mon Jun 04 16:17:01 2007 +0200
+++ b/SConstruct Mon Jun 04 16:21:05 2007 +0200
@@ -206,7 +206,7 @@
ns3.add (node)
node.add_deps (['core', 'common', 'simulator'])
node.add_sources ([
- 'i-node.cc',
+ 'node.cc',
'ipv4-address.cc',
'net-device.cc',
'mac-address.cc',
@@ -223,7 +223,7 @@
'application.cc',
])
node.add_inst_headers ([
- 'i-node.h',
+ 'node.h',
'ipv4-address.h',
'net-device.h',
'mac-address.h',
--- a/src/applications/onoff-application.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/applications/onoff-application.cc Mon Jun 04 16:21:05 2007 +0200
@@ -23,7 +23,7 @@
// Adapted from ApplicationOnOff in GTNetS.
#include "ns3/ipv4-address.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ns3/nstime.h"
#include "ns3/data-rate.h"
#include "ns3/random-variable.h"
--- a/src/devices/p2p/p2p-net-device.h Mon Jun 04 16:17:01 2007 +0200
+++ b/src/devices/p2p/p2p-net-device.h Mon Jun 04 16:21:05 2007 +0200
@@ -23,7 +23,7 @@
#include <string.h>
#include "ns3/mac-address.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ns3/net-device.h"
#include "ns3/callback.h"
#include "ns3/packet.h"
--- a/src/internet-node/arp-ipv4-interface.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/arp-ipv4-interface.cc Mon Jun 04 16:21:05 2007 +0200
@@ -22,7 +22,7 @@
#include "ns3/packet.h"
#include "ns3/composite-trace-resolver.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ns3/net-device.h"
#include "arp-ipv4-interface.h"
--- a/src/internet-node/arp.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/arp.cc Mon Jun 04 16:21:05 2007 +0200
@@ -21,7 +21,7 @@
#include "ns3/packet.h"
#include "ns3/debug.h"
#include "ns3/empty-trace-resolver.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ns3/net-device.h"
#include "arp.h"
--- a/src/internet-node/ascii-trace.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/ascii-trace.cc Mon Jun 04 16:21:05 2007 +0200
@@ -23,7 +23,7 @@
#include "ns3/trace-context.h"
#include "ns3/trace-root.h"
#include "ns3/simulator.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ns3/queue.h"
#include "ns3/node-list.h"
#include "ns3/llc-snap-header.h"
--- a/src/internet-node/i-node-impl.h Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/i-node-impl.h Mon Jun 04 16:21:05 2007 +0200
@@ -27,7 +27,7 @@
#include <list>
#include <string>
-#include "ns3/i-node.h"
+#include "ns3/node.h"
namespace ns3 {
--- a/src/internet-node/internet-node.h Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/internet-node.h Mon Jun 04 16:21:05 2007 +0200
@@ -21,7 +21,7 @@
#ifndef INTERNET_NODE_H
#define INTERNET_NODE_H
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ns3/ptr.h"
namespace ns3 {
--- a/src/internet-node/ipv4-l4-demux.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/ipv4-l4-demux.cc Mon Jun 04 16:21:05 2007 +0200
@@ -24,7 +24,7 @@
#include <sstream>
#include "ns3/composite-trace-resolver.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ipv4-l4-demux.h"
#include "ipv4-l4-protocol.h"
--- a/src/internet-node/ipv4-loopback-interface.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/ipv4-loopback-interface.cc Mon Jun 04 16:21:05 2007 +0200
@@ -21,7 +21,7 @@
*/
#include "ns3/empty-trace-resolver.h"
#include "ns3/net-device.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ipv4-loopback-interface.h"
#include "i-ipv4-private.h"
--- a/src/internet-node/ipv4.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/ipv4.cc Mon Jun 04 16:21:05 2007 +0200
@@ -26,7 +26,7 @@
#include "ns3/callback.h"
#include "ns3/ipv4-address.h"
#include "ns3/ipv4-route.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ns3/net-device.h"
#include "ipv4.h"
--- a/src/internet-node/l3-demux.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/l3-demux.cc Mon Jun 04 16:21:05 2007 +0200
@@ -23,7 +23,7 @@
#include <sstream>
#include <string>
#include "ns3/composite-trace-resolver.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "l3-demux.h"
#include "l3-protocol.h"
--- a/src/internet-node/pcap-trace.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/pcap-trace.cc Mon Jun 04 16:21:05 2007 +0200
@@ -27,7 +27,7 @@
#include "ns3/callback.h"
#include "ns3/pcap-writer.h"
#include "ns3/node-list.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ipv4.h"
--- a/src/internet-node/udp-socket.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/udp-socket.cc Mon Jun 04 16:21:05 2007 +0200
@@ -18,7 +18,7 @@
*
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "udp-socket.h"
#include "udp.h"
#include "ipv4-end-point.h"
--- a/src/internet-node/udp.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/udp.cc Mon Jun 04 16:21:05 2007 +0200
@@ -22,7 +22,7 @@
#include "ns3/assert.h"
#include "ns3/packet.h"
#include "ns3/empty-trace-resolver.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "udp.h"
#include "udp-header.h"
--- a/src/internet-node/wscript Mon Jun 04 16:17:01 2007 +0200
+++ b/src/internet-node/wscript Mon Jun 04 16:21:05 2007 +0200
@@ -8,7 +8,7 @@
obj.uselib_local = ['ns3-node', 'ns3-applications']
obj.source = [
'internet-node.cc',
- 'i-node-impl.cc',
+ 'node-impl.cc',
'l3-demux.cc',
'l3-protocol.cc',
'ipv4-l4-demux.cc',
--- a/src/node/application.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/node/application.cc Mon Jun 04 16:21:05 2007 +0200
@@ -22,7 +22,7 @@
// George F. Riley, Georgia Tech, Fall 2006
#include "application.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
#include "ns3/nstime.h"
#include "ns3/random-variable.h"
#include "ns3/simulator.h"
--- a/src/node/application.h Mon Jun 04 16:17:01 2007 +0200
+++ b/src/node/application.h Mon Jun 04 16:21:05 2007 +0200
@@ -25,7 +25,7 @@
#include "ns3/nstime.h"
#include "ns3/object.h"
#include "ns3/ptr.h"
-#include "ns3/i-node.h"
+#include "ns3/node.h"
namespace ns3 {
--- a/src/node/i-node.cc Mon Jun 04 16:17:01 2007 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
-//
-// Copyright (c) 2006 Georgia Tech Research Corporation
-// All rights reserved.
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// Author: George F. Riley<riley@ece.gatech.edu>
-//
-
-// Implement the basic Node object for ns3.
-// George F. Riley, Georgia Tech, Fall 2006
-
-#include "i-node.h"
-#include "node-list.h"
-#include "net-device.h"
-#include "application.h"
-#include "ns3/simulator.h"
-
-namespace ns3{
-
-const InterfaceId Node::iid = MakeInterfaceId ("Node", Object::iid);
-
-Node::Node()
- : m_id(0),
- m_sid(0)
-{
- SetInterfaceId (Node::iid);
- m_id = NodeList::Add (this);
-}
-
-Node::Node(uint32_t sid)
- : m_id(0),
- m_sid(sid)
-{
- SetInterfaceId (Node::iid);
- m_id = NodeList::Add (this);
-}
-
-Node::~Node ()
-{}
-
-TraceResolver *
-Node::CreateTraceResolver (TraceContext const &context)
-{
- return DoCreateTraceResolver (context);
-}
-
-uint32_t
-Node::GetId (void) const
-{
- return m_id;
-}
-
-uint32_t
-Node::GetSystemId (void) const
-{
- return m_sid;
-}
-
-uint32_t
-Node::AddDevice (Ptr<NetDevice> device)
-{
- uint32_t index = m_devices.size ();
- m_devices.push_back (device);
- DoAddDevice (device);
- device->SetIfIndex(index);
- return index;
-}
-Ptr<NetDevice>
-Node::GetDevice (uint32_t index) const
-{
- return m_devices[index];
-}
-uint32_t
-Node::GetNDevices (void) const
-{
- return m_devices.size ();
-}
-
-uint32_t
-Node::AddApplication (Ptr<Application> application)
-{
- uint32_t index = m_applications.size ();
- m_applications.push_back (application);
- return index;
-}
-Ptr<Application>
-Node::GetApplication (uint32_t index) const
-{
- return m_applications[index];
-}
-uint32_t
-Node::GetNApplications (void) const
-{
- return m_applications.size ();
-}
-
-
-void Node::DoDispose()
-{
- for (std::vector<Ptr<NetDevice> >::iterator i = m_devices.begin ();
- i != m_devices.end (); i++)
- {
- Ptr<NetDevice> device = *i;
- device->Dispose ();
- *i = 0;
- }
- m_devices.clear ();
- for (std::vector<Ptr<Application> >::iterator i = m_applications.begin ();
- i != m_applications.end (); i++)
- {
- Ptr<Application> application = *i;
- application->Dispose ();
- *i = 0;
- }
- m_applications.clear ();
- Object::DoDispose ();
-}
-
-}//namespace ns3
--- a/src/node/i-node.h Mon Jun 04 16:17:01 2007 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
-//
-// Copyright (c) 2006 Georgia Tech Research Corporation
-// All rights reserved.
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// Author: George F. Riley<riley@ece.gatech.edu>
-//
-
-// Define the basic Node object for ns3.
-// George F. Riley, Georgia Tech, Fall 2006
-
-#ifndef I_NODE_H
-#define I_NODE_H
-
-#include <vector>
-
-#include "ns3/object.h"
-
-namespace ns3 {
-
-class TraceContext;
-class TraceResolver;
-class NetDevice;
-class Application;
-
-/**
- * \brief A network Node.
- *
- * This class holds together:
- * - a list of NetDevice objects which represent the network interfaces
- * of this node which are connected to other Node instances through
- * Channel instances.
- * - a list of Application objects which represent the userspace
- * traffic generation applications which interact with the Node
- * through the Socket API.
- * - a node Id: a unique per-node identifier.
- * - a system Id: a unique Id used for parallel simulations.
- * - a trace resolver which can be used to connect user trace sinks
- * to the node's trace sources.
- *
- * Every Node created is added to the NodeList automatically.
- */
-class Node : public Object
-{
-public:
- static const InterfaceId iid;
-
- virtual ~Node();
-
- /**
- * \param context the trace context for the TraceResolver to create
- * \returns a newly-created TraceResolver. The caller takes
- * ownership of the returned pointer.
- *
- * Request the Node to create a trace resolver. This method
- * could be used directly by a user who needs access to very low-level
- * trace configuration.
- */
- TraceResolver *CreateTraceResolver (TraceContext const &context);
-
- /**
- * \returns the unique id of this node.
- *
- * This unique id happens to be also the index of the Node into
- * the NodeList.
- */
- uint32_t GetId (void) const;
-
- /**
- * \returns the system id for parallel simulations associated
- * to this node.
- */
- uint32_t GetSystemId (void) const;
-
- /**
- * \param device NetDevice to associate to this node.
- * \returns the index of the NetDevice into the Node's list of
- * NetDevice.
- *
- * Associate this device to this node.
- * This method is called automatically from NetDevice::NetDevice
- * so the user has little reason to call this method himself.
- */
- uint32_t AddDevice (Ptr<NetDevice> device);
- /**
- * \param index the index of the requested NetDevice
- * \returns the requested NetDevice associated to this Node.
- */
- Ptr<NetDevice> GetDevice (uint32_t index) const;
- /**
- * \returns the number of NetDevice instances associated
- * to this Node.
- */
- uint32_t GetNDevices (void) const;
-
- /**
- * \param application Application to associate to this node.
- * \returns the index of the Application within the Node's list
- * of Application.
- *
- * Associated this Application to this Node. This method is called
- * automatically from Application::Application so the user
- * has little reasons to call this method directly.
- */
- uint32_t AddApplication (Ptr<Application> application);
- /**
- * \param index
- * \returns the application associated to this requested index
- * within this Node.
- */
- Ptr<Application> GetApplication (uint32_t index) const;
- /**
- * \returns the number of applications associated to this Node.
- */
- uint32_t GetNApplications (void) const;
-
-protected:
- /**
- * Must be invoked by subclasses only.
- */
- Node();
- /**
- * \param systemId a unique integer used for parallel simulations.
- *
- * Must be invoked by subclasses only.
- */
- Node(uint32_t systemId);
- /**
- * The dispose method. Subclasses must override this method
- * and must chain up to it by calling Node::DoDispose at the
- * end of their own DoDispose method.
- */
- virtual void DoDispose (void);
-private:
- /**
- * \param context the trace context
- * \returns a trace resolver to the user. The user must delete it.
- *
- * Subclasses must implement this method.
- */
- virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context) = 0;
- /**
- * \param device the device added to this Node.
- *
- * This method is invoked whenever a user calls Node::AddDevice.
- * Subclasses are expected to call NetDevice::SetReceiveCallback
- * at this point to setup the node's receive function for
- * the NetDevice packets.
- */
- 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<Ptr<NetDevice> > m_devices;
- std::vector<Ptr<Application> > m_applications;
-};
-
-} //namespace ns3
-
-#endif /* I_NODE_H */
--- a/src/node/net-device.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/node/net-device.cc Mon Jun 04 16:21:05 2007 +0200
@@ -26,7 +26,7 @@
#include "channel.h"
#include "net-device.h"
#include "llc-snap-header.h"
-#include "i-node.h"
+#include "node.h"
namespace ns3 {
--- a/src/node/node-list.cc Mon Jun 04 16:17:01 2007 +0200
+++ b/src/node/node-list.cc Mon Jun 04 16:21:05 2007 +0200
@@ -25,7 +25,7 @@
#include "ns3/simulator.h"
#include "ns3/simulation-singleton.h"
#include "node-list.h"
-#include "i-node.h"
+#include "node.h"
namespace {
static class Initialization
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/node/node.cc Mon Jun 04 16:21:05 2007 +0200
@@ -0,0 +1,132 @@
+// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
+//
+// Copyright (c) 2006 Georgia Tech Research Corporation
+// All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as
+// published by the Free Software Foundation;
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// Author: George F. Riley<riley@ece.gatech.edu>
+//
+
+// Implement the basic Node object for ns3.
+// George F. Riley, Georgia Tech, Fall 2006
+
+#include "node.h"
+#include "node-list.h"
+#include "net-device.h"
+#include "application.h"
+#include "ns3/simulator.h"
+
+namespace ns3{
+
+const InterfaceId Node::iid = MakeInterfaceId ("Node", Object::iid);
+
+Node::Node()
+ : m_id(0),
+ m_sid(0)
+{
+ SetInterfaceId (Node::iid);
+ m_id = NodeList::Add (this);
+}
+
+Node::Node(uint32_t sid)
+ : m_id(0),
+ m_sid(sid)
+{
+ SetInterfaceId (Node::iid);
+ m_id = NodeList::Add (this);
+}
+
+Node::~Node ()
+{}
+
+TraceResolver *
+Node::CreateTraceResolver (TraceContext const &context)
+{
+ return DoCreateTraceResolver (context);
+}
+
+uint32_t
+Node::GetId (void) const
+{
+ return m_id;
+}
+
+uint32_t
+Node::GetSystemId (void) const
+{
+ return m_sid;
+}
+
+uint32_t
+Node::AddDevice (Ptr<NetDevice> device)
+{
+ uint32_t index = m_devices.size ();
+ m_devices.push_back (device);
+ DoAddDevice (device);
+ device->SetIfIndex(index);
+ return index;
+}
+Ptr<NetDevice>
+Node::GetDevice (uint32_t index) const
+{
+ return m_devices[index];
+}
+uint32_t
+Node::GetNDevices (void) const
+{
+ return m_devices.size ();
+}
+
+uint32_t
+Node::AddApplication (Ptr<Application> application)
+{
+ uint32_t index = m_applications.size ();
+ m_applications.push_back (application);
+ return index;
+}
+Ptr<Application>
+Node::GetApplication (uint32_t index) const
+{
+ return m_applications[index];
+}
+uint32_t
+Node::GetNApplications (void) const
+{
+ return m_applications.size ();
+}
+
+
+void Node::DoDispose()
+{
+ for (std::vector<Ptr<NetDevice> >::iterator i = m_devices.begin ();
+ i != m_devices.end (); i++)
+ {
+ Ptr<NetDevice> device = *i;
+ device->Dispose ();
+ *i = 0;
+ }
+ m_devices.clear ();
+ for (std::vector<Ptr<Application> >::iterator i = m_applications.begin ();
+ i != m_applications.end (); i++)
+ {
+ Ptr<Application> application = *i;
+ application->Dispose ();
+ *i = 0;
+ }
+ m_applications.clear ();
+ Object::DoDispose ();
+}
+
+}//namespace ns3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/node/node.h Mon Jun 04 16:21:05 2007 +0200
@@ -0,0 +1,173 @@
+// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
+//
+// Copyright (c) 2006 Georgia Tech Research Corporation
+// All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as
+// published by the Free Software Foundation;
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// Author: George F. Riley<riley@ece.gatech.edu>
+//
+
+// Define the basic Node object for ns3.
+// George F. Riley, Georgia Tech, Fall 2006
+
+#ifndef I_NODE_H
+#define I_NODE_H
+
+#include <vector>
+
+#include "ns3/object.h"
+
+namespace ns3 {
+
+class TraceContext;
+class TraceResolver;
+class NetDevice;
+class Application;
+
+/**
+ * \brief A network Node.
+ *
+ * This class holds together:
+ * - a list of NetDevice objects which represent the network interfaces
+ * of this node which are connected to other Node instances through
+ * Channel instances.
+ * - a list of Application objects which represent the userspace
+ * traffic generation applications which interact with the Node
+ * through the Socket API.
+ * - a node Id: a unique per-node identifier.
+ * - a system Id: a unique Id used for parallel simulations.
+ * - a trace resolver which can be used to connect user trace sinks
+ * to the node's trace sources.
+ *
+ * Every Node created is added to the NodeList automatically.
+ */
+class Node : public Object
+{
+public:
+ static const InterfaceId iid;
+
+ virtual ~Node();
+
+ /**
+ * \param context the trace context for the TraceResolver to create
+ * \returns a newly-created TraceResolver. The caller takes
+ * ownership of the returned pointer.
+ *
+ * Request the Node to create a trace resolver. This method
+ * could be used directly by a user who needs access to very low-level
+ * trace configuration.
+ */
+ TraceResolver *CreateTraceResolver (TraceContext const &context);
+
+ /**
+ * \returns the unique id of this node.
+ *
+ * This unique id happens to be also the index of the Node into
+ * the NodeList.
+ */
+ uint32_t GetId (void) const;
+
+ /**
+ * \returns the system id for parallel simulations associated
+ * to this node.
+ */
+ uint32_t GetSystemId (void) const;
+
+ /**
+ * \param device NetDevice to associate to this node.
+ * \returns the index of the NetDevice into the Node's list of
+ * NetDevice.
+ *
+ * Associate this device to this node.
+ * This method is called automatically from NetDevice::NetDevice
+ * so the user has little reason to call this method himself.
+ */
+ uint32_t AddDevice (Ptr<NetDevice> device);
+ /**
+ * \param index the index of the requested NetDevice
+ * \returns the requested NetDevice associated to this Node.
+ */
+ Ptr<NetDevice> GetDevice (uint32_t index) const;
+ /**
+ * \returns the number of NetDevice instances associated
+ * to this Node.
+ */
+ uint32_t GetNDevices (void) const;
+
+ /**
+ * \param application Application to associate to this node.
+ * \returns the index of the Application within the Node's list
+ * of Application.
+ *
+ * Associated this Application to this Node. This method is called
+ * automatically from Application::Application so the user
+ * has little reasons to call this method directly.
+ */
+ uint32_t AddApplication (Ptr<Application> application);
+ /**
+ * \param index
+ * \returns the application associated to this requested index
+ * within this Node.
+ */
+ Ptr<Application> GetApplication (uint32_t index) const;
+ /**
+ * \returns the number of applications associated to this Node.
+ */
+ uint32_t GetNApplications (void) const;
+
+protected:
+ /**
+ * Must be invoked by subclasses only.
+ */
+ Node();
+ /**
+ * \param systemId a unique integer used for parallel simulations.
+ *
+ * Must be invoked by subclasses only.
+ */
+ Node(uint32_t systemId);
+ /**
+ * The dispose method. Subclasses must override this method
+ * and must chain up to it by calling Node::DoDispose at the
+ * end of their own DoDispose method.
+ */
+ virtual void DoDispose (void);
+private:
+ /**
+ * \param context the trace context
+ * \returns a trace resolver to the user. The user must delete it.
+ *
+ * Subclasses must implement this method.
+ */
+ virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context) = 0;
+ /**
+ * \param device the device added to this Node.
+ *
+ * This method is invoked whenever a user calls Node::AddDevice.
+ * Subclasses are expected to call NetDevice::SetReceiveCallback
+ * at this point to setup the node's receive function for
+ * the NetDevice packets.
+ */
+ 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<Ptr<NetDevice> > m_devices;
+ std::vector<Ptr<Application> > m_applications;
+};
+
+} //namespace ns3
+
+#endif /* I_NODE_H */
--- a/src/node/wscript Mon Jun 04 16:17:01 2007 +0200
+++ b/src/node/wscript Mon Jun 04 16:21:05 2007 +0200
@@ -7,7 +7,7 @@
node.target = node.name
node.uselib_local = ['ns3-core', 'ns3-common', 'ns3-simulator']
node.source = [
- 'i-node.cc',
+ 'node.cc',
'ipv4-address.cc',
'net-device.cc',
'mac-address.cc',
@@ -26,7 +26,7 @@
headers = bld.create_obj('ns3header')
headers.source = [
- 'i-node.h',
+ 'node.h',
'ipv4-address.h',
'net-device.h',
'mac-address.h',