Left: | ||
Right: |
OLD | NEW |
---|---|
(Empty) | |
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ | |
2 /* | |
3 * This program is free software; you can redistribute it and/or modify | |
4 * it under the terms of the GNU General Public License version 2 as | |
5 * published by the Free Software Foundation; | |
6 * | |
7 * This program is distributed in the hope that it will be useful, | |
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
10 * GNU General Public License for more details. | |
11 * | |
12 * You should have received a copy of the GNU General Public License | |
13 * along with this program; if not, write to the Free Software | |
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
15 * | |
16 * Author: Josh Pelkey <jpelkey@gatech.edu> | |
17 */ | |
18 | |
19 #include "ns3/log.h" | |
20 #include "ns3/abort.h" | |
21 | |
22 #include "brite-topology-helper.h" | |
23 | |
24 NS_LOG_COMPONENT_DEFINE ("BriteTopologyHelper"); | |
25 | |
26 namespace ns3 { | |
27 | |
28 BriteTopologyHelper::BriteTopologyHelper (std::string confFile,· | |
29 std::string seedFile, | |
30 std::string newseedFile) | |
31 { | |
32 brite::Brite br (confFile, seedFile, newseedFile); | |
33 m_topology = br.GetTopology (); | |
34 BuildBriteNodeInfoList (); | |
35 BuildBriteEdgeInfoList (); | |
36 } | |
37 | |
38 BriteTopologyHelper::~BriteTopologyHelper () | |
39 { | |
40 delete m_topology; | |
41 } | |
42 | |
43 brite::Topology* | |
44 BriteTopologyHelper::GetBriteTopology (void) | |
45 { | |
46 return m_topology; | |
47 } | |
48 | |
49 void· | |
50 BriteTopologyHelper::BuildBriteNodeInfoList (void) | |
51 { | |
52 brite::Graph *g = m_topology->GetGraph (); | |
53 for (int i = 0; i < g->GetNumNodes (); ++i) | |
54 { | |
55 BriteNodeInfo nodeInfo; | |
56 nodeInfo.nodeId = g->GetNodePtr (i)->GetId (); | |
57 nodeInfo.xCoordinate = g->GetNodePtr (i)->GetNodeInfo ()->GetCoordX (); | |
58 nodeInfo.yCoordinate = g->GetNodePtr (i)->GetNodeInfo ()->GetCoordY (); | |
59 nodeInfo.inDegree = g->GetNodePtr (i)->GetInDegree (); | |
60 nodeInfo.outDegree = g->GetNodePtr (i)->GetOutDegree (); | |
61 | |
62 switch(g->GetNodePtr(i)->GetNodeInfo()->GetNodeType())· | |
63 { | |
64 case brite::NodeConf::RT_NODE: | |
65 nodeInfo.asId = | |
66 ((brite::RouterNodeConf*)(g->GetNodePtr(i)->GetNodeInfo()))->GetAS Id(); | |
67 ············ | |
68 switch (((brite::RouterNodeConf*)(g->GetNodePtr(i)->GetNodeInfo()))- >GetRouterType())· | |
69 { | |
70 case brite::RouterNodeConf::RT_NONE: | |
71 nodeInfo.type = "RT_NONE "; | |
72 break; | |
73 case brite::RouterNodeConf::RT_LEAF: | |
74 nodeInfo.type = "RT_LEAF "; | |
75 break; | |
76 case brite::RouterNodeConf::RT_BORDER: | |
77 nodeInfo.type = "RT_BORDER"; | |
78 break; | |
79 case brite::RouterNodeConf::RT_STUB: | |
80 nodeInfo.type = "RT_STUB "; | |
81 break; | |
82 case brite::RouterNodeConf::RT_BACKBONE: | |
83 nodeInfo.type = "RT_BACKBONE "; | |
Tommaso Pecorella
2011/06/02 14:30:14
spaces before the "
Also: document the meaning of
| |
84 break; | |
85 default: | |
86 NS_FATAL_ERROR ("Topology::Output(): Improperly classfied Rout er node encountered..."); | |
87 } | |
88 break; | |
89 ········ | |
90 case brite::NodeConf::AS_NODE: | |
91 nodeInfo.asId = | |
92 ((brite::ASNodeConf*)(g->GetNodePtr(i)->GetNodeInfo()))->GetASId() ; | |
93 ············ | |
94 switch (((brite::ASNodeConf*)(g->GetNodePtr(i)->GetNodeInfo()))->Get ASType())· | |
95 { | |
96 case brite::ASNodeConf::AS_NONE: | |
97 nodeInfo.type = "AS_NONE "; | |
98 break; | |
99 case brite::ASNodeConf::AS_LEAF: | |
100 nodeInfo.type = "AS_LEAF "; | |
101 break; | |
102 case brite::ASNodeConf::AS_STUB: | |
103 nodeInfo.type = "AS_STUB "; | |
104 break; | |
105 case brite::ASNodeConf::AS_BORDER: | |
106 nodeInfo.type = "AS_BORDER "; | |
107 break; | |
108 case brite::ASNodeConf::AS_BACKBONE: | |
109 nodeInfo.type = "AS_BACKBONE "; | |
Tommaso Pecorella
2011/06/02 14:30:14
Same as above
| |
110 break; | |
111 default: | |
112 NS_FATAL_ERROR ("Topology::Output(): Improperly classfied AS n ode encountered..."); | |
113 } | |
114 break; | |
115 } | |
116 ······ | |
117 m_briteNodeInfoList.push_back (nodeInfo); | |
118 } | |
119 } | |
120 | |
121 void· | |
122 BriteTopologyHelper::BuildBriteEdgeInfoList (void) | |
123 { | |
124 brite::Graph *g = m_topology->GetGraph (); | |
125 std::list<brite::Edge*>::iterator el; | |
126 std::list<brite::Edge*> edgeList = g->GetEdges (); | |
127 | |
128 for (el = edgeList.begin (); el != edgeList.end (); el++) | |
129 { | |
130 BriteEdgeInfo edgeInfo; | |
131 edgeInfo.edgeId = (*el)->GetId (); | |
132 edgeInfo.srcId = (*el)->GetSrc ()->GetId (); | |
133 edgeInfo.destId = (*el)->GetDst ()->GetId (); | |
134 edgeInfo.length = (*el)->Length (); | |
135 | |
136 switch((*el)->GetConf()->GetEdgeType())· | |
137 { | |
138 case brite::EdgeConf::RT_EDGE: | |
139 edgeInfo.delay = ((brite::RouterEdgeConf*)((*el)->GetConf()))->GetDe lay(); | |
140 edgeInfo.bandwidth = (*el)->GetConf()->GetBW(); | |
141 edgeInfo.asFrom = ((brite::RouterNodeConf*)((*el)->GetSrc()->GetNode Info()))->GetASId(); | |
142 edgeInfo.asTo = ((brite::RouterNodeConf*)((*el)->GetDst()->GetNodeIn fo()))->GetASId(); | |
143 break; | |
144 | |
145 case brite::EdgeConf::AS_EDGE: | |
146 edgeInfo.delay = -1; /* No delay for AS Edges */ | |
147 edgeInfo.bandwidth = (*el)->GetConf()->GetBW(); | |
148 edgeInfo.asFrom = ((brite::ASNodeConf*)((*el)->GetSrc()->GetNodeInfo ()))->GetASId(); | |
149 edgeInfo.asTo = ((brite::ASNodeConf*)((*el)->GetDst()->GetNodeInfo() ))->GetASId(); | |
150 break; | |
151 | |
152 default: | |
153 NS_FATAL_ERROR ("Topology::Output(): Invalid Edge type encountered.. ."); | |
154 } | |
155 ···· | |
156 switch ((*el)->GetConf()->GetEdgeType())· | |
157 { | |
158 case brite::EdgeConf::RT_EDGE:· | |
159 switch (((brite::RouterEdgeConf*)(*el)->GetConf())->GetRouterEdgeTyp e())· | |
160 { | |
161 case brite::RouterEdgeConf::RT_NONE: | |
162 edgeInfo.type = "E_RT_NONE "; | |
163 break; | |
164 case brite::RouterEdgeConf::RT_STUB: | |
165 edgeInfo.type = "E_RT_STUB "; | |
166 break; | |
167 case brite::RouterEdgeConf::RT_BORDER: | |
168 edgeInfo.type = "E_RT_BORDER "; | |
169 break; | |
170 case brite::RouterEdgeConf::RT_BACKBONE: | |
171 edgeInfo.type = "E_RT_BACKBONE "; | |
Tommaso Pecorella
2011/06/02 14:30:14
same as above
| |
172 break; | |
173 default: | |
174 NS_FATAL_ERROR ("Output(): Invalid router edge type..."); | |
175 } | |
176 break; | |
177 | |
178 case brite::EdgeConf::AS_EDGE: | |
179 switch (((brite::ASEdgeConf*)((*el)->GetConf()))->GetASEdgeType())· | |
180 { | |
181 case brite::ASEdgeConf::AS_NONE: | |
182 edgeInfo.type = "E_AS_NONE "; | |
183 break; | |
184 case brite::ASEdgeConf::AS_STUB: | |
185 edgeInfo.type = "E_AS_STUB "; | |
186 break; | |
187 case brite::ASEdgeConf::AS_BORDER: | |
188 edgeInfo.type = "E_AS_BORDER "; | |
189 break; | |
190 case brite::ASEdgeConf::AS_BACKBONE: | |
191 edgeInfo.type = "E_AS_BACKBONE "; | |
Tommaso Pecorella
2011/06/02 14:30:14
same as above
| |
192 break; | |
193 default: | |
194 NS_FATAL_ERROR ("BriteOutput(): Invalid AS edge type..."); | |
195 } | |
196 break; | |
197 ············ | |
198 default: | |
199 NS_FATAL_ERROR ("BriteOutput(): Invalid edge type..."); | |
200 ············ | |
201 } | |
202 | |
203 m_briteEdgeInfoList.push_back (edgeInfo); | |
204 } | |
205 } | |
206 | |
207 BriteTopologyHelper::BriteNodeInfoList | |
208 BriteTopologyHelper::GetBriteNodeInfoList (void) | |
209 { | |
210 return m_briteNodeInfoList; | |
211 } | |
212 | |
213 BriteTopologyHelper::BriteEdgeInfoList | |
214 BriteTopologyHelper::GetBriteEdgeInfoList (void) | |
215 { | |
216 return m_briteEdgeInfoList; | |
217 } | |
218 | |
219 } // namespace ns3 | |
OLD | NEW |