gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r19878 - gnunet/src/ats
Date: Mon, 20 Feb 2012 23:02:28 +0100

Author: wachs
Date: 2012-02-20 23:02:28 +0100 (Mon, 20 Feb 2012)
New Revision: 19878

Modified:
   gnunet/src/ats/gnunet-service-ats_addresses.c
   gnunet/src/ats/gnunet-service-ats_addresses_mlp.c
Log:
- latest changes


Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c       2012-02-20 21:42:26 UTC 
(rev 19877)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c       2012-02-20 22:02:28 UTC 
(rev 19878)
@@ -588,34 +588,68 @@
 #endif
 }
 
-void
-GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer)
+
+void request_address_mlp (const struct GNUNET_PeerIdentity *peer)
 {
   struct ATS_Address *aa;
-
   aa = NULL;
 
-  if (ats_mode == SIMPLE)
+#if HAVE_GLPK
+  /* Get preferred address from MLP */
+  struct ATS_PreferedAddress * paddr = NULL;
+  paddr = GAS_mlp_get_preferred_address (mlp, addresses, peer);
+  aa = paddr->address;
+  aa->assigned_bw_out = GNUNET_BANDWIDTH_value_init(paddr->bandwidth_out);
+  /* FIXME use bw in value */
+  paddr->bandwidth_in = paddr->bandwidth_out;
+  aa->assigned_bw_in = GNUNET_BANDWIDTH_value_init (paddr->bandwidth_in);
+  GNUNET_free (paddr);
+#endif
+
+  if (aa == NULL)
   {
-    /* Get address with: stick to current address, lower distance, lower 
latency */
-    GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey,
-                                                &find_address_it, &aa);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Cannot suggest address for peer `%s'\n", GNUNET_i2s (peer));
+    return;
   }
-  if (ats_mode == MLP)
+  if (aa->active == GNUNET_NO)
   {
-#if HAVE_GLPK
-#endif
-    /* Get preferred address from MLP */
-    struct ATS_PreferedAddress * paddr = NULL;
-    paddr = GAS_mlp_get_preferred_address (mlp, addresses, peer);
-    aa = paddr->address;
-    aa->assigned_bw_out = GNUNET_BANDWIDTH_value_init(paddr->bandwidth_out);
-    /* FIXME use bw in value */
-    paddr->bandwidth_in = paddr->bandwidth_out;
-    aa->assigned_bw_in = GNUNET_BANDWIDTH_value_init (paddr->bandwidth_in);
-    GNUNET_free (paddr);
+    aa->active = GNUNET_YES;
+    active_addr_count++;
+
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "New bandwidth for peer %s is 
%u/%u\n",
+                GNUNET_i2s (&aa->peer), ntohl (aa->assigned_bw_in.value__),
+                ntohl (aa->assigned_bw_out.value__));
+    GAS_scheduling_transmit_address_suggestion (&aa->peer, aa->plugin, 
aa->addr,
+                                                aa->addr_len, aa->session_id,
+                                                aa->ats, aa->ats_count,
+                                                aa->assigned_bw_out,
+                                                aa->assigned_bw_in);
+    GAS_reservations_set_bandwidth (&aa->peer, aa->assigned_bw_in);
+    GAS_performance_notify_clients (&aa->peer, aa->plugin, aa->addr, 
aa->addr_len,
+                                    aa->ats, aa->ats_count, 
aa->assigned_bw_out,
+                                    aa->assigned_bw_in);
   }
+  else
+  {
+    /* just to be sure... */
+    GAS_scheduling_transmit_address_suggestion (peer, aa->plugin, aa->addr,
+                                                aa->addr_len, aa->session_id,
+                                                aa->ats, aa->ats_count,
+                                                aa->assigned_bw_out,
+                                                aa->assigned_bw_in);
+  }
 
+}
+
+void request_address_simple (const struct GNUNET_PeerIdentity *peer)
+{
+  struct ATS_Address *aa;
+  aa = NULL;
+
+  /* Get address with: stick to current address, lower distance, lower latency 
*/
+  GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey,
+                                              &find_address_it, &aa);
   if (aa == NULL)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -631,10 +665,6 @@
     {
       recalculate_assigned_bw ();
     }
-    if (ats_mode == SIMPLE)
-    {
-      recalculate_assigned_bw ();
-    }
   }
   else
   {
@@ -648,6 +678,20 @@
 }
 
 
+void
+GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer)
+{
+  if (ats_mode == SIMPLE)
+  {
+    request_address_simple (peer);
+  }
+  if (ats_mode == MLP)
+  {
+    request_address_mlp(peer);
+  }
+}
+
+
 // FIXME: this function should likely end up in the LP-subsystem and
 // not with 'addresses' in the future...
 void
@@ -692,7 +736,6 @@
           mlp = GAS_mlp_init (cfg, stats, MLP_MAX_EXEC_DURATION, 
MLP_MAX_ITERATIONS);
           break;
 #else
-
           GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "MLP mode was configured, but 
libglpk is not installed, switching to simple mode");
           ats_mode = SIMPLE;
           break;

Modified: gnunet/src/ats/gnunet-service-ats_addresses_mlp.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses_mlp.c   2012-02-20 21:42:26 UTC 
(rev 19877)
+++ gnunet/src/ats/gnunet-service-ats_addresses_mlp.c   2012-02-20 22:02:28 UTC 
(rev 19878)
@@ -1092,7 +1092,6 @@
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tAddress %s %f\n",
           (n == 1.0) ? "[x]" : "[ ]", b);
     }
-
   }
 
   if (mlp->mlp_task != GNUNET_SCHEDULER_NO_TASK)
@@ -1556,6 +1555,8 @@
   struct ATS_PreferedAddress *aa = (struct ATS_PreferedAddress *) cls;
   struct ATS_Address *addr = value;
   struct MLP_information *mlpi = addr->mlp_information;
+  if (mlpi == NULL)
+    return GNUNET_YES;
   if (mlpi->n == GNUNET_YES)
   {
     aa->address = addr;
@@ -1583,8 +1584,11 @@
                                const struct GNUNET_PeerIdentity *peer)
 {
   struct ATS_PreferedAddress * aa = GNUNET_malloc (sizeof (struct 
ATS_PreferedAddress));
+  aa->address = NULL;
+  aa->bandwidth_in = 0;
+  aa->bandwidth_out = 0;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Getting preferred address for `%s'\n", 
GNUNET_i2s (peer));
-  GNUNET_CONTAINER_multihashmap_get_multiple(addresses, &peer->hashPubKey, 
mlp_get_preferred_address_it, aa);
+  GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey, 
mlp_get_preferred_address_it, aa);
   return aa;
 }
 




reply via email to

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