2 This file is part of GNUnet.
3 (C) 2010,2011 Christian Grothoff (and other contributing authors)
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
21 * @file ats/test_ats_api_common.c
22 * @brief shared functions for ats test
23 * @author Christian Grothoff
24 * @author Matthias Wachs
27 #include "test_ats_api_common.h"
29 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
30 #define BIG_M_STRING "unlimited"
33 #define PEERID0 "2AK99KD8RM9UA9LC3QKA0IQ5UBFC0FBB50EBGCFQT8448DGGACNAC4CJQDD1CPFS494O41U88DJD1FLIG8VA5CQR9IN4L96GP104MVO"
34 #define PEERID1 "5ED7I0AR3MSTAL7FQN04S22E0EQ3CR9RLASCDLVMM1BNFPUPTCT46DLKNJ4DACASJ6U0DR5J8S3R2UJL49682JS7MOVRAB8P8A4PJH0"
37 create_test_address (struct Test_Address *dest, char * plugin, void *session, void *addr, size_t addrlen)
40 dest->plugin = GNUNET_strdup (plugin);
41 dest->session = session;
44 dest->addr = GNUNET_malloc (addrlen);
45 memcpy (dest->addr, addr, addrlen);
49 dest->addr_len = addrlen;
53 free_test_address (struct Test_Address *dest)
55 GNUNET_free (dest->plugin);
56 if (NULL != dest->addr)
57 GNUNET_free (dest->addr);
61 compare_addresses (const struct GNUNET_HELLO_Address *address1, void *session1,
62 const struct GNUNET_HELLO_Address *address2, void *session2)
64 if (0 != memcmp (&address1->peer, &address2->peer, sizeof (struct GNUNET_PeerIdentity)))
66 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggestion with invalid peer id'\n");
69 if (0 != strcmp (address1->transport_name, address2->transport_name))
71 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggestion with invalid plugin'\n");
74 if (address1->address_length != address2->address_length)
76 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggestion with invalid address length'\n");
80 else if (0 != memcmp (address1->address, address2->address, address2->address_length))
82 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggestion with invalid address'\n");
85 if (session1 != session2)
87 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggestion with invalid session1 %p vs session2 %p'\n",
97 compare_ats (const struct GNUNET_ATS_Information *ats_is, uint32_t ats_count_is,
98 const struct GNUNET_ATS_Information *ats_should, uint32_t ats_count_should)
102 char *prop[] = GNUNET_ATS_PropertyStrings;
109 for (c_o = 0; c_o < ats_count_is; c_o++)
111 for (c_i = 0; c_i < ats_count_should; c_i++)
113 type1 = ntohl(ats_is[c_o].type);
114 type2 = ntohl(ats_should[c_i].type);
117 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS type `%s'\n",
119 val1 = ntohl(ats_is[c_o].value);
120 val2 = ntohl(ats_should[c_i].value);
123 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "ATS value `%s' not equal: %u != %u\n",
130 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS value `%s' equal: %u == %u\n",
142 * Load quotas for networks from configuration
144 * @param cfg configuration handle
145 * @param out_dest where to write outbound quotas
146 * @param in_dest where to write inbound quotas
147 * @param dest_length length of inbound and outbound arrays
148 * @return number of networks loaded
151 load_quotas (const struct GNUNET_CONFIGURATION_Handle *cfg,
152 unsigned long long *out_dest,
153 unsigned long long *in_dest,
156 char *network_str[GNUNET_ATS_NetworkTypeCount] = GNUNET_ATS_NetworkTypeString;
157 char * entry_in = NULL;
158 char * entry_out = NULL;
159 char * quota_out_str;
164 for (c = 0; (c < GNUNET_ATS_NetworkTypeCount) && (c < dest_length); c++)
168 GNUNET_asprintf (&entry_out, "%s_QUOTA_OUT", network_str[c]);
169 GNUNET_asprintf (&entry_in, "%s_QUOTA_IN", network_str[c]);
172 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string(cfg, "ats", entry_out, "a_out_str))
175 if (0 == strcmp(quota_out_str, BIG_M_STRING))
177 out_dest[c] = GNUNET_ATS_MaxBandwidth;
180 if ((GNUNET_NO == res) && (GNUNET_OK == GNUNET_STRINGS_fancy_size_to_bytes (quota_out_str, &out_dest[c])))
182 if ((GNUNET_NO == res) && (GNUNET_OK == GNUNET_CONFIGURATION_get_value_number (cfg, "ats", entry_out, &out_dest[c])))
185 if (GNUNET_NO == res)
187 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not load quota for network `%s': `%s', assigning default bandwidth %llu\n"),
188 network_str[c], quota_out_str, GNUNET_ATS_DefaultBandwidth);
189 out_dest[c] = GNUNET_ATS_DefaultBandwidth;
193 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Outbound quota configure for network `%s' is %llu\n"),
194 network_str[c], out_dest[c]);
196 GNUNET_free (quota_out_str);
200 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _("No outbound quota configured for network `%s', assigning default bandwidth %llu\n"),
201 network_str[c], GNUNET_ATS_DefaultBandwidth);
202 out_dest[c] = GNUNET_ATS_DefaultBandwidth;
206 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string(cfg, "ats", entry_in, "a_in_str))
209 if (0 == strcmp(quota_in_str, BIG_M_STRING))
211 in_dest[c] = GNUNET_ATS_MaxBandwidth;
214 if ((GNUNET_NO == res) && (GNUNET_OK == GNUNET_STRINGS_fancy_size_to_bytes (quota_in_str, &in_dest[c])))
216 if ((GNUNET_NO == res) && (GNUNET_OK == GNUNET_CONFIGURATION_get_value_number (cfg, "ats", entry_in, &in_dest[c])))
219 if (GNUNET_NO == res)
221 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not load quota for network `%s': `%s', assigning default bandwidth %llu\n"),
222 network_str[c], quota_in_str, GNUNET_ATS_DefaultBandwidth);
223 in_dest[c] = GNUNET_ATS_DefaultBandwidth;
227 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Inbound quota configured for network `%s' is %llu\n"),
228 network_str[c], in_dest[c]);
230 GNUNET_free (quota_in_str);
234 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _("No outbound quota configure for network `%s', assigning default bandwidth %llu\n"),
235 network_str[c], GNUNET_ATS_DefaultBandwidth);
236 out_dest[c] = GNUNET_ATS_DefaultBandwidth;
238 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Loaded quota for network `%s' (in/out): %llu %llu\n", network_str[c], in_dest[c], out_dest[c]);
239 GNUNET_free (entry_out);
240 GNUNET_free (entry_in);
242 return GNUNET_ATS_NetworkTypeCount;
246 * Create a ATS_address with the given information
248 * @param plugin_name plugin
249 * @param plugin_addr address
250 * @param plugin_addr_len address length
251 * @param session_id session
252 * @return the ATS_Address
255 create_address (const struct GNUNET_PeerIdentity *peer,
256 const char *plugin_name,
257 const void *plugin_addr, size_t plugin_addr_len,
260 struct ATS_Address *aa = NULL;
262 aa = GNUNET_malloc (sizeof (struct ATS_Address) + plugin_addr_len + strlen (plugin_name) + 1);
264 aa->addr_len = plugin_addr_len;
266 aa->plugin = (char *) &aa[1] + plugin_addr_len;
267 memcpy (&aa[1], plugin_addr, plugin_addr_len);
268 memcpy (aa->plugin, plugin_name, strlen (plugin_name) + 1);
269 aa->session_id = session_id;
270 aa->active = GNUNET_NO;
271 aa->used = GNUNET_NO;
272 aa->solver_information = NULL;
273 aa->assigned_bw_in = GNUNET_BANDWIDTH_value_init(0);
274 aa->assigned_bw_out = GNUNET_BANDWIDTH_value_init(0);
278 /* end of file test_ats_api_common.c */