From: Frederic Suter Date: Tue, 22 Mar 2016 21:40:41 +0000 (+0100) Subject: Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid X-Git-Tag: v3_13~332 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/16f327a31af4a34da3c887299b7a406a4d9584a8?hp=87e60665762d9720fdac3c9fdc45b16971b7d0d2 Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid --- diff --git a/src/surf/network_ns3.cpp b/src/surf/network_ns3.cpp index cd4e51b802..6ede3c79de 100644 --- a/src/surf/network_ns3.cpp +++ b/src/surf/network_ns3.cpp @@ -333,31 +333,28 @@ double NetworkNS3Model::next_occuring_event(double now) void NetworkNS3Model::updateActionsState(double now, double delta) { - xbt_dict_cursor_t cursor = NULL; - char *key; - void *data; + static xbt_dynar_t socket_to_destroy = xbt_dynar_new(sizeof(char*),NULL); - static xbt_dynar_t socket_to_destroy = NULL; - if(!socket_to_destroy) socket_to_destroy = xbt_dynar_new(sizeof(char*),NULL); + /* If there are no running flows, advance the NS3 simulator and return */ + if (getRunningActionSet()->empty()) { - /* If there are no running flows, just return */ - if (!getRunningActionSet()->size()) { - while(double_positive(now-ns3::Simulator::Now().GetSeconds(), sg_surf_precision)) { + while(double_positive(now - ns3::Simulator::Now().GetSeconds(), sg_surf_precision)) ns3_simulator(now-ns3::Simulator::Now().GetSeconds()); - } + return; } - NetworkNS3Action *action; - xbt_dict_foreach(flowFromSock,cursor,key,data){ - action = static_cast(ns3_get_socket_action(data)); - XBT_DEBUG("Processing socket %p (action %p)",data,action); - action->setRemains(action->getCost() - ns3_get_socket_sent(data)); + xbt_dict_cursor_t cursor = NULL; + char *ns3Socket; + SgFlow *sgFlow; + xbt_dict_foreach(flowFromSock,cursor,ns3Socket,sgFlow){ + NetworkNS3Action * action = sgFlow->action_; + XBT_DEBUG("Processing socket %p (action %p)",sgFlow,action); + action->setRemains(action->getCost() - sgFlow->sentBytes_); if (TRACE_is_enabled() && action->getState() == Action::State::running){ - double data_sent = ns3_get_socket_sent(data); - double data_delta_sent = data_sent - action->m_lastSent; + double data_delta_sent = sgFlow->sentBytes_ - action->m_lastSent; std::vector *route = new std::vector(); @@ -366,24 +363,25 @@ void NetworkNS3Model::updateActionsState(double now, double delta) TRACE_surf_link_set_utilization (link->getName(), action->getCategory(), (data_delta_sent)/delta, now-delta, delta); delete route; - action->m_lastSent = data_sent; + action->m_lastSent = sgFlow->sentBytes_; } - if(ns3_get_socket_is_finished(data) == 1){ - xbt_dynar_push(socket_to_destroy,&key); - XBT_DEBUG("Destroy socket %p of action %p", key, action); + if(sgFlow->finished_){ + xbt_dynar_push(socket_to_destroy,&ns3Socket); + XBT_DEBUG("Destroy socket %p of action %p", ns3Socket, action); action->finish(); action->setState(Action::State::done); } } while (!xbt_dynar_is_empty(socket_to_destroy)){ - xbt_dynar_pop(socket_to_destroy,&key); + xbt_dynar_pop(socket_to_destroy,&ns3Socket); - void *data = xbt_dict_get (flowFromSock, key); - action = static_cast(ns3_get_socket_action(data)); - XBT_DEBUG ("Removing socket %p of action %p", key, action); - xbt_dict_remove(flowFromSock, key); + if (XBT_LOG_ISENABLED(ns3, xbt_log_priority_debug)) { + SgFlow *flow = (SgFlow*)xbt_dict_get (flowFromSock, ns3Socket); + XBT_DEBUG ("Removing socket %p of action %p", ns3Socket, flow->action_); + } + xbt_dict_remove(flowFromSock, ns3Socket); } return; } @@ -465,22 +463,6 @@ void ns3_simulator(double min){ ns3_sim->simulator_start(min); } -simgrid::surf::NetworkNS3Action* ns3_get_socket_action(void *socket){ - return ((SgFlow *)socket)->action_; -} - -double ns3_get_socket_remains(void *socket){ - return ((SgFlow *)socket)->remaining_; -} - -double ns3_get_socket_sent(void *socket){ - return ((SgFlow *)socket)->sentBytes_; -} - -bool ns3_get_socket_is_finished(void *socket){ - return ((SgFlow *)socket)->finished_; -} - int ns3_create_flow(const char* a,const char *b,double start,u_int32_t TotalBytes,simgrid::surf::NetworkNS3Action * action) { ns3_node_t node1 = ns3_find_host(a); diff --git a/src/surf/ns3/ns3_interface.h b/src/surf/ns3/ns3_interface.h index d80c85beb4..1aafa368ee 100644 --- a/src/surf/ns3/ns3_interface.h +++ b/src/surf/ns3/ns3_interface.h @@ -41,10 +41,6 @@ SG_BEGIN_DECL() XBT_PUBLIC(int) ns3_initialize(const char* TcpProtocol); XBT_PUBLIC(int) ns3_create_flow(const char* a,const char *b,double start,u_int32_t TotalBytes,simgrid::surf::NetworkNS3Action * action); XBT_PUBLIC(void) ns3_simulator(double min); -XBT_PUBLIC(simgrid::surf::NetworkNS3Action*) ns3_get_socket_action(void *socket); -XBT_PUBLIC(double) ns3_get_socket_remains(void *socket); -XBT_PUBLIC(double) ns3_get_socket_sent(void *socket); -XBT_PUBLIC(bool) ns3_get_socket_is_finished(void *socket); XBT_PUBLIC(void *) ns3_add_host_cluster(const char * id); XBT_PUBLIC(void *) ns3_add_router(const char * id); XBT_PUBLIC(void *) ns3_add_AS(const char * id);