Merge branch 'license/spdx'
[oweals/gnunet.git] / src / ats-tests / ats-testing-traffic.c
index fade095541501941b80db5ce09f77d7d4dbe7692..3756596c9f8495871a53b41db2f288a46279b7e1 100644 (file)
@@ -1,21 +1,21 @@
 /*
  This file is part of GNUnet.
- Copyright (C) 2010-2013 GNUnet e.V.
+ Copyright (C) 2010-2013, 2016 GNUnet e.V.
 
- GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3, or (at your
- option) any later version.
+ GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
 
  GNUnet is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- General Public License for more details.
Affero General Public License for more details.
 
- You should have received a copy of the GNU General Public License
- along with GNUnet; see the file COPYING.  If not, write to the
- Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
+ You should have received a copy of the GNU Affero General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+     SPDX-License-Identifier: AGPL3.0-or-later
  */
 /**
  * @file ats-tests/ats-testing-traffic.c
@@ -100,51 +100,12 @@ get_delay (struct TrafficGenerator *tg)
 }
 
 
-static size_t
-send_ping_ready_cb (void *cls, size_t size, void *buf)
+static void
+update_ping_data (void *cls)
 {
   struct BenchmarkPartner *p = cls;
-  static char msgbuf[TEST_MESSAGE_SIZE];
-  struct GNUNET_MessageHeader *msg;
   struct GNUNET_TIME_Relative delay;
 
-  if (NULL == buf)
-  {
-    GNUNET_break (0);
-    return 0;
-  }
-  if (size < TEST_MESSAGE_SIZE)
-  {
-    GNUNET_break (0);
-    return 0;
-  }
-
-  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
-             "Master [%u]: Sending PING to [%u]\n",
-             p->me->no, p->dest->no);
-  if (top->test_core)
-  {
-    if (NULL == p->cth)
-    {
-      GNUNET_break (0);
-    }
-    p->cth = NULL;
-  }
-  else
-  {
-    if (NULL == p->tth)
-    {
-      GNUNET_break (0);
-    }
-    p->tth = NULL;
-  }
-
-  msg = (struct GNUNET_MessageHeader *) &msgbuf;
-  memset (&msgbuf, 'a', TEST_MESSAGE_SIZE);
-  msg->type = htons (TEST_MESSAGE_TYPE_PING);
-  msg->size = htons (TEST_MESSAGE_SIZE);
-  GNUNET_memcpy (buf, msg, TEST_MESSAGE_SIZE);
-
   p->messages_sent++;
   p->bytes_sent += TEST_MESSAGE_SIZE;
   p->me->total_messages_sent++;
@@ -153,16 +114,16 @@ send_ping_ready_cb (void *cls, size_t size, void *buf)
   if (NULL == p->tg)
   {
     GNUNET_break (0);
-    return TEST_MESSAGE_SIZE;
+    return;
   }
   delay = get_delay (p->tg);
-
-  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Delay for next transmission %llu ms\n",
-      (long long unsigned int) delay.rel_value_us / 1000);
-  p->tg->next_ping_transmission = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(),
-      delay);
-
-  return TEST_MESSAGE_SIZE;
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Delay for next transmission %s\n",
+             GNUNET_STRINGS_relative_time_to_string (delay,
+                                                     GNUNET_YES));
+  p->tg->next_ping_transmission
+    = GNUNET_TIME_absolute_add (GNUNET_TIME_absolute_get(),
+                               delay);
 }
 
 
@@ -170,86 +131,66 @@ static void
 comm_schedule_send (void *cls)
 {
   struct BenchmarkPartner *p = cls;
+  struct TestMessage *msg;
+  struct GNUNET_MQ_Envelope *env;
 
   p->tg->send_task = NULL;
   p->last_message_sent = GNUNET_TIME_absolute_get();
-  if (GNUNET_YES == top->test_core)
-  {
-    p->cth = GNUNET_CORE_notify_transmit_ready (p->me->ch, GNUNET_NO,
-                                                GNUNET_CORE_PRIO_BEST_EFFORT,
-                                                GNUNET_TIME_UNIT_MINUTES,
-                                                &p->dest->id,
-                                                TEST_MESSAGE_SIZE,
-                                                &send_ping_ready_cb, p);
-  }
-  else
-  {
-    p->tth = GNUNET_TRANSPORT_notify_transmit_ready (p->me->th,
-                                                     &p->dest->id,
-                                                     TEST_MESSAGE_SIZE,
-                                                     GNUNET_TIME_UNIT_MINUTES,
-                                                     &send_ping_ready_cb, p);
-  }
+  env = GNUNET_MQ_msg (msg,
+                      TEST_MESSAGE_TYPE_PING);
+  memset (msg->padding,
+         'a',
+         sizeof (msg->padding));
+  GNUNET_MQ_notify_sent (env,
+                        &update_ping_data,
+                        p);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Master [%u]: Sending PING to [%u]\n",
+             p->me->no,
+             p->dest->no);
+  GNUNET_MQ_send (p->mq,
+                 env);
 }
 
 
-static size_t
-comm_send_pong_ready (void *cls, size_t size, void *buf)
+static void
+update_pong_data (void *cls)
 {
-  static char msgbuf[TEST_MESSAGE_SIZE];
   struct BenchmarkPartner *p = cls;
-  struct GNUNET_MessageHeader *msg;
-
-  if (GNUNET_YES == top->test_core)
-    p->cth = NULL;
-  else
-    p->tth = NULL;
 
   p->messages_sent++;
   p->bytes_sent += TEST_MESSAGE_SIZE;
   p->me->total_messages_sent++;
   p->me->total_bytes_sent += TEST_MESSAGE_SIZE;
-
-  msg = (struct GNUNET_MessageHeader *) &msgbuf;
-  memset (&msgbuf, 'a', TEST_MESSAGE_SIZE);
-  msg->type = htons (TEST_MESSAGE_TYPE_PONG);
-  msg->size = htons (TEST_MESSAGE_SIZE);
-  GNUNET_memcpy (buf, msg, TEST_MESSAGE_SIZE);
-
-  return TEST_MESSAGE_SIZE;
 }
 
 
 void
 GNUNET_ATS_TEST_traffic_handle_ping (struct BenchmarkPartner *p)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-      "Slave [%u]: Received PING from [%u], sending PONG\n", p->me->no,
-      p->dest->no);
+  struct TestMessage *msg;
+  struct GNUNET_MQ_Envelope *env;
 
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Slave [%u]: Received PING from [%u], sending PONG\n",
+             p->me->no,
+             p->dest->no);
   p->messages_received++;
   p->bytes_received += TEST_MESSAGE_SIZE;
   p->me->total_messages_received++;
   p->me->total_bytes_received += TEST_MESSAGE_SIZE;
 
-  if (GNUNET_YES == top->test_core)
-  {
-    GNUNET_assert (NULL == p->cth);
-
-    p->cth
-      = GNUNET_CORE_notify_transmit_ready (p->me->ch, GNUNET_NO,
-                                           GNUNET_CORE_PRIO_BEST_EFFORT,
-                                           GNUNET_TIME_UNIT_MINUTES,
-                                           &p->dest->id, TEST_MESSAGE_SIZE,
-                                           &comm_send_pong_ready, p);
-  }
-  else
-  {
-    GNUNET_assert (NULL == p->tth);
-    p->tth = GNUNET_TRANSPORT_notify_transmit_ready (p->me->th, &p->dest->id,
-        TEST_MESSAGE_SIZE, GNUNET_TIME_UNIT_MINUTES, &comm_send_pong_ready,
-        p);
-  }
+  
+  env = GNUNET_MQ_msg (msg,
+                      TEST_MESSAGE_TYPE_PING);
+  memset (msg->padding,
+         'a',
+         sizeof (msg->padding));
+  GNUNET_MQ_notify_sent (env,
+                        &update_pong_data,
+                        p);
+  GNUNET_MQ_send (p->mq,
+                 env);
 }
 
 
@@ -258,8 +199,9 @@ GNUNET_ATS_TEST_traffic_handle_pong (struct BenchmarkPartner *p)
 {
   struct GNUNET_TIME_Relative left;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-      "Master [%u]: Received PONG from [%u], next message\n", p->me->no,
-      p->dest->no);
+             "Master [%u]: Received PONG from [%u], next message\n",
+             p->me->no,
+             p->dest->no);
 
   p->messages_received++;
   p->bytes_received += TEST_MESSAGE_SIZE;
@@ -325,7 +267,9 @@ GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src,
   }
 
   tg = GNUNET_new (struct TrafficGenerator);
-  GNUNET_CONTAINER_DLL_insert (tg_head, tg_tail, tg);
+  GNUNET_CONTAINER_DLL_insert (tg_head,
+                              tg_tail,
+                              tg);
   tg->type = type;
   tg->src = src;
   tg->dest = dest;
@@ -336,50 +280,53 @@ GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src,
   tg->next_ping_transmission = GNUNET_TIME_UNIT_FOREVER_ABS;
 
   switch (type) {
-    case GNUNET_ATS_TEST_TG_CONSTANT:
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Setting up constant traffic generator master[%u] `%s' and slave [%u] `%s' max %u Bips\n",
-                  dest->me->no, GNUNET_i2s (&dest->me->id),
-                  dest->dest->no, GNUNET_i2s (&dest->dest->id),
-                  base_rate);
-      break;
-    case GNUNET_ATS_TEST_TG_LINEAR:
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Setting up linear traffic generator master[%u] `%s' and slave [%u] `%s' min %u Bips max %u Bips\n",
-                  dest->me->no, GNUNET_i2s (&dest->me->id),
-                  dest->dest->no, GNUNET_i2s (&dest->dest->id),
-                  base_rate,
-                  max_rate);
-      break;
-    case GNUNET_ATS_TEST_TG_SINUS:
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Setting up sinus traffic generator master[%u] `%s' and slave [%u] `%s' baserate %u Bips, amplitude %u Bps\n",
-                  dest->me->no, GNUNET_i2s (&dest->me->id),
-                  dest->dest->no, GNUNET_i2s (&dest->dest->id),
-                  base_rate, max_rate);
-      break;
-    case GNUNET_ATS_TEST_TG_RANDOM:
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Setting up random traffic generator master[%u] `%s' and slave [%u] `%s' min %u Bips max %u Bps\n",
-                  dest->me->no, GNUNET_i2s (&dest->me->id),
-                  dest->dest->no, GNUNET_i2s (&dest->dest->id),
-                  base_rate, max_rate);
+  case GNUNET_ATS_TEST_TG_CONSTANT:
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+               "Setting up constant traffic generator master[%u] `%s' and slave [%u] `%s' max %u Bips\n",
+               dest->me->no,
+               GNUNET_i2s (&dest->me->id),
+               dest->dest->no,
+               GNUNET_i2s (&dest->dest->id),
+               base_rate);
+    break;
+  case GNUNET_ATS_TEST_TG_LINEAR:
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+               "Setting up linear traffic generator master[%u] `%s' and slave [%u] `%s' min %u Bips max %u Bips\n",
+               dest->me->no,
+               GNUNET_i2s (&dest->me->id),
+               dest->dest->no,
+               GNUNET_i2s (&dest->dest->id),
+               base_rate,
+               max_rate);
+    break;
+  case GNUNET_ATS_TEST_TG_SINUS:
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+               "Setting up sinus traffic generator master[%u] `%s' and slave [%u] `%s' baserate %u Bips, amplitude %u Bps\n",
+               dest->me->no,
+               GNUNET_i2s (&dest->me->id),
+               dest->dest->no,
+               GNUNET_i2s (&dest->dest->id),
+               base_rate,
+               max_rate);
+    break;
+  case GNUNET_ATS_TEST_TG_RANDOM:
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+               "Setting up random traffic generator master[%u] `%s' and slave [%u] `%s' min %u Bips max %u Bps\n",
+               dest->me->no,
+               GNUNET_i2s (&dest->me->id),
+               dest->dest->no,
+               GNUNET_i2s (&dest->dest->id),
+               base_rate,
+               max_rate);
       break;
     default:
       break;
   }
 
-  if ( ((GNUNET_YES == top->test_core) && (NULL != dest->cth)) ||
-       ((GNUNET_NO == top->test_core) && (NULL != dest->tth)) )
-  {
-        GNUNET_break (0);
-        GNUNET_CONTAINER_DLL_remove (tg_head, tg_tail, tg);
-        GNUNET_free (tg);
-        return NULL;
-  }
-
   dest->tg = tg;
-  tg->send_task = GNUNET_SCHEDULER_add_now (&comm_schedule_send, dest);
+  tg->send_task
+    = GNUNET_SCHEDULER_add_now (&comm_schedule_send,
+                               dest);
   return tg;
 }
 
@@ -387,30 +334,15 @@ GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src,
 void
 GNUNET_ATS_TEST_generate_traffic_stop (struct TrafficGenerator *tg)
 {
-  GNUNET_CONTAINER_DLL_remove (tg_head, tg_tail, tg);
+  GNUNET_CONTAINER_DLL_remove (tg_head,
+                              tg_tail,
+                              tg);
   tg->dest->tg = NULL;
-
   if (NULL != tg->send_task)
   {
     GNUNET_SCHEDULER_cancel (tg->send_task);
     tg->send_task = NULL;
   }
-  if (top->test_core)
-  {
-    if (NULL != tg->dest->cth)
-    {
-      GNUNET_CORE_notify_transmit_ready_cancel (tg->dest->cth);
-      tg->dest->cth = NULL;
-    }
-  }
-  else
-  {
-    if (NULL != tg->dest->tth)
-    {
-      GNUNET_TRANSPORT_notify_transmit_ready_cancel (tg->dest->tth);
-      tg->dest->tth = NULL;
-    }
-  }
   GNUNET_free (tg);
 }
 
@@ -423,11 +355,12 @@ GNUNET_ATS_TEST_generate_traffic_stop_all ()
 {
   struct TrafficGenerator *cur;
   struct TrafficGenerator *next;
+
   next = tg_head;
   for (cur = next; NULL != cur; cur = next)
   {
-      next = cur->next;
-      GNUNET_ATS_TEST_generate_traffic_stop(cur);
+    next = cur->next;
+    GNUNET_ATS_TEST_generate_traffic_stop(cur);
   }
 }