/*
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
}
-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++;
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);
}
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);
}
{
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;
}
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;
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;
}
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);
}
{
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);
}
}