gnunet-svn
[Top][All Lists]
Advanced

[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,




reply via email to

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