gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r24312 - gnunet/src/testbed


From: gnunet
Subject: [GNUnet-SVN] r24312 - gnunet/src/testbed
Date: Sun, 14 Oct 2012 15:56:15 +0200

Author: harsha
Date: 2012-10-14 15:56:15 +0200 (Sun, 14 Oct 2012)
New Revision: 24312

Modified:
   gnunet/src/testbed/gnunet-testbed-profiler.c
   gnunet/src/testbed/testbed_api_peers.c
   gnunet/src/testbed/testbed_api_topology.c
Log:
peer linking

Modified: gnunet/src/testbed/gnunet-testbed-profiler.c
===================================================================
--- gnunet/src/testbed/gnunet-testbed-profiler.c        2012-10-14 13:24:51 UTC 
(rev 24311)
+++ gnunet/src/testbed/gnunet-testbed-profiler.c        2012-10-14 13:56:15 UTC 
(rev 24312)
@@ -85,7 +85,12 @@
   /**
    * Starting peers
    */
-  STATE_PEERS_STARTING
+  STATE_PEERS_STARTING,
+
+  /**
+   * Linking peers
+   */
+  STATE_PEERS_LINKING
 };
 
 
@@ -135,6 +140,11 @@
 struct DLLOperation *dll_op_tail;
 
 /**
+ * Peer linking - topology operation
+ */
+struct GNUNET_TESTBED_Operation *topology_op;
+
+/**
  * Abort task identifier
  */
 static GNUNET_SCHEDULER_TaskIdentifier abort_task;
@@ -175,6 +185,11 @@
 static unsigned int num_hosts;
 
 /**
+ * Number of random links to be established between peers
+ */
+static unsigned int num_links;
+
+/**
  * Global testing status
  */
 static int result;
@@ -203,6 +218,8 @@
     GNUNET_SCHEDULER_cancel (register_hosts_task);
   if (NULL != reg_handle)
     GNUNET_TESTBED_cancel_registration (reg_handle);
+  if (NULL != topology_op)
+    GNUNET_TESTBED_operation_cancel (topology_op);
   for (nhost = 0; nhost < num_hosts; nhost++)
     if (NULL != hosts[nhost])
       GNUNET_TESTBED_host_destroy (hosts[nhost]);
@@ -271,6 +288,19 @@
     prof_time = GNUNET_TIME_absolute_get_duration (prof_start_time);
     printf ("All peers started successfully in %.2f seconds\n",
             ((double) prof_time.rel_value) / 1000.00);
+    result = GNUNET_OK;
+    if (0 == num_links)
+    {
+      GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+      return;
+    }
+    state = STATE_PEERS_LINKING;
+    /* Do overlay connect */
+    prof_start_time = GNUNET_TIME_absolute_get ();
+    topology_op =
+        GNUNET_TESTBED_overlay_configure_topology (NULL, num_peers, peers,
+                                                   
GNUNET_TESTBED_TOPOLOGY_ERDOS_RENYI,
+                                                   num_links);
   }
 }
 
@@ -320,7 +350,7 @@
     for (peer_cnt = 0; peer_cnt < num_peers; peer_cnt++)
     {
       dll_op = GNUNET_malloc (sizeof (struct DLLOperation));
-      dll_op->op = GNUNET_TESTBED_peer_start (NULL, peers[peer_cnt], 
+      dll_op->op = GNUNET_TESTBED_peer_start (dll_op, peers[peer_cnt], 
                                               &peer_churn_cb, dll_op);
       GNUNET_CONTAINER_DLL_insert_tail (dll_op_head, dll_op_tail, dll_op);
     }
@@ -404,6 +434,38 @@
       GNUNET_assert (0);
     }
     break;
+  case STATE_PEERS_LINKING:
+   switch (event->type)
+    {
+    case GNUNET_TESTBED_ET_OPERATION_FINISHED:
+      /* Control reaches here when a peer linking operation fails */
+      if (NULL != event->details.operation_finished.emsg)
+      {
+        LOG (GNUNET_ERROR_TYPE_WARNING,
+             _("An operation has failed while starting slaves\n"));
+        GNUNET_SCHEDULER_cancel (abort_task);
+        abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL);
+      }
+      break;
+    case GNUNET_TESTBED_ET_CONNECT:
+      {
+        static unsigned int established_links;
+
+        if (++established_links == num_links)
+        {
+          prof_time = GNUNET_TIME_absolute_get_duration (prof_start_time);
+          printf ("%u links established in %.2f seconds\n",
+                  num_links, ((double) prof_time.rel_value) / 1000.00);
+          GNUNET_TESTBED_operation_done (topology_op);
+          topology_op = NULL;
+          GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+        }
+      }
+      break;
+    default:
+      GNUNET_assert (0);
+    }
+    break;
   default:
     GNUNET_assert (0);
   }
@@ -590,12 +652,12 @@
 main (int argc, char *const *argv)
 {
   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
-    { 'n', "num-peers", "COUNT",
+    { 'p', "num-peers", "COUNT",
       gettext_noop ("create COUNT number of peers"),
       GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_peers },
-    { 'n', "num-peers", "COUNT",
-      gettext_noop ("create COUNT number of peers"),
-      GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_peers },
+    { 'n', "num-links", "COUNT",
+      gettext_noop ("create COUNT number of random links"),
+      GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_links },
     GNUNET_GETOPT_OPTION_END
   };
   int ret;

Modified: gnunet/src/testbed/testbed_api_peers.c
===================================================================
--- gnunet/src/testbed/testbed_api_peers.c      2012-10-14 13:24:51 UTC (rev 
24311)
+++ gnunet/src/testbed/testbed_api_peers.c      2012-10-14 13:56:15 UTC (rev 
24312)
@@ -716,6 +716,7 @@
   opc->c = p1->controller;
   opc->id = GNUNET_TESTBED_get_next_op_id (opc->c);
   opc->type = OP_OVERLAY_CONNECT;
+  opc->op_cls = op_cls;
   opc->op =
       GNUNET_TESTBED_operation_create_ (opc, &opstart_overlay_connect,
                                         &oprelease_overlay_connect);

Modified: gnunet/src/testbed/testbed_api_topology.c
===================================================================
--- gnunet/src/testbed/testbed_api_topology.c   2012-10-14 13:24:51 UTC (rev 
24311)
+++ gnunet/src/testbed/testbed_api_topology.c   2012-10-14 13:56:15 UTC (rev 
24312)
@@ -71,6 +71,11 @@
   struct GNUNET_TESTBED_Operation **link_ops;
 
   /**
+   * The operation closure
+   */
+  void *op_cls;
+
+  /**
    * The size of the link array
    */
   unsigned int link_array_size;  
@@ -122,7 +127,7 @@
   for (p = 0; p < tc->link_array_size; p++)
   {
     tc->link_ops[p] =
-       GNUNET_TESTBED_overlay_connect (NULL, &overlay_link_completed,
+       GNUNET_TESTBED_overlay_connect (tc->op_cls, &overlay_link_completed,
                                        &tc->link_ops[p],
                                        tc->peers[tc->link_array[p].A],
                                        tc->peers[tc->link_array[p].B]);        
                                          
@@ -232,6 +237,7 @@
   c = peers[0]->controller;
   tc = GNUNET_malloc (sizeof (struct TopologyContext));
   tc->peers = peers;
+  tc->op_cls = tc->op_cls;
   switch (topo)
   {
   case GNUNET_TESTBED_TOPOLOGY_LINE:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]