Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : stateful mode disabled by default
[simgrid.git] / src / surf / ns3 / ns3_simulator.cc
index c705984..c09122c 100644 (file)
@@ -41,6 +41,12 @@ static XBT_INLINE void transformSocketPtr (Ptr<Socket> localSocket){
   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 +67,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 +86,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 +115,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 ();
 }
 
@@ -131,13 +137,16 @@ static void receive_callback(Ptr<Socket> localSocket){
 }
 
 static void send_callback(Ptr<Socket> localSocket, uint32_t txSpace){
-       uint8_t *data = (uint8_t*)malloc(sizeof(uint8_t)*txSpace);
        MySocket* mysocket = get_my_socket(localSocket);
+
        if (mysocket->remaining == 0){
                  //all data was already buffered (and socket was already closed), just return
                  return;
        }
-       while (mysocket->sentBytes < mysocket->totalBytes
+
+       uint8_t *data = (uint8_t*)malloc(sizeof(uint8_t)*txSpace);
+
+       while (mysocket->bufferedBytes < mysocket->totalBytes
                        && localSocket->GetTxAvailable () > 0)
        {
       uint32_t toWrite = min ((mysocket->remaining), txSpace);
@@ -146,15 +155,15 @@ static void send_callback(Ptr<Socket> 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();
        }
 }