Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(747)

Unified Diff: src/brite/helper/brite-topology-helper.cc

Issue 4517125: Ns-3 BRITE Integration
Patch Set: Created 12 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/brite/helper/brite-topology-helper.cc
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/brite/helper/brite-topology-helper.cc
@@ -0,0 +1,219 @@
+/* -*- 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: Josh Pelkey <jpelkey@gatech.edu>
+ */
+
+#include "ns3/log.h"
+#include "ns3/abort.h"
+
+#include "brite-topology-helper.h"
+
+NS_LOG_COMPONENT_DEFINE ("BriteTopologyHelper");
+
+namespace ns3 {
+
+BriteTopologyHelper::BriteTopologyHelper (std::string confFile,
+ std::string seedFile,
+ std::string newseedFile)
+{
+ brite::Brite br (confFile, seedFile, newseedFile);
+ m_topology = br.GetTopology ();
+ BuildBriteNodeInfoList ();
+ BuildBriteEdgeInfoList ();
+}
+
+BriteTopologyHelper::~BriteTopologyHelper ()
+{
+ delete m_topology;
+}
+
+brite::Topology*
+BriteTopologyHelper::GetBriteTopology (void)
+{
+ return m_topology;
+}
+
+void
+BriteTopologyHelper::BuildBriteNodeInfoList (void)
+{
+ brite::Graph *g = m_topology->GetGraph ();
+ for (int i = 0; i < g->GetNumNodes (); ++i)
+ {
+ BriteNodeInfo nodeInfo;
+ nodeInfo.nodeId = g->GetNodePtr (i)->GetId ();
+ nodeInfo.xCoordinate = g->GetNodePtr (i)->GetNodeInfo ()->GetCoordX ();
+ nodeInfo.yCoordinate = g->GetNodePtr (i)->GetNodeInfo ()->GetCoordY ();
+ nodeInfo.inDegree = g->GetNodePtr (i)->GetInDegree ();
+ nodeInfo.outDegree = g->GetNodePtr (i)->GetOutDegree ();
+
+ switch(g->GetNodePtr(i)->GetNodeInfo()->GetNodeType())
+ {
+ case brite::NodeConf::RT_NODE:
+ nodeInfo.asId =
+ ((brite::RouterNodeConf*)(g->GetNodePtr(i)->GetNodeInfo()))->GetASId();
+
+ switch (((brite::RouterNodeConf*)(g->GetNodePtr(i)->GetNodeInfo()))->GetRouterType())
+ {
+ case brite::RouterNodeConf::RT_NONE:
+ nodeInfo.type = "RT_NONE ";
+ break;
+ case brite::RouterNodeConf::RT_LEAF:
+ nodeInfo.type = "RT_LEAF ";
+ break;
+ case brite::RouterNodeConf::RT_BORDER:
+ nodeInfo.type = "RT_BORDER";
+ break;
+ case brite::RouterNodeConf::RT_STUB:
+ nodeInfo.type = "RT_STUB ";
+ break;
+ case brite::RouterNodeConf::RT_BACKBONE:
+ nodeInfo.type = "RT_BACKBONE ";
Tommaso Pecorella 2011/06/02 14:30:14 spaces before the " Also: document the meaning of
+ break;
+ default:
+ NS_FATAL_ERROR ("Topology::Output(): Improperly classfied Router node encountered...");
+ }
+ break;
+
+ case brite::NodeConf::AS_NODE:
+ nodeInfo.asId =
+ ((brite::ASNodeConf*)(g->GetNodePtr(i)->GetNodeInfo()))->GetASId();
+
+ switch (((brite::ASNodeConf*)(g->GetNodePtr(i)->GetNodeInfo()))->GetASType())
+ {
+ case brite::ASNodeConf::AS_NONE:
+ nodeInfo.type = "AS_NONE ";
+ break;
+ case brite::ASNodeConf::AS_LEAF:
+ nodeInfo.type = "AS_LEAF ";
+ break;
+ case brite::ASNodeConf::AS_STUB:
+ nodeInfo.type = "AS_STUB ";
+ break;
+ case brite::ASNodeConf::AS_BORDER:
+ nodeInfo.type = "AS_BORDER ";
+ break;
+ case brite::ASNodeConf::AS_BACKBONE:
+ nodeInfo.type = "AS_BACKBONE ";
Tommaso Pecorella 2011/06/02 14:30:14 Same as above
+ break;
+ default:
+ NS_FATAL_ERROR ("Topology::Output(): Improperly classfied AS node encountered...");
+ }
+ break;
+ }
+
+ m_briteNodeInfoList.push_back (nodeInfo);
+ }
+}
+
+void
+BriteTopologyHelper::BuildBriteEdgeInfoList (void)
+{
+ brite::Graph *g = m_topology->GetGraph ();
+ std::list<brite::Edge*>::iterator el;
+ std::list<brite::Edge*> edgeList = g->GetEdges ();
+
+ for (el = edgeList.begin (); el != edgeList.end (); el++)
+ {
+ BriteEdgeInfo edgeInfo;
+ edgeInfo.edgeId = (*el)->GetId ();
+ edgeInfo.srcId = (*el)->GetSrc ()->GetId ();
+ edgeInfo.destId = (*el)->GetDst ()->GetId ();
+ edgeInfo.length = (*el)->Length ();
+
+ switch((*el)->GetConf()->GetEdgeType())
+ {
+ case brite::EdgeConf::RT_EDGE:
+ edgeInfo.delay = ((brite::RouterEdgeConf*)((*el)->GetConf()))->GetDelay();
+ edgeInfo.bandwidth = (*el)->GetConf()->GetBW();
+ edgeInfo.asFrom = ((brite::RouterNodeConf*)((*el)->GetSrc()->GetNodeInfo()))->GetASId();
+ edgeInfo.asTo = ((brite::RouterNodeConf*)((*el)->GetDst()->GetNodeInfo()))->GetASId();
+ break;
+
+ case brite::EdgeConf::AS_EDGE:
+ edgeInfo.delay = -1; /* No delay for AS Edges */
+ edgeInfo.bandwidth = (*el)->GetConf()->GetBW();
+ edgeInfo.asFrom = ((brite::ASNodeConf*)((*el)->GetSrc()->GetNodeInfo()))->GetASId();
+ edgeInfo.asTo = ((brite::ASNodeConf*)((*el)->GetDst()->GetNodeInfo()))->GetASId();
+ break;
+
+ default:
+ NS_FATAL_ERROR ("Topology::Output(): Invalid Edge type encountered...");
+ }
+
+ switch ((*el)->GetConf()->GetEdgeType())
+ {
+ case brite::EdgeConf::RT_EDGE:
+ switch (((brite::RouterEdgeConf*)(*el)->GetConf())->GetRouterEdgeType())
+ {
+ case brite::RouterEdgeConf::RT_NONE:
+ edgeInfo.type = "E_RT_NONE ";
+ break;
+ case brite::RouterEdgeConf::RT_STUB:
+ edgeInfo.type = "E_RT_STUB ";
+ break;
+ case brite::RouterEdgeConf::RT_BORDER:
+ edgeInfo.type = "E_RT_BORDER ";
+ break;
+ case brite::RouterEdgeConf::RT_BACKBONE:
+ edgeInfo.type = "E_RT_BACKBONE ";
Tommaso Pecorella 2011/06/02 14:30:14 same as above
+ break;
+ default:
+ NS_FATAL_ERROR ("Output(): Invalid router edge type...");
+ }
+ break;
+
+ case brite::EdgeConf::AS_EDGE:
+ switch (((brite::ASEdgeConf*)((*el)->GetConf()))->GetASEdgeType())
+ {
+ case brite::ASEdgeConf::AS_NONE:
+ edgeInfo.type = "E_AS_NONE ";
+ break;
+ case brite::ASEdgeConf::AS_STUB:
+ edgeInfo.type = "E_AS_STUB ";
+ break;
+ case brite::ASEdgeConf::AS_BORDER:
+ edgeInfo.type = "E_AS_BORDER ";
+ break;
+ case brite::ASEdgeConf::AS_BACKBONE:
+ edgeInfo.type = "E_AS_BACKBONE ";
Tommaso Pecorella 2011/06/02 14:30:14 same as above
+ break;
+ default:
+ NS_FATAL_ERROR ("BriteOutput(): Invalid AS edge type...");
+ }
+ break;
+
+ default:
+ NS_FATAL_ERROR ("BriteOutput(): Invalid edge type...");
+
+ }
+
+ m_briteEdgeInfoList.push_back (edgeInfo);
+ }
+}
+
+BriteTopologyHelper::BriteNodeInfoList
+BriteTopologyHelper::GetBriteNodeInfoList (void)
+{
+ return m_briteNodeInfoList;
+}
+
+BriteTopologyHelper::BriteEdgeInfoList
+BriteTopologyHelper::GetBriteEdgeInfoList (void)
+{
+ return m_briteEdgeInfoList;
+}
+
+} // namespace ns3

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b