*/
static int opt_verbose;
+/**
+ * cmd option -p: print logs
+ */
+static int opt_print;
+
static int res;
static void
* Logging
*/
+void
+GNUNET_ATS_solver_logging_now (struct LoggingHandle *l)
+{
+ struct LoggingTimeStep *lts;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Logging\n");
+
+ lts = GNUNET_new (struct LoggingTimeStep);
+ lts->timestamp = GNUNET_TIME_absolute_get();
+
+ /* Store logging data here */
+
+ GNUNET_CONTAINER_DLL_insert_tail(l->head, l->tail, lts);
+
+}
+
static void
logging_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct LoggingHandle *l = cls;
-
l->logging_task = GNUNET_SCHEDULER_NO_TASK;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Logging\n");
+ GNUNET_ATS_solver_logging_now (l);
l->logging_task = GNUNET_SCHEDULER_add_delayed (l->log_freq, &logging_task, l);
return l;
}
-void
-GNUNET_ATS_solver_logging_now (struct LoggingHandle *l)
-{
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Logging\n");
-}
-
void
GNUNET_ATS_solver_logging_stop (struct LoggingHandle *l)
{
void
GNUNET_ATS_solver_logging_eval (struct LoggingHandle *l)
{
+ struct LoggingTimeStep *lts;
+ for (lts = l->head; NULL != lts; lts = lts->next)
+ {
+ fprintf (stderr, "Log %llu: \n", (long long unsigned int) lts->timestamp.abs_value_us);
+ }
}
void
GNUNET_ATS_solver_logging_free (struct LoggingHandle *l)
{
+ struct LoggingTimeStep *cur;
+ struct LoggingTimeStep *next;
+
if (GNUNET_SCHEDULER_NO_TASK != l->logging_task)
GNUNET_SCHEDULER_cancel (l->logging_task);
l->logging_task = GNUNET_SCHEDULER_NO_TASK;
+
+ next = l->head;
+ while (NULL != (cur = next))
+ {
+ next = cur->next;
+ GNUNET_CONTAINER_DLL_remove (l->head, l->tail, cur);
+ GNUNET_free (cur);
+ }
+
GNUNET_free (l);
}
/**
- * Generate between the source master and the partner and set preferences with a
+ * Generate between the source master and the partner and set property with a
* value depending on the generator.
*
- * @param src source
- * @param dest partner
- * @param type type of preferences to generate
- * @param base_rate traffic base rate to send data with
- * @param max_rate traffic maximum rate to send data with
- * @param period duration of a period of traffic generation (~ 1/frequency)
- * @param duration how long to generate traffic
- * @return the traffic generator
+ * @param peer source
+ * @param address_id partner
+ * @param test_peer the peer
+ * @param test_address the address
+ * @param type type of generator
+ * @param base_value base value
+ * @param value_rate maximum value
+ * @param period duration of a period of generation (~ 1/frequency)
+ * @param frequency how long to generate property
+ * @param ats_property ATS property to generate
+ * @return the property generator
*/
struct PropertyGenerator *
GNUNET_ATS_solver_generate_property_start (unsigned int peer,
/**
- * Generate between the source master and the partner and set preferences with a
+ * Generate between the source master and the partner and set property with a
* value depending on the generator.
*
- * @param src source
- * @param dest partner
- * @param type type of preferences to generate
- * @param base_rate traffic base rate to send data with
- * @param max_rate traffic maximum rate to send data with
- * @param period duration of a period of traffic generation (~ 1/frequency)
- * @param duration how long to generate traffic
- * @return the traffic generator
+ * @param peer source
+ * @param address_id partner
+ * @param client_id the client
+ * @param type type of generator
+ * @param base_value base value
+ * @param value_rate maximum value
+ * @param period duration of a period of generation (~ 1/frequency)
+ * @param frequency how long to generate property
+ * @param kind ATS preference to generate
+ * @return the preference generator
*/
struct PreferenceGenerator *
GNUNET_ATS_solver_generate_preferences_start (unsigned int peer,
fprintf (stderr, "Invalid property in operation %u `%s' in episode %u\n",
op_counter, op_name, e->id);
GNUNET_free (op_name);
- GNUNET_free (pref);
GNUNET_free_non_null (pref);
return GNUNET_SYSERR;
}
GNUNET_CONTAINER_DLL_insert (peer_head, peer_tail, p);
}
- if (NULL != (a = find_address_by_id (p, op->address_id)))
+ if (NULL != (find_address_by_id (p, op->address_id)))
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Duplicate address %u for peer %u\n",
op->address_id, op->peer_id);
+ return;
}
a = GNUNET_new (struct TestAddress);
enforce_del_address (struct GNUNET_ATS_TEST_Operation *op)
{
struct TestPeer *p;
- struct TestAddress *a;
struct AddressLookupCtx ctx;
if (NULL == (p = find_peer_by_id (op->peer_id)))
return;
}
- if (NULL == (a = find_address_by_id (p, op->address_id)))
+ if (NULL == (find_address_by_id (p, op->address_id)))
{
GNUNET_break (0);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Deleting address for unknown peer %u\n", op->peer_id);
return;
}
- GNUNET_CONTAINER_DLL_remove (p->addr_head, p->addr_tail, a);
GNUNET_CONTAINER_multipeermap_remove (sh->addresses, &p->peer_id, ctx.res);
enforce_start_preference (struct GNUNET_ATS_TEST_Operation *op)
{
struct PreferenceGenerator *pg;
- struct TestPeer *p;
if (NULL != (pg = find_pref_gen (op->peer_id, op->address_id, op->pref_type)))
{
GNUNET_ATS_solver_generate_preferences_stop (pg);
GNUNET_free (pg);
}
- if (NULL == (p = find_peer_by_id (op->peer_id)))
+ if (NULL == (find_peer_by_id (op->peer_id)))
{
GNUNET_break (0);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
void *value)
{
struct ATS_Address *address = value;
- GNUNET_CONTAINER_multipeermap_remove (sh->env.addresses, key, value);
+ GNUNET_break (GNUNET_OK != GNUNET_CONTAINER_multipeermap_remove (sh->env.addresses,
+ key, value));
GNUNET_free (address);
return GNUNET_OK;
/**
* Information callback for the solver
*
+ * @param cls the closure
* @param op the solver operation
* @param stat status of the solver operation
* @param add additional solver information
e = NULL;
}
+ if (opt_print)
+ GNUNET_ATS_solver_logging_eval (l);
+
if (NULL != l)
{
GNUNET_ATS_solver_logging_free (l);
}
GNUNET_free (cur);
}
-
if (NULL != sh)
{
GNUNET_ATS_solvers_solver_stop (sh);
}
/* Shutdown */
end_now();
-
}
static void
else
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment failed \n");
-
- /*
- evaluate (duration);
- if (opt_log)
- GNUNET_ATS_TEST_logging_write_to_file(l, opt_exp_file, opt_plot);
-
- if (NULL != l)
- {
- GNUNET_ATS_TEST_logging_stop (l);
- GNUNET_ATS_TEST_logging_clean_up (l);
- l = NULL;
- }
- */
GNUNET_SCHEDULER_add_now (&done, NULL);
}
{ 'e', "experiment", NULL,
gettext_noop ("experiment to use"),
1, &GNUNET_GETOPT_set_one, &opt_verbose},
+ { 'p', "print", NULL,
+ gettext_noop ("print logging"),
+ 0, &GNUNET_GETOPT_set_one, &opt_print},
GNUNET_GETOPT_OPTION_END
};