gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [gnunet] branch master updated: use observed RTT as startin


From: gnunet
Subject: [GNUnet-SVN] [gnunet] branch master updated: use observed RTT as starting point for retransmissions
Date: Tue, 31 Jan 2017 17:54:37 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new 448a53703 use observed RTT as starting point for retransmissions
448a53703 is described below

commit 448a5370373e9dcef449c53aee6c078c7d3395d9
Author: Christian Grothoff <address@hidden>
AuthorDate: Tue Jan 31 17:54:48 2017 +0100

    use observed RTT as starting point for retransmissions
---
 src/cadet/TODO                                  |  1 -
 src/cadet/gnunet-service-cadet-new_channel.c    | 22 +++++++++++-----------
 src/cadet/gnunet-service-cadet-new_connection.c | 23 +++++++++++++++++------
 src/cadet/gnunet-service-cadet-new_connection.h | 10 ++++++++++
 src/cadet/gnunet-service-cadet-new_core.c       | 21 +++++++--------------
 5 files changed, 45 insertions(+), 32 deletions(-)

diff --git a/src/cadet/TODO b/src/cadet/TODO
index f2aed163d..03bf6eae1 100644
--- a/src/cadet/TODO
+++ b/src/cadet/TODO
@@ -1,7 +1,6 @@
 - URGENT: Congestion/flow control (CHANNEL):
   + estimate max bandwidth using bursts and use to for CONGESTION CONTROL!
    (and figure out how/where to use this!)
-  + get current RTT from connection; use that for initial retransmissions!
   + figure out flow control without ACKs (unreliable traffic!)
 
 - HIGH: revisit handling of 'unbuffered' traffic! (CHANNEL/TUNNEL)
diff --git a/src/cadet/gnunet-service-cadet-new_channel.c 
b/src/cadet/gnunet-service-cadet-new_channel.c
index 00866b3d5..da9eb3c75 100644
--- a/src/cadet/gnunet-service-cadet-new_channel.c
+++ b/src/cadet/gnunet-service-cadet-new_channel.c
@@ -25,8 +25,6 @@
  *
  * TODO:
  * - Congestion/flow control:
- *   + calculate current RTT if possible, use that for initial retransmissions
- *     (NOTE: needs us to learn which connection the tunnel uses for the 
message!)
  *   + estimate max bandwidth using bursts and use to for CONGESTION CONTROL!
  *     (and figure out how/where to use this!)
  *   + figure out flow control without ACKs (unreliable traffic!)
@@ -307,11 +305,6 @@ struct CadetChannel
   struct GNUNET_TIME_Relative retry_time;
 
   /**
-   * How long does it usually take to get an ACK.
-   */
-  struct GNUNET_TIME_Relative expected_delay;
-
-  /**
    * Bitfield of already-received messages past @e mid_recv.
    */
   uint64_t mid_futures;
@@ -1649,10 +1642,17 @@ data_sent_cb (void *cls,
       GCC_ack_expected (cid);
     }
   }
-  if (0 == crm->retry_delay.rel_value_us)
-    crm->retry_delay = ch->expected_delay;
-  else
-    crm->retry_delay = GNUNET_TIME_STD_BACKOFF (crm->retry_delay);
+  if ( (0 == crm->retry_delay.rel_value_us) &&
+       (NULL != cid) )
+  {
+    struct CadetConnection *cc = GCC_lookup (cid);
+
+    if (NULL != cc)
+      crm->retry_delay = GCC_get_metrics (cc)->aged_latency;
+    else
+      crm->retry_delay = ch->retry_time;
+  }
+  crm->retry_delay = GNUNET_TIME_STD_BACKOFF (crm->retry_delay);
   crm->retry_delay = GNUNET_TIME_relative_max (crm->retry_delay,
                                                MIN_RTT_DELAY);
   crm->next_retry = GNUNET_TIME_relative_to_absolute (crm->retry_delay);
diff --git a/src/cadet/gnunet-service-cadet-new_connection.c 
b/src/cadet/gnunet-service-cadet-new_connection.c
index 0ccfe8b45..6976e66e4 100644
--- a/src/cadet/gnunet-service-cadet-new_connection.c
+++ b/src/cadet/gnunet-service-cadet-new_connection.c
@@ -169,6 +169,20 @@ struct CadetConnection
 
 
 /**
+ * Lookup a connection by its identifier.
+ *
+ * @param cid identifier to resolve
+ * @return NULL if connection was not found
+ */
+struct CadetConnection *
+GCC_lookup (const struct GNUNET_CADET_ConnectionTunnelIdentifier *cid)
+{
+  return GNUNET_CONTAINER_multishortmap_get (connections,
+                                             &cid->connection_of_tunnel);
+}
+
+
+/**
  * Update the connection state. Also triggers the necessary
  * MQM notifications.
  *
@@ -405,8 +419,7 @@ GCC_ack_expected (const struct 
GNUNET_CADET_ConnectionTunnelIdentifier *cid)
 {
   struct CadetConnection *cc;
 
-  cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                           &cid->connection_of_tunnel);
+  cc = GCC_lookup (cid);
   if (NULL == cc)
     return; /* whopise, connection alredy down? */
   cc->metrics.num_acked_transmissions++;
@@ -426,8 +439,7 @@ GCC_ack_observed (const struct 
GNUNET_CADET_ConnectionTunnelIdentifier *cid)
 {
   struct CadetConnection *cc;
 
-  cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                           &cid->connection_of_tunnel);
+  cc = GCC_lookup (cid);
   if (NULL == cc)
     return; /* whopise, connection alredy down? */
   cc->metrics.num_successes++;
@@ -450,8 +462,7 @@ GCC_latency_observed (const struct 
GNUNET_CADET_ConnectionTunnelIdentifier *cid,
   double weight;
   double result;
 
-  cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                           &cid->connection_of_tunnel);
+  cc = GCC_lookup (cid);
   if (NULL == cc)
     return; /* whopise, connection alredy down? */
   GNUNET_STATISTICS_update (stats,
diff --git a/src/cadet/gnunet-service-cadet-new_connection.h 
b/src/cadet/gnunet-service-cadet-new_connection.h
index 73388be7f..e48b208fd 100644
--- a/src/cadet/gnunet-service-cadet-new_connection.h
+++ b/src/cadet/gnunet-service-cadet-new_connection.h
@@ -73,6 +73,16 @@ GCC_destroy_without_tunnel (struct CadetConnection *cc);
 
 
 /**
+ * Lookup a connection by its identifier.
+ *
+ * @param cid identifier to resolve
+ * @return NULL if connection was not found
+ */
+struct CadetConnection *
+GCC_lookup (const struct GNUNET_CADET_ConnectionTunnelIdentifier *cid);
+
+
+/**
  * Create a connection to @a destination via @a path and
  * notify @a cb whenever we are ready for more data.
  *
diff --git a/src/cadet/gnunet-service-cadet-new_core.c 
b/src/cadet/gnunet-service-cadet-new_core.c
index ee05a2442..8886e7a61 100644
--- a/src/cadet/gnunet-service-cadet-new_core.c
+++ b/src/cadet/gnunet-service-cadet-new_core.c
@@ -804,8 +804,7 @@ handle_connection_create (void *cls,
     struct CadetPeerPath *path;
     struct CadetPeer *origin;
 
-    cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                             &msg->cid.connection_of_tunnel);
+    cc = GCC_lookup (&msg->cid);
     if (NULL != cc)
     {
       LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -925,8 +924,7 @@ handle_connection_create_ack (void *cls,
   struct CadetConnection *cc;
 
   /* First, check if ACK belongs to a connection that ends here. */
-  cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                           &msg->cid.connection_of_tunnel);
+  cc = GCC_lookup (&msg->cid);
   if (NULL != cc)
   {
     /* verify ACK came from the right direction */
@@ -970,8 +968,7 @@ handle_connection_broken (void *cls,
   struct CadetRoute *route;
 
   /* First, check if message belongs to a connection that ends here. */
-  cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                           &msg->cid.connection_of_tunnel);
+  cc = GCC_lookup (&msg->cid);
   if (NULL != cc)
   {
     /* verify message came from the right direction */
@@ -1020,8 +1017,7 @@ handle_connection_destroy (void *cls,
   struct CadetRoute *route;
 
   /* First, check if message belongs to a connection that ends here. */
-  cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                           &msg->cid.connection_of_tunnel);
+  cc = GCC_lookup (&msg->cid);
   if (NULL != cc)
   {
     /* verify message came from the right direction */
@@ -1070,8 +1066,7 @@ handle_tunnel_kx (void *cls,
   struct CadetConnection *cc;
 
   /* First, check if message belongs to a connection that ends here. */
-  cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                           &msg->cid.connection_of_tunnel);
+  cc = GCC_lookup (&msg->cid);
   if (NULL != cc)
   {
     /* verify message came from the right direction */
@@ -1111,8 +1106,7 @@ handle_tunnel_kx_auth (void *cls,
   struct CadetConnection *cc;
 
   /* First, check if message belongs to a connection that ends here. */
-  cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                           &msg->kx.cid.connection_of_tunnel);
+  cc = GCC_lookup (&msg->kx.cid);
   if (NULL != cc)
   {
     /* verify message came from the right direction */
@@ -1168,8 +1162,7 @@ handle_tunnel_encrypted (void *cls,
   struct CadetConnection *cc;
 
   /* First, check if message belongs to a connection that ends here. */
-  cc = GNUNET_CONTAINER_multishortmap_get (connections,
-                                           &msg->cid.connection_of_tunnel);
+  cc = GCC_lookup (&msg->cid);
   if (NULL != cc)
   {
     /* verify message came from the right direction */

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

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