Merge remote-tracking branch 'git.irl/Ilya'
diff --git a/model/annotated-topology-reader.cc b/model/annotated-topology-reader.cc
index c92aec0..4b17ba4 100644
--- a/model/annotated-topology-reader.cc
+++ b/model/annotated-topology-reader.cc
@@ -55,10 +55,10 @@
TypeId AnnotatedTopologyReader::GetTypeId (void)
{
- static TypeId tid = TypeId ("ns3::AnnotatedTopologyReader")
+ static TypeId tid = TypeId ("ns3::AnnotatedTopologyReader")
.SetParent<Object> ()
;
- return tid;
+ return tid;
}
AnnotatedTopologyReader::AnnotatedTopologyReader (const std::string &path)
@@ -68,9 +68,9 @@
, m_lrx (100.0)
, m_lry (100.0)
{
- NS_LOG_FUNCTION (this);
+ NS_LOG_FUNCTION (this);
}
-
+
void
AnnotatedTopologyReader::SetBoundingBox (double ulx, double uly, double lrx, double lry)
{
@@ -84,27 +84,27 @@
AnnotatedTopologyReader::~AnnotatedTopologyReader ()
{
- NS_LOG_FUNCTION (this);
+ NS_LOG_FUNCTION (this);
}
NodeContainer
AnnotatedTopologyReader::Read (void)
{
- ifstream topgen;
- topgen.open (GetFileName ().c_str ());
- NodeContainer nodes;
+ ifstream topgen;
+ topgen.open (GetFileName ().c_str ());
+ NodeContainer nodes;
- if (!topgen.is_open ())
+ if ( !topgen.is_open () )
{
NS_LOG_ERROR ("Cannot open file " << GetFileName () << " for reading");
- return nodes;
+ return nodes;
}
-
- int linksNumber = 0;
- int nodesNumber = 0;
- string line;
- getline (topgen,line);
+ int linksNumber = 0;
+ int nodesNumber = 0;
+
+ string line;
+ getline (topgen,line);
istringstream headerLineBuffer (line);
int totnode;
@@ -112,22 +112,22 @@
headerLineBuffer >> totnode;
headerLineBuffer >> totlink;
- NS_LOG_INFO ("Annotated topology should have " << totnode << " nodes and " << totlink << " links");
-
- for (int i = 0; i < totlink && !topgen.eof (); i++)
+ NS_LOG_INFO ("Annotated topology should have " << totnode << " nodes and " << totlink << " links");
+
+ for (int i = 0; i < totlink && !topgen.eof (); i++)
{
- getline (topgen, line);
+ getline (topgen,line);
istringstream lineBuffer (line);
string from;
string to;
- lineBuffer >> from;
- lineBuffer >> to;
-
- if ( (!from.empty ()) && (!to.empty ()) )
+ lineBuffer >> from;
+ lineBuffer >> to;
+
+ if ( (!from.empty ()) && (!to.empty ()) )
{
- NS_LOG_INFO ( linksNumber << " From: " << from << " to: " << to );
-
+ NS_LOG_INFO ( linksNumber << " From: " << from << " to: " << to );
+
Ptr<Node> fromNode = Names::Find<Node> (m_path, from);
Ptr<Node> toNode = Names::Find<Node> (m_path, to);
@@ -136,7 +136,7 @@
fromNode = CreateObject<Node> ();
Names::Add (m_path, from, fromNode);
nodes.Add (fromNode);
- nodesNumber++;
+ nodesNumber++;
}
if (toNode == 0)
@@ -144,23 +144,23 @@
toNode = CreateObject<Node> ();
Names::Add (m_path, to, toNode);
nodes.Add (toNode);
- nodesNumber++;
+ nodesNumber++;
}
Link link (fromNode, from, toNode, to);
string dataRate;
lineBuffer >> dataRate;
-
+
string ospf;
lineBuffer >> ospf;
-
+
string delay;
lineBuffer >> delay;
-
+
string queueSizeNode1;
lineBuffer >> queueSizeNode1;
-
+
string queueSizeNode2;
lineBuffer >> queueSizeNode2;
@@ -173,65 +173,65 @@
NS_LOG_ERROR ("File [" << GetFileName () << ":" << i+2 << " wrong format, skipping");
continue;
}
-
+
link.SetAttribute ("DataRate", dataRate);
link.SetAttribute ("OSPF", ospf);
link.SetAttribute ("Delay", delay);
link.SetAttribute ("QueueSizeNode1", queueSizeNode1);
link.SetAttribute ("QueueSizeNode2", queueSizeNode2);
- AddLink (link);
+ AddLink (link);
- linksNumber++;
+ linksNumber++;
}
}
-
+
NS_ASSERT (nodesNumber == totnode && linksNumber == totlink);
- NS_LOG_INFO ("Annotated topology created with " << nodesNumber << " nodes and " << linksNumber << " links");
- topgen.close ();
-
+ NS_LOG_INFO ("Annotated topology created with " << nodesNumber << " nodes and " << linksNumber << " links");
+ topgen.close ();
+
ApplySettings ();
AssignCoordinates ();
- return nodes;
+ return nodes;
}
-
+
void
AnnotatedTopologyReader::AssignIpv4Addresses (Ipv4Address base)
{
Ipv4AddressHelper address (base, Ipv4Mask ("/24"));
-
+
BOOST_FOREACH (const Link &link, m_linksList)
{
address.Assign (NetDeviceContainer (link.GetFromNetDevice (),
link.GetToNetDevice ()));
-
+
base = Ipv4Address (base.Get () + 256);
address.SetBase (base, Ipv4Mask ("/24"));
- }
-
+ }
+
ApplyOspfMetric ();
-}
-
+ }
+
void
AnnotatedTopologyReader::ApplyOspfMetric ()
-{
- BOOST_FOREACH (const Link &link, m_linksList)
{
+ BOOST_FOREACH (const Link &link, m_linksList)
+ {
uint16_t metric = boost::lexical_cast<uint16_t> (link.GetAttribute ("OSPF"));
-
- {
+
+ {
Ptr<Ipv4> ipv4 = link.GetFromNode ()->GetObject<Ipv4> ();
NS_ASSERT (ipv4 != 0);
-
+
int32_t interfaceId = ipv4->GetInterfaceForDevice (link.GetFromNetDevice ());
NS_ASSERT (interfaceId >= 0);
-
+
ipv4->SetMetric (interfaceId,metric);
- }
-
- {
+ }
+
+ {
Ptr<Ipv4> ipv4 = link.GetToNode ()->GetObject<Ipv4> ();
NS_ASSERT (ipv4 != 0);
@@ -239,68 +239,68 @@
NS_ASSERT (interfaceId >= 0);
ipv4->SetMetric (interfaceId,metric);
- }
}
}
+}
void
AnnotatedTopologyReader::ApplySettings ()
{
PointToPointHelper p2p;
-
+
// temporary queue, will be changed later
p2p.SetQueue ("ns3::DropTailQueue",
"MaxPackets", StringValue("100"));
-
+
BOOST_FOREACH (Link &link, m_linksList)
{
NS_LOG_INFO ("DataRate = " + link.GetAttribute("DataRate")+"Kbps");
p2p.SetDeviceAttribute ("DataRate", StringValue(link.GetAttribute("DataRate")+"Kbps"));
-
+
NS_LOG_INFO ("Delay = " + link.GetAttribute("Delay")+"ms");
p2p.SetChannelAttribute ("Delay", StringValue(link.GetAttribute("Delay")+"ms"));
-
+
NetDeviceContainer nd = p2p.Install(link.GetFromNode (), link.GetToNode ());
link.SetNetDevices (nd.Get (0), nd.Get (1));
NS_LOG_INFO ("Queue: " << link.GetAttribute("QueueSizeNode1") << " <==> " << link.GetAttribute("QueueSizeNode2"));
-
+
PointerValue txQueueFrom;
link.GetFromNetDevice ()->GetAttribute ("TxQueue", txQueueFrom);
NS_ASSERT (txQueueFrom.Get<DropTailQueue> () != 0);
-
+
PointerValue txQueueTo;
link.GetToNetDevice ()->GetAttribute ("TxQueue", txQueueTo);
NS_ASSERT (txQueueTo.Get<DropTailQueue> () != 0);
-
+
txQueueFrom.Get<DropTailQueue> ()->SetAttribute ("MaxPackets", StringValue (link.GetAttribute("QueueSizeNode1")));
txQueueTo. Get<DropTailQueue> ()->SetAttribute ("MaxPackets", StringValue (link.GetAttribute("QueueSizeNode2")));
- }
-}
+ }
+ }
void
AnnotatedTopologyReader::AssignCoordinates ()
{
UniformVariable randX (m_ulx, m_lrx);
- double x = 0.0;
+ double x = 0.0;
UniformVariable randY (m_uly, m_lry);
- double y = 0.0;
+ double y = 0.0;
BOOST_FOREACH (Link &link, m_linksList)
{
Ptr<ConstantPositionMobilityModel> loc = link.GetFromNode ()->GetObject<ConstantPositionMobilityModel> ();
if (loc != 0)
continue; // no need to assign twice
-
- loc = CreateObject<ConstantPositionMobilityModel> ();
+
+ loc = CreateObject<ConstantPositionMobilityModel> ();
link.GetFromNode ()->AggregateObject (loc);
x = randX.GetValue();
y = randY.GetValue();
- NS_LOG_INFO("X = "<<x <<"Y = "<<y);
-
+ NS_LOG_INFO("X = "<<x <<"Y = "<<y);
+
loc->SetPosition (Vector (x, y, 0));
+ }
}
-}
}