src/node/l3-demux.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 30 Mar 2007 11:08:47 +0200
changeset 415 dee776571347
parent 410 d7beb754cfe9
child 444 1647ca57f19d
permissions -rw-r--r--
fix dox warnings
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
//
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
// Copyright (c) 2006 Georgia Tech Research Corporation
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
// All rights reserved.
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
//
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
// This program is free software; you can redistribute it and/or modify
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
// it under the terms of the GNU General Public License version 2 as
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
// published by the Free Software Foundation;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
//
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
// This program is distributed in the hope that it will be useful,
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
// GNU General Public License for more details.
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
//
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
// You should have received a copy of the GNU General Public License
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
// along with this program; if not, write to the Free Software
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
//
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
// Author: George F. Riley<riley@ece.gatech.edu>
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
//
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
// Define the L3Protocols capability for ns3.
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
// George F. Riley, Georgia Tech, Fall 2006
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
// This object manages the different layer 3 protocols for any ns3
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
// node that has this capability.  
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#ifndef L3_DEMUX_H
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
#define L3_DEMUX_H
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
#include <map>
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
namespace ns3 {
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
class L3Protocol;
241
9004ab4cfe17 add Ipv4 and Udp node capabilities, rework Copy methods to include an extra Node * argument
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 234
diff changeset
    35
class Node;
345
47b41507a45a move channel.cc channel.h to node directory; merge ns-3-tracing from mathieu
Tom Henderson <tomh@tomh.org>
parents: 241
diff changeset
    36
class TraceResolver;
47b41507a45a move channel.cc channel.h to node directory; merge ns-3-tracing from mathieu
Tom Henderson <tomh@tomh.org>
parents: 241
diff changeset
    37
class TraceContext;
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
410
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    39
/**
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    40
 * \brief L3 Demux 
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    41
 */
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
class L3Demux
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
{
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
public:
345
47b41507a45a move channel.cc channel.h to node directory; merge ns-3-tracing from mathieu
Tom Henderson <tomh@tomh.org>
parents: 241
diff changeset
    45
  typedef int ProtocolTraceType;
241
9004ab4cfe17 add Ipv4 and Udp node capabilities, rework Copy methods to include an extra Node * argument
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 234
diff changeset
    46
  L3Demux(Node *node);
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
  virtual ~L3Demux();
410
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    48
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    49
  /**
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    50
   * \param node the node on which the returned copy will run.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    51
   * \returns a deep copy of this L3 Demux.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    52
   */
241
9004ab4cfe17 add Ipv4 and Udp node capabilities, rework Copy methods to include an extra Node * argument
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 234
diff changeset
    53
  L3Demux* Copy(Node *node) const;
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
410
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    55
  /**
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    56
   * \param context the trace context to use to construct the
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    57
   *        TraceResolver to return
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    58
   * \returns a TraceResolver which can resolve all traces
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    59
   *          performed in this object. The caller must
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    60
   *          delete the returned object.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    61
   */
345
47b41507a45a move channel.cc channel.h to node directory; merge ns-3-tracing from mathieu
Tom Henderson <tomh@tomh.org>
parents: 241
diff changeset
    62
  TraceResolver *CreateTraceResolver (TraceContext const &context);
47b41507a45a move channel.cc channel.h to node directory; merge ns-3-tracing from mathieu
Tom Henderson <tomh@tomh.org>
parents: 241
diff changeset
    63
410
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    64
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    65
  /**
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    66
   * \param protocol a template for the protocol to add to this L3 Demux.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    67
   * \returns the L3Protocol effectively added.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    68
   *
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    69
   * Invoke Copy on the input template to get a copy of the input
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    70
   * protocol which can be used on the Node on which this L3 Demux 
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    71
   * is running. The new L3Protocol is registered internally as
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    72
   * a working L3 Protocol and returned from this method.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    73
   * The caller does not get ownership of the returned pointer.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    74
   */
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    75
  ns3::L3Protocol* Insert(const ns3::L3Protocol& protocol);
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    76
  /**
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    77
   * \param protocolNumber number of protocol to lookup
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    78
   *        in this L4 Demux
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    79
   * \returns a matching L3 Protocol
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    80
   *
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    81
   * This method is typically called by lower layers
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    82
   * to forward packets up the stack to the right protocol.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    83
   * It is also called from InternetNode::GetIpv4 for example.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    84
   */
415
dee776571347 fix dox warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 410
diff changeset
    85
  ns3::L3Protocol* Lookup(int protocolNumber);
410
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    86
  /**
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    87
   * \param protocol protocol to remove from this demux.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    88
   *
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    89
   * The input value to this method should be the value
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    90
   * returned from the L3Protocol::Insert method.
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    91
   */
d7beb754cfe9 more doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 345
diff changeset
    92
  void Erase(ns3::L3Protocol*protocol);
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
private:
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
  typedef std::map<int, ns3::L3Protocol*> L3Map_t;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
241
9004ab4cfe17 add Ipv4 and Udp node capabilities, rework Copy methods to include an extra Node * argument
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 234
diff changeset
    96
  Node *m_node;
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
  L3Map_t m_protocols;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
};
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
} //namespace ns3
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
#endif
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102