[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r13840 - in gnunet/src: core include peerinfo transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r13840 - in gnunet/src: core include peerinfo transport |
Date: |
Tue, 30 Nov 2010 14:44:41 +0100 |
Author: grothoff
Date: 2010-11-30 14:44:41 +0100 (Tue, 30 Nov 2010)
New Revision: 13840
Modified:
gnunet/src/core/gnunet-service-core.c
gnunet/src/include/gnunet_transport_service.h
gnunet/src/peerinfo/perf_peerinfo_api.c
gnunet/src/transport/transport_api.c
Log:
track ATS in core
Modified: gnunet/src/core/gnunet-service-core.c
===================================================================
--- gnunet/src/core/gnunet-service-core.c 2010-11-30 13:29:18 UTC (rev
13839)
+++ gnunet/src/core/gnunet-service-core.c 2010-11-30 13:44:41 UTC (rev
13840)
@@ -474,6 +474,11 @@
struct SetKeyMessage *skm;
/**
+ * Performance data for the peer.
+ */
+ struct GNUNET_TRANSPORT_ATS_Information *ats;
+
+ /**
* Identity of the neighbour.
*/
struct GNUNET_PeerIdentity peer;
@@ -558,6 +563,11 @@
unsigned long long current_preference;
/**
+ * Number of entries in 'ats'.
+ */
+ unsigned int ats_count;
+
+ /**
* Bit map indicating which of the 32 sequence numbers before the last
* were received (good for accepting out-of-order packets and
* estimating reliability of the connection)
@@ -1344,8 +1354,8 @@
*/
static void
handle_client_iterate_peers (void *cls,
- struct GNUNET_SERVER_Client *client,
- const struct GNUNET_MessageHeader *message)
+ struct GNUNET_SERVER_Client *client,
+ const struct GNUNET_MessageHeader *message)
{
struct Neighbour *n;
@@ -1555,6 +1565,7 @@
GNUNET_SCHEDULER_cancel (n->keep_alive_task);
if (n->status == PEER_STATE_KEY_CONFIRMED)
GNUNET_STATISTICS_update (stats, gettext_noop ("# established sessions"),
-1, GNUNET_NO);
+ GNUNET_array_grow (n->ats, n->ats_count, 0);
GNUNET_free_non_null (n->public_key);
GNUNET_free_non_null (n->pending_ping);
GNUNET_free_non_null (n->pending_pong);
@@ -3134,12 +3145,17 @@
*
* @param n the neighbour from which we received message m
* @param m the set key message we received
+ * @param ats performance data
+ * @param ats_count number of entries in ats (excluding 0-termination)
*/
static void
handle_set_key (struct Neighbour *n,
- const struct SetKeyMessage *m);
+ const struct SetKeyMessage *m,
+ const struct GNUNET_TRANSPORT_ATS_Information *ats,
+ uint32_t ats_count);
+
/**
* PEERINFO is giving us a HELLO for a peer. Add the public key to
* the neighbour's struct and retry handling the set_key message. Or,
@@ -3170,7 +3186,7 @@
GNUNET_i2s (&n->peer),
"SET_KEY");
#endif
- handle_set_key (n, sm);
+ handle_set_key (n, sm, NULL, 0);
}
else
{
@@ -3196,14 +3212,55 @@
/**
+ * Merge the given performance data with the data we currently
+ * track for the given neighbour.
+ *
+ * @param n neighbour
+ * @param ats new performance data
+ * @param ats_count number of records in ats
+ */
+static void
+update_neighbour_performance (struct Neighbour *n,
+ const struct GNUNET_TRANSPORT_ATS_Information
*ats,
+ uint32_t ats_count)
+{
+ uint32_t i;
+ unsigned int j;
+
+ if (ats_count == 0)
+ return;
+ for (i=0;i<ats_count;i++)
+ {
+ for (j=0;j<n->ats_count;j++)
+ {
+ if (n->ats[j].type == ats[i].type)
+ {
+ n->ats[j].value = ats[i].value;
+ break;
+ }
+ }
+ if (j == n->ats_count)
+ GNUNET_array_append (n->ats,
+ n->ats_count,
+ *ats);
+ }
+}
+
+
+/**
* We received a PING message. Validate and transmit
* PONG.
*
* @param n sender of the PING
* @param m the encrypted PING message itself
+ * @param ats performance data
+ * @param ats_count number of entries in ats (excluding 0-termination)
*/
static void
-handle_ping (struct Neighbour *n, const struct PingMessage *m)
+handle_ping (struct Neighbour *n,
+ const struct PingMessage *m,
+ const struct GNUNET_TRANSPORT_ATS_Information *ats,
+ uint32_t ats_count)
{
struct PingMessage t;
struct PongMessage tx;
@@ -3245,6 +3302,7 @@
GNUNET_break_op (0);
return;
}
+ update_neighbour_performance (n, ats, ats_count);
me = GNUNET_malloc (sizeof (struct MessageEntry) +
sizeof (struct PongMessage));
GNUNET_CONTAINER_DLL_insert_after (n->encrypted_head,
@@ -3291,10 +3349,14 @@
*
* @param n sender of the PONG
* @param m the encrypted PONG message itself
+ * @param ats performance data
+ * @param ats_count number of entries in ats (excluding 0-termination)
*/
static void
handle_pong (struct Neighbour *n,
- const struct PongMessage *m)
+ const struct PongMessage *m,
+ const struct GNUNET_TRANSPORT_ATS_Information *ats,
+ uint32_t ats_count)
{
struct PongMessage t;
struct ConnectNotifyMessage cnm;
@@ -3409,6 +3471,7 @@
= GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_divide
(GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, 2),
&send_keep_alive,
n);
+ update_neighbour_performance (n, ats, ats_count);
handle_peer_status_change (n);
break;
default:
@@ -3424,9 +3487,14 @@
*
* @param n the neighbour from which we received message m
* @param m the set key message we received
+ * @param ats performance data
+ * @param ats_count number of entries in ats (excluding 0-termination)
*/
static void
-handle_set_key (struct Neighbour *n, const struct SetKeyMessage *m)
+handle_set_key (struct Neighbour *n,
+ const struct SetKeyMessage *m,
+ const struct GNUNET_TRANSPORT_ATS_Information *ats,
+ uint32_t ats_count)
{
struct SetKeyMessage *m_cpy;
struct GNUNET_TIME_Absolute t;
@@ -3531,6 +3599,7 @@
n->last_packets_bitmap = 0;
n->decrypt_key_created = t;
}
+ update_neighbour_performance (n, ats, ats_count);
sender_status = (enum PeerStateMachine) ntohl (m->sender_status);
switch (n->status)
{
@@ -3578,14 +3647,14 @@
{
ping = n->pending_ping;
n->pending_ping = NULL;
- handle_ping (n, ping);
+ handle_ping (n, ping, NULL, 0);
GNUNET_free (ping);
}
if (n->pending_pong != NULL)
{
pong = n->pending_pong;
n->pending_pong = NULL;
- handle_pong (n, pong);
+ handle_pong (n, pong, NULL, 0);
GNUNET_free (pong);
}
}
@@ -3709,10 +3778,17 @@
/**
* We received an encrypted message. Decrypt, validate and
* pass on to the appropriate clients.
+ *
+ * @param n target of the message
+ * @param m encrypted message
+ * @param ats performance data
+ * @param ats_count number of entries in ats (excluding 0-termination)
*/
static void
handle_encrypted_message (struct Neighbour *n,
- const struct EncryptedMessage *m)
+ const struct EncryptedMessage *m,
+ const struct GNUNET_TRANSPORT_ATS_Information *ats,
+ uint32_t ats_count)
{
size_t size = ntohs (m->header.size);
char buf[size];
@@ -3864,6 +3940,7 @@
size - sizeof (struct EncryptedMessage),
GNUNET_NO);
handle_peer_status_change (n);
+ update_neighbour_performance (n, ats, ats_count);
if (GNUNET_OK != GNUNET_SERVER_mst_receive (mst,
n,
&buf[sizeof (struct
EncryptedMessage)],
@@ -3879,15 +3956,15 @@
* @param cls closure
* @param peer (claimed) identity of the other peer
* @param message the message
- * @param latency estimated latency for communicating with the
- * given peer (round-trip)
- * @param distance in overlay hops, as given by transport plugin
+ * @param ats performance data
+ * @param ats_count number of entries in ats (excluding 0-termination)
*/
static void
handle_transport_receive (void *cls,
const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_MessageHeader *message,
- const struct GNUNET_TRANSPORT_ATS_Information *ats,
uint32_t ats_count)
+ const struct GNUNET_TRANSPORT_ATS_Information *ats,
+ uint32_t ats_count)
{
struct Neighbour *n;
struct GNUNET_TIME_Absolute now;
@@ -3923,7 +4000,9 @@
return;
}
GNUNET_STATISTICS_update (stats, gettext_noop ("# session keys
received"), 1, GNUNET_NO);
- handle_set_key (n, (const struct SetKeyMessage *) message);
+ handle_set_key (n,
+ (const struct SetKeyMessage *) message,
+ ats, ats_count);
break;
case GNUNET_MESSAGE_TYPE_CORE_ENCRYPTED_MESSAGE:
if (size < sizeof (struct EncryptedMessage) +
@@ -3938,7 +4017,9 @@
GNUNET_break_op (0);
return;
}
- handle_encrypted_message (n, (const struct EncryptedMessage *) message);
+ handle_encrypted_message (n,
+ (const struct EncryptedMessage *) message,
+ ats, ats_count);
break;
case GNUNET_MESSAGE_TYPE_CORE_PING:
if (size != sizeof (struct PingMessage))
@@ -3960,7 +4041,8 @@
memcpy (n->pending_ping, message, sizeof (struct PingMessage));
return;
}
- handle_ping (n, (const struct PingMessage *) message);
+ handle_ping (n, (const struct PingMessage *) message,
+ ats, ats_count);
break;
case GNUNET_MESSAGE_TYPE_CORE_PONG:
if (size != sizeof (struct PongMessage))
@@ -3982,7 +4064,8 @@
memcpy (n->pending_pong, message, sizeof (struct PongMessage));
return;
}
- handle_pong (n, (const struct PongMessage *) message);
+ handle_pong (n, (const struct PongMessage *) message,
+ ats, ats_count);
break;
default:
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
@@ -4125,13 +4208,14 @@
*
* @param cls closure
* @param peer the peer that connected
- * @param latency current latency of the connection
- * @param distance in overlay hops, as given by transport plugin
+ * @param ats performance data
+ * @param ats_count number of entries in ats (excluding 0-termination)
*/
static void
handle_transport_notify_connect (void *cls,
const struct GNUNET_PeerIdentity *peer,
- const struct GNUNET_TRANSPORT_ATS_Information
*ats, uint32_t ats_count)
+ const struct GNUNET_TRANSPORT_ATS_Information
*ats,
+ uint32_t ats_count)
{
struct Neighbour *n;
@@ -4159,6 +4243,7 @@
1,
GNUNET_NO);
n->is_connected = GNUNET_YES;
+ update_neighbour_performance (n, ats, ats_count);
GNUNET_BANDWIDTH_tracker_init (&n->available_send_window,
n->bw_out,
MAX_WINDOW_TIME_S);
Modified: gnunet/src/include/gnunet_transport_service.h
===================================================================
--- gnunet/src/include/gnunet_transport_service.h 2010-11-30 13:29:18 UTC
(rev 13839)
+++ gnunet/src/include/gnunet_transport_service.h 2010-11-30 13:44:41 UTC
(rev 13840)
@@ -391,9 +391,8 @@
* @param cls closure
* @param peer (claimed) identity of the other peer
* @param message the message
- * @param latency estimated latency for communicating with the
- * given peer (round-trip)
- * @param distance in overlay hops, as given by transport plugin
+ * @param ats performance data
+ * @param ats_count number of entries in ats (excluding 0-termination)
*/
typedef void (*GNUNET_TRANSPORT_ReceiveCallback) (void *cls,
const struct
@@ -401,7 +400,7 @@
const struct
GNUNET_MessageHeader *
message,
- const struct GNUNET_TRANSPORT_ATS_Information
*ats,
+ const struct
GNUNET_TRANSPORT_ATS_Information *ats,
uint32_t ats_count);
@@ -417,9 +416,8 @@
*
* @param cls closure
* @param peer the peer that connected
- * @param latency estimated latency for communicating with the
- * given peer (round-trip)
- * @param distance in overlay hops, as given by transport plugin
+ * @param ats performance data
+ * @param ats_count number of entries in ats (excluding 0-termination)
*/
typedef void
(*GNUNET_TRANSPORT_NotifyConnect) (void *cls,
Modified: gnunet/src/peerinfo/perf_peerinfo_api.c
===================================================================
--- gnunet/src/peerinfo/perf_peerinfo_api.c 2010-11-30 13:29:18 UTC (rev
13839)
+++ gnunet/src/peerinfo/perf_peerinfo_api.c 2010-11-30 13:44:41 UTC (rev
13840)
@@ -153,11 +153,13 @@
check ()
{
int ok = 0;
- char *const argv[] = { "test-peerinfo-hammer",
+ char *const argv[] = { "perf-peerinfo-api",
"-c",
"test_peerinfo_api_data.conf",
#if DEBUG_PEERINFO
"-L", "DEBUG",
+#else
+ "-L", "ERROR",
#endif
NULL
};
@@ -170,6 +172,8 @@
"gnunet-service-peerinfo",
#if DEBUG_PEERINFO
"-L", "DEBUG",
+#else
+ "-L", "ERROR",
#endif
"-c", "test_peerinfo_api_data.conf", NULL);
#endif
Modified: gnunet/src/transport/transport_api.c
===================================================================
--- gnunet/src/transport/transport_api.c 2010-11-30 13:29:18 UTC (rev
13839)
+++ gnunet/src/transport/transport_api.c 2010-11-30 13:44:41 UTC (rev
13840)
@@ -1591,12 +1591,9 @@
GNUNET_break (n->is_connected == GNUNET_NO);
n->is_connected = GNUNET_YES;
if (h->nc_cb != NULL)
- h->nc_cb (h->cls, &n->id, &(cim->ats), cim->ats_count);
-/*
- h->nc_cb (h->cls, &n->id,
- GNUNET_TIME_relative_ntoh (cim->latency),
- ntohl (cim->distance));
-*/
+ h->nc_cb (h->cls, &n->id,
+ &(cim->ats),
+ cim->ats_count);
break;
case GNUNET_MESSAGE_TYPE_TRANSPORT_DISCONNECT:
if (size != sizeof (struct DisconnectInfoMessage))
@@ -1688,8 +1685,10 @@
break;
}
if (h->rec != NULL)
- h->rec (h->cls, &im->peer, imm, &im->ats, im->ats_count);
- //h->rec (h->cls, &im->peer, imm, GNUNET_TIME_relative_ntoh
(im->latency), ntohl(im->distance));
+ h->rec (h->cls, &im->peer,
+ imm,
+ &im->ats,
+ im->ats_count);
break;
default:
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r13840 - in gnunet/src: core include peerinfo transport,
gnunet <=