Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git] / src / surf / ns3 / ns3_interface.cc
index 10d8d6b..eed590c 100644 (file)
@@ -10,6 +10,7 @@
 #include "xbt/log.h"
 #include "xbt/dynar.h"
 
+
 using namespace ns3;
 
 extern xbt_lib_t host_lib;
@@ -24,8 +25,6 @@ NodeContainer nodes;
 NodeContainer Cluster_nodes;
 Ipv4InterfaceContainer interfaces;
 
-
-
 int number_of_nodes = 0;
 int number_of_clusters_nodes = 0;
 int number_of_links = 1;
@@ -66,7 +65,7 @@ int ns3_create_flow(const char* a,const char *b,double start,u_int32_t TotalByte
        Ptr<Node> src_node = nodes.Get(node1->node_num);
        Ptr<Node> dst_node = nodes.Get(node2->node_num);
 
-       char* addr = (char*)xbt_dynar_get_ptr(IPV4addr,node2->node_num);
+       char* addr = (char*)xbt_dynar_get_as(IPV4addr,node2->node_num,char*);
 
        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,
@@ -103,6 +102,9 @@ int ns3_initialize(const char* TcpProtocol){
   Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1024)); // 1024-byte packet for easier reading
   Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
 
+#ifdef _HAVE_NS3_RED
+  XBT_INFO("Using RED version of ns3");
+#endif
   if(!strcmp(TcpProtocol,"default")){
          return 0;
   }
@@ -227,14 +229,20 @@ static char* transformIpv4Address (Ipv4Address from){
                return IPaddr;
 }
 
-void * ns3_add_link(int src,int dst,char * bw,char * lat)
+void * ns3_add_link(int src, e_ns3_network_element_type_t type_src,
+                                       int dst, e_ns3_network_element_type_t type_dst,
+                                       char * bw,char * lat)
 {
        if(number_of_links == 1 ) {
                LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
                LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
        }
 
+#ifdef _HAVE_NS3_RED
+       MyPointToPointHelper pointToPoint;
+#else
        PointToPointHelper pointToPoint;
+#endif
        NetDeviceContainer netA;
        Ipv4AddressHelper address;
 
@@ -246,7 +254,11 @@ void * ns3_add_link(int src,int dst,char * bw,char * lat)
        pointToPoint.SetChannelAttribute ("Delay", StringValue (lat));
        //pointToPoint.EnablePcapAll("test_ns3_trace"); //DEBUG
 
+#ifdef _HAVE_NS3_RED
+       netA.Add(pointToPoint.Install (a, type_src, b, type_dst));
+#else
        netA.Add(pointToPoint.Install (a, b));
+#endif
 
        char * adr = bprintf("%d.%d.0.0",number_of_networks,number_of_links);
        address.SetBase (adr, "255.255.0.0");
@@ -255,12 +267,12 @@ void * ns3_add_link(int src,int dst,char * bw,char * lat)
        interfaces.Add(address.Assign (netA));
 
        char *tmp = transformIpv4Address(interfaces.GetAddress(interfaces.GetN()-2));
-       XBT_DEBUG("Have write '%s' for Node '%d'",tmp,src);
-       xbt_dynar_set(IPV4addr,src,tmp);
+       xbt_dynar_set_as(IPV4addr,src,char*,tmp);
+       XBT_DEBUG("Have write '%s' for Node '%d'",(char*)xbt_dynar_get_as(IPV4addr,src,char*),src);
 
        tmp = transformIpv4Address(interfaces.GetAddress(interfaces.GetN()-1));
-       XBT_DEBUG("Have write '%s' for Node '%d'",tmp,dst);
-       xbt_dynar_set(IPV4addr,dst,tmp);
+       xbt_dynar_set_as(IPV4addr,dst,char*,tmp);
+       XBT_DEBUG("Have write '%s' for Node '%d'",(char*)xbt_dynar_get_as(IPV4addr,dst,char*),dst);
 
        if(number_of_links == 255){
                if(number_of_networks == 255)