rename i-node to node
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 04 Jun 2007 16:21:05 +0200
changeset 729 b5e744285e92
parent 728 95c426b1cb60
child 730 e57a53ae858e
rename i-node to node
SConstruct
src/applications/onoff-application.cc
src/devices/p2p/p2p-net-device.h
src/internet-node/arp-ipv4-interface.cc
src/internet-node/arp.cc
src/internet-node/ascii-trace.cc
src/internet-node/i-node-impl.h
src/internet-node/internet-node.h
src/internet-node/ipv4-l4-demux.cc
src/internet-node/ipv4-loopback-interface.cc
src/internet-node/ipv4.cc
src/internet-node/l3-demux.cc
src/internet-node/pcap-trace.cc
src/internet-node/udp-socket.cc
src/internet-node/udp.cc
src/internet-node/wscript
src/node/application.cc
src/node/application.h
src/node/i-node.cc
src/node/i-node.h
src/node/net-device.cc
src/node/node-list.cc
src/node/node.cc
src/node/node.h
src/node/wscript
--- 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',