--- a/doc/manual/animation.texi Tue Dec 15 21:52:50 2009 -0800
+++ b/doc/manual/animation.texi Wed Dec 16 11:17:07 2009 -0500
@@ -1,13 +1,210 @@
@node Animation
@chapter Animation
+@anchor{chap:Animation}
-@cartouche
-Placeholder chapter
-@end cartouche
+@menu
+* Animation interface::
+* NetAnim::
+@end menu
+
+Animation is an important tool for network simulation. While ns-3 does
+not contain a graphical animation tool, it does provide an animation interface
+for use with stand-alone animators. Currently, the animation
+interface only supports point-to-point links; however, we hope
+to support other link types such as CSMA and wireless in the near future.
+The animation interface in ns-3 allows the generation of a custom trace
+file to be used by an animation program.
+
+An existing stand-alone program, NetAnim, uses these custom traces to
+graphically display the simulation. NetAnim depicts packets traveling
+on point-to-point links as they travel from node to node.
+
+@node Animation interface
+@section Animation interface
+
+The animation interface in ns-3 currently only supports point-to-point
+links and can generate a custom trace file for use by an animation
+program. A snippet from a sample trace file is shown below.
+
+@verbatim
+0.0 N 0 4 5.5
+0.0 N 1 7 5.5
+0.0 N 2 2.5 2.90192
+
+...
+
+0.0 L 0 1
+0.0 L 0 2
+0.0 L 0 3
+
+...
+
+Running the simulation
+0.668926 P 11 1 0.66936 0.669926 0.67036
+0.67036 P 1 0 0.670794 0.67136 0.671794
+0.671794 P 0 6 0.672227 0.672794 0.673227
+
+...
+@end verbatim
+
+The tracefile describes where nodes and links should be placed at
+the top of the file. Following this placement, the packet events
+are shown. The format for node placement, link placement and
+packet events is shown below.
+
+@itemize @bullet
+@item Node placement: <time of placement> <N for node> <node id>
+ <x position> <y position>
+@item Link placement: <time of placement> <L for link> <node1 id>
+ <node2 id>
+@item Packet events: <time of first bit tx> <P for packet>
+ <source node> <destination node>
+ <time of last bit tx>
+ <time of first bit rx>
+ <time of last bit rx>
+@end itemize
+
+To get started using the animation interface, several example scripts
+have been provided to show proper use. These examples can be found
+in examples/animation. The example scripts use the animation interface
+as well as topology helpers in order to automatically place the nodes
+and generate the custom trace. It is important to note that if a
+topology helper is not used with its provided BoundingBox method,
+which automatically calculates the nodes' canvas positions, the nodes
+must be placed manually by aggregating a CanvasLocation to the node.
+An example use of CanvasLocation can be found in any of the topology
+helpers. Additionally, a simple example of placing a node is shown below:
+
+@verbatim
+ // assuming a node container m_hub exists and
+ // contains at least one node.
+ // we grab this node and associate a
+ // CanvasLocation to it, in order for the
+ // animation interface to place the node
+ Ptr<Node> hub = m_hub.Get (0);
+ Ptr<CanvasLocation> hubLoc = hub->GetObject<CanvasLocation> ();
+ if (hubLoc == 0)
+ {
+ hubLoc = CreateObject<CanvasLocation> ();
+ hub->AggregateObject (hubLoc);
+ }
+ Vector hubVec (5, 7);
+ hubLoc->SetLocation (hubVec);
+@end verbatim
+
+Finally, after the simulation has been set up and the nodes have been
+placed, the animation interface is used to start the animation, which
+writes the custom trace file. Below is an example of how to set
+up and start the animation interface.
-This wiki page: @*
-@uref{http://www.nsnam.org/wiki/index.php/NetAnim,,http://www.nsnam.org/wiki/index.php/NetAnim}
-contains information about the animator support that has been added to ns-3.6.
+@verbatim
+ AnimationInterface anim;
+ // the animation interface can be set up to write
+ // to a socket, if a port > 0 is specified
+ // see doxygen for more information
+ if (port > 0)
+ {
+ anim.SetServerPort (port);
+ }
+ else if (!animFile.empty ())
+ {
+ // if a file name is specified,
+ // the trace is written to the file.
+ // otherwise, it is directed to stdout
+ anim.SetOutputFile (animFile);
+ }
+ anim.StartAnimation ();
+@end verbatim
+
+@node NetAnim
+@section NetAnim
+
+NetAnim is a stand-alone program which uses the custom trace files
+generated by the animation interface to graphically display the
+simulation. NetAnim is based on the multi-platform
+@uref{http://www.qtsoftware.com/products/,,Qt4 GUI toolkit}. A
+screenshot of the NetAnim GUI is shown below.
+
+@float Figure,fig:anim-dumbbell
+@caption{NetAnim GUI with dumbbell animation.}
+@image{figures/animation-dumbbell, 4in}
+@end float
+
+The NetAnim GUI provides play, pause, and record buttons. Play and
+pause start and stop the simulation. The record button starts a series
+of screenshots of the animator, which are written to the directory in
+which the trace file was run. Two slider bars also exist. The top
+slider provides a "seek" functionality, which allows a user to skip to
+any moment in the simulation. The bottom slider changes the granularity
+of the time step for the animation. Finally, there is a quit button to
+stop the simulation and quit the animator.
+
+@subsection Prerequisites
+
+The animator requires the Qt4 development packages. If you are using a
+Debian or Ubuntu Linux distribution, you can get the following package:
+qt4-dev-tools
+
+This should install everything you need to compile and build NetAnim.
+If you are using an Red Hat based distribution, look for similar qt4
+packages (or libqt4*) and install these using yum. Mac users should
+install the binaries: http://www.qtsoftware.com/downloads/mac-os-cpp
-Another Python-based animator is available (ns-3-pyviz) but is not
-documented.
+Make sure to download the binary package; look for a link to something
+without the word "src" or "debug" in the download filename. These will
+be the library binaries you need.
+
+@subsection Downloading NetAnim
+
+The tarball of the source code for NetAnim is available here:
+@uref{http://www.nsnam.org/~jpelkey3/NetAnim.tar.gz,,http://www.nsnam.org/~jpelkey3/NetAnim.tar.gz}.
+Download it, then untar it:
+
+@verbatim
+tar -xzvf NetAnim.tar.gz
+@end verbatim
+
+@subsection Building NetAnim
+
+NetAnim uses a Qt4 build tool called qmake; this is similar to the
+configure script from autotools in that it generates the Makefile,
+which make then uses to build the project. qmake is different on
+different versions of Qt, so we'll provide some additional information
+that is system dependent. You can check your default version of qmake:
+
+@verbatim
+qmake --version
+Qmake version: 1.07a (Qt 3.3.8b)
+Qmake is free software from Trolltech ASA.
+@end verbatim
+
+If you see something like the above, where it says Qt 3.x.x, find the
+qt4 version of qmake on your system and explicitly call it instead.
+
+In general,
+
+@verbatim
+cd NetAnim
+qmake
+make
+@end verbatim
+
+On Mac OSX,
+
+@verbatim
+cd NetAnim
+/usr/local/Trolltech/Qt-4.x.y/bin/qmake
+make
+@end verbatim
+
+Note that above, the x.y is the specific version of Qt4 you are running.
+As of April 1st 2009, the latest version is 4.5.0, although you might
+have an older version already installed.
+
+On Ubuntu/Debian with Qt3 AND Qt4,
+
+@verbatim
+cd NetAnim
+qmake-qt4
+make
+@end verbatim
Binary file doc/manual/figures/animation-dumbbell.pdf has changed
Binary file doc/manual/figures/animation-dumbbell.png has changed
--- a/examples/animation/star-animation.cc Tue Dec 15 21:52:50 2009 -0800
+++ b/examples/animation/star-animation.cc Wed Dec 16 11:17:07 2009 -0500
@@ -99,7 +99,7 @@
{
AddressValue remoteAddress (InetSocketAddress (star.GetHubIpv4Address (i), port));
onOffHelper.SetAttribute ("Remote", remoteAddress);
- spokeApps.Add (onOffHelper.Install (star.GetSpoke (i)));
+ spokeApps.Add (onOffHelper.Install (star.GetSpokeNode (i)));
}
spokeApps.Start (Seconds (1.0));
spokeApps.Stop (Seconds (10.0));
--- a/examples/csma/csma-star.cc Tue Dec 15 21:52:50 2009 -0800
+++ b/examples/csma/csma-star.cc Wed Dec 16 11:17:07 2009 -0500
@@ -146,7 +146,7 @@
{
AddressValue remoteAddress (InetSocketAddress (star.GetHubIpv4Address (i), port));
onOffHelper.SetAttribute ("Remote", remoteAddress);
- spokeApps.Add (onOffHelper.Install (star.GetSpoke (i)));
+ spokeApps.Add (onOffHelper.Install (star.GetSpokeNode (i)));
}
spokeApps.Start (Seconds (1.0));
--- a/examples/tcp/star.cc Tue Dec 15 21:52:50 2009 -0800
+++ b/examples/tcp/star.cc Wed Dec 16 11:17:07 2009 -0500
@@ -94,7 +94,7 @@
{
AddressValue remoteAddress (InetSocketAddress (star.GetHubIpv4Address (i), port));
onOffHelper.SetAttribute ("Remote", remoteAddress);
- spokeApps.Add (onOffHelper.Install (star.GetSpoke (i)));
+ spokeApps.Add (onOffHelper.Install (star.GetSpokeNode (i)));
}
spokeApps.Start (Seconds (1.0));
spokeApps.Stop (Seconds (10.0));
--- a/src/helper/csma-star-helper.cc Tue Dec 15 21:52:50 2009 -0800
+++ b/src/helper/csma-star-helper.cc Wed Dec 16 11:17:07 2009 -0500
@@ -54,7 +54,7 @@
}
Ptr<Node>
-CsmaStarHelper::GetSpoke (uint32_t i) const
+CsmaStarHelper::GetSpokeNode (uint32_t i) const
{
return m_spokes.Get (i);
}
--- a/src/helper/csma-star-helper.h Tue Dec 15 21:52:50 2009 -0800
+++ b/src/helper/csma-star-helper.h Wed Dec 16 11:17:07 2009 -0500
@@ -28,21 +28,85 @@
namespace ns3 {
+/**
+ * \brief A helper to make it easier to create a star topology
+ * with Csma links
+ */
class CsmaStarHelper
{
public:
+ /**
+ * Create a CsmaStarHelper in order to easily create
+ * star topologies using Csma links
+ *
+ * \param numSpokes the number of links attached to
+ * the hub node, creating a total of
+ * numSpokes + 1 nodes
+ *
+ * \param csmaHelper the link helper for Csma links,
+ * used to link nodes together
+ */
CsmaStarHelper (uint32_t numSpokes,
CsmaHelper csmaHelper);
+
~CsmaStarHelper ();
+
public:
+ /**
+ * \returns a node pointer to the hub node in the
+ * star, i.e., the center node
+ */
Ptr<Node> GetHub () const;
- Ptr<Node> GetSpoke (uint32_t) const;
+
+ /**
+ * \param i an index into the spokes of the star
+ *
+ * \returns a node pointer to the node at the indexed spoke
+ */
+ Ptr<Node> GetSpokeNode (uint32_t i) const;
+
+ /**
+ * \returns the net-device container which contains all of
+ * the devices on the hub node
+ */
NetDeviceContainer GetHubDevices () const;
+
+ /**
+ * \returns the net-device container which contains all of
+ * the spoke node devices
+ */
NetDeviceContainer GetSpokeDevices () const;
- Ipv4Address GetHubIpv4Address (uint32_t) const;
- Ipv4Address GetSpokeIpv4Address (uint32_t) const;
+
+ /**
+ * \param i index into the hub interfaces
+ *
+ * \returns Ipv4Address according to indexed hub interface
+ */
+ Ipv4Address GetHubIpv4Address (uint32_t i) const;
+
+ /**
+ * \param i index into the spoke interfaces
+ *
+ * \returns Ipv4Address according to indexed spoke interface
+ */
+ Ipv4Address GetSpokeIpv4Address (uint32_t i) const;
+
+ /**
+ * \returns the total number of spokes in the star
+ */
uint32_t SpokeCount () const;
+
+ /**
+ * \param stack an InternetStackHelper which is used to install
+ * on every node in the star
+ */
void InstallStack (InternetStackHelper stack);
+
+ /**
+ * \param address an Ipv4AddressHelper which is used to install
+ * Ipv4 addresses on all the node interfaces in
+ * the star
+ */
void AssignIpv4Addresses (Ipv4AddressHelper address);
private:
@@ -53,7 +117,7 @@
Ipv4InterfaceContainer m_hubInterfaces;
Ipv4InterfaceContainer m_spokeInterfaces;
};
-}
-#endif
+} // namespace ns3
+#endif /* CSMA_STAR_HELPER_H */
--- a/src/helper/point-to-point-dumbbell-helper.h Tue Dec 15 21:52:50 2009 -0800
+++ b/src/helper/point-to-point-dumbbell-helper.h Wed Dec 16 11:17:07 2009 -0500
@@ -30,30 +30,113 @@
namespace ns3 {
+/**
+ * \brief A helper to make it easier to create a dumbbell topology
+ * with p2p links
+ */
class PointToPointDumbbellHelper
{
public:
- PointToPointDumbbellHelper (uint32_t nLeftLeaf, // Number of left size leaf nodes
- PointToPointHelper leftHelper,
- uint32_t nRightLeaf, // Number of right side leaf nodes
- PointToPointHelper rightHelper,
- PointToPointHelper bottleneckHelper);
+ /**
+ * Create a PointToPointDumbbellHelper in order to easily create
+ * dumbbell topologies using p2p links
+ *
+ * \param nLeftLeaf number of left side leaf nodes in the dumbbell
+ *
+ * \param leftHelper PointToPointHelper used to install the links
+ * between the left leaf nodes and the left-most
+ * router
+ *
+ * \param nRightLeaf number of right side leaf nodes in the dumbbell
+ *
+ * \param rightHelper PointToPointHelper used to install the links
+ * between the right leaf nodes and the right-most
+ * router
+ *
+ * \param bottleneckHelper PointToPointHelper used to install the link
+ * between the inner-routers, usually known as
+ * the bottleneck link
+ */
+ PointToPointDumbbellHelper (uint32_t nLeftLeaf,
+ PointToPointHelper leftHelper,
+ uint32_t nRightLeaf,
+ PointToPointHelper rightHelper,
+ PointToPointHelper bottleneckHelper);
+
~PointToPointDumbbellHelper ();
+
public:
- Ptr<Node> GetLeft () const; // Get the left side bottleneck router
- Ptr<Node> GetLeft (uint32_t) const; // Get the i'th left side leaf
- Ptr<Node> GetRight () const; // Get the right side bottleneck router
- Ptr<Node> GetRight (uint32_t) const; // Get the i'th right side leaf
- Ipv4Address GetLeftIpv4Address (uint32_t) const; // Get left leaf address
- Ipv4Address GetRightIpv4Address (uint32_t) const; // Get right leaf address
- uint32_t LeftCount () const; // Number of left side nodes
- uint32_t RightCount () const; // Number of right side nodes
+ /**
+ * \returns pointer to the node of the left side bottleneck
+ * router
+ */
+ Ptr<Node> GetLeft () const;
+
+ /**
+ * \returns pointer to the i'th left side leaf node
+ */
+ Ptr<Node> GetLeft (uint32_t i) const;
+
+ /**
+ * \returns pointer to the node of the right side bottleneck
+ * router
+ */
+ Ptr<Node> GetRight () const;
+
+ /**
+ * \returns pointer to the i'th left side leaf node
+ */
+ Ptr<Node> GetRight (uint32_t i) const;
+
+ /**
+ * \returns an Ipv4Address of the i'th left leaf
+ */
+ Ipv4Address GetLeftIpv4Address (uint32_t i ) const; // Get left leaf address
+
+ /**
+ * \returns an Ipv4Address of the i'th right leaf
+ */
+ Ipv4Address GetRightIpv4Address (uint32_t i) const; // Get right leaf address
+
+ /**
+ * \returns total number of left side leaf nodes
+ */
+ uint32_t LeftCount () const;
+
+ /**
+ * \returns total number of right side leaf nodes
+ */
+ uint32_t RightCount () const;
+
+ /**
+ * \param stack an InternetStackHelper which is used to install
+ * on every node in the dumbbell
+ */
void InstallStack (InternetStackHelper stack);
+
+ /**
+ * \param leftIp Ipv4AddressHelper to assign Ipv4 addresses to the
+ * interfaces on the left side of the dumbbell
+ *
+ * \param rightIp Ipv4AddressHelper to assign Ipv4 addresses to the
+ * interfaces on the right side of the dumbbell
+ *
+ * \param routerIp Ipv4AddressHelper to assign Ipv4 addresses to the
+ * interfaces on the bottleneck link
+ */
void AssignIpv4Addresses (Ipv4AddressHelper leftIp,
- Ipv4AddressHelper rightIp,
- Ipv4AddressHelper routerIp);
- // Add locations in the specified bounding box
- // Arguments are uppler left x, upper left y, lower right x, lower right y
+ Ipv4AddressHelper rightIp,
+ Ipv4AddressHelper routerIp);
+
+ /**
+ * Sets up the node canvas locations for every node in the dumbbell.
+ * This is needed for use with the animation interface
+ *
+ * \param ulx upper left x value
+ * \param uly upper left y value
+ * \param lrx lower right x value
+ * \param lry lower right y value
+ */
void BoundingBox (double, double, double, double);
private:
@@ -63,7 +146,6 @@
NetDeviceContainer m_rightLeafDevices;
NodeContainer m_routers;
NetDeviceContainer m_routerDevices; // just two connecting the routers
- // Device containers for the router devices connecting to the leaf devices
NetDeviceContainer m_leftRouterDevices;
NetDeviceContainer m_rightRouterDevices;
Ipv4InterfaceContainer m_leftLeafInterfaces;
@@ -72,7 +154,7 @@
Ipv4InterfaceContainer m_rightRouterInterfaces;
Ipv4InterfaceContainer m_routerInterfaces;
};
-}
-#endif
+} // namespace ns3
+#endif /* POINT_TO_POINT_DUMBBELL_HELPER_H */
--- a/src/helper/point-to-point-grid-helper.h Tue Dec 15 21:52:50 2009 -0800
+++ b/src/helper/point-to-point-grid-helper.h Wed Dec 16 11:17:07 2009 -0500
@@ -29,28 +29,95 @@
namespace ns3 {
+/**
+ * \brief A helper to make it easier to create a grid topology
+ * with p2p links
+ */
class PointToPointGridHelper
{
- public:
- PointToPointGridHelper (uint32_t nRows, uint32_t nCols, PointToPointHelper pointToPoint);
- ~PointToPointGridHelper ();
+public:
+ /**
+ * Create a PointToPointGridHelper in order to easily create
+ * grid topologies using p2p links
+ *
+ * \param nRows total number of rows in the grid
+ *
+ * \param nCols total number of colums in the grid
+ *
+ * \param pointToPoint the PointToPointHelper which is used
+ * to connect all of the nodes together
+ * in the grid
+ */
+ PointToPointGridHelper (uint32_t nRows,
+ uint32_t nCols,
+ PointToPointHelper pointToPoint);
- Ptr<Node> GetNode (uint32_t row, uint32_t col);
- Ipv4Address GetIpv4Address (uint32_t row, uint32_t col);
+ ~PointToPointGridHelper ();
+
+ /**
+ * \param row the row address of the node desired
+ *
+ * \param col the column address of the node desired
+ *
+ * \returns a pointer to the node specified by the
+ * (row, col) address
+ */
+ Ptr<Node> GetNode (uint32_t row, uint32_t col);
- void InstallStack (InternetStackHelper stack);
- void AssignIpv4Addresses (Ipv4AddressHelper rowIp, Ipv4AddressHelper colIp);
- void BoundingBox (double ulx, double uly, double lrx, double lry);
+ /**
+ * This returns an Ipv4 address at the node specified by
+ * the (row, col) address. Technically, a node will have
+ * multiple interfaces in the grid; therefore, it also has
+ * multiple Ipv4 addresses. This method only returns one of
+ * the addresses. If you picture the grid, the address returned
+ * is the left row device of all the nodes, except the left-most
+ * grid nodes, which returns the right row device.
+ *
+ * \param row the row address of the node desired
+ *
+ * \param col the column address of the node desired
+ *
+ * \returns Ipv4Address of one of the intefaces of the node
+ * specified by the (row, col) address
+ */
+ Ipv4Address GetIpv4Address (uint32_t row, uint32_t col);
+
+ /**
+ * \param stack an InternetStackHelper which is used to install
+ * on every node in the grid
+ */
+ void InstallStack (InternetStackHelper stack);
- private:
- uint32_t m_xSize;
- uint32_t m_ySize;
- std::vector<NetDeviceContainer> m_rowDevices;
- std::vector<NetDeviceContainer> m_colDevices;
- std::vector<Ipv4InterfaceContainer> m_rowInterfaces;
- std::vector<Ipv4InterfaceContainer> m_colInterfaces;
- std::vector<NodeContainer> m_nodes;
+ /**
+ * Assigns Ipv4 addresses to all the row and column interfaces
+ *
+ * \param rowIp the Ipv4AddressHelper used to assign Ipv4 addresses
+ * to all of the row interfaces in the grid
+ *
+ * \param colIp the Ipv4AddressHelper used to assign Ipv4 addresses
+ * to all of the row interfaces in the grid
+ */
+ void AssignIpv4Addresses (Ipv4AddressHelper rowIp, Ipv4AddressHelper colIp);
+ /**
+ * Sets up the node canvas locations for every node in the grid.
+ * This is needed for use with the animation interface
+ *
+ * \param ulx upper left x value
+ * \param uly upper left y value
+ * \param lrx lower right x value
+ * \param lry lower right y value
+ */
+ void BoundingBox (double ulx, double uly, double lrx, double lry);
+
+private:
+ uint32_t m_xSize;
+ uint32_t m_ySize;
+ std::vector<NetDeviceContainer> m_rowDevices;
+ std::vector<NetDeviceContainer> m_colDevices;
+ std::vector<Ipv4InterfaceContainer> m_rowInterfaces;
+ std::vector<Ipv4InterfaceContainer> m_colInterfaces;
+ std::vector<NodeContainer> m_nodes;
};
} // namespace ns3
--- a/src/helper/point-to-point-star-helper.cc Tue Dec 15 21:52:50 2009 -0800
+++ b/src/helper/point-to-point-star-helper.cc Wed Dec 16 11:17:07 2009 -0500
@@ -54,7 +54,7 @@
}
Ptr<Node>
-PointToPointStarHelper::GetSpoke (uint32_t i) const
+PointToPointStarHelper::GetSpokeNode (uint32_t i) const
{
return m_spokes.Get (i);
}
--- a/src/helper/point-to-point-star-helper.h Tue Dec 15 21:52:50 2009 -0800
+++ b/src/helper/point-to-point-star-helper.h Wed Dec 16 11:17:07 2009 -0500
@@ -28,21 +28,85 @@
namespace ns3 {
+/**
+ * \brief A helper to make it easier to create a star topology
+ * with PointToPoint links
+ */
class PointToPointStarHelper
{
public:
+ /**
+ * Create a PointToPointStarHelper in order to easily create
+ * star topologies using p2p links
+ *
+ * \param numSpokes the number of links attached to
+ * the hub node, creating a total of
+ * numSpokes + 1 nodes
+ *
+ * \param p2pHelper the link helper for p2p links,
+ * used to link nodes together
+ */
PointToPointStarHelper (uint32_t numSpokes,
PointToPointHelper p2pHelper);
+
~PointToPointStarHelper ();
+
public:
+ /**
+ * \returns a node pointer to the hub node in the
+ * star, i.e., the center node
+ */
Ptr<Node> GetHub () const;
- Ptr<Node> GetSpoke (uint32_t) const;
- Ipv4Address GetHubIpv4Address (uint32_t) const;
- Ipv4Address GetSpokeIpv4Address (uint32_t) const;
+
+ /**
+ * \param i an index into the spokes of the star
+ *
+ * \returns a node pointer to the node at the indexed spoke
+ */
+ Ptr<Node> GetSpokeNode (uint32_t i) const;
+
+ /**
+ * \param i index into the hub interfaces
+ *
+ * \returns Ipv4Address according to indexed hub interface
+ */
+ Ipv4Address GetHubIpv4Address (uint32_t i) const;
+
+ /**
+ * \param i index into the spoke interfaces
+ *
+ * \returns Ipv4Address according to indexed spoke interface
+ */
+ Ipv4Address GetSpokeIpv4Address (uint32_t i) const;
+
+ /**
+ * \returns the total number of spokes in the star
+ */
uint32_t SpokeCount () const;
+
+ /**
+ * \param stack an InternetStackHelper which is used to install
+ * on every node in the star
+ */
void InstallStack (InternetStackHelper stack);
+
+ /**
+ * \param address an Ipv4AddressHelper which is used to install
+ * Ipv4 addresses on all the node interfaces in
+ * the star
+ */
void AssignIpv4Addresses (Ipv4AddressHelper address);
- void BoundingBox (double, double, double, double);
+
+ /**
+ * Sets up the node canvas locations for every node in the star.
+ * This is needed for use with the animation interface
+ *
+ * \param ulx upper left x value
+ * \param uly upper left y value
+ * \param lrx lower right x value
+ * \param lry lower right y value
+ */
+ void BoundingBox (double ulx, double uly, double lrx, double lry);
private:
NodeContainer m_hub;
@@ -52,7 +116,7 @@
Ipv4InterfaceContainer m_hubInterfaces;
Ipv4InterfaceContainer m_spokeInterfaces;
};
-}
-#endif
+} // namespace ns3
+#endif /* POINT_TO_POINT_STAR_HELPER_H */