gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r25223 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r25223 - gnunet/src/ats
Date: Tue, 4 Dec 2012 14:16:27 +0100

Author: wachs
Date: 2012-12-04 14:16:26 +0100 (Tue, 04 Dec 2012)
New Revision: 25223

Modified:
   gnunet/src/ats/ats.conf.in
   gnunet/src/ats/gnunet-service-ats_addresses.c
   gnunet/src/ats/gnunet-service-ats_addresses.h
   gnunet/src/ats/gnunet-service-ats_addresses_mlp.c
   gnunet/src/ats/gnunet-service-ats_addresses_mlp.h
   gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c
   gnunet/src/ats/gnunet-service-ats_addresses_simplistic.h
   gnunet/src/ats/perf_ats_mlp.c
   gnunet/src/ats/test_ats_mlp.c
   gnunet/src/ats/test_ats_mlp_averaging.c
Log:
changes

Modified: gnunet/src/ats/ats.conf.in
===================================================================
--- gnunet/src/ats/ats.conf.in  2012-12-04 13:12:42 UTC (rev 25222)
+++ gnunet/src/ats/ats.conf.in  2012-12-04 13:16:26 UTC (rev 25223)
@@ -30,6 +30,11 @@
 
 
 # MLP specific settings
+# MAX_DURATION = 3 s
+# MAX_ITERATIONS = 1024 
+
+
+
 DUMP_MLP = NO
 DUMP_SOLUTION = NO
 DUMP_OVERWRITE = NO 

Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c       2012-12-04 13:12:42 UTC 
(rev 25222)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c       2012-12-04 13:16:26 UTC 
(rev 25223)
@@ -64,8 +64,6 @@
 
 static struct GNUNET_CONTAINER_MultiHashMap *addresses;
 
-static void *solver;
-
 static unsigned long long wan_quota_in;
 
 static unsigned long long wan_quota_out;
@@ -76,7 +74,22 @@
 
 static int running;
 
+void *solver;
 
+struct GAS_Addresses_Handle
+{
+  int ats_mode;
+  /* Solver handle */
+  void *solver;
+
+  /* Solver functions */
+  GAS_solver_init s_init;
+  GAS_solver_done s_done;
+  GAS_solver_address_delete s_del;
+  GAS_solver_address_change_preference s_pref;
+};
+
+
 static unsigned int
 assemble_ats_information (struct ATS_Address *aa,  struct 
GNUNET_ATS_Information **dest)
 {
@@ -991,10 +1004,11 @@
  * @param cfg configuration to use
  * @param stats the statistics handle to use
  */
-void
+struct GAS_Addresses_Handle *
 GAS_addresses_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
                     const struct GNUNET_STATISTICS_Handle *stats)
 {
+  struct GAS_Addresses_Handle *ah;
   int c;
   char *quota_wan_in_str;
   char *quota_wan_out_str;
@@ -1063,41 +1077,56 @@
       }
   }
 
+
+  ah = GNUNET_malloc (sizeof (struct GAS_Addresses_Handle));
+
   /* Start configured solution method */
   switch (ats_mode)
   {
     case MODE_MLP:
       /* Init the MLP solver with default values */
-      solver = GAS_mlp_init (cfg, stats, MLP_MAX_EXEC_DURATION, 
MLP_MAX_ITERATIONS);
-      if (NULL != solver)
-      {
-          ats_mode = MODE_MLP;
-          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS started in %s mode\n", 
"MLP");
-          break;
-      }
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to initialize MLP 
solver!\n");
+#if HAVE_LIBGLPK
+      ah->ats_mode = MODE_MLP;
+      ah->s_init = &GAS_mlp_init;
+      ah->s_pref = &GAS_mlp_address_change_preference;
+      ah->s_del =  &GAS_mlp_address_delete;
+      ah->s_done = &GAS_mlp_done;
+#else
+      GNUNET_freee (ah);
+      return NULL;
+#endif
+      break;
     case MODE_SIMPLISTIC:
       /* Init the simplistic solver with default values */
+      ah->ats_mode = MODE_SIMPLISTIC;
+      ah->s_init = &GAS_simplistic_init;
+      ah->s_pref = &GAS_simplistic_address_change_preference;
+      ah->s_del  = &GAS_simplistic_address_delete;
+      ah->s_done = &GAS_simplistic_done;
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS started in %s mode\n", 
"SIMPLISTIC");
-      solver = GAS_simplistic_init (cfg, stats);
-      if (NULL != solver)
-      {
-          ats_mode = MODE_SIMPLISTIC;
-          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS started in %s mode\n", 
"SIMPLISTIC");
-          break;
-      }
-      else
-      {
-        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to initialize simplistic 
solver!\n");
-        return;
-      }
       break;
     default:
-      GNUNET_break (0);
+      return NULL;
       break;
   }
+
+  GNUNET_assert (NULL != ah->s_init);
+  GNUNET_assert (NULL != ah->s_pref);
+  GNUNET_assert (NULL != ah->s_del);
+  GNUNET_assert (NULL != ah->s_done);
+
+  ah->solver = ah->s_init (cfg, stats);
+  /* REMOVE */ solver = ah->solver;
+  if (NULL == ah->solver)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to initialize MLP solver!\n");
+    GNUNET_free (ah);
+    return NULL;
+  }
+
   /* up and running */
   running = GNUNET_YES;
+  return ah;
 }
 
 

Modified: gnunet/src/ats/gnunet-service-ats_addresses.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.h       2012-12-04 13:12:42 UTC 
(rev 25222)
+++ gnunet/src/ats/gnunet-service-ats_addresses.h       2012-12-04 13:16:26 UTC 
(rev 25223)
@@ -95,17 +95,35 @@
   int used;
 };
 
+typedef void
+(*GAS_solver_address_change_preference) (void *solver,
+                                         const struct GNUNET_PeerIdentity 
*peer,
+                                         enum GNUNET_ATS_PreferenceKind kind,
+                                         float score);
+
+typedef void
+ (*GAS_solver_address_delete) (void *solver, struct 
GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address);
+
+
+typedef void *
+ (*GAS_solver_init) (const struct GNUNET_CONFIGURATION_Handle *cfg,
+                     const struct GNUNET_STATISTICS_Handle *stats);
+
+
+typedef void
+ (*GAS_solver_done) (void *solver);
+
+
 /**
  * Initialize address subsystem.
  *
  * @param cfg configuration to use
  * @param stats the statistics handle to use
  */
-void
+struct GAS_Addresses_Handle *
 GAS_addresses_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
                     const struct GNUNET_STATISTICS_Handle *stats);
 
-
 /**
  * Shutdown address subsystem.
  */

Modified: gnunet/src/ats/gnunet-service-ats_addresses_mlp.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses_mlp.c   2012-12-04 13:12:42 UTC 
(rev 25222)
+++ gnunet/src/ats/gnunet-service-ats_addresses_mlp.c   2012-12-04 13:16:26 UTC 
(rev 25223)
@@ -1073,11 +1073,9 @@
  * @param max_iterations maximum time limit for the LP/MLP Solver
  * @return struct GAS_MLP_Handle * on success, NULL on fail
  */
-struct GAS_MLP_Handle *
+void *
 GAS_mlp_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
-              const struct GNUNET_STATISTICS_Handle *stats,
-              struct GNUNET_TIME_Relative max_duration,
-              unsigned int max_iterations)
+              const struct GNUNET_STATISTICS_Handle *stats)
 {
   struct GAS_MLP_Handle * mlp = GNUNET_malloc (sizeof (struct GAS_MLP_Handle));
 
@@ -1092,6 +1090,9 @@
   char * quota_out_str;
   char * quota_in_str;
 
+  struct GNUNET_TIME_Relative max_duration;
+  long long unsigned int max_iterations;
+
   /* Init GLPK environment */
   int res = glp_init_env();
   switch (res) {
@@ -1125,6 +1126,21 @@
 
   mlp->BIG_M = (double) BIG_M_VALUE;
 
+  /* Get maximum number of iterations */
+
+
+  /* Get timeout for iterations */
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time(cfg, "ats", 
"MAX_DURATION", &max_duration))
+  {
+    max_duration = MLP_MAX_EXEC_DURATION;
+  }
+
+
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_size(cfg, "ats", 
"MAX_ITERATIONS", &max_iterations))
+  {
+    max_iterations = MLP_MAX_ITERATIONS;
+  }
+
   /* Get diversity coefficient from configuration */
   if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (cfg, "ats",
                                                       "COEFFICIENT_D",
@@ -1614,8 +1630,9 @@
  * @param address the address to delete
  */
 void
-GAS_mlp_address_delete (struct GAS_MLP_Handle *mlp, struct 
GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address)
+GAS_mlp_address_delete (void *solver, struct GNUNET_CONTAINER_MultiHashMap * 
addresses, struct ATS_Address *address)
 {
+  struct GAS_MLP_Handle *mlp = solver;
   GNUNET_STATISTICS_update (mlp->stats,"# LP address deletions", 1, GNUNET_NO);
   struct GAS_MLP_SolutionContext ctx;
 
@@ -1718,16 +1735,18 @@
  * @param score the score
  */
 void
-GAS_mlp_address_change_preference (struct GAS_MLP_Handle *mlp,
+GAS_mlp_address_change_preference (void *solver,
                                    const struct GNUNET_PeerIdentity *peer,
                                    enum GNUNET_ATS_PreferenceKind kind,
                                    float score)
 {
+  struct GAS_MLP_Handle *mlp = solver;
   GNUNET_STATISTICS_update (mlp->stats,"# LP address preference changes", 1, 
GNUNET_NO);
 
   //struct ATS_Peer *p = mlp_find_peer (mlp, peer);
   //FIXME to finish implementation
   /* Here we have to do the matching */
+
 }
 
 /**
@@ -1735,8 +1754,9 @@
  * @param mlp the MLP handle
  */
 void
-GAS_mlp_done (struct GAS_MLP_Handle *mlp)
+GAS_mlp_done (void *solver)
 {
+  struct GAS_MLP_Handle *mlp = solver;
   struct ATS_Peer * peer;
   struct ATS_Address *addr;
 

Modified: gnunet/src/ats/gnunet-service-ats_addresses_mlp.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses_mlp.h   2012-12-04 13:12:42 UTC 
(rev 25222)
+++ gnunet/src/ats/gnunet-service-ats_addresses_mlp.h   2012-12-04 13:16:26 UTC 
(rev 25223)
@@ -321,11 +321,9 @@
  * @param max_iterations maximum time limit for the LP/MLP Solver
  * @return struct GAS_MLP_Handle * on success, NULL on fail
  */
-struct GAS_MLP_Handle *
+void *
 GAS_mlp_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
-              const struct GNUNET_STATISTICS_Handle *stats,
-              struct GNUNET_TIME_Relative max_duration,
-              unsigned int max_iterations);
+              const struct GNUNET_STATISTICS_Handle *stats);
 
 /**
  * Solves the MLP problem on demand
@@ -367,7 +365,7 @@
  * @param address the address to delete
  */
 void
-GAS_mlp_address_delete (struct GAS_MLP_Handle *mlp, struct 
GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address);
+GAS_mlp_address_delete (void *solver, struct GNUNET_CONTAINER_MultiHashMap * 
addresses, struct ATS_Address *address);
 
 
 /**
@@ -379,7 +377,7 @@
  * @param score the score
  */
 void
-GAS_mlp_address_change_preference (struct GAS_MLP_Handle *mlp,
+GAS_mlp_address_change_preference (void *solver,
                                    const struct GNUNET_PeerIdentity *peer,
                                    enum GNUNET_ATS_PreferenceKind kind,
                                    float score);

Modified: gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c    2012-12-04 
13:12:42 UTC (rev 25222)
+++ gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c    2012-12-04 
13:16:26 UTC (rev 25223)
@@ -42,7 +42,7 @@
  * @param stats the GNUNET_STATISTICS handle
  * @return struct GAS_SIMPLISTIC_Handle * on success, NULL on fail
  */
-struct GAS_SIMPLISTIC_Handle *
+void *
 GAS_simplistic_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
                      const struct GNUNET_STATISTICS_Handle *stats)
 {
@@ -54,7 +54,7 @@
  * Shutdown the simplistic problem solving component
  */
 void
-GAS_simplistic_done (struct GAS_SIMPLISTIC_Handle *solver)
+GAS_simplistic_done (void *solver)
 {
   GNUNET_free (solver);
 }
@@ -68,11 +68,17 @@
  * @param address the address to update
  */
 void
-GAS_simplistic_address_update (struct GAS_SIMPLISTIC_Handle *solver, struct 
GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address)
+GAS_simplistic_address_update (void *solver, struct 
GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address)
 {
 
 }
 
+void
+GAS_simplistic_address_delete (void *solver, struct 
GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address)
+{
+
+}
+
 /**
  * Changes the preferences for a peer in the  problem
  *
@@ -82,7 +88,7 @@
  * @param score the score
  */
 void
-GAS_simplistic_address_change_preference (struct GAS_SIMPLISTIC_Handle *solver,
+GAS_simplistic_address_change_preference (void *solver,
                                    const struct GNUNET_PeerIdentity *peer,
                                    enum GNUNET_ATS_PreferenceKind kind,
                                    float score)

Modified: gnunet/src/ats/gnunet-service-ats_addresses_simplistic.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses_simplistic.h    2012-12-04 
13:12:42 UTC (rev 25222)
+++ gnunet/src/ats/gnunet-service-ats_addresses_simplistic.h    2012-12-04 
13:16:26 UTC (rev 25223)
@@ -37,7 +37,7 @@
  * @param stats the GNUNET_STATISTICS handle
  * @return struct GAS_SIMPLISTIC_Handle * on success, NULL on fail
  */
-struct GAS_SIMPLISTIC_Handle *
+void *
 GAS_simplistic_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
                      const struct GNUNET_STATISTICS_Handle *stats);
 
@@ -45,7 +45,7 @@
  * Shutdown the simplistic problem solving component
  */
 void
-GAS_simplistic_done (struct GAS_SIMPLISTIC_Handle *);
+GAS_simplistic_done (void * solver);
 
 
 /**
@@ -57,8 +57,11 @@
  * @param address the address to update
  */
 void
-GAS_simplistic_address_update (struct GAS_SIMPLISTIC_Handle *solver, struct 
GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address);
+GAS_simplistic_address_update (void *solver, struct 
GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address);
 
+void
+GAS_simplistic_address_delete (void *solver, struct 
GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address);
+
 /**
  * Changes the preferences for a peer in the  problem
  *
@@ -68,7 +71,7 @@
  * @param score the score
  */
 void
-GAS_simplistic_address_change_preference (struct GAS_SIMPLISTIC_Handle *solver,
+GAS_simplistic_address_change_preference (void *solver,
                                    const struct GNUNET_PeerIdentity *peer,
                                    enum GNUNET_ATS_PreferenceKind kind,
                                    float score);

Modified: gnunet/src/ats/perf_ats_mlp.c
===================================================================
--- gnunet/src/ats/perf_ats_mlp.c       2012-12-04 13:12:42 UTC (rev 25222)
+++ gnunet/src/ats/perf_ats_mlp.c       2012-12-04 13:16:26 UTC (rev 25223)
@@ -195,7 +195,7 @@
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Setting up %u peers with %u addresses 
per peer\n", peers, addresses);
 
-  mlp = GAS_mlp_init (cfg, NULL, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS);
+  mlp = GAS_mlp_init (cfg, NULL);
   if (NULL == mlp)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to init MLP\n");

Modified: gnunet/src/ats/test_ats_mlp.c
===================================================================
--- gnunet/src/ats/test_ats_mlp.c       2012-12-04 13:12:42 UTC (rev 25222)
+++ gnunet/src/ats/test_ats_mlp.c       2012-12-04 13:16:26 UTC (rev 25223)
@@ -78,7 +78,7 @@
 
   addresses = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
 
-  mlp = GAS_mlp_init (cfg, NULL, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS);
+  mlp = GAS_mlp_init (cfg, NULL);
   mlp->auto_solve = GNUNET_NO;
 
   struct GNUNET_PeerIdentity p[10];

Modified: gnunet/src/ats/test_ats_mlp_averaging.c
===================================================================
--- gnunet/src/ats/test_ats_mlp_averaging.c     2012-12-04 13:12:42 UTC (rev 
25222)
+++ gnunet/src/ats/test_ats_mlp_averaging.c     2012-12-04 13:16:26 UTC (rev 
25223)
@@ -79,7 +79,7 @@
 
   addresses = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
 
-  mlp = GAS_mlp_init (cfg, NULL, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS);
+  mlp = GAS_mlp_init (cfg, NULL);
   mlp->auto_solve = GNUNET_NO;
 
   struct GNUNET_PeerIdentity p[10];




reply via email to

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