Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add platforms for ns3.
authorNavarrop <Pierre.Navarro@imag.fr>
Fri, 29 Jul 2011 12:42:05 +0000 (14:42 +0200)
committerNavarrop <Pierre.Navarro@imag.fr>
Fri, 29 Jul 2011 12:42:05 +0000 (14:42 +0200)
Changed units to be compliant with ns3 ones. (bps =! Bps)

examples/msg/ns3/3hosts_2links_d.xml [new file with mode: 0644]
examples/msg/ns3/3hosts_2links_p.xml [new file with mode: 0644]
examples/msg/ns3/3links-d.xml [moved from examples/msg/ns3/onelink-d.xml with 100% similarity]
examples/msg/ns3/3links-p.xml [moved from examples/msg/ns3/onelink-p.xml with 88% similarity]
examples/msg/ns3/One_cluster-d.xml [new file with mode: 0644]
examples/msg/ns3/One_cluster.xml [new file with mode: 0644]
examples/msg/ns3/Two_clusters-d.xml [new file with mode: 0644]
examples/msg/ns3/Two_clusters.xml [new file with mode: 0644]
src/surf/network_ns3.c
src/surf/ns3/ns3_interface.cc
src/surf/ns3/ns3_simulator.cc

diff --git a/examples/msg/ns3/3hosts_2links_d.xml b/examples/msg/ns3/3hosts_2links_d.xml
new file mode 100644 (file)
index 0000000..3314218
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+  <process host="a" function="master">
+      <argument value="100"/>
+      <argument value="c"/>
+      <argument value="1"/>
+  </process>
+
+  <process host="c" function="slave">
+    <argument value="1"/>
+  </process>
+     
+</platform>
diff --git a/examples/msg/ns3/3hosts_2links_p.xml b/examples/msg/ns3/3hosts_2links_p.xml
new file mode 100644 (file)
index 0000000..0e6aa55
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version='1.0'?>
+ <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+ <platform version="3">
+ <!--
+ a ______1______ b _____2_____ c
+
+ -->
+
+ <AS  id="AS0"  routing="Full">
+   <host id="a" power="1000000000"/>
+   <host id="b" power="1000000000"/>
+   <host id="c" power="1000000000"/>
+   <link id="1" bandwidth="1000" latency="0.01"/>
+   <link id="2" bandwidth="1000" latency="0.01"/>
+   <route src="a" dst="b">
+      <link_ctn id="1"/>
+   </route>
+   <route src="b" dst="c">
+      <link_ctn id="2"/>
+   </route>
+  
+ </AS>
+ </platform>
\ No newline at end of file
similarity index 88%
rename from examples/msg/ns3/onelink-p.xml
rename to examples/msg/ns3/3links-p.xml
index b05e780..647b29e 100644 (file)
@@ -1,8 +1,17 @@
 <?xml version='1.0'?>
  <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
  <platform version="3">
- <AS  id="AS0"  routing="Full">
+ <!--
+ S1 ______1______ C1
+ S2 _______2_____ C2
  
+ S3 ________3____ C2
+ -->
+       
+ <AS  id="AS0"  routing="Full">
    <host id="S1" power="1000000000"/>
    <host id="C1" power="1000000000"/>
    <host id="S2" power="1000000000"/>
diff --git a/examples/msg/ns3/One_cluster-d.xml b/examples/msg/ns3/One_cluster-d.xml
new file mode 100644 (file)
index 0000000..ff7e71f
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+  <process host="c-2.me" function="master">
+      <argument value="100"/>
+      <argument value="c-6.me"/>
+      <argument value="1"/>
+  </process>
+
+  <process host="c-6.me" function="slave">
+    <argument value="1"/>
+  </process>
+     
+</platform>
diff --git a/examples/msg/ns3/One_cluster.xml b/examples/msg/ns3/One_cluster.xml
new file mode 100644 (file)
index 0000000..a638eae
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<!--              _________
+                               |              |
+                               |  router  |
+       ____________|__________|_____________ backbone
+         |   |   |              |     |   |    
+    l0|        l1|     l2|           l97| l96 |   | l99
+      |          |       |   ........   |     |   |
+      |                                |
+   c-0.me                             c-99.me  
+-->
+<platform version="3">
+<AS  id="AS0"  routing="Full">
+  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
+               radical="0-99"  power="1000000000"    bw="125000000"     lat="5E-5"
+        bb_bw="2250000000" bb_lat="5E-4"/>
+</AS>
+</platform>
diff --git a/examples/msg/ns3/Two_clusters-d.xml b/examples/msg/ns3/Two_clusters-d.xml
new file mode 100644 (file)
index 0000000..2921183
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+  <process host="c-30.me" function="master">
+      <argument value="100"/>
+      <argument value="c-160.me"/>
+      <argument value="1"/>
+  </process>
+
+  <process host="c-160.me" function="slave">
+    <argument value="1"/>
+  </process>
+     
+</platform>
diff --git a/examples/msg/ns3/Two_clusters.xml b/examples/msg/ns3/Two_clusters.xml
new file mode 100644 (file)
index 0000000..03810af
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+<!--
+                                         __________________________________________________
+                  ____|_____                                                                                   |
+                               |              |                                                                                        |
+                               |  router1 |                                                                                    |
+       ____________|__________|_____________ csma1                                                     |
+         |   |   |              |     |   |                                                            |backbone
+    l0|        l1|     l2|           l97|  l98|   | l99                                                        |
+      |          |       |   ........   |     |   |                                                            |
+      |                                |                                                               |
+   c-0.me                             c-99.me                          |
+                     ___________________________________________________|
+                                 ___|______
+                               |              |
+                               |  router2 |
+       ____________|__________|_____________ csma2
+        |    |    |               |     |   |          
+ l100|l101|       |           l197| l198|   | l199
+     |   |        |   ........    |     |   |
+     |                                   |
+   c-100.me                             c-199.me       
+-->
+<AS  id="AS0"  routing="Full">
+  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
+               radical="0-99"  power="1000000000"    bw="125000000"     lat="5E-5"
+        bb_bw="2250000000" bb_lat="5E-4"/>
+               
+  <cluster id="my_cluster_2" prefix="c-" suffix=".me"
+           radical="100-199" power="1000000000"        bw="125000000"  lat="5E-5"
+           bb_bw="2250000000" bb_lat="5E-4"/>  
+       
+     <link id="backbone" bandwidth="1250000000" latency="5E-4"/>  
+       
+     <ASroute src="my_cluster_1" dst="my_cluster_2" 
+        gw_src="c-my_cluster_1_router.me" 
+        gw_dst="c-my_cluster_2_router.me">
+               <link_ctn id="backbone"/>
+     </ASroute>   
+     <ASroute src="my_cluster_2" dst="my_cluster_1" 
+        gw_src="c-my_cluster_2_router.me" 
+        gw_dst="c-my_cluster_1_router.me">
+               <link_ctn id="backbone"/>
+     </ASroute> 
+</AS>
+</platform>
index ea514d3..8777c00 100644 (file)
@@ -17,6 +17,8 @@ extern xbt_lib_t as_router_lib;
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_ns3, surf,
                                 "Logging specific to the SURF network NS3 module");
 
+#define MAX_LENGHT_IPV4 16 //255.255.255.255\0
+
 extern routing_global_t global_routing;
 extern xbt_dict_t dict_socket;
 
@@ -54,7 +56,7 @@ static void replace_bdw_ns3(char * bdw)
 {
        char *temp = xbt_strdup(bdw);
        xbt_free(bdw);
-       bdw = bprintf("%fbps",atof(temp));
+       bdw = bprintf("%fBps",atof(temp));
        xbt_free(temp);
 
 }
@@ -76,11 +78,18 @@ void parse_ns3_add_host(void)
                                ns3_add_host(A_surfxml_host_id)
                                );
 }
+
+static void ns3_free_dynar(void * elmts){
+       if(elmts)
+               free(elmts);
+       return;
+}
+
 void parse_ns3_add_link(void)
 {
        XBT_DEBUG("NS3_ADD_LINK '%s'",A_surfxml_link_id);
 
-       if(!IPV4addr) IPV4addr = xbt_dynar_new(sizeof(char*),free);
+       if(!IPV4addr) IPV4addr = xbt_dynar_new(MAX_LENGHT_IPV4*sizeof(char),ns3_free_dynar);
 
        tmgr_trace_t bw_trace;
        tmgr_trace_t state_trace;
@@ -188,8 +197,6 @@ void parse_ns3_add_cluster(void)
                }
        }
 
-
-
        //Create links
        unsigned int cpt;
        int elmts;
@@ -258,6 +265,8 @@ void create_ns3_topology()
 {
    XBT_DEBUG("Starting topology generation");
 
+   xbt_dynar_shrink(IPV4addr,0);
+
    //get the onelinks from the parsed platform
    xbt_dynar_t onelink_routes = global_routing->get_onelink_routes();
    if (!onelink_routes)
@@ -273,8 +282,10 @@ void create_ns3_topology()
 
      if( strcmp(src,dst) && ((surf_ns3_link_t)link)->created){
      XBT_DEBUG("Route from '%s' to '%s' with link '%s'",src,dst,((surf_ns3_link_t)link)->data->id);
-     char * link_bdw = bprintf("%sBps",((surf_ns3_link_t)link)->data->bdw);
-        char * link_lat = bprintf("%ss",(((surf_ns3_link_t)link)->data->lat));
+     char * link_bdw = bprintf("%s",((surf_ns3_link_t)link)->data->bdw);
+        char * link_lat = bprintf("%s",(((surf_ns3_link_t)link)->data->lat));
+        replace_lat_ns3(link_lat);
+        replace_bdw_ns3(link_bdw);
         ((surf_ns3_link_t)link)->created = 0;
 
         //      XBT_DEBUG("src (%s), dst (%s), src_id = %d, dst_id = %d",src,dst, src_id, dst_id);
@@ -400,6 +411,10 @@ static double ns3_share_resources(double min)
        ns3_simulator(min);
        time_to_next_flow_completion = ns3_time() - surf_get_clock();
 
+//     XBT_INFO("min       : %f",min);
+//     XBT_INFO("ns3  time : %f",ns3_time());
+//     XBT_INFO("surf time : %f",surf_get_clock());
+
        xbt_assert(time_to_next_flow_completion,
                          "Time to next flow completion not initialized!\n");
 
index 8fcc51e..03ddec0 100644 (file)
@@ -74,7 +74,7 @@ int ns3_create_flow(const char* a,const char *b,double start,u_int32_t TotalByte
 
        char* addr = (char*)xbt_dynar_get_ptr(IPV4addr,node2->node_num);
 
-       XBT_INFO("ns3_create_flow %d Bytes from %d to %d with Interface %s",TotalBytes, node1->node_num, node2->node_num,addr);
+       XBT_DEBUG("ns3_create_flow %d Bytes from %d to %d with Interface %s",TotalBytes, node1->node_num, node2->node_num,addr);
        ns3_sim->create_flow_NS3(src_node,
                        dst_node,
                        port_number,
@@ -188,7 +188,6 @@ void * ns3_add_cluster(char * bw,char * lat,char *id)
                number_of_links++;
        }
        XBT_DEBUG("Number of nodes in Cluster_nodes: %d",Cluster_nodes.GetN());
-
 }
 
 void * ns3_add_AS(char * id)
@@ -199,7 +198,7 @@ void * ns3_add_AS(char * id)
 
 static char* transformIpv4Address (Ipv4Address from){
        std::stringstream sstream;
-               sstream << interfaces.GetAddress(interfaces.GetN()-2);
+               sstream << from ;
                std::string s = sstream.str();
                size_t size = s.size() + 1;
                char* IPaddr = bprintf("%s",s.c_str());
@@ -233,9 +232,11 @@ void * ns3_add_link(int src,int dst,char * bw,char * lat)
        free(adr);
        interfaces.Add(address.Assign (netA));
 
+       XBT_DEBUG("Have write '%s' for Node '%d'",transformIpv4Address(interfaces.GetAddress(interfaces.GetN()-2)),src);
        xbt_dynar_set(IPV4addr,src,
                        transformIpv4Address(interfaces.GetAddress(interfaces.GetN()-2)));
 
+       XBT_DEBUG("Have write '%s' for Node '%d'",transformIpv4Address(interfaces.GetAddress(interfaces.GetN()-1)),dst);
        xbt_dynar_set(IPV4addr,dst,
                        transformIpv4Address(interfaces.GetAddress(interfaces.GetN()-1)));
 
index 41ef634..a1dd0ed 100644 (file)
@@ -122,7 +122,6 @@ static void send_callback(Ptr<Socket> localSocket, uint32_t txSpace){
       toWrite = min (toWrite, localSocket->GetTxAvailable ());
       int amountSent = localSocket->Send (&data[0], toWrite, 0);
 
-//      cout << Simulator::Now () << "  AmountSend: " << amountSent << "  Towrite: " << toWrite << endl;
       if(amountSent < 0)
          return;
          (mysocket->sentBytes) += amountSent;