src/contrib/net-anim/point-to-point-dumbbell-helper.cc
changeset 5776 aae948449722
parent 5775 86ff2e00d4ea
child 5777 a7ca957db043
child 5812 bb8a3a22d015
--- a/src/contrib/net-anim/point-to-point-dumbbell-helper.cc	Tue Nov 24 14:00:39 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,249 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * 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 an object to create a dumbbell topology.
-
-#include <iostream>
-#include <sstream>
-
-// ns3 includes
-#include "ns3/animation-interface.h"
-#include "ns3/point-to-point-dumbbell-helper.h"
-#include "ns3/node-location.h"
-
-#include "ns3/node-list.h"
-#include "ns3/point-to-point-net-device.h"
-#include "ns3/vector.h"
-
-using namespace std;
-
-NS_LOG_COMPONENT_DEFINE("PointToPointDumbbellHelper");
-
-namespace ns3 {
-  
-PointToPointDumbbellHelper::PointToPointDumbbellHelper (uint32_t nLeftLeaf,
-                   PointToPointHelper& leftHelper,
-                   uint32_t nRightLeaf,
-                   PointToPointHelper& rightHelper,
-                   PointToPointHelper& bottleneckHelper)
-{
-  // Create the bottleneck routers
-  m_routers.Create (2);
-  // Create the leaf nodes
-  m_leftLeaf.Create (nLeftLeaf);
-  m_rightLeaf.Create (nRightLeaf);
-
-  // Add the link connecting routers
-  m_routerDevices = bottleneckHelper.Install (m_routers);
-  // Add the left side links
-  for (uint32_t i = 0; i < nLeftLeaf; ++i)
-    {
-      NetDeviceContainer c = leftHelper.Install (m_routers.Get (0),
-                                                m_leftLeaf.Get (i));
-      m_leftRouterDevices.Add (c.Get (0));
-      m_leftLeafDevices.Add (c.Get(1));
-    }
-  // Add the right side links
-  for (uint32_t i = 0; i < nRightLeaf; ++i)
-    {
-      NetDeviceContainer c = rightHelper.Install (m_routers.Get (1),
-                                                m_rightLeaf.Get (i));
-      m_rightRouterDevices.Add (c.Get (0));
-      m_rightLeafDevices.Add (c.Get (1));
-    }
-}
-
-Ptr<Node> PointToPointDumbbellHelper::GetLeft () const
-{ // Get the left side bottleneck router
-  return m_routers.Get (0);
-}
-
-Ptr<Node> PointToPointDumbbellHelper::GetLeft (uint32_t i) const
-{ // Get the i'th left side leaf
-  return m_leftLeaf.Get (i);
-}
-
-Ptr<Node> PointToPointDumbbellHelper::GetRight () const
-{ // Get the right side bottleneck router
-  return m_routers.Get (1);
-}
-
-Ptr<Node> PointToPointDumbbellHelper::GetRight (uint32_t i) const
-{ // Get the i'th right side leaf
-  return m_rightLeaf.Get (i);
-}
-
-Ipv4Address PointToPointDumbbellHelper::GetLeftAddress (uint32_t i) const
-{
-  return m_leftLeafInterfaces.GetAddress (i);
-}
-
-Ipv4Address PointToPointDumbbellHelper::GetRightAddress (uint32_t i) const
-{
-  return m_rightLeafInterfaces.GetAddress (i);
-}
-
-uint32_t  PointToPointDumbbellHelper::LeftCount () const
-{ // Number of left side nodes
-  return m_leftLeaf.GetN ();
-}
-
-uint32_t  PointToPointDumbbellHelper::RightCount () const
-{ // Number of right side nodes
-  return m_rightLeaf.GetN ();
-}
-
-void PointToPointDumbbellHelper::InstallStack (InternetStackHelper stack)
-{
-  stack.Install (m_routers);
-  stack.Install (m_leftLeaf);
-  stack.Install (m_rightLeaf);
-}
-
-void PointToPointDumbbellHelper::AssignAddresses (Ipv4AddressHelper leftIp,
-                               Ipv4AddressHelper rightIp,
-                               Ipv4AddressHelper routerIp)
-{
-  // Assign the router network
-  m_routerInterfaces = routerIp.Assign (m_routerDevices);
-  // Assign to left side 
-  for (uint32_t i = 0; i < LeftCount (); ++i)
-    {
-      NetDeviceContainer ndc;
-      ndc.Add (m_leftLeafDevices.Get (i));
-      ndc.Add (m_leftRouterDevices.Get (i));
-      Ipv4InterfaceContainer ifc = leftIp.Assign(ndc);
-      m_leftLeafInterfaces.Add (ifc.Get (0));
-      m_leftRouterInterfaces.Add (ifc.Get (1));
-      leftIp.NewNetwork ();
-    }
-  // Assign to right size
-  for (uint32_t i = 0; i < RightCount (); ++i)
-    {
-      NetDeviceContainer ndc;
-      ndc.Add (m_rightLeafDevices.Get (i));
-      ndc.Add (m_rightRouterDevices.Get (i));
-      Ipv4InterfaceContainer ifc = rightIp.Assign (ndc);
-      m_rightLeafInterfaces.Add (ifc.Get (0));
-      m_rightRouterInterfaces.Add (ifc.Get (1));
-      rightIp.NewNetwork ();
-    }
-}
-
-
-void PointToPointDumbbellHelper::BoundingBox (double ulx, double uly, // Upper left x/y
-                           double lrx, double lry) // Lower right y
-{
-  double xDist = lrx - ulx;
-  double yDist = lry - uly;
-  double xAdder = xDist / 3.0;
-  double  thetaL = M_PI / (LeftCount () + 1.0);
-  double  thetaR = M_PI / (RightCount () + 1.0);
-
-  // Place the left router
-  Ptr<Node> lr = GetLeft ();
-  Ptr<NodeLocation> loc = lr->GetObject<NodeLocation> ();
-  if (loc == 0)
-    {
-      loc = CreateObject<NodeLocation> ();
-      lr->AggregateObject (loc);
-    }
-  Vector lrl (ulx + xAdder, uly + yDist/2.0, 0);
-  loc->SetLocation (lrl);
-  
-  // Place the right router
-  Ptr<Node> rr = GetRight ();
-  loc = rr->GetObject<NodeLocation> ();
-  if (loc == 0)
-    {
-      loc = CreateObject<NodeLocation> ();
-      rr->AggregateObject (loc);
-    }
-  Vector rrl (ulx + xAdder * 2, uly + yDist/2.0, 0); // Right router location
-  loc->SetLocation (rrl);
-
-  // Place the left leaf nodes
-  double theta = -M_PI_2 + thetaL;
-  for (uint32_t l = 0; l < LeftCount (); ++l)
-    {
-      // Make them in a circular pattern to make all line lengths the same
-      // Special case when theta = 0, to be sure we get a straight line
-      if ((LeftCount () % 2) == 1)
-        { // Count is odd, see if we are in middle
-          if (l == (LeftCount () / 2))
-            {
-              theta = 0.0;
-            }
-        }
-      Ptr<Node> ln = GetLeft (l);
-      loc = ln->GetObject<NodeLocation> ();
-      if (loc == 0)
-        {
-          loc = CreateObject<NodeLocation> ();
-          ln->AggregateObject (loc);
-        }
-      Vector lnl (lrl.x - cos (theta) * xAdder,
-                   lrl.y + sin (theta) * xAdder, 0);  // Left Node Location
-      // Insure did not exceed bounding box
-      if (lnl.y < uly) 
-        {
-          lnl.y = uly; // Set to upper right y
-        }
-      if (lnl.y > lry) 
-        {
-          lnl.y = lry; // Set to lower right y
-        }
-      loc->SetLocation (lnl);
-      theta += thetaL;
-    }
-  // Place the right nodes
-  theta = -M_PI_2 + thetaR;
-  for (uint32_t r = 0; r < RightCount (); ++r)
-    {
-      // Special case when theta = 0, to be sure we get a straight line
-      if ((RightCount () % 2) == 1)
-        { // Count is odd, see if we are in middle
-          if (r == (RightCount () / 2))
-            {
-              theta = 0.0;
-            }
-        }
-      Ptr<Node> rn = GetRight (r);
-      loc = rn->GetObject<NodeLocation> ();
-      if (loc == 0)
-        {
-          loc = CreateObject<NodeLocation> ();
-          rn->AggregateObject (loc);
-        }
-      Vector rnl (rrl.x + cos (theta) * xAdder, // Right node location
-                   rrl.y + sin (theta) * xAdder, 0);
-      // Insure did not exceed bounding box
-      if (rnl.y < uly) 
-        {
-          rnl.y = uly; // Set to upper right y
-        }
-      if (rnl.y > lry) 
-        {
-          rnl.y = lry; // Set to lower right y
-        }
-      loc->SetLocation (rnl);
-      theta += thetaR;
-    }
-}
-  
-} // namespace ns3