[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 */
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r32116 - in gnunet/src: ats fragmentation include transport util,
gnunet <=