X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/95689b491f0fa08b65fbce516d591a9e44179796..cfc676704bebcd57e5ea98bb43154245a150948f:/src/surf/ns3/ns3_simulator.cc diff --git a/src/surf/ns3/ns3_simulator.cc b/src/surf/ns3/ns3_simulator.cc index 9509298806..ccb10d6d71 100644 --- a/src/surf/ns3/ns3_simulator.cc +++ b/src/surf/ns3/ns3_simulator.cc @@ -1,10 +1,10 @@ -/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. +/* Copyright (c) 2007-2014. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include "surf/ns3/ns3_simulator.h" +#include "src/surf/ns3/ns3_simulator.h" #include "xbt/dict.h" #include "xbt/log.h" #include "xbt/sysdep.h" @@ -24,8 +24,7 @@ static void StartFlow(Ptr sock, const char *to, uint16_t port_number); -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simulator_ns3, surf, - "Logging specific to the SURF network NS3 module"); +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(ns3); // Constructor. NS3Sim::NS3Sim(){ @@ -34,13 +33,19 @@ NS3Sim::NS3Sim(){ NS3Sim::~NS3Sim(){ } -static XBT_INLINE void transformSocketPtr (Ptr localSocket){ +static inline void transformSocketPtr (Ptr localSocket){ std::stringstream sstream; sstream << localSocket ; std::string s = sstream.str(); sprintf(socket_key,"%s",s.c_str()); } +static void delete_mysocket(void *p) +{ + MySocket *sock = (MySocket *)p; + delete(sock); +} + /* * This function create a flow from src to dst * @@ -61,7 +66,7 @@ void NS3Sim::create_flow_NS3( uint32_t totalBytes, void * action) { - if(!dict_socket) dict_socket = xbt_dict_new(); + if(!dict_socket) dict_socket = xbt_dict_new_homogeneous(delete_mysocket); PacketSinkHelper sink ("ns3::TcpSocketFactory", InetSocketAddress (Ipv4Address::GetAny(), @@ -80,7 +85,7 @@ void NS3Sim::create_flow_NS3( mysocket->action = action; transformSocketPtr(sock); - xbt_dict_set(dict_socket,socket_key, mysocket,free); + xbt_dict_set(dict_socket,socket_key, mysocket,NULL); sock->Bind(InetSocketAddress(port_number)); XBT_DEBUG("Create flow starting to %fs + %fs = %fs",start-ns3_time(), ns3_time(), start); @@ -109,7 +114,7 @@ double NS3Sim::get_sent_from_socket(void *socket){ void NS3Sim::simulator_start(double min){ if(min > 0.0) Simulator::Stop(Seconds(min)); - XBT_DEBUG("Start simulator"); + XBT_DEBUG("Start simulator '%f'",min); Simulator::Run (); } @@ -140,7 +145,7 @@ static void send_callback(Ptr localSocket, uint32_t txSpace){ uint8_t *data = (uint8_t*)malloc(sizeof(uint8_t)*txSpace); - while (mysocket->sentBytes < mysocket->totalBytes + while (mysocket->bufferedBytes < mysocket->totalBytes && localSocket->GetTxAvailable () > 0) { uint32_t toWrite = min ((mysocket->remaining), txSpace); @@ -149,15 +154,15 @@ static void send_callback(Ptr localSocket, uint32_t txSpace){ if(amountSent < 0) return; - (mysocket->sentBytes) += amountSent; - (mysocket->remaining) -= amountSent; + (mysocket->bufferedBytes) += amountSent; + (mysocket->remaining) -= amountSent; XBT_DEBUG("send_cb of F[%p, %p, %d] (%d/%d) %d buffered", mysocket, mysocket->action, mysocket->totalBytes, mysocket->remaining, mysocket->totalBytes, amountSent); } free(data); - if ((mysocket->sentBytes) >= mysocket->totalBytes){ + if ((mysocket->bufferedBytes) >= mysocket->totalBytes){ localSocket->Close(); } }