gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r32116 - in gnunet/src: ats fragmentation include transport


From: gnunet
Subject: [GNUnet-SVN] r32116 - in gnunet/src: ats fragmentation include transport util
Date: Thu, 30 Jan 2014 15:16:20 +0100

Author: wachs
Date: 2014-01-30 15:16:20 +0100 (Thu, 30 Jan 2014)
New Revision: 32116

Modified:
   gnunet/src/ats/gnunet-service-ats_reservations.c
   gnunet/src/fragmentation/test_fragmentation.c
   gnunet/src/include/gnunet_bandwidth_lib.h
   gnunet/src/include/gnunet_transport_plugin.h
   gnunet/src/transport/gnunet-service-transport_neighbours.c
   gnunet/src/transport/plugin_transport_bluetooth.c
   gnunet/src/transport/plugin_transport_udp.c
   gnunet/src/transport/plugin_transport_wlan.c
   gnunet/src/transport/transport_api.c
   gnunet/src/util/bandwidth.c
Log:
extending bandwidth tracker api to support notifications


Modified: gnunet/src/ats/gnunet-service-ats_reservations.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_reservations.c    2014-01-30 13:34:20 UTC 
(rev 32115)
+++ gnunet/src/ats/gnunet-service-ats_reservations.c    2014-01-30 14:16:20 UTC 
(rev 32116)
@@ -108,7 +108,7 @@
   if (NULL == tracker)
   {
     tracker = GNUNET_new (struct GNUNET_BANDWIDTH_Tracker);
-    GNUNET_BANDWIDTH_tracker_init (tracker, bandwidth_in,
+    GNUNET_BANDWIDTH_tracker_init (tracker, NULL, NULL, bandwidth_in,
                                    MAX_BANDWIDTH_CARRY_S);
     GNUNET_assert (GNUNET_OK ==
                    GNUNET_CONTAINER_multipeermap_put (trackers, peer, tracker,

Modified: gnunet/src/fragmentation/test_fragmentation.c
===================================================================
--- gnunet/src/fragmentation/test_fragmentation.c       2014-01-30 13:34:20 UTC 
(rev 32115)
+++ gnunet/src/fragmentation/test_fragmentation.c       2014-01-30 14:16:20 UTC 
(rev 32116)
@@ -241,7 +241,7 @@
                     "WARNING",
                     NULL);
   for (i = 0; i < NUM_MSGS; i++)
-    GNUNET_BANDWIDTH_tracker_init (&trackers[i],
+    GNUNET_BANDWIDTH_tracker_init (&trackers[i], NULL, NULL,
                                    GNUNET_BANDWIDTH_value_init ((i + 1) * 
1024),
                                    100);
   GNUNET_PROGRAM_run (5, argv_prog, "test-fragmentation", "nohelp", options,

Modified: gnunet/src/include/gnunet_bandwidth_lib.h
===================================================================
--- gnunet/src/include/gnunet_bandwidth_lib.h   2014-01-30 13:34:20 UTC (rev 
32115)
+++ gnunet/src/include/gnunet_bandwidth_lib.h   2014-01-30 14:16:20 UTC (rev 
32116)
@@ -52,7 +52,18 @@
 };
 GNUNET_NETWORK_STRUCT_END
 
+
 /**
+ * Callback to be called by the bandwidth tracker if the tracker
+ * was updated and the client should update it's delay values
+ *
+ * @param cls a closure to pass
+ */
+void
+typedef (*GNUNET_BANDWIDTH_tracker_update_cb) (void *cls);
+
+
+/**
  * Struct to track available bandwidth.  Combines a time stamp with a
  * number of bytes transmitted, a quota and a maximum amount that
  * carries over.  Not opaque so that it can be inlined into data
@@ -61,6 +72,10 @@
  */
 struct GNUNET_BANDWIDTH_Tracker
 {
+  void *update_cb_cls;
+
+  GNUNET_BANDWIDTH_tracker_update_cb update_cb;
+
   /**
    * Number of bytes consumed since we last updated the tracker.
    */
@@ -129,7 +144,6 @@
                                       uint64_t size);
 
 
-
 /**
  * Compute the MIN of two bandwidth values.
  *
@@ -152,14 +166,19 @@
  * bytes).
  *
  * @param av tracker to initialize
+ * @param update_cb callback to notify a client about the tracker being updated
+ * @param update_cb_cls cls for the callback
  * @param bytes_per_second_limit initial limit to assume
  * @param max_carry_s maximum number of seconds unused bandwidth
  *        may accumulate before it expires
  */
 void
 GNUNET_BANDWIDTH_tracker_init (struct GNUNET_BANDWIDTH_Tracker *av,
+                               GNUNET_BANDWIDTH_tracker_update_cb update_cb,
+                               void *update_cb_cls,
                                struct GNUNET_BANDWIDTH_Value32NBO
-                               bytes_per_second_limit, uint32_t max_carry_s);
+                               bytes_per_second_limit,
+                               uint32_t max_carry_s);
 
 
 /**

Modified: gnunet/src/include/gnunet_transport_plugin.h
===================================================================
--- gnunet/src/include/gnunet_transport_plugin.h        2014-01-30 13:34:20 UTC 
(rev 32115)
+++ gnunet/src/include/gnunet_transport_plugin.h        2014-01-30 14:16:20 UTC 
(rev 32116)
@@ -576,6 +576,13 @@
   GNUNET_TRANSPORT_UpdateSessionTimeout update_session_timeout;
 
   /**
+   * Function that will be called whenever the transport service wants to
+   * notify the plugin that the inbound quota changed and that the plugin
+   * should update it's delay for the next receive value
+   */
+  //GNUNET_TRANSPORT_UpdateNextReceiveTimeout update_next_receive_timeout;
+
+  /**
    * Function that is used to query keepalive factor.
    * GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT is divided by this number to
    * calculate the interval between keepalive packets.

Modified: gnunet/src/transport/gnunet-service-transport_neighbours.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_neighbours.c  2014-01-30 
13:34:20 UTC (rev 32115)
+++ gnunet/src/transport/gnunet-service-transport_neighbours.c  2014-01-30 
14:16:20 UTC (rev 32116)
@@ -1689,7 +1689,16 @@
 
 }
 
+static void
+inbound_bw_tracker_update (void *cls)
+{
+  struct Neighbour *n = cls;
 
+  /* Quota was updated, tell plugins to update the time to receive next */
+
+}
+
+
 /**
  * Create a fresh entry in the neighbour map for the given peer
  *
@@ -1712,7 +1721,7 @@
   n->util_payload_bytes_sent = 0;
   n->util_total_bytes_recv = 0;
   n->util_total_bytes_sent = 0;
-  GNUNET_BANDWIDTH_tracker_init (&n->in_tracker,
+  GNUNET_BANDWIDTH_tracker_init (&n->in_tracker, &inbound_bw_tracker_update, n,
                                  GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT,
                                  MAX_BANDWIDTH_CARRY_S);
   n->task = GNUNET_SCHEDULER_add_now (&master_task, n);
@@ -2535,6 +2544,7 @@
                                  struct GNUNET_BANDWIDTH_Value32NBO 
bandwidth_out)
 {
   struct NeighbourMapEntry *n;
+  struct GST_BlacklistCheck *blc;
   struct GNUNET_TRANSPORT_PluginFunctions *papi;
   struct BlacklistCheckSwitchContext *blc_ctx;
   int c;
@@ -2601,8 +2611,11 @@
   }
 
   GNUNET_CONTAINER_DLL_insert (pending_bc_head, pending_bc_tail, blc_ctx);
-  blc_ctx->blc = GST_blacklist_test_allowed (peer, address->transport_name,
-      &switch_address_bl_check_cont, blc_ctx);
+  if (NULL != (blc = GST_blacklist_test_allowed (peer, address->transport_name,
+      &switch_address_bl_check_cont, blc_ctx)))
+  {
+    blc_ctx->blc = blc;
+  }
 }
 
 
@@ -3338,7 +3351,6 @@
   return test_connected (lookup_neighbour (target));
 }
 
-
 /**
  * Change the incoming quota for the given peer.
  *

Modified: gnunet/src/transport/plugin_transport_bluetooth.c
===================================================================
--- gnunet/src/transport/plugin_transport_bluetooth.c   2014-01-30 13:34:20 UTC 
(rev 32115)
+++ gnunet/src/transport/plugin_transport_bluetooth.c   2014-01-30 14:16:20 UTC 
(rev 32116)
@@ -1943,7 +1943,7 @@
                          0, GNUNET_NO);
   GNUNET_STATISTICS_set (plugin->env->stats, _("# Bluetooth MAC endpoints 
allocated"),
                          0, 0);
-  GNUNET_BANDWIDTH_tracker_init (&plugin->tracker,
+  GNUNET_BANDWIDTH_tracker_init (&plugin->tracker, NULL, NULL,
                                  GNUNET_BANDWIDTH_value_init (100 * 1024 *
                                                               1024 / 8), 100);
   plugin->fragment_data_tokenizer = GNUNET_SERVER_mst_create (&process_data, 
plugin);

Modified: gnunet/src/transport/plugin_transport_udp.c
===================================================================
--- gnunet/src/transport/plugin_transport_udp.c 2014-01-30 13:34:20 UTC (rev 
32115)
+++ gnunet/src/transport/plugin_transport_udp.c 2014-01-30 14:16:20 UTC (rev 
32116)
@@ -3007,7 +3007,7 @@
   p->defrag_ctxs = GNUNET_CONTAINER_heap_create (
       GNUNET_CONTAINER_HEAP_ORDER_MIN);
   p->mst = GNUNET_SERVER_mst_create (&process_inbound_tokenized_messages, p);
-  GNUNET_BANDWIDTH_tracker_init (&p->tracker,
+  GNUNET_BANDWIDTH_tracker_init (&p->tracker, NULL, NULL,
       GNUNET_BANDWIDTH_value_init ((uint32_t) udp_max_bps), 30);
   plugin = p;
 

Modified: gnunet/src/transport/plugin_transport_wlan.c
===================================================================
--- gnunet/src/transport/plugin_transport_wlan.c        2014-01-30 13:34:20 UTC 
(rev 32115)
+++ gnunet/src/transport/plugin_transport_wlan.c        2014-01-30 14:16:20 UTC 
(rev 32116)
@@ -1949,7 +1949,7 @@
                          0, GNUNET_NO);
   GNUNET_STATISTICS_set (plugin->env->stats, _("# WLAN MAC endpoints 
allocated"),
                          0, 0);
-  GNUNET_BANDWIDTH_tracker_init (&plugin->tracker,
+  GNUNET_BANDWIDTH_tracker_init (&plugin->tracker, NULL, NULL,
                                  GNUNET_BANDWIDTH_value_init (100 * 1024 *
                                                               1024 / 8), 100);
   plugin->fragment_data_tokenizer = GNUNET_SERVER_mst_create (&process_data, 
plugin);

Modified: gnunet/src/transport/transport_api.c
===================================================================
--- gnunet/src/transport/transport_api.c        2014-01-30 13:34:20 UTC (rev 
32115)
+++ gnunet/src/transport/transport_api.c        2014-01-30 14:16:20 UTC (rev 
32116)
@@ -419,6 +419,23 @@
 }
 
 
+
+static void
+outbound_bw_tracker_update (void *cls)
+{
+  struct Neighbour *n = cls;
+  struct GNUNET_TIME_Relative delay;
+  if (NULL == n->hn)
+    return;
+
+  delay = GNUNET_BANDWIDTH_tracker_get_delay (&n->out_tracker,
+      n->th->notify_size + n->traffic_overhead);
+  GNUNET_CONTAINER_heap_update_cost (n->h->ready_heap,
+      n->hn, delay.rel_value_us);
+  schedule_transmission (n->h);
+}
+
+
 /**
  * Add neighbour to our list
  *
@@ -439,6 +456,7 @@
   n->is_ready = GNUNET_YES;
   n->traffic_overhead = 0;
   GNUNET_BANDWIDTH_tracker_init (&n->out_tracker,
+                                 outbound_bw_tracker_update, n,
                                  GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT,
                                  MAX_BANDWIDTH_CARRY_S);
   GNUNET_assert (GNUNET_OK ==

Modified: gnunet/src/util/bandwidth.c
===================================================================
--- gnunet/src/util/bandwidth.c 2014-01-30 13:34:20 UTC (rev 32115)
+++ gnunet/src/util/bandwidth.c 2014-01-30 14:16:20 UTC (rev 32116)
@@ -120,6 +120,7 @@
 }
 
 
+
 /**
  * Initialize bandwidth tracker.  Note that in addition to the
  * 'max_carry_s' limit, we also always allow at least
@@ -130,15 +131,21 @@
  * bytes).
  *
  * @param av tracker to initialize
+ * @param update_cb callback to notify a client about the tracker being updated
+ * @param update_cb_cls cls for the callback
  * @param bytes_per_second_limit initial limit to assume
  * @param max_carry_s maximum number of seconds unused bandwidth
  *        may accumulate before it expires
  */
 void
 GNUNET_BANDWIDTH_tracker_init (struct GNUNET_BANDWIDTH_Tracker *av,
+                               GNUNET_BANDWIDTH_tracker_update_cb update_cb,
+                               void *update_cb_cls,
                                struct GNUNET_BANDWIDTH_Value32NBO
                                bytes_per_second_limit, uint32_t max_carry_s)
 {
+  av->update_cb = update_cb;
+  av->update_cb_cls = update_cb_cls;
   av->consumption_since_last_update__ = 0;
   av->last_update__ = GNUNET_TIME_absolute_get ();
   av->available_bytes_per_s__ = ntohl (bytes_per_second_limit.value__);
@@ -327,6 +334,8 @@
   update_tracker (av);
   old_limit = av->available_bytes_per_s__;
   av->available_bytes_per_s__ = new_limit;
+  if (NULL != av->update_cb)
+    av->update_cb (av->update_cb_cls);
   if (old_limit > new_limit)
     update_tracker (av);        /* maximum excess might be less now */
 }




reply via email to

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