gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r13802 - gnunet/src/core


From: gnunet
Subject: [GNUnet-SVN] r13802 - gnunet/src/core
Date: Thu, 25 Nov 2010 13:35:39 +0100

Author: wachs
Date: 2010-11-25 13:35:39 +0100 (Thu, 25 Nov 2010)
New Revision: 13802

Modified:
   gnunet/src/core/gnunet-service-core.c
Log:
improved bandwidth distribution and outbound quota compliance


Modified: gnunet/src/core/gnunet-service-core.c
===================================================================
--- gnunet/src/core/gnunet-service-core.c       2010-11-25 11:01:03 UTC (rev 
13801)
+++ gnunet/src/core/gnunet-service-core.c       2010-11-25 12:35:39 UTC (rev 
13802)
@@ -44,7 +44,7 @@
 
 #define DEBUG_HANDSHAKE GNUNET_NO
 
-#define DEBUG_CORE_QUOTA GNUNET_YES
+#define DEBUG_CORE_QUOTA GNUNET_NO
 
 /**
  * Receive and send buffer windows grow over time.  For
@@ -4026,6 +4026,8 @@
 {
   struct Neighbour *n = cls;
   struct GNUNET_BANDWIDTH_Value32NBO q_in;
+  struct GNUNET_BANDWIDTH_Value32NBO q_out;
+  struct GNUNET_BANDWIDTH_Value32NBO q_out_min;
   double pref_rel;
   double share;
   unsigned long long distributable;
@@ -4053,14 +4055,31 @@
   need_per_peer = GNUNET_BANDWIDTH_value_get_available_until 
(MIN_BANDWIDTH_PER_PEER,
                                                              
GNUNET_TIME_UNIT_SECONDS);  
   need_per_second = need_per_peer * neighbour_count;
+
+  /* calculate inbound bandwidth per peer */
   distributable = 0;
+  if (bandwidth_target_in_bps > need_per_second)
+    distributable = bandwidth_target_in_bps - need_per_second;
+  share = distributable * pref_rel;
+  if (share + need_per_peer > UINT32_MAX)
+    q_in = GNUNET_BANDWIDTH_value_init (UINT32_MAX);
+  else
+    q_in = GNUNET_BANDWIDTH_value_init (need_per_peer + (uint32_t) share);
+
+  /* calculate outbound bandwidth per peer */
+  distributable = 0;
   if (bandwidth_target_out_bps > need_per_second)
     distributable = bandwidth_target_out_bps - need_per_second;
   share = distributable * pref_rel;
   if (share + need_per_peer > UINT32_MAX)
-    q_in = GNUNET_BANDWIDTH_value_init (UINT32_MAX);
+    q_out = GNUNET_BANDWIDTH_value_init (UINT32_MAX);
   else
-    q_in = GNUNET_BANDWIDTH_value_init (need_per_peer + (uint32_t) share);
+    q_out = GNUNET_BANDWIDTH_value_init (need_per_peer + (uint32_t) share);
+  n->bw_out_internal_limit = q_out;
+
+  q_out_min = GNUNET_BANDWIDTH_value_min (n->bw_out_external_limit, 
n->bw_out_internal_limit);
+  GNUNET_BANDWIDTH_tracker_update_quota (&n->available_send_window, n->bw_out);
+
   /* check if we want to disconnect for good due to inactivity */
   if ( (GNUNET_TIME_absolute_get_duration (get_neighbour_timeout 
(n)).rel_value > 0) &&
        (GNUNET_TIME_absolute_get_duration (n->time_established).rel_value > 
GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.rel_value) )
@@ -4081,10 +4100,13 @@
              (unsigned int) ntohl (n->bw_in.value__),
              (unsigned int) ntohl (n->bw_out.value__),
              (unsigned int) ntohl (n->bw_out_internal_limit.value__));
-#endif
-  if (n->bw_in.value__ != q_in.value__) 
+  #endif
+  if ((n->bw_in.value__ != q_in.value__) || (n->bw_out.value__ != 
q_out_min.value__))
     {
-      n->bw_in = q_in;
+         if (n->bw_in.value__ != q_in.value__)
+                 n->bw_in = q_in;
+         if (n->bw_out.value__ != q_out_min.value__)
+                 n->bw_out = q_out_min;
       if (GNUNET_YES == n->is_connected)
        GNUNET_TRANSPORT_set_quota (transport,
                                    &n->peer,




reply via email to

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