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 |