src/helper/animation-interface.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 01 Feb 2010 08:09:11 +0100
changeset 5937 aa754f49d2f3
parent 5776 aae948449722
permissions -rw-r--r--
merge with HEAD
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5776
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     2
/*
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     3
 * This program is free software; you can redistribute it and/or modify
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     4
 * it under the terms of the GNU General Public License version 2 as
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     5
 * published by the Free Software Foundation;
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     6
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     7
 * This program is distributed in the hope that it will be useful,
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    10
 * GNU General Public License for more details.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    11
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    12
 * You should have received a copy of the GNU General Public License
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    13
 * along with this program; if not, write to the Free Software
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    15
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    16
 * Author: George F. Riley<riley@ece.gatech.edu>
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    17
 */
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    18
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    19
// Interface between ns3 and the network animator
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    20
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    21
#ifndef ANIMATION_INTERFACE__H
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    22
#define ANIMATION_INTERFACE__H
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    23
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    24
#include <string>
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    25
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    26
#include "ns3/ptr.h"
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    27
#include "ns3/net-device.h"
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    28
#include "ns3/nstime.h"
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    29
#include "ns3/log.h"
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    30
#include "ns3/node-list.h"
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    31
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    32
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    33
namespace ns3 {
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    34
class NetModel;
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    35
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    36
/**
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    37
 * \brief Interface to network animator
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    38
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    39
 * Provides functions that facilitate communications with an
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    40
 * external or internal network animator.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    41
 */
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    42
class AnimationInterface
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    43
{
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    44
public:
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    45
/**
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    46
 * @brief Construct the animator interface. No arguments needed.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    47
 */
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    48
  AnimationInterface ();
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    49
/**
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    50
 * @brief Destructor for the animator interface.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    51
 */
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    52
  ~AnimationInterface ();
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    53
/**
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    54
 * @brief Specify that animation commands are to be written
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    55
 * to the specified output file.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    56
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    57
 * This call is used to write the animation information to a text
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    58
 * file that can later be used as input to the network animator tool.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    59
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    60
 * @param fn The name of the output file.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    61
 * @returns true if successful open.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    62
 */
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    63
  bool SetOutputFile (const std::string& fn);
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    64
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    65
/**
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    66
 * @brief Specify that animation commands are to be written to
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    67
 * a socket.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    68
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    69
 * This call is used to set the ns3 process in server mode, waiting
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    70
 * for a TCP connection from the animator.  This call will not
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    71
 * return until the animator connects in, or if the bind to the
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    72
 * specified port fails.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    73
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    74
 * @param port Port number to bind to.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    75
 * @returns true if connection created, false if bind failed.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    76
 */
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    77
  bool SetServerPort (uint16_t port);
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    78
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    79
/**
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    80
 * @brief Writes the topology information and sets up the appropriate
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    81
 *  animation packet tx callback
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    82
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    83
 * Writes the topology information to the appropriate output, depending
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    84
 * on prior calls to SetOutputFile, SetServerPort, or SetInternalAnimation.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    85
 * Then creates the callbacks needed for the animator to start processing
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    86
 * packets.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    87
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    88
 */
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    89
  void StartAnimation ();
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    90
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    91
/**
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    92
 * @brief Closes the interface to the animator.
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    93
 *
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    94
 */
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    95
  void StopAnimation ();
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    96
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    97
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    98
private:
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    99
  // Packet tx animation callback
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   100
  void DevTxTrace (std::string context, Ptr<const Packet> p,
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   101
                 Ptr<NetDevice> tx, Ptr<NetDevice> rx,
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   102
                 Time txTime, Time rxTime);
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   103
  // Write specified amount of data to the specified handle
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   104
  int  WriteN (int, const char*, uint32_t);
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   105
private:
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   106
  int       m_fHandle;  // File handle for output (-1 if none)
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   107
  NetModel* m_model;    // If non nil, points to the internal network model
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   108
                        // for the interlan animator
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   109
};
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   110
}
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   111
#endif
aae948449722 Moved net-anim from contrib
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   112