+
+static char* transformIpv4Address (Ipv4Address from){
+ std::stringstream sstream;
+ sstream << from ;
+ std::string s = sstream.str();
+ return bprintf("%s",s.c_str());
+}
+
+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);
+ }
+
+
+ MyPointToPointHelper pointToPoint;
+
+ NetDeviceContainer netA;
+ Ipv4AddressHelper address;
+
+ Ptr<Node> a = nodes.Get(src);
+ Ptr<Node> b = nodes.Get(dst);
+
+ XBT_DEBUG("\tAdd PTP from %d to %d bw:'%s' lat:'%s'",src,dst,bw,lat);
+ pointToPoint.SetDeviceAttribute ("DataRate", StringValue (bw));
+ pointToPoint.SetChannelAttribute ("Delay", StringValue (lat));
+ //pointToPoint.EnablePcapAll("test_ns3_trace"); //DEBUG
+
+ netA.Add(pointToPoint.Install (a, type_src, b, type_dst));
+
+ char * adr = bprintf("%d.%d.0.0",number_of_networks,number_of_links);
+ address.SetBase (adr, "255.255.0.0");
+ XBT_DEBUG("\tInterface stack '%s'",adr);
+ free(adr);
+ interfaces.Add(address.Assign (netA));
+
+ char *tmp = transformIpv4Address(interfaces.GetAddress(interfaces.GetN()-2));
+ 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_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)
+ xbt_die("Number of links and networks exceed 255*255");
+ number_of_links = 1;
+ number_of_networks++;
+ }else{
+ number_of_links++;
+ }
+}
+
+void * ns3_end_platform(void)
+{
+ XBT_DEBUG("InitializeRoutes");
+ GlobalRouteManager::BuildGlobalRoutingDatabase();
+ GlobalRouteManager::InitializeRoutes();
+}