gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r32293 - in gnunet/src/ats: . experiments


From: gnunet
Subject: [GNUnet-SVN] r32293 - in gnunet/src/ats: . experiments
Date: Tue, 11 Feb 2014 11:02:47 +0100

Author: wachs
Date: 2014-02-11 11:02:46 +0100 (Tue, 11 Feb 2014)
New Revision: 32293

Modified:
   gnunet/src/ats/experiments/example.exp
   gnunet/src/ats/gnunet-ats-solver-eval.c
   gnunet/src/ats/gnunet-ats-solver-eval.h
Log:
adding and deleting address from solver


Modified: gnunet/src/ats/experiments/example.exp
===================================================================
--- gnunet/src/ats/experiments/example.exp      2014-02-11 08:55:04 UTC (rev 
32292)
+++ gnunet/src/ats/experiments/example.exp      2014-02-11 10:02:46 UTC (rev 
32293)
@@ -29,20 +29,20 @@
 # BANDWIDTH, LATENCY
 #op-1-pref = BANDWIDTH  
 
-op-1-operation = start_set_property
-op-1-address-id = 0
-op-1-peer-id = 0
+#op-1-operation = start_set_property
+#op-1-address-id = 0
+#op-1-peer-id = 0
 # constant, linear, sinus, random
-op-1-gen-type = random
-op-1-base-rate= 10000
-op-1-max-rate = 100000
-op-1-frequency = 100 ms
+#op-1-gen-type = random
+#op-1-base-rate= 10000
+#op-1-max-rate = 100000
+#op-1-frequency = 100 ms
 # bandwidth, latency
 # "TERMINATOR", "UTILIZATION_UP", "UTILIZATION_DOWN", 
"UTILIZATION_PAYLOAD_UP", "UTILIZATION_PAYLOAD_DOWN", "NETWORK_TYPE", "DELAY", 
"DISTANCE", "COST_WAN", "COST_LAN", "COST_WLAN"
-op-1-property = UTILIZATION_UP  
+#op-1-property = UTILIZATION_UP  
 
-op-2-operation = start_request
-op-2-peer-id = 0
+op-1-operation = start_request
+op-1-peer-id = 0
 
 [episode-1]
 duration = 2 s

Modified: gnunet/src/ats/gnunet-ats-solver-eval.c
===================================================================
--- gnunet/src/ats/gnunet-ats-solver-eval.c     2014-02-11 08:55:04 UTC (rev 
32292)
+++ gnunet/src/ats/gnunet-ats-solver-eval.c     2014-02-11 10:02:46 UTC (rev 
32293)
@@ -27,15 +27,17 @@
 #include "gnunet_util_lib.h"
 #include "gnunet-ats-solver-eval.h"
 
-
 #define BIG_M_STRING "unlimited"
 
 static struct Experiment *e;
 
 static struct LoggingHandle *l;
 
-static struct GNUNET_ATS_TESTING_SolverHandle *sh;
+static struct SolverHandle *sh;
 
+static struct TestPeer *peer_head;
+static struct TestPeer *peer_tail;
+
 /**
  * cmd option -e: experiment file
  */
@@ -1452,7 +1454,7 @@
       return GNUNET_SYSERR;
     }
 
-    GNUNET_CONTAINER_DLL_insert (cur->head,cur->tail, o);
+    GNUNET_CONTAINER_DLL_insert_tail (cur->head,cur->tail, o);
     op_counter++;
   }
   GNUNET_free (sec_name);
@@ -1724,64 +1726,121 @@
       GNUNET_SYSERR);
 }
 
+static struct TestPeer *
+find_peer_by_id (int id)
+{
+  struct TestPeer *cur;
+  for (cur = peer_head; NULL != cur; cur = cur->next)
+    if (cur->id == id)
+      return cur;
+  return NULL;
+}
+
+struct ATS_Address *
+create_ats_address (const struct GNUNET_PeerIdentity *peer,
+                const char *plugin_name,
+                const void *plugin_addr, size_t plugin_addr_len,
+                uint32_t session_id)
+{
+  struct ATS_Address *aa = NULL;
+
+  aa = GNUNET_malloc (sizeof (struct ATS_Address) + plugin_addr_len + strlen 
(plugin_name) + 1);
+  aa->peer = *peer;
+  aa->addr_len = plugin_addr_len;
+  aa->addr = &aa[1];
+  aa->plugin = (char *) &aa[1] + plugin_addr_len;
+  memcpy (&aa[1], plugin_addr, plugin_addr_len);
+  memcpy (aa->plugin, plugin_name, strlen (plugin_name) + 1);
+  aa->session_id = session_id;
+  aa->active = GNUNET_NO;
+  aa->used = GNUNET_NO;
+  aa->solver_information = NULL;
+  aa->assigned_bw_in = GNUNET_BANDWIDTH_value_init(0);
+  aa->assigned_bw_out = GNUNET_BANDWIDTH_value_init(0);
+  return aa;
+}
+
 static void
 enforce_add_address (struct GNUNET_ATS_TEST_Operation *op)
 {
-  /*
-  struct BenchmarkPeer *peer;
-  struct BenchmarkPartner *partner;
+  struct ATS_Address *addr;
+  struct TestPeer *p;
 
-  peer = GNUNET_ATS_TEST_get_peer (op->src_id);
-  if (NULL == peer)
+  if (NULL == (p = find_peer_by_id (op->peer_id)))
   {
-    GNUNET_break (0);
-    return;
+    p = GNUNET_new (struct TestPeer);
+    p->id = op->peer_id;
+    memset (&p->peer_id, '0', sizeof (p->peer_id));
+    GNUNET_CONTAINER_DLL_insert (peer_head, peer_tail, p);
   }
 
-  partner = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
-  if (NULL == partner)
-  {
-    GNUNET_break (0);
-    return;
-  }
+  addr = create_ats_address (&p->peer_id, op->plugin, op->address,
+      strlen (op->address) + 1, op->address_session);
 
-  fprintf (stderr, "Found master %llu slave %llu\n",op->src_id, op->dest_id);
+  GNUNET_CONTAINER_multipeermap_put (sh->addresses, &p->peer_id, addr,
+      GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
 
-  if (NULL != partner->tg)
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Adding address %u for peer %u\n",
+      op->address_id, op->peer_id);
+
+  sh->env.sf.s_add (sh->solver, addr, op->address_network);
+
+}
+
+struct AddressLookupCtx
+{
+  struct ATS_Address *res;
+  struct GNUNET_ATS_TEST_Operation *op;
+};
+
+int find_address_it (void *cls,
+                     const struct GNUNET_PeerIdentity *key,
+                     void *value)
+{
+  struct AddressLookupCtx *ctx = cls;
+  struct ATS_Address *addr = value;
+
+  if ( (0 == strcmp (ctx->op->plugin, addr->plugin)) &&
+       (0 == strcmp (ctx->op->address, addr->addr)) )
   {
-    fprintf (stderr, "Stopping traffic between master %llu slave 
%llu\n",op->src_id, op->dest_id);
-    GNUNET_ATS_TEST_generate_traffic_stop(partner->tg);
-    partner->tg = NULL;
+       ctx->res = addr;
+       return GNUNET_NO;
   }
-
-  partner->tg = GNUNET_ATS_TEST_generate_traffic_start(peer, partner,
-      op->tg_type, op->base_rate, op->max_rate, op->period,
-      GNUNET_TIME_UNIT_FOREVER_REL);
-   */
+  return GNUNET_YES;
 }
 
 static void
 enforce_del_address (struct GNUNET_ATS_TEST_Operation *op)
 {
-  /*
-  struct BenchmarkPartner *p;
-  p = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
-  if (NULL == p)
+  struct TestPeer *p;
+  struct AddressLookupCtx ctx;
+
+  if (NULL == (p = find_peer_by_id (op->peer_id)))
   {
     GNUNET_break (0);
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+        "Deleting address for unknown peer %u\n", op->peer_id);
     return;
   }
 
-  fprintf (stderr, "Found master %llu slave %llu\n",op->src_id, op->dest_id);
-
-  if (NULL != p->tg)
+  ctx.op = op;
+  ctx.res = NULL;
+  GNUNET_CONTAINER_multipeermap_get_multiple (sh->addresses, &p->peer_id,
+      find_address_it, &ctx);
+  if (NULL == ctx.res)
   {
-    fprintf (stderr, "Stopping traffic between master %llu slave %llu\n",
-        op->src_id, op->dest_id);
-    GNUNET_ATS_TEST_generate_traffic_stop(p->tg);
-    p->tg = NULL;
+    GNUNET_break (0);
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+        "Deleting unknown address for peer %u\n", op->peer_id);
+    return;
   }
-  */
+
+  GNUNET_CONTAINER_multipeermap_remove (sh->addresses, &p->peer_id, ctx.res);
+
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Removing address %u for peer %u\n",
+      op->address_id, op->peer_id);
+
+  sh->env.sf.s_del (sh->solver, ctx.res, GNUNET_NO);
 }
 
 static void
@@ -2108,24 +2167,8 @@
  * Solver
  */
 
-struct GNUNET_ATS_TESTING_SolverHandle
-{
-  char * plugin;
-  struct GNUNET_ATS_PluginEnvironment env;
-  void *solver;
-  struct GNUNET_CONTAINER_MultiPeerMap *addresses;
-};
-
-enum GNUNET_ATS_Solvers
-{
-  GNUNET_ATS_SOLVER_PROPORTIONAL,
-  GNUNET_ATS_SOLVER_MLP,
-  GNUNET_ATS_SOLVER_RIL,
-};
-
-
 void
-GNUNET_ATS_solvers_solver_stop (struct GNUNET_ATS_TESTING_SolverHandle *sh)
+GNUNET_ATS_solvers_solver_stop (struct SolverHandle *sh)
 {
  GNUNET_STATISTICS_destroy ((struct GNUNET_STATISTICS_Handle *) sh->env.stats,
      GNUNET_NO);
@@ -2375,10 +2418,10 @@
 }
 
 
-struct GNUNET_ATS_TESTING_SolverHandle *
+struct SolverHandle *
 GNUNET_ATS_solvers_solver_start (enum GNUNET_ATS_Solvers type)
 {
-  struct GNUNET_ATS_TESTING_SolverHandle *sh;
+  struct SolverHandle *sh;
   char * solver_str;
   unsigned long long quotas_in[GNUNET_ATS_NetworkTypeCount];
   unsigned long long quotas_out[GNUNET_ATS_NetworkTypeCount];
@@ -2399,7 +2442,7 @@
       break;
   }
 
-  sh = GNUNET_new (struct GNUNET_ATS_TESTING_SolverHandle);
+  sh = GNUNET_new (struct SolverHandle);
   GNUNET_asprintf (&sh->plugin, "libgnunet_plugin_ats_%s", solver_str);
 
   /* setup environment */

Modified: gnunet/src/ats/gnunet-ats-solver-eval.h
===================================================================
--- gnunet/src/ats/gnunet-ats-solver-eval.h     2014-02-11 08:55:04 UTC (rev 
32292)
+++ gnunet/src/ats/gnunet-ats-solver-eval.h     2014-02-11 10:02:46 UTC (rev 
32293)
@@ -52,6 +52,47 @@
   SOLVER_OP_STOP_REQUEST,
 };
 
+struct SolverHandle
+{
+  /**
+   * Solver plugin name
+   */
+  char *plugin;
+
+  /**
+   * Solver environment
+   */
+  struct GNUNET_ATS_PluginEnvironment env;
+
+  /**
+   * Solver handle
+   */
+  void *solver;
+
+  /**
+   * Address hashmap
+   */
+  struct GNUNET_CONTAINER_MultiPeerMap *addresses;
+};
+
+enum GNUNET_ATS_Solvers
+{
+  GNUNET_ATS_SOLVER_PROPORTIONAL,
+  GNUNET_ATS_SOLVER_MLP,
+  GNUNET_ATS_SOLVER_RIL,
+};
+
+
+struct TestPeer
+{
+  struct TestPeer *prev;
+  struct TestPeer *next;
+
+  int id;
+  struct GNUNET_PeerIdentity peer_id;
+};
+
+
 struct Episode;
 
 struct Experiment;




reply via email to

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