* @param malicious_getters number of malicious GET peers in the trial
* @param malicious_putters number of malicious PUT peers in the trial
* @param malicious_droppers number of malicious DROP peers in the trial
+ * @param malicious_get_frequency how often malicious gets are sent
+ * @param malicious_put_frequency how often malicious puts are sent
+ * @param stop_closest stop forwarding PUTs if closest node found
+ * @param stop_found stop forwarding GETs if data found
+ * @param strict_kademlia test used kademlia routing algorithm
+ * @param gets_succeeded how many gets did the test driver report success on
* @param message string to put into DB for this trial
*
* @return GNUNET_OK on success, GNUNET_SYSERR on failure
*/
- int (*insert_trial) (unsigned long long *trialuid, int num_nodes, int topology,
- int blacklist_topology, int connect_topology,
- int connect_topology_option, float connect_topology_option_modifier,
+ int (*insert_trial) (unsigned long long *trialuid, unsigned int num_nodes, unsigned int topology,
+ unsigned int blacklist_topology, unsigned int connect_topology,
+ unsigned int connect_topology_option, float connect_topology_option_modifier,
float topology_percentage, float topology_probability,
- int puts, int gets, int concurrent, int settle_time,
- int num_rounds, int malicious_getters, int malicious_putters,
- int malicious_droppers,
+ unsigned int puts, unsigned int gets, unsigned int concurrent, unsigned int settle_time,
+ unsigned int num_rounds, unsigned int malicious_getters, unsigned int malicious_putters,
+ unsigned int malicious_droppers, unsigned int malicious_get_frequency,
+ unsigned int malicious_put_frequency, unsigned int stop_closest, unsigned int stop_found,
+ unsigned int strict_kademlia, unsigned int gets_succeeded,
char *message);
/*
* Update dhttests.trials table with current server time as end time
*
* @param trialuid trial to update
- * @param totalMessagesDropped stats value for messages dropped
- * @param totalBytesDropped stats value for total bytes dropped
- * @param unknownPeers stats value for unknown peers
+ * @param gets_succeeded how many gets did the trial report successful
*
* @return GNUNET_OK on success, GNUNET_SYSERR on failure.
*/
int (*update_trial) (unsigned long long trialuid,
- unsigned long long totalMessagesDropped,
- unsigned long long totalBytesDropped,
- unsigned long long unknownPeers);
+ unsigned int gets_succeeded);
/*
* Records the current topology (number of connections, time, trial)
* then issuing GETS and PUTS on the DHT. Coarse results
* are reported, fine grained results (if requested) are
* logged to a (mysql) database, or to file.
+ *
+ * FIXME: Do churn, enable malicious peers!
*/
#include "platform.h"
#include "gnunet_testing_lib.h"
#define DEFAULT_TOPOLOGY_TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MINUTES, 8)
+/*
+ * Default frequency for sending malicious get messages
+ */
+#define DEFAULT_MALICIOUS_GET_FREQUENCY 1000 /* Number of milliseconds */
+
+/*
+ * Default frequency for sending malicious put messages
+ */
+#define DEFAULT_MALICIOUS_PUT_FREQUENCY 1000 /* Default is in milliseconds */
+
/* Structs */
+struct MaliciousContext
+{
+ /**
+ * Handle to DHT service (via the API)
+ */
+ struct GNUNET_DHT_Handle *dht_handle;
+
+ /**
+ * Handle to the peer daemon
+ */
+ struct GNUNET_TESTING_Daemon *daemon;
+
+ /**
+ * Task for disconnecting DHT handles
+ */
+ GNUNET_SCHEDULER_TaskIdentifier disconnect_task;
+
+ /**
+ * What type of malicious to set this peer to.
+ */
+ int malicious_type;
+};
+
struct TestPutContext
{
/* This is a linked list */
static unsigned long long malicious_droppers;
+static unsigned long long malicious_get_frequency;
+
+static unsigned long long malicious_put_frequency;
+
static unsigned long long settle_time;
static struct GNUNET_DHTLOG_Handle *dhtlog_handle;
*/
struct GNUNET_CONTAINER_MultiHashMap *stats_map;
+/**
+ * LL of malicious settings.
+ */
+struct MaliciousContext *all_malicious;
+
/**
* List of GETS to perform
*/
*/
static unsigned long long num_puts;
-/**
- * Total number of items to attempt to get.
- */
-static unsigned long long num_gets;
-
/**
* How many puts do we currently have in flight?
*/
*/
static unsigned long long puts_completed;
+/**
+ * Total number of items to attempt to get.
+ */
+static unsigned long long num_gets;
+
/**
* How many puts do we currently have in flight?
*/
*/
static unsigned long long gets_failed;
+/**
+ * How many malicious control messages do
+ * we currently have in flight?
+ */
+static unsigned long long outstanding_malicious;
+
+/**
+ * How many set malicious peers are done?
+ */
+static unsigned long long malicious_completed;
+
/**
* Global used to count how many connections we have currently
* been notified about (how many times has topology_callback been called
if (dhtlog_handle != NULL)
{
fprintf(stderr, "Update trial endtime\n");
- dhtlog_handle->update_trial (trialuid, 0, 0, 0);
+ dhtlog_handle->update_trial (trialuid, gets_completed);
GNUNET_DHTLOG_disconnect(dhtlog_handle);
dhtlog_handle = NULL;
}
if (dhtlog_handle != NULL)
{
fprintf(stderr, "Update trial endtime\n");
- dhtlog_handle->update_trial (trialuid, 0, 0, 0);
+ dhtlog_handle->update_trial (trialuid, gets_completed);
GNUNET_DHTLOG_disconnect(dhtlog_handle);
dhtlog_handle = NULL;
}
GNUNET_SCHEDULER_add_now (sched, &setup_puts_and_gets, NULL);
}
+/**
+ * Task to release DHT handles
+ */
+static void
+malicious_disconnect_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
+{
+ struct MaliciousContext *ctx = cls;
+ outstanding_malicious--;
+ malicious_completed++;
+ ctx->disconnect_task = GNUNET_SCHEDULER_NO_TASK;
+ GNUNET_DHT_disconnect(ctx->dht_handle);
+ ctx->dht_handle = NULL;
+ GNUNET_free(ctx);
+
+ if (malicious_completed == malicious_getters + malicious_putters + malicious_droppers)
+ {
+ GNUNET_SCHEDULER_cancel(sched, die_task);
+ fprintf(stderr, "Finished setting all malicious peers up, calling continuation!\n");
+ if (dhtlog_handle != NULL)
+ GNUNET_SCHEDULER_add_now (sched,
+ &continue_puts_and_gets, NULL);
+ else
+ GNUNET_SCHEDULER_add_delayed (sched,
+ GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, settle_time),
+ &continue_puts_and_gets, NULL);
+ }
+
+}
+
+/**
+ * Task to release DHT handles
+ */
+static void
+malicious_done_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
+{
+ struct MaliciousContext *ctx = cls;
+ GNUNET_SCHEDULER_cancel(sched, ctx->disconnect_task);
+ GNUNET_SCHEDULER_add_now(sched, &malicious_disconnect_task, ctx);
+}
+
+/**
+ * Set up some data, and call API PUT function
+ */
+static void
+set_malicious (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
+{
+ struct MaliciousContext *ctx = cls;
+ int ret;
+
+ if (outstanding_malicious > DEFAULT_MAX_OUTSTANDING_GETS)
+ {
+ GNUNET_SCHEDULER_add_delayed (sched, GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 100), &set_malicious, ctx);
+ return;
+ }
+
+ if (ctx->dht_handle == NULL)
+ {
+ ctx->dht_handle = GNUNET_DHT_connect(sched, ctx->daemon->cfg, 1);
+ outstanding_malicious++;
+ }
+
+ GNUNET_assert(ctx->dht_handle != NULL);
+
+
+#if VERBOSE > 1
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Setting peer %s malicious type %d\n",
+ ctx->daemon->shortname, ctx->malicious_type);
+#endif
+
+ ret = GNUNET_YES;
+ switch (ctx->malicious_type)
+ {
+ case GNUNET_MESSAGE_TYPE_DHT_MALICIOUS_GET:
+ ret = GNUNET_DHT_set_malicious_getter(ctx->dht_handle, malicious_get_frequency, &malicious_done_task, ctx);
+ break;
+ case GNUNET_MESSAGE_TYPE_DHT_MALICIOUS_PUT:
+ ret = GNUNET_DHT_set_malicious_putter(ctx->dht_handle, malicious_put_frequency, &malicious_done_task, ctx);
+ break;
+ case GNUNET_MESSAGE_TYPE_DHT_MALICIOUS_DROP:
+ ret = GNUNET_DHT_set_malicious_dropper(ctx->dht_handle, &malicious_done_task, ctx);
+ break;
+ default:
+ break;
+ }
+
+ if (ret == GNUNET_NO)
+ {
+ GNUNET_SCHEDULER_add_delayed (sched, GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 100), &set_malicious, ctx);
+ }
+ else
+ ctx->disconnect_task = GNUNET_SCHEDULER_add_delayed(sched, GNUNET_TIME_relative_get_forever(), &malicious_disconnect_task, ctx);
+}
+
+/**
+ * Select randomly from set of known peers,
+ * set the desired number of peers to the
+ * proper malicious types.
+ */
+static void
+setup_malicious_peers (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
+{
+ struct MaliciousContext *ctx;
+ int i;
+ uint32_t temp_daemon;
+
+ for (i = 0; i < malicious_getters; i++)
+ {
+ ctx = GNUNET_malloc(sizeof(struct MaliciousContext));
+ temp_daemon = GNUNET_CRYPTO_random_u32(GNUNET_CRYPTO_QUALITY_WEAK, num_peers);
+ ctx->daemon = GNUNET_TESTING_daemon_get(pg, temp_daemon);
+ ctx->malicious_type = GNUNET_MESSAGE_TYPE_DHT_MALICIOUS_GET;
+ GNUNET_SCHEDULER_add_now (sched, &set_malicious, ctx);
+
+ }
+
+ for (i = 0; i < malicious_putters; i++)
+ {
+ ctx = GNUNET_malloc(sizeof(struct MaliciousContext));
+ temp_daemon = GNUNET_CRYPTO_random_u32(GNUNET_CRYPTO_QUALITY_WEAK, num_peers);
+ ctx->daemon = GNUNET_TESTING_daemon_get(pg, temp_daemon);
+ ctx->malicious_type = GNUNET_MESSAGE_TYPE_DHT_MALICIOUS_PUT;
+ GNUNET_SCHEDULER_add_now (sched, &set_malicious, ctx);
+
+ }
+
+ for (i = 0; i < malicious_droppers; i++)
+ {
+ ctx = GNUNET_malloc(sizeof(struct MaliciousContext));
+ temp_daemon = GNUNET_CRYPTO_random_u32(GNUNET_CRYPTO_QUALITY_WEAK, num_peers);
+ ctx->daemon = GNUNET_TESTING_daemon_get(pg, temp_daemon);
+ ctx->malicious_type = GNUNET_MESSAGE_TYPE_DHT_MALICIOUS_DROP;
+ GNUNET_SCHEDULER_add_now (sched, &set_malicious, ctx);
+ }
+
+ if (malicious_getters + malicious_putters + malicious_droppers > 0)
+ die_task = GNUNET_SCHEDULER_add_delayed (sched, GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, (malicious_getters + malicious_putters + malicious_droppers) * 2),
+ &end_badly, "from set malicious");
+ else
+ {
+ if (dhtlog_handle != NULL)
+ GNUNET_SCHEDULER_add_now (sched,
+ &continue_puts_and_gets, NULL);
+ else
+ GNUNET_SCHEDULER_add_delayed (sched,
+ GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, settle_time),
+ &continue_puts_and_gets, NULL);
+ }
+
+}
+
/**
* This function is called whenever a connection attempt is finished between two of
* the started peers (started with GNUNET_TESTING_daemons_start). The total
if ((dhtlog_handle != NULL) && (settle_time > 0))
{
topo_ctx = GNUNET_malloc(sizeof(struct TopologyIteratorContext));
- topo_ctx->cont = &continue_puts_and_gets;
+ topo_ctx->cont = &setup_malicious_peers;
+ //topo_ctx->cont = &continue_puts_and_gets;
GNUNET_SCHEDULER_add_now(sched, &capture_current_topology, topo_ctx);
}
else
- GNUNET_SCHEDULER_add_delayed (sched, GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, settle_time), &continue_puts_and_gets, NULL);
+ {
+ GNUNET_SCHEDULER_add_now(sched, &setup_malicious_peers, NULL);
+ /*GNUNET_SCHEDULER_add_delayed (sched,
+ GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, settle_time),
+ &continue_puts_and_gets, NULL);*/
+ }
}
else if (total_connections + failed_connections == expected_connections)
{
char *hostfile;
float topology_probability;
unsigned long long temp_config_number;
+ int stop_closest;
+ int stop_found;
+ int strict_kademlia;
char *buf;
char *data;
int count;
}
}
+ stop_closest = GNUNET_CONFIGURATION_get_value_yesno(cfg, "dht", "stop_on_closest");
+ if (stop_closest == GNUNET_SYSERR)
+ stop_closest = GNUNET_NO;
+
+ stop_found = GNUNET_CONFIGURATION_get_value_yesno(cfg, "dht", "stop_found");
+ if (stop_found == GNUNET_SYSERR)
+ stop_found = GNUNET_NO;
+
+ strict_kademlia = GNUNET_CONFIGURATION_get_value_yesno(cfg, "dht", "strict_kademlia");
+ if (strict_kademlia == GNUNET_SYSERR)
+ strict_kademlia = GNUNET_NO;
+
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg, "dht_testing", "comment",
&trialmessage))
/**
* Get testing related options.
*/
+
+ if (GNUNET_NO == GNUNET_CONFIGURATION_get_value_number (cfg, "DHT_TESTING",
+ "MALICIOUS_GET_FREQUENCY",
+ &malicious_get_frequency))
+ malicious_get_frequency = DEFAULT_MALICIOUS_GET_FREQUENCY;
+
+
+ if (GNUNET_NO == GNUNET_CONFIGURATION_get_value_number (cfg, "DHT_TESTING",
+ "MALICIOUS_PUT_FREQUENCY",
+ &malicious_put_frequency))
+ malicious_put_frequency = DEFAULT_MALICIOUS_PUT_FREQUENCY;
+
topology_str = NULL;
if ((GNUNET_YES ==
GNUNET_CONFIGURATION_get_value_string(cfg, "testing", "topology",
topology_probability, num_puts, num_gets,
max_outstanding_gets, settle_time, 1,
malicious_getters, malicious_putters,
- malicious_droppers, trialmessage);
+ malicious_droppers, malicious_get_frequency,
+ malicious_put_frequency, stop_closest, stop_found,
+ strict_kademlia, 0, trialmessage);
}
else if (dhtlog_handle != NULL)
{
topology_probability, num_puts, num_gets,
max_outstanding_gets, settle_time, 1,
malicious_getters, malicious_putters,
- malicious_droppers, "");
+ malicious_droppers, malicious_get_frequency,
+ malicious_put_frequency, stop_closest, stop_found,
+ strict_kademlia, 0, "");
}
GNUNET_free_non_null(trialmessage);
*/
#define DEFAULT_MALICIOUS_GET_FREQUENCY 1000 /* Number of milliseconds */
-/**
- * Type for a malicious request, so we can ignore it during testing
- */
-#define DHT_MALICIOUS_MESSAGE_TYPE 42
/*
* Default frequency for sending malicious put messages
*/
#define DEFAULT_MALICIOUS_PUT_FREQUENCY 1000 /* Default is in milliseconds */
+/**
+ * Type for a malicious request, so we can ignore it during testing
+ */
+#define DHT_MALICIOUS_MESSAGE_TYPE 42
+
#define DHT_DEFAULT_PING_DELAY GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MINUTES, 1)
/**
static GNUNET_HashCode key;
unsigned int mcsize;
uint32_t random_key;
+
+ if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+ return;
+
put_message.header.size = htons(sizeof(struct GNUNET_DHT_GetMessage));
put_message.header.type = htons(GNUNET_MESSAGE_TYPE_DHT_PUT);
put_message.type = htons(DHT_MALICIOUS_MESSAGE_TYPE);
message_context.msg_options = ntohl (0);
message_context.network_size = estimate_diameter();
message_context.peer = &my_identity;
+
+ if (dhtlog_handle != NULL)
+ dhtlog_handle->insert_dhtkey(NULL, &key);
increment_stats(STAT_PUT_START);
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "%s:%s Sending malicious PUT message with hash %s", my_short_id, "DHT", GNUNET_h2s(&key));
route_message(NULL, &put_message.header, &message_context);
static GNUNET_HashCode key;
unsigned int mcsize;
uint32_t random_key;
+
+ if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+ return;
+
get_message.header.size = htons(sizeof(struct GNUNET_DHT_GetMessage));
get_message.header.type = htons(GNUNET_MESSAGE_TYPE_DHT_GET);
get_message.type = htons(DHT_MALICIOUS_MESSAGE_TYPE);
message_context.msg_options = ntohl (0);
message_context.network_size = estimate_diameter();
message_context.peer = &my_identity;
+
+ if (dhtlog_handle != NULL)
+ dhtlog_handle->insert_dhtkey(NULL, &key);
increment_stats(STAT_GET_START);
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "%s:%s Sending malicious GET message with hash %s", my_short_id, "DHT", GNUNET_h2s(&key));
route_message(NULL, &get_message.header, &message_context);
case GNUNET_MESSAGE_TYPE_DHT_MALICIOUS_GET:
if (ntohs(dht_control_msg->variable) > 0)
malicious_get_frequency = ntohs(dht_control_msg->variable);
+ if (malicious_get_frequency == 0)
+ malicious_get_frequency = DEFAULT_MALICIOUS_GET_FREQUENCY;
if (malicious_getter != GNUNET_YES)
GNUNET_SCHEDULER_add_now(sched, &malicious_get_task, NULL);
malicious_getter = GNUNET_YES;
case GNUNET_MESSAGE_TYPE_DHT_MALICIOUS_PUT:
if (ntohs(dht_control_msg->variable) > 0)
malicious_put_frequency = ntohs(dht_control_msg->variable);
+ if (malicious_put_frequency == 0)
+ malicious_put_frequency = DEFAULT_MALICIOUS_PUT_FREQUENCY;
if (malicious_putter != GNUNET_YES)
GNUNET_SCHEDULER_add_now(sched, &malicious_put_task, NULL);
malicious_putter = GNUNET_YES;
#define DEBUG_DHTLOG GNUNET_NO
-/*
- * Inserts the specified trial into the dhttests.trials table
- *
- * @param trialuid return the trialuid of the newly inserted trial
- * @param num_nodes how many nodes are in the trial
- * @param topology integer representing topology for this trial
- * @param blacklist_topology integer representing blacklist topology for this trial
- * @param connect_topology integer representing connect topology for this trial
- * @param connect_topology_option integer representing connect topology option
- * @param connect_topology_option_modifier float to modify connect option
- * @param topology_percentage percentage modifier for certain topologies
- * @param topology_probability probability modifier for certain topologies
- * @param puts number of puts to perform
- * @param gets number of gets to perform
- * @param concurrent number of concurrent requests
- * @param settle_time time to wait between creating topology and starting testing
- * @param num_rounds number of times to repeat the trial
- * @param malicious_getters number of malicious GET peers in the trial
- * @param malicious_putters number of malicious PUT peers in the trial
- * @param malicious_droppers number of malicious DROP peers in the trial
- * @param message string to put into DB for this trial
- *
- * @return GNUNET_OK on success, GNUNET_SYSERR on failure
- */
-int
-add_trial (unsigned long long *trialuid, int num_nodes, int topology,
- int blacklist_topology, int connect_topology,
- int connect_topology_option, float connect_topology_option_modifier,
- float topology_percentage, float topology_probability,
- int puts, int gets, int concurrent, int settle_time,
- int num_rounds, int malicious_getters, int malicious_putters,
- int malicious_droppers, char *message)
+ /*
+ * Inserts the specified trial into the dhttests.trials table
+ *
+ * @param trialuid return the trialuid of the newly inserted trial
+ * @param num_nodes how many nodes are in the trial
+ * @param topology integer representing topology for this trial
+ * @param blacklist_topology integer representing blacklist topology for this trial
+ * @param connect_topology integer representing connect topology for this trial
+ * @param connect_topology_option integer representing connect topology option
+ * @param connect_topology_option_modifier float to modify connect option
+ * @param topology_percentage percentage modifier for certain topologies
+ * @param topology_probability probability modifier for certain topologies
+ * @param puts number of puts to perform
+ * @param gets number of gets to perform
+ * @param concurrent number of concurrent requests
+ * @param settle_time time to wait between creating topology and starting testing
+ * @param num_rounds number of times to repeat the trial
+ * @param malicious_getters number of malicious GET peers in the trial
+ * @param malicious_putters number of malicious PUT peers in the trial
+ * @param malicious_droppers number of malicious DROP peers in the trial
+ * @param malicious_get_frequency how often malicious gets are sent
+ * @param malicious_put_frequency how often malicious puts are sent
+ * @param stop_closest stop forwarding PUTs if closest node found
+ * @param stop_found stop forwarding GETs if data found
+ * @param strict_kademlia test used kademlia routing algorithm
+ * @param gets_succeeded how many gets did the test driver report success on
+ * @param message string to put into DB for this trial
+ *
+ * @return GNUNET_OK on success, GNUNET_SYSERR on failure
+ */
+int add_trial (unsigned long long *trialuid, unsigned int num_nodes, unsigned int topology,
+ unsigned int blacklist_topology, unsigned int connect_topology,
+ unsigned int connect_topology_option, float connect_topology_option_modifier,
+ float topology_percentage, float topology_probability,
+ unsigned int puts, unsigned int gets, unsigned int concurrent, unsigned int settle_time,
+ unsigned int num_rounds, unsigned int malicious_getters, unsigned int malicious_putters,
+ unsigned int malicious_droppers, unsigned int malicious_get_frequency,
+ unsigned int malicious_put_frequency, unsigned int stop_closest, unsigned int stop_found,
+ unsigned int strict_kademlia, unsigned int gets_succeeded,
+ char *message)
{
*trialuid = 42;
return GNUNET_OK;
* Update dhttests.trials table with current server time as end time
*
* @param trialuid trial to update
- * @param totalMessagesDropped stats value for messages dropped
- * @param totalBytesDropped stats value for total bytes dropped
- * @param unknownPeers stats value for unknown peers
+ * @param gets_succeeded how many gets did the testcase report as successful
*
* @return GNUNET_OK on success, GNUNET_SYSERR on failure.
*/
int
update_trials (unsigned long long trialuid,
- unsigned long long totalMessagesDropped,
- unsigned long long totalBytesDropped,
- unsigned long long unknownPeers)
+ unsigned int gets_succeeded)
{
return GNUNET_OK;
}
"blacklist_topology, connect_topology, connect_topology_option,"\
"connect_topology_option_modifier, puts, gets, "\
"concurrent, settle_time, num_rounds, malicious_getters,"\
- "malicious_putters, malicious_droppers, message) "\
- "VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
+ "malicious_putters, malicious_droppers, malicious_get_frequency,"\
+ "malicious_put_frequency, stop_closest, stop_found, strict_kademlia, "\
+ "gets_succeeded, message) "\
+ "VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
static struct StatementHandle *insert_trial;
"VALUES (?, ?, ?)"
static struct StatementHandle *insert_dhtkey;
-#define UPDATE_TRIALS_STMT "UPDATE trials set endtime=NOW(), total_messages_dropped = ?, total_bytes_dropped = ?, unknownPeers = ? where trialuid = ?"
+#define UPDATE_TRIALS_STMT "UPDATE trials set endtime=NOW(), gets_succeeded = ? where trialuid = ?"
static struct StatementHandle *update_trial;
#define UPDATE_CONNECTIONS_STMT "UPDATE trials set totalConnections = ? where trialuid = ?"
* @param malicious_getters number of malicious GET peers in the trial
* @param malicious_putters number of malicious PUT peers in the trial
* @param malicious_droppers number of malicious DROP peers in the trial
+ * @param malicious_get_frequency how often malicious gets are sent
+ * @param malicious_put_frequency how often malicious puts are sent
+ * @param stop_closest stop forwarding PUTs if closest node found
+ * @param stop_found stop forwarding GETs if data found
+ * @param strict_kademlia test used kademlia routing algorithm
+ * @param gets_succeeded how many gets did the test driver report success on
* @param message string to put into DB for this trial
*
* @return GNUNET_OK on success, GNUNET_SYSERR on failure
*/
-int
-add_trial (unsigned long long *trialuid, int num_nodes, int topology,
- int blacklist_topology, int connect_topology,
- int connect_topology_option, float connect_topology_option_modifier,
- float topology_percentage, float topology_probability,
- int puts, int gets, int concurrent, int settle_time,
- int num_rounds, int malicious_getters, int malicious_putters,
- int malicious_droppers, char *message)
+int add_trial (unsigned long long *trialuid, unsigned int num_nodes, unsigned int topology,
+ unsigned int blacklist_topology, unsigned int connect_topology,
+ unsigned int connect_topology_option, float connect_topology_option_modifier,
+ float topology_percentage, float topology_probability,
+ unsigned int puts, unsigned int gets, unsigned int concurrent, unsigned int settle_time,
+ unsigned int num_rounds, unsigned int malicious_getters, unsigned int malicious_putters,
+ unsigned int malicious_droppers, unsigned int malicious_get_frequency,
+ unsigned int malicious_put_frequency, unsigned int stop_closest, unsigned int stop_found,
+ unsigned int strict_kademlia, unsigned int gets_succeeded,
+ char *message)
{
MYSQL_STMT *stmt;
int ret;
stmt = mysql_stmt_init(conn);
if (GNUNET_OK !=
- (ret = prepared_statement_run (insert_trial,
- trialuid,
- MYSQL_TYPE_LONG,
- &num_nodes,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &topology,
- GNUNET_YES,
- MYSQL_TYPE_FLOAT,
- &topology_percentage,
- MYSQL_TYPE_FLOAT,
- &topology_probability,
- MYSQL_TYPE_LONG,
- &blacklist_topology,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &connect_topology,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &connect_topology_option,
- GNUNET_YES,
- MYSQL_TYPE_FLOAT,
- &connect_topology_option_modifier,
- MYSQL_TYPE_LONG,
- &puts,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &gets,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &concurrent,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &settle_time,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &num_rounds,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &malicious_getters,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &malicious_putters,
- GNUNET_YES,
- MYSQL_TYPE_LONG,
- &malicious_droppers,
- GNUNET_YES,
- MYSQL_TYPE_BLOB,
- message,
- max_varchar_len +
- max_varchar_len, &m_len,
+ (ret = prepared_statement_run (insert_trial, trialuid,
+ MYSQL_TYPE_LONG, &num_nodes, GNUNET_YES,
+ MYSQL_TYPE_LONG, &topology, GNUNET_YES,
+ MYSQL_TYPE_FLOAT, &topology_percentage,
+ MYSQL_TYPE_FLOAT, &topology_probability,
+ MYSQL_TYPE_LONG, &blacklist_topology, GNUNET_YES,
+ MYSQL_TYPE_LONG, &connect_topology, GNUNET_YES,
+ MYSQL_TYPE_LONG, &connect_topology_option, GNUNET_YES,
+ MYSQL_TYPE_FLOAT, &connect_topology_option_modifier,
+ MYSQL_TYPE_LONG, &puts, GNUNET_YES,
+ MYSQL_TYPE_LONG, &gets, GNUNET_YES,
+ MYSQL_TYPE_LONG, &concurrent, GNUNET_YES,
+ MYSQL_TYPE_LONG, &settle_time, GNUNET_YES,
+ MYSQL_TYPE_LONG, &num_rounds, GNUNET_YES,
+ MYSQL_TYPE_LONG, &malicious_getters, GNUNET_YES,
+ MYSQL_TYPE_LONG, &malicious_putters, GNUNET_YES,
+ MYSQL_TYPE_LONG, &malicious_droppers, GNUNET_YES,
+ MYSQL_TYPE_LONG, &malicious_get_frequency, GNUNET_YES,
+ MYSQL_TYPE_LONG, &malicious_put_frequency, GNUNET_YES,
+ MYSQL_TYPE_LONG, &stop_closest, GNUNET_YES,
+ MYSQL_TYPE_LONG, &stop_found, GNUNET_YES,
+ MYSQL_TYPE_LONG, &strict_kademlia, GNUNET_YES,
+ MYSQL_TYPE_LONG, &gets_succeeded, GNUNET_YES,
+ MYSQL_TYPE_BLOB, message, max_varchar_len +
+ max_varchar_len, &m_len,
-1)))
{
if (ret == GNUNET_SYSERR)
* Update dhttests.trials table with current server time as end time
*
* @param trialuid trial to update
- * @param totalMessagesDropped stats value for messages dropped
- * @param totalBytesDropped stats value for total bytes dropped
- * @param unknownPeers stats value for unknown peers
+ * @param gets_succeeded how many gets did the testcase report as successful
*
* @return GNUNET_OK on success, GNUNET_SYSERR on failure.
*/
int
update_trials (unsigned long long trialuid,
- unsigned long long totalMessagesDropped,
- unsigned long long totalBytesDropped,
- unsigned long long unknownPeers)
+ unsigned int gets_succeeded)
{
int ret;
if (GNUNET_OK !=
(ret = prepared_statement_run (update_trial,
NULL,
- MYSQL_TYPE_LONGLONG,
- &totalMessagesDropped,
- GNUNET_YES,
- MYSQL_TYPE_LONGLONG,
- &totalBytesDropped,
- GNUNET_YES,
- MYSQL_TYPE_LONGLONG,
- &unknownPeers,
- GNUNET_YES,
- MYSQL_TYPE_LONGLONG,
- &trialuid, GNUNET_YES, -1)))
+ MYSQL_TYPE_LONG, &gets_succeeded, GNUNET_YES,
+ MYSQL_TYPE_LONGLONG, &trialuid, GNUNET_YES,
+ -1)))
{
if (ret == GNUNET_SYSERR)
{
"blacklist_topology, connect_topology, connect_topology_option,"\
"connect_topology_option_modifier, puts, gets, "\
"concurrent, settle_time, num_rounds, malicious_getters,"\
- "malicious_putters, malicious_droppers, message) "\
- "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'"
+ "malicious_putters, malicious_droppers, malicious_get_frequency,"\
+ "malicious_put_frequency, stop_closest, stop_found, strict_kademlia, "\
+ "gets_succeeded, message) "\
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'"
#define INSERT_STAT_STMT "prepare insert_stat from 'INSERT INTO node_statistics"\
"(trialuid, nodeuid, route_requests,"\
#define INSERT_DHTKEY_STMT "prepare insert_dhtkey from 'INSERT ignore INTO dhtkeys (dhtkey, trialuid) "\
"VALUES (?, @temp_trial)'"
-#define UPDATE_TRIALS_STMT "prepare update_trial from 'UPDATE trials set endtime= ?, total_messages_dropped = ?, total_bytes_dropped = ?, unknownPeers = ? where trialuid = @temp_trial'"
+#define UPDATE_TRIALS_STMT "prepare update_trial from 'UPDATE trials set endtime= ?, gets_succeeded = ? where trialuid = @temp_trial'"
#define UPDATE_CONNECTIONS_STMT "prepare update_conn from 'UPDATE trials set totalConnections = ? where trialuid = @temp_trial'"
* @param malicious_getters number of malicious GET peers in the trial
* @param malicious_putters number of malicious PUT peers in the trial
* @param malicious_droppers number of malicious DROP peers in the trial
+ * @param malicious_get_frequency how often malicious gets are sent
+ * @param malicious_put_frequency how often malicious puts are sent
+ * @param stop_closest stop forwarding PUTs if closest node found
+ * @param stop_found stop forwarding GETs if data found
+ * @param strict_kademlia test used kademlia routing algorithm
+ * @param gets_succeeded how many gets did the test driver report success on
* @param message string to put into DB for this trial
*
* @return GNUNET_OK on success, GNUNET_SYSERR on failure
*/
-int
-add_trial (unsigned long long *trialuid, int num_nodes, int topology,
- int blacklist_topology, int connect_topology,
- int connect_topology_option, float connect_topology_option_modifier,
- float topology_percentage, float topology_probability,
- int puts, int gets, int concurrent, int settle_time,
- int num_rounds, int malicious_getters, int malicious_putters,
- int malicious_droppers, char *message)
+int add_trial (unsigned long long *trialuid, unsigned int num_nodes, unsigned int topology,
+ unsigned int blacklist_topology, unsigned int connect_topology,
+ unsigned int connect_topology_option, float connect_topology_option_modifier,
+ float topology_percentage, float topology_probability,
+ unsigned int puts, unsigned int gets, unsigned int concurrent, unsigned int settle_time,
+ unsigned int num_rounds, unsigned int malicious_getters, unsigned int malicious_putters,
+ unsigned int malicious_droppers, unsigned int malicious_get_frequency,
+ unsigned int malicious_put_frequency, unsigned int stop_closest, unsigned int stop_found,
+ unsigned int strict_kademlia, unsigned int gets_succeeded,
+ char *message)
{
int ret;
if (trialuid != NULL)
if (outfile == NULL)
return GNUNET_SYSERR;
- ret = fprintf(outfile, "set @date = \"%s\", @num = %d, @topology = %d, @bl = %d, "
- "@connect = %d, @c_t_o = %d, @c_t_o_m = %f, @t_p = %f, "
- "@t_pr = %f, @puts = %d, @gets = %d, "
- "@concurrent = %d, @settle = %d, @rounds = %d, "
- "@m_gets = %d, @m_puts = %d, @m_drops = %d, "
- "@message = \"%s\";\n", get_sql_time(), num_nodes, topology,
+ ret = fprintf(outfile, "set @date = \"%s\", @num = %u, @topology = %u, @bl = %u, "
+ "@connect = %u, @c_t_o = %u, @c_t_o_m = %f, @t_p = %f, "
+ "@t_pr = %f, @puts = %u, @gets = %u, "
+ "@concurrent = %u, @settle = %u, @rounds = %u, "
+ "@m_gets = %u, @m_puts = %u, @m_drops = %u, "
+ "@m_g_f = %u, @m_p_f = %u, @s_c = %u, @s_f = %u,"
+ "@s_k = %u, @g_s = %u, @message = \"%s\";\n",
+ get_sql_time(), num_nodes, topology,
blacklist_topology, connect_topology,
connect_topology_option, connect_topology_option_modifier,
topology_percentage, topology_probability,
puts, gets, concurrent, settle_time,
num_rounds, malicious_getters, malicious_putters,
- malicious_droppers, message);
+ malicious_droppers, malicious_get_frequency, malicious_put_frequency,
+ stop_closest, stop_found, strict_kademlia, gets_succeeded, message);
if (ret < 0)
return GNUNET_SYSERR;
"@c_t_o_m, @puts, @gets,"
"@concurrent, @settle, @rounds,"
"@m_gets, @m_puts, @m_drops,"
- "@message;\n");
+ "@m_g_f, @m_p_f, @s_c, @s_f,"
+ "@s_k, @g_s, @message;\n");
ret = fprintf(outfile, "execute select_trial;\n");
* Update dhttests.trials table with current server time as end time
*
* @param trialuid trial to update
- * @param totalMessagesDropped stats value for messages dropped
- * @param totalBytesDropped stats value for total bytes dropped
- * @param unknownPeers stats value for unknown peers
+ * @param gets_succeeded how many gets did the testcase report as successful
*
* @return GNUNET_OK on success, GNUNET_SYSERR on failure.
*/
int
update_trials (unsigned long long trialuid,
- unsigned long long totalMessagesDropped,
- unsigned long long totalBytesDropped,
- unsigned long long unknownPeers)
+ unsigned int gets_succeeded)
{
int ret;
#if DEBUG_DHTLOG
if (outfile == NULL)
return GNUNET_SYSERR;
- ret = fprintf(outfile, "set @date = \"%s\", @m_dropped = %llu, @b_dropped = %llu, @unknown = %llu;\n", get_sql_time(), totalMessagesDropped, totalBytesDropped, unknownPeers);
+ ret = fprintf(outfile, "set @date = \"%s\", @g_s = %u;\n", get_sql_time(), gets_succeeded);
if (ret < 0)
return GNUNET_SYSERR;
- ret = fprintf(outfile, "execute update_trial using @date, @m_dropped, @b_dropped, @unknown;\n");
+ ret = fprintf(outfile, "execute update_trial using @date, @g_s;\n");
if (ret >= 0)
return GNUNET_OK;
ret =
api->insert_trial (&trialuid, i, 5, 4, 3, 2,
.75, .25, .5, 42, 14,
- 5, 1, 12, 0, 0, 0,
- "TEST INSERT TRIAL");
+ 5, 1, 12, 0, 0, 0, 1, 0, 1,
+ 0, 1, 0, "TEST INSERT TRIAL");
CHECK(ret);
ret = api->insert_topology(500);
CHECK(ret);
ret = api->insert_stat(&p1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17);
ret = api->insert_stat(&p2, 12, 23, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
CHECK(ret);
- ret = api->update_trial (trialuid, 0, 0, 0);
+ ret = api->update_trial (trialuid, 787);
CHECK(ret);
return 0;
}