gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r14973 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r14973 - gnunet/src/transport
Date: Wed, 13 Apr 2011 14:12:13 +0200

Author: wachs
Date: 2011-04-13 14:12:12 +0200 (Wed, 13 Apr 2011)
New Revision: 14973

Modified:
   gnunet/src/transport/gnunet-service-transport.c
Log:
optimized code


Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c     2011-04-12 23:33:44 UTC 
(rev 14972)
+++ gnunet/src/transport/gnunet-service-transport.c     2011-04-13 12:12:12 UTC 
(rev 14973)
@@ -995,6 +995,9 @@
 #if HAVE_LIBGLPK
        glp_prob *prob;
 #endif
+
+       struct ATS_mechanism * mechanisms;
+       struct ATS_peer * peers;
 };
 
 
@@ -1113,9 +1116,6 @@
  */
 static void try_transmission_to_peer (struct NeighbourList *n);
 
-
-static void ats_init ();
-
 static void ats_shutdown ( );
 
 static void ats_notify_peer_connect (
@@ -1132,6 +1132,9 @@
 struct ForeignAddressList * ats_get_preferred_address (
                struct NeighbourList *n);
 
+static void
+ats_calculate_bandwidth_distribution ();
+
 /**
  * Find an entry in the neighbour list for a particular peer.
  *
@@ -1148,35 +1151,66 @@
   return head;
 }
 
-static void update_addr_ats (struct ForeignAddressList *fal, const struct 
GNUNET_TRANSPORT_ATS_Information *ats_data, int ats_count)
+static int update_addr_ats (struct ForeignAddressList *fal, const struct 
GNUNET_TRANSPORT_ATS_Information *ats_data, int ats_count)
 {
-       int c1, c2;
+       int c1, c2, set;
+       set = GNUNET_NO;
        for (c1=0; c1<ats_count; c1++)
        {
                  for (c2=0; c2<available_quality_metrics; c2++)
                  {
                          if (ntohl(ats_data[c1].type) == qm[c2].atis_index)
                          {
-                                 fal->quality[c2].values[0] = 
fal->quality[c2].values[1];
-                                 fal->quality[c2].values[1] = 
fal->quality[c2].values[2];
-                                 fal->quality[c2].values[2] = 
ntohl(ats_data[c1].value);
+                                 /* shifting history */
+//                               fal->quality[c2].values[0] = 
fal->quality[c2].values[1];
+//                               fal->quality[c2].values[1] = 
fal->quality[c2].values[2];
+                                 /* setting latest value */
+//                               fal->quality[c2].values[2] = 
ntohl(ats_data[c1].value);
+//                               set = GNUNET_YES;
                          }
                  }
+                 if (set == GNUNET_NO)
+                 {
+                         for (c2=0; c2<available_ressources; c2++)
+                         {
+                                 if (ntohl(ats_data[c1].type) == 
ressources[c2].atis_index)
+                                 {
+                                         //fal->ressources[c2].c = 
ntohl(ats_data[c1].value);
+                                         //set = GNUNET_YES;
+                                 }
+                         }
+                 }
        }
+       return set;
 }
 
-static void update_addr_value (struct ForeignAddressList *fal, uint32_t value 
, int ats_index)
+static int update_addr_value (struct ForeignAddressList *fal, uint32_t value , 
int ats_index)
 {
        int c;
+       int set = GNUNET_NO;
        for (c=0; c<available_quality_metrics; c++)
        {
          if (ats_index == qm[c].atis_index)
          {
-                 fal->quality[c].values[0] = fal->quality[c].values[1];
-                 fal->quality[c].values[1] = fal->quality[c].values[2];
-                 fal->quality[c].values[2] = value;
+//               fal->quality[c].values[0] = fal->quality[c].values[1];
+//               fal->quality[c].values[1] = fal->quality[c].values[2];
+//               fal->quality[c].values[2] = value;
+                 set = GNUNET_YES;
          }
        }
+       if (set == GNUNET_NO)
+       {
+         for (c=0; c<available_ressources; c++)
+         {
+                 if (ats_index == ressources[c].atis_index)
+                 {
+//                       fal->ressources[c].c = value;
+//                       set = GNUNET_YES;
+                 }
+         }
+       }
+
+       return set;
 }
 
 /**
@@ -5868,34 +5902,39 @@
                        cont=GNUNET_YES;
                        break;
                case GLP_FEAS:
-                       GNUNET_log (error_kind, "%s solution is integer 
feasible, however, its optimality (or non-optimality) has not been proven, \n", 
problem);
+                       GNUNET_log (error_kind, "%s solution is %s feasible, 
however, its optimality (or non-optimality) has not been proven, \n", problem, 
(0==strcmp(problem,"LP")?"":"integer"));
                        cont=GNUNET_YES;
                        break;
                case GLP_NOFEAS:
-                       GNUNET_log (error_kind, "%s problem has no integer 
feasible solution\n", problem);
+                       GNUNET_log (error_kind, "%s problem has no %sfeasible 
solution\n", problem,  (0==strcmp(problem,"LP")?"":"integer "));
                        break;
+               case GLP_INFEAS:
+                       GNUNET_log (error_kind, "%s problem is infeasible \n", 
problem);
                        break;
+               case GLP_UNBND:
+                       GNUNET_log (error_kind, "%s problem is unbounded \n", 
problem);
                default:
                        break;
        }
 return cont;
 }
-#endif
 
-#if HAVE_LIBGLPK
+
 static void ats_solve_problem (unsigned int max_it, unsigned int  max_dur, 
unsigned int c_peers, unsigned int  c_mechs, struct ATS_result *res)
 {
        int result;
        int solution;
+       int c;
 
        // Solving simplex
        glp_prob *prob = ats->prob;
 
        glp_smcp opt_lp;
        glp_init_smcp(&opt_lp);
+
+       opt_lp.msg_lev = GLP_MSG_ALL;
 #if VERBOSE_ATS
-       opt_lp.msg_lev = GLP_MSG_ALL;
-#else
+       #else
        opt_lp.msg_lev = GLP_MSG_OFF;
 #endif
        //opt_lp.presolve = GLP_ON;
@@ -5911,9 +5950,10 @@
                //opt_mlp.presolve = GLP_ON;
                opt_mlp.tm_lim = max_dur;
                /* output level */
+
+                       opt_mlp.msg_lev = GLP_MSG_ALL;
 #if VERBOSE_ATS
-                       opt_mlp.msg_lev = GLP_MSG_ALL;
-#else
+                       #else
                        opt_mlp.msg_lev = GLP_MSG_OFF;
 #endif
                result = glp_intopt (prob, &opt_mlp);
@@ -5928,16 +5968,16 @@
        if ((ats->save_mlp == GNUNET_YES) && (c_peers > 1))
        {
                char * filename;
-               GNUNET_asprintf (&filename, "ats_mlp_p%i_m%i_%llu.mlp",c_peers, 
c_mechs, GNUNET_TIME_absolute_get().abs_value);
-               if (GNUNET_NO == GNUNET_DISK_file_test(filename))
+               GNUNET_asprintf (&filename, "ats_mlp_p%i_m%i_llu.mlp",c_peers, 
c_mechs, GNUNET_TIME_absolute_get().abs_value);
+               //if (GNUNET_NO == GNUNET_DISK_file_test(filename))
                        glp_write_lp (prob, NULL, filename);
                GNUNET_free (filename);
        }
        if ((ats->save_solution == GNUNET_YES) && (c_peers > 1))
        {
                char * filename;
-               GNUNET_asprintf (&filename, "ats_mlp_p%i_m%i_%llu.sol",c_peers, 
c_mechs, GNUNET_TIME_absolute_get().abs_value);
-               if (GNUNET_NO == GNUNET_DISK_file_test(filename))
+               GNUNET_asprintf (&filename, "ats_mlp_p%i_m%i_llu.sol",c_peers, 
c_mechs, GNUNET_TIME_absolute_get().abs_value);
+               //if (GNUNET_NO == GNUNET_DISK_file_test(filename))
                        glp_print_sol (prob, filename);
                GNUNET_free (filename);
        }
@@ -5983,10 +6023,47 @@
        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s %f\n", 
glp_get_col_name(prob,2*c_mechs+3), glp_get_col_prim(prob,2*c_mechs+3));
 #endif
 }
-#endif
 
+static void ats_delete_problem ()
+{
+       int c;
 
-#if HAVE_LIBGLPK
+       for (c=0; c< (ats->res).c_mechs; c++)
+               GNUNET_free_non_null (ats->mechanisms[c].rc);
+
+       if (ats->mechanisms!=NULL)
+       {
+               GNUNET_free(ats->mechanisms);
+               ats->mechanisms = NULL;
+       }
+       if (ats->peers!=NULL)
+       {
+               GNUNET_free(ats->peers);
+               ats->peers = NULL;
+       }
+
+       if (ats->prob != NULL)
+       {
+               glp_delete_prob(ats->prob);
+               ats->prob = NULL;
+       }
+
+       ats->res.begin_cr = GNUNET_SYSERR;
+       ats->res.begin_qm = GNUNET_SYSERR;
+       ats->res.c_mechs = 0;
+       ats->res.c_peers = 0;
+       ats->res.end_cr = GNUNET_SYSERR;
+       ats->res.end_qm = GNUNET_SYSERR;
+       ats->res.solution = GNUNET_SYSERR;
+       ats->res.valid = GNUNET_SYSERR;
+}
+
+static void ats_update_problem ()
+{
+
+}
+
+
 /** solve the bandwidth distribution problem
  * @param max_it maximum iterations
  * @param max_dur maximum duration in ms
@@ -6000,14 +6077,6 @@
  */
 static int ats_create_problem (double D, double U, double R, int v_b_min, int 
v_n_min, struct ATS_result *res)
 {
-#if !HAVE_LIBGLPK
-       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "no glpk installed\n");
-       return GNUNET_SYSERR;
-#else
-#if DEBUG_ATS
-       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "glpk installed\n");
-#endif
-
        if (ats->prob != NULL)
                glp_delete_prob(ats->prob);
 
@@ -6051,12 +6120,17 @@
                GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "No addresses for bw 
distribution available\n", c_peers);
 #endif
                res->valid = GNUNET_NO;
+               res->c_peers = 0;
+               res->c_mechs = 0;
                return GNUNET_SYSERR;
        }
 
-       struct ATS_mechanism * mechanisms = GNUNET_malloc((1+c_mechs) * sizeof 
(struct ATS_mechanism));
-       struct ATS_peer * peers = GNUNET_malloc((1+c_peers) * sizeof (struct 
ATS_peer));
+       ats->mechanisms = GNUNET_malloc((1+c_mechs) * sizeof (struct 
ATS_mechanism));
+       ats->peers =  GNUNET_malloc((1+c_peers) * sizeof (struct ATS_peer));
 
+       struct ATS_mechanism * mechanisms = ats->mechanisms;
+       struct ATS_peer * peers = ats->peers;
+
        c_mechs = 1;
        c_peers = 1;
        next = neighbours;
@@ -6120,7 +6194,7 @@
                glp_set_col_name(ats->prob, c, name);
                GNUNET_free (name);
                glp_set_col_bnds(ats->prob, c, GLP_LO, 0.0, 0.0);
-               glp_set_obj_coef(ats->prob, c, 1);
+               glp_set_obj_coef(ats->prob, c, 0);
 
        }
        /* adding n_t cols */
@@ -6265,31 +6339,16 @@
        }
        row_index ++;
 
-       /* optimisation constraints*/
+       // optimisation constraints
 
-       /* adding columns */
-       glp_add_cols(ats->prob, 3 + c_q_metrics);
+       // adding columns
+       //glp_add_cols(ats->prob, 3 + c_q_metrics);
 
+       // Constraint 6: optimize for diversity
+       glp_add_cols(ats->prob, 1);
        glp_set_col_name(ats->prob, (2*c_mechs) + 1, "d");
        glp_set_obj_coef(ats->prob, (2*c_mechs) + 1, D);
        glp_set_col_bnds(ats->prob, (2*c_mechs) + 1, GLP_LO, 0.0, 0.0);
-       glp_set_col_name(ats->prob, (2*c_mechs) + 2, "u");
-       glp_set_obj_coef(ats->prob, (2*c_mechs) + 2, U);
-       glp_set_col_bnds(ats->prob, (2*c_mechs) + 2, GLP_LO, 0.0, 0.0);
-       glp_set_col_name(ats->prob, (2*c_mechs) + 3, "r");
-       glp_set_obj_coef(ats->prob, (2*c_mechs) + 3, R);
-       glp_set_col_bnds(ats->prob, (2*c_mechs) + 3, GLP_LO, 0.0, 0.0);
-
-       for (c=1; c<= c_q_metrics; c++)
-       {
-               GNUNET_asprintf(&name, "Q_%s",qm[c-1].name);
-               glp_set_col_name(ats->prob, (2*c_mechs) + 3 + c, name);
-               glp_set_col_bnds(ats->prob, (2*c_mechs) + 3 + c, GLP_LO, 0.0, 
0.0);
-               GNUNET_free (name);
-               glp_set_obj_coef(ats->prob, (2*c_mechs) + 3 + c, Q[c]);
-       }
-
-       // Constraint 6: optimize for diversity
        glp_add_rows(ats->prob, 1);
 #if VERBOSE_ATS
        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "bounds [row]=[%i] \n",row_index);
@@ -6315,8 +6374,79 @@
        array_index++;
        row_index ++;
 
+       // Constraint 8: optimize bandwidth utility
+       glp_add_cols(ats->prob, 1);
+       glp_set_col_name(ats->prob, (2*c_mechs) + 2, "u");
+       glp_set_obj_coef(ats->prob, (2*c_mechs) + 2, U);
+       glp_set_col_bnds(ats->prob, (2*c_mechs) + 2, GLP_LO, 0.0, 0.0);
+       glp_add_rows(ats->prob, 1);
+#if VERBOSE_ATS
+       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "bounds [row]=[%i] \n",row_index);
+#endif
+       glp_set_row_bnds(ats->prob, row_index, GLP_FX, 0.0, 0.0);
+       for (c=1; c<=c_mechs; c++)
+       {
+               ia[array_index] = row_index;
+               ja[array_index] = c;
+               ar[array_index] = mechanisms[c].peer->f;
+#if VERBOSE_ATS
+               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: [%i,%i]=%f 
\n",array_index, ia[array_index], ja[array_index], ar[array_index]);
+#endif
+               array_index++;
+       }
+       ia[array_index] = row_index;
+       ja[array_index] = (2*c_mechs) + 2;
+       ar[array_index] = -1;
+#if VERBOSE_ATS
+       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: [%i,%i]=%f 
\n",array_index, ia[array_index], ja[array_index], ar[array_index]);
+#endif
 
+       array_index++;
+       row_index ++;
+
+       // Constraint 9: optimize relativity
+       glp_add_cols(ats->prob, 1);
+       glp_set_col_name(ats->prob, (2*c_mechs) + 3, "r");
+       glp_set_obj_coef(ats->prob, (2*c_mechs) + 3, R);
+       glp_set_col_bnds(ats->prob, (2*c_mechs) + 3, GLP_LO, 0.0, 0.0);
+       glp_add_rows(ats->prob, c_peers);
+       for (c=1; c<=c_peers; c++)
+       {
+               glp_set_row_bnds(ats->prob, row_index, GLP_LO, 0.0, 0.0);
+
+               struct ATS_mechanism *m = peers[c].m_head;
+               while (m!=NULL)
+               {
+                       ia[array_index] = row_index;
+                       ja[array_index] = m->col_index;
+                       ar[array_index] = 1 / mechanisms[c].peer->f;
+#if VERBOSE_ATS
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: 
[%i,%i]=%f \n",array_index, ia[array_index], ja[array_index], ar[array_index]);
+#endif
+                       array_index++;
+                       m = m->next;
+               }
+               ia[array_index] = row_index;
+               ja[array_index] = (2*c_mechs) + 3;
+               ar[array_index] = -1;
+#if VERBOSE_ATS
+               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: [%i,%i]=%f 
\n",array_index, ia[array_index], ja[array_index], ar[array_index]);
+#endif
+               array_index++;
+
+               row_index++;
+       }
+
        // Constraint 7: optimize for quality
+       glp_add_cols(ats->prob, c_q_metrics);
+       for (c=1; c<= c_q_metrics; c++)
+       {
+               GNUNET_asprintf(&name, "Q_%s",qm[c-1].name);
+               glp_set_col_name(ats->prob, (2*c_mechs) + 3 + c, name);
+               glp_set_col_bnds(ats->prob, (2*c_mechs) + 3 + c, GLP_LO, 0.0, 
0.0);
+               GNUNET_free (name);
+               glp_set_obj_coef(ats->prob, (2*c_mechs) + 3 + c, Q[c]);
+       }
     glp_add_rows(ats->prob, available_quality_metrics);
        res->begin_qm = array_index;
        for (c=1; c <= c_q_metrics; c++)
@@ -6324,11 +6454,11 @@
 #if VERBOSE_ATS
                GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "bounds [row]=[%i] 
\n",row_index);
 #endif
+               double value = 1;
                glp_set_row_bnds(ats->prob, row_index, GLP_FX, 0.0, 0.0);
-
                for (c2=1; c2<=c_mechs; c2++)
                {
-                       double value = 0;
+
                        ia[array_index] = row_index;
                        ja[array_index] = c2;
                        if (qm[c-1].atis_index  == 
GNUNET_TRANSPORT_ATS_QUALITY_NET_DELAY)
@@ -6341,6 +6471,7 @@
                                v2 = 
mechanisms[c2].addr->quality[c-1].values[2];
                                if (v1 < 1) v0 = 0.1;
                                value = 100.0 / ((v0 + 2 * v1 + 3 * v2) / 6.0);
+                               value = 1;
                        }
                        if (qm[c-1].atis_index  == 
GNUNET_TRANSPORT_ATS_QUALITY_NET_DISTANCE)
                        {
@@ -6373,62 +6504,8 @@
                array_index++;
                row_index++;
        }
-       res->end_qm = array_index--;
+       res->end_qm = array_index-1;
 
-       // Constraint 8: optimize bandwidth utility
-       glp_add_rows(ats->prob, 1);
-#if VERBOSE_ATS
-       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "bounds [row]=[%i] \n",row_index);
-#endif
-       glp_set_row_bnds(ats->prob, row_index, GLP_FX, 0.0, 0.0);
-       for (c=1; c<=c_mechs; c++)
-       {
-               ia[array_index] = row_index;
-               ja[array_index] = c;
-               ar[array_index] = mechanisms[c].peer->f;
-#if VERBOSE_ATS
-               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: [%i,%i]=%f 
\n",array_index, ia[array_index], ja[array_index], ar[array_index]);
-#endif
-               array_index++;
-       }
-       ia[array_index] = row_index;
-       ja[array_index] = (2*c_mechs) + 2;
-       ar[array_index] = -1;
-#if VERBOSE_ATS
-       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: [%i,%i]=%f 
\n",array_index, ia[array_index], ja[array_index], ar[array_index]);
-#endif
-
-       array_index++;
-       row_index ++;
-
-       // Constraint 9: optimize relativity
-       glp_add_rows(ats->prob, c_peers);
-       for (c=1; c<=c_peers; c++)
-       {
-               glp_set_row_bnds(ats->prob, row_index, GLP_LO, 0.0, 0.0);
-
-               struct ATS_mechanism *m = peers[c].m_head;
-               while (m!=NULL)
-               {
-                       ia[array_index] = row_index;
-                       ja[array_index] = m->col_index;
-                       ar[array_index] = 1;
-#if VERBOSE_ATS
-                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: 
[%i,%i]=%f \n",array_index, ia[array_index], ja[array_index], ar[array_index]);
-#endif
-                       array_index++;
-                       m = m->next;
-               }
-               ia[array_index] = row_index;
-               ja[array_index] = (2*c_mechs) + 3;
-               ar[array_index] = -1;
-#if VERBOSE_ATS
-               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: [%i,%i]=%f 
\n",array_index, ia[array_index], ja[array_index], ar[array_index]);
-#endif
-               array_index++;
-
-               row_index++;
-       }
        /* Loading the matrix */
        glp_load_matrix(ats->prob, array_index-1, ia, ja, ar);
 
@@ -6443,17 +6520,23 @@
        GNUNET_free (ia);
        GNUNET_free (ar);
 
-       for (c=0; c<c_mechs; c++)
-               GNUNET_free_non_null (mechanisms[c].rc);
+       return GNUNET_OK;
 
-       GNUNET_free(mechanisms);
-       GNUNET_free(peers);
-       return GNUNET_OK;
+}
+
+void ats_notify_ats_data (
+               const struct GNUNET_PeerIdentity *peer,
+               const struct GNUNET_TRANSPORT_ATS_Information *ats_data)
+{
+#if DEBUG_ATS
+       GNUNET_log (GNUNET_ERROR_TYPE_BULK, "ATS_notify_ats_data: 
%s\n",GNUNET_i2s(peer));
 #endif
+       ats_calculate_bandwidth_distribution(ats);
 }
 #endif
 
-void ats_calculate_bandwidth_distribution ()
+static void
+ats_calculate_bandwidth_distribution ()
 {
 #if HAVE_LIBGLPK
        struct GNUNET_TIME_Absolute start;
@@ -6474,30 +6557,25 @@
        else
                dur = (int) ats->max_exec_duration.rel_value;
 
-
-
        start = GNUNET_TIME_absolute_get();
        if ((ats->modified_addr == GNUNET_YES) || (ats->prob==NULL))
        {
+               ats->modified_addr = GNUNET_NO;
+               ats_delete_problem ();
+               ats_create_problem (ats->D, ats->U, ats->R, ats->v_b_min, 
ats->v_n_min, &ats->res);
 #if DEBUG_ATS
-               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Peers/Addresses were 
modified... have to recreate problem\n");
+               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Peers/Addresses were 
modified... new problem: %i peer, %i mechs\n", ats->res.c_peers, 
ats->res.c_mechs);
 #endif
-               ats->modified_addr = GNUNET_NO;
-               ats->res.c_mechs = 0;
-               ats->res.c_peers = 0;
-               ats->res.solution = 0;
-               ats->res.valid = GNUNET_NO;
-               ats_create_problem (ats->D, ats->U, ats->R, ats->v_b_min, 
ats->v_n_min, &ats->res);
        }
-       else if (ats->modified_resources)
+       else if (ats->modified_resources == GNUNET_YES)
        {
                GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "RESSOURCE...modified 
problem\n");
-               /* TODO */
+               ats_update_problem();
        }
-       else if (ats->modified_quality)
+       else if (ats->modified_quality == GNUNET_YES)
        {
                GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "RESSOURCE...quality 
problem\n");
-               /* TODO */
+               ats_update_problem();
        }
 #if DEBUG_ATS
        else GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Problem is unmodified\n");
@@ -6505,15 +6583,18 @@
 
        if (ats->res.valid == GNUNET_YES)
        {
+               ats->res.solution = GNUNET_SYSERR;
                ats_solve_problem(ats->max_iterations, 
ats->max_exec_duration.rel_value, ats->res.c_peers, ats->res.c_mechs, 
&ats->res);
+               if (ats->res.solution != 5)
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Problem solution 
is not optimal: %i\n", ats->res.solution);
        }
 
        duration = 
GNUNET_TIME_absolute_get_difference(start,GNUNET_TIME_absolute_get());
 
-       if ((ats->res.valid == GNUNET_YES))
+       if (ats->res.valid == GNUNET_YES)
        {
 #if DEBUG_ATS
-               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "MLP execution time in 
[ms] for %i mechanisms: %llu %llu \n", res, duration.rel_value,  
ats->res.solution);
+               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "MLP execution time in 
[ms] for %i mechanisms: %llu\n", ats->res.c_mechs, duration.rel_value);
 #endif
                GNUNET_STATISTICS_set (stats, "ATS duration", 
duration.rel_value, GNUNET_NO);
                GNUNET_STATISTICS_set (stats, "ATS mechanisms", 
ats->res.c_mechs, GNUNET_NO);
@@ -6522,7 +6603,7 @@
                GNUNET_STATISTICS_set (stats, "ATS timestamp", start.abs_value, 
GNUNET_NO);
        }
 #if DEBUG_ATS
-       else if (res == 0)
+       else if (ats->res.valid == GNUNET_NO)
        {
                 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "MLP not executed: no 
addresses\n");
        }
@@ -6562,6 +6643,10 @@
 
 void ats_init ()
 {
+       int c = 0;
+       unsigned long long  value;
+       char * section;
+
        ats = GNUNET_malloc(sizeof (struct ATS_info));
 
        ats->min_delta = ATS_MIN_INTERVAL;
@@ -6584,9 +6669,6 @@
        ats->prob = NULL;
 #endif
 
-       int c = 0;
-       unsigned long long  value;
-       char * section;
        /* loading cost ressources */
        for (c=0; c<available_ressources; c++)
        {
@@ -6635,11 +6717,7 @@
                GNUNET_SCHEDULER_cancel(ats->ats_task);
        ats->ats_task = GNUNET_SCHEDULER_NO_TASK;
 #if HAVE_LIBGLPK
-       if (ats->prob != NULL)
-       {
-               glp_delete_prob(ats->prob);
-               ats->prob = NULL;
-       }
+       ats_delete_problem ();
 #endif
        GNUNET_free (ats);
 }
@@ -6678,18 +6756,6 @@
        ats_calculate_bandwidth_distribution (ats);
 }
 
-#if HAVE_LIBGLPK
-void ats_notify_ats_data (
-               const struct GNUNET_PeerIdentity *peer,
-               const struct GNUNET_TRANSPORT_ATS_Information *ats_data)
-{
-#if DEBUG_ATS
-       GNUNET_log (GNUNET_ERROR_TYPE_BULK, "ATS_notify_ats_data: 
%s\n",GNUNET_i2s(peer));
-#endif
-       ats_calculate_bandwidth_distribution(ats);
-}
-#endif
-
 struct ForeignAddressList * ats_get_preferred_address (
                struct NeighbourList *n)
 {




reply via email to

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