src/node/i-node.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 14 May 2007 10:06:12 +0200
changeset 607 1b7abeccfcda
parent 605 3a62e5c4de75
child 710 2a9c061219a7
permissions -rw-r--r--
rename Node to INode
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
233
6b60d7b27ae4 change emacs style commands
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 232
diff changeset
     1
// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
232
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
//
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
// Copyright (c) 2006 Georgia Tech Research Corporation
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
// All rights reserved.
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
//
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
// This program is free software; you can redistribute it and/or modify
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
// it under the terms of the GNU General Public License version 2 as
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
// published by the Free Software Foundation;
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
//
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
// This program is distributed in the hope that it will be useful,
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
// GNU General Public License for more details.
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
//
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
// You should have received a copy of the GNU General Public License
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
// along with this program; if not, write to the Free Software
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
//
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
// Author: George F. Riley<riley@ece.gatech.edu>
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
//
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    22
// Define the basic INode object for ns3.
232
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
// George F. Riley, Georgia Tech, Fall 2006
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
605
3a62e5c4de75 rename internet-node.h to i-node-impl.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 604
diff changeset
    25
#ifndef I_NODE_H
3a62e5c4de75 rename internet-node.h to i-node-impl.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 604
diff changeset
    26
#define I_NODE_H
232
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
#include <vector>
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
578
e305018537c9 rename ns-unknown.h/cc ns-unknown-manager.h/cc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 568
diff changeset
    30
#include "ns3/interface.h"
355
d18da75542c7 Add static node factory methods to class Node
Tom Henderson <tomh@tomh.org>
parents: 345
diff changeset
    31
232
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
namespace ns3 {
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
345
47b41507a45a move channel.cc channel.h to node directory; merge ns-3-tracing from mathieu
Tom Henderson <tomh@tomh.org>
parents: 244
diff changeset
    34
class TraceContext;
47b41507a45a move channel.cc channel.h to node directory; merge ns-3-tracing from mathieu
Tom Henderson <tomh@tomh.org>
parents: 244
diff changeset
    35
class TraceResolver;
447
180117abfb04 add NetDevice list into Node base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 381
diff changeset
    36
class NetDevice;
585
a009b03b720a remove ApplicationList. Move functionality to Node class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 580
diff changeset
    37
class Application;
232
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    39
/**
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    40
 * \brief A network INode.
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    41
 *
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    42
 * This class holds together:
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    43
 *   - a list of NetDevice objects which represent the network interfaces
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    44
 *     of this node which are connected to other INode instances through
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    45
 *     Channel instances.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    46
 *   - a list of Application objects which represent the userspace
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    47
 *     traffic generation applications which interact with the INode
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    48
 *     through the Socket API.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    49
 *   - a node Id: a unique per-node identifier.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    50
 *   - a system Id: a unique Id used for parallel simulations.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    51
 *   - a trace resolver which can be used to connect user trace sinks
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    52
 *     to the node's trace sources.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    53
 *
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    54
 * Every INode created is added to the NodeList automatically.
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    55
 */
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    56
class INode : public Interface
484
cf7fbb84d74b rework the Node and NodeList classes to manage reference counts correctly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    57
{
512
5404e1e41f82 make Node derive from NsUnknown rather than Object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 484
diff changeset
    58
public:
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
    59
  static const InterfaceId iid;
361
9b159ff6dbcb Clean up parameter passing per TOm's request
George F. Riley<riley@ece.gatech.edu>
parents: 359
diff changeset
    60
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    61
  virtual ~INode();
244
caff04d90a66 remove SetNodeId and implement GetId and GetSystemId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 242
diff changeset
    62
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    63
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    64
   * \param context the trace context for the TraceResolver to create
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    65
   * \returns a newly-created TraceResolver. The caller takes
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    66
   *          ownership of the returned pointer.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    67
   *
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    68
   * Request the INode to create a trace resolver. This method
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    69
   * could be used directly by a user who needs access to very low-level
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    70
   * trace configuration.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    71
   */
594
bf1c6a6ab58d make the Node API more consistent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 585
diff changeset
    72
  TraceResolver *CreateTraceResolver (TraceContext const &context);
345
47b41507a45a move channel.cc channel.h to node directory; merge ns-3-tracing from mathieu
Tom Henderson <tomh@tomh.org>
parents: 244
diff changeset
    73
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    74
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    75
   * \returns the unique id of this node.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    76
   * 
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    77
   * This unique id happens to be also the index of the INode into
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    78
   * the NodeList. 
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    79
   */
244
caff04d90a66 remove SetNodeId and implement GetId and GetSystemId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 242
diff changeset
    80
  uint32_t GetId (void) const;
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    81
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    82
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    83
   * \returns the system id for parallel simulations associated
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    84
   *          to this node.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    85
   */
244
caff04d90a66 remove SetNodeId and implement GetId and GetSystemId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 242
diff changeset
    86
  uint32_t GetSystemId (void) const;
232
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    88
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    89
   * \param device NetDevice to associate to this node.
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
    90
   * \returns the index of the NetDevice into the INode's list of
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    91
   *          NetDevice.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    92
   *
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    93
   * Associate this device to this node.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    94
   * This method is called automatically from NetDevice::NetDevice
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    95
   * so the user has little reason to call this method himself.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    96
   */
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 525
diff changeset
    97
  uint32_t AddDevice (Ptr<NetDevice> device);
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    98
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
    99
   * \param index the index of the requested NetDevice
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   100
   * \returns the requested NetDevice associated to this INode.
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   101
   */
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 525
diff changeset
   102
  Ptr<NetDevice> GetDevice (uint32_t index) const;
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   103
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   104
   * \returns the number of NetDevice instances associated
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   105
   *          to this INode.
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   106
   */
447
180117abfb04 add NetDevice list into Node base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 381
diff changeset
   107
  uint32_t GetNDevices (void) const;
180117abfb04 add NetDevice list into Node base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 381
diff changeset
   108
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   109
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   110
   * \param application Application to associate to this node.
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   111
   * \returns the index of the Application within the INode's list
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   112
   *          of Application.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   113
   *
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   114
   * Associated this Application to this INode. This method is called
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   115
   * automatically from Application::Application so the user
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   116
   * has little reasons to call this method directly.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   117
   */
585
a009b03b720a remove ApplicationList. Move functionality to Node class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 580
diff changeset
   118
  uint32_t AddApplication (Ptr<Application> application);
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   119
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   120
   * \param index
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   121
   * \returns the application associated to this requested index
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   122
   *          within this INode.
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   123
   */
585
a009b03b720a remove ApplicationList. Move functionality to Node class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 580
diff changeset
   124
  Ptr<Application> GetApplication (uint32_t index) const;
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   125
  /**
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   126
   * \returns the number of applications associated to this INode.
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   127
   */
585
a009b03b720a remove ApplicationList. Move functionality to Node class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 580
diff changeset
   128
  uint32_t GetNApplications (void) const;
a009b03b720a remove ApplicationList. Move functionality to Node class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 580
diff changeset
   129
513
b7c7ea629de9 make L3Demux an NsUnknown object.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 512
diff changeset
   130
protected:
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   131
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   132
   * Must be invoked by subclasses only.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   133
   */
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   134
  INode();
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   135
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   136
   * \param systemId a unique integer used for parallel simulations.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   137
   *
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   138
   * Must be invoked by subclasses only.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   139
   */
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   140
  INode(uint32_t systemId);
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   141
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   142
   * The dispose method. Subclasses must override this method
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   143
   * and must chain up to it by calling INode::DoDispose at the
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   144
   * end of their own DoDispose method.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   145
   */
513
b7c7ea629de9 make L3Demux an NsUnknown object.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 512
diff changeset
   146
  virtual void DoDispose (void);
447
180117abfb04 add NetDevice list into Node base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 381
diff changeset
   147
private:
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   148
  /**
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   149
   * \param context the trace context
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   150
   * \returns a trace resolver to the user. The user must delete it.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   151
   *
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   152
   * Subclasses must implement this method.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   153
   */
594
bf1c6a6ab58d make the Node API more consistent
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 585
diff changeset
   154
  virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context) = 0;
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   155
  /**
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   156
   * \param device the device added to this INode.
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   157
   *
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   158
   * This method is invoked whenever a user calls INode::AddDevice.
595
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   159
   * Subclasses are expected to call NetDevice::SetReceiveCallback
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   160
   * at this point to setup the node's receive function for
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   161
   * the NetDevice packets.
3e77d7b90b9c add dox documentation for Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 594
diff changeset
   162
   */
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 525
diff changeset
   163
  virtual void DoAddDevice (Ptr<NetDevice> device) const = 0;
447
180117abfb04 add NetDevice list into Node base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 381
diff changeset
   164
607
1b7abeccfcda rename Node to INode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 605
diff changeset
   165
  uint32_t    m_id;         // INode id for this node
244
caff04d90a66 remove SetNodeId and implement GetId and GetSystemId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 242
diff changeset
   166
  uint32_t    m_sid;        // System id for this node
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 525
diff changeset
   167
  std::vector<Ptr<NetDevice> > m_devices;
585
a009b03b720a remove ApplicationList. Move functionality to Node class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 580
diff changeset
   168
  std::vector<Ptr<Application> > m_applications;
232
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
};
8cd08910f9a1 initial node base class from george's repo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
355
d18da75542c7 Add static node factory methods to class Node
Tom Henderson <tomh@tomh.org>
parents: 345
diff changeset
   171
} //namespace ns3
605
3a62e5c4de75 rename internet-node.h to i-node-impl.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 604
diff changeset
   172
3a62e5c4de75 rename internet-node.h to i-node-impl.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 604
diff changeset
   173
#endif /* I_NODE_H */