From: Richard Whitehouse Date: Fri, 15 Apr 2011 22:51:13 +0000 (+0100) Subject: Adjust MOOSE Helper so the topology isn't part of the Network X-Git-Url: https://git.richardwhiuk.com/?a=commitdiff_plain;h=43e3e419df103abcaeb66c69bffb7fa5cbeec88e;p=ns-moose.git Adjust MOOSE Helper so the topology isn't part of the Network --- diff --git a/src/helper/moose-helper.cc b/src/helper/moose-helper.cc index 9d30baa..0cd64a7 100644 --- a/src/helper/moose-helper.cc +++ b/src/helper/moose-helper.cc @@ -71,12 +71,14 @@ void MooseHelper::DisableDynamicRouting(){ routing = true; } -void MooseHelper::Create(MooseHelper::Network& n){ +MooseHelper::Network MooseHelper::Create(Topology& t){ // Create the bridges and hosts - n.bridges.Create(n.t.bridges); - n.hosts.Create(n.t.hosts); + Network n; + + n.bridges.Create(t.bridges); + n.hosts.Create(t.hosts); std::map > > portMap; @@ -85,17 +87,17 @@ void MooseHelper::Create(MooseHelper::Network& n){ // Host-Bridge for( - Topology::HostLinks::iterator it = n.t.hostLinks.begin(); - it != n.t.hostLinks.end(); + Topology::HostLinks::iterator it = t.hostLinks.begin(); + it != t.hostLinks.end(); it ++){ NodeContainer nc; - if(it->first >= n.t.hosts){ + if(it->first >= t.hosts){ assert(false); } - if(it->second >= n.t.bridges){ + if(it->second >= t.bridges){ assert(false); } @@ -111,17 +113,17 @@ void MooseHelper::Create(MooseHelper::Network& n){ // Bridge-Bridge for( - Topology::BridgeLinks::iterator it = n.t.bridgeLinks.begin(); - it != n.t.bridgeLinks.end(); + Topology::BridgeLinks::iterator it = t.bridgeLinks.begin(); + it != t.bridgeLinks.end(); it ++){ NodeContainer nc; - if(it->first >= n.t.bridges){ + if(it->first >= t.bridges){ assert(false); } - if(it->second >= n.t.bridges){ + if(it->second >= t.bridges){ assert(false); } @@ -149,14 +151,14 @@ void MooseHelper::Create(MooseHelper::Network& n){ // Djkstra - Give all links the same weight for now. - std::vector weights(n.t.bridgeLinks.size(), 1); + std::vector weights(t.bridgeLinks.size(), 1); - const long num_nodes = n.t.bridges; + const long num_nodes = t.bridges; - graph_t g(n.t.bridgeLinks.begin(), n.t.bridgeLinks.end(), weights.begin(), num_nodes); + graph_t g(t.bridgeLinks.begin(), t.bridgeLinks.end(), weights.begin(), num_nodes); boost::property_map::type weightmap = get(boost::edge_weight, g); - for(long root = 0; root < n.t.bridges; root ++){ + for(long root = 0; root < t.bridges; root ++){ std::vector p(num_vertices(g)); vertex_descriptor s = boost::vertex(root,g); @@ -198,7 +200,7 @@ void MooseHelper::Create(MooseHelper::Network& n){ // Realtime routing - for(long i = 0; i < n.t.bridges; i ++){ + for(long i = 0; i < t.bridges; i ++){ Ptr bridgeNode = n.bridges.Get(i); mooseHelper.Install(bridgeNode, n.bridgeDevices[i]); } @@ -208,21 +210,20 @@ void MooseHelper::Create(MooseHelper::Network& n){ // Kruskall's - Give all links the same weight for now. - const long num_nodes = n.t.bridges; + const long num_nodes = t.bridges; std::vector tree; - std::vector weights(n.t.bridgeLinks.size(), 1); + std::vector weights(t.bridgeLinks.size(), 1); - graph_t g(n.t.bridgeLinks.begin(), n.t.bridgeLinks.end(), weights.begin(), num_nodes); - boost::property_map::type weightmap = get(boost::edge_weight, g); + graph_t g(t.bridgeLinks.begin(), t.bridgeLinks.end(), weights.begin(), num_nodes); kruskal_minimum_spanning_tree(g,std::back_inserter(tree)); std::map > spanning; - for(long i = 0; i < n.t.bridges; ++i){ - for(long j = 0; i < n.t.bridges; ++i){ + for(long i = 0; i < t.bridges; ++i){ + for(long j = 0; i < t.bridges; ++i){ spanning[i][j] = false; } } @@ -238,7 +239,8 @@ void MooseHelper::Create(MooseHelper::Network& n){ // Question: is bridge[0][1] in spanning tree? -> i.e. is there some x, for which tree[x] = <0,1> - for(long i = 0; i < n.t.bridges; i ++){ + + for(long i = 0; i < t.bridges; i ++){ std::map, bool> portsEnabled; @@ -255,7 +257,7 @@ void MooseHelper::Create(MooseHelper::Network& n){ } else { // Requires STP implementation - for(long i = 0; i < n.t.bridges; i ++){ + for(long i = 0; i < t.bridges; i ++){ Ptr bridgeNode = n.bridges.Get(i); ethernetHelper.Install(bridgeNode, n.bridgeDevices[i]); @@ -267,10 +269,12 @@ void MooseHelper::Create(MooseHelper::Network& n){ internet.Install(n.hosts); - for(long i = 0; i < n.t.hosts; i ++){ + for(long i = 0; i < t.hosts; i ++){ n.interfaces[i] = ipv4.Assign(n.hostDevices[i]); } + return n; + } diff --git a/src/helper/moose-helper.h b/src/helper/moose-helper.h index 2b26d70..dc72fed 100644 --- a/src/helper/moose-helper.h +++ b/src/helper/moose-helper.h @@ -48,15 +48,13 @@ class MooseHelper { public: - typedef boost::adjacency_list< boost::listS, boost::vecS, boost::undirectedS, boost::no_property, boost::property > graph_t; + typedef boost::adjacency_list< boost::listS, boost::vecS, boost::undirectedS, boost::no_property, boost::property > graph_t; typedef boost::graph_traits< graph_t >::vertex_descriptor vertex_descriptor; typedef boost::graph_traits< graph_t >::edge_descriptor edge_descriptor; struct Network { - Topology t; - // Contains all the nodes :-) NodeContainer bridges; @@ -69,7 +67,7 @@ public: // IP Interfaces - std::map interfaces; + std::map interfaces; }; @@ -91,7 +89,7 @@ public: void DisableDynamicRouting(); - void Create(Network& t); + Network Create(Topology& t); private: