gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r14675 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r14675 - gnunet/src/transport
Date: Fri, 18 Mar 2011 17:41:57 +0100

Author: wachs
Date: 2011-03-18 17:41:57 +0100 (Fri, 18 Mar 2011)
New Revision: 14675

Modified:
   gnunet/src/transport/gnunet-service-transport.c
   gnunet/src/transport/test_transport_api_multi_peer1.conf
   gnunet/src/transport/test_transport_api_multi_peer2.conf
   gnunet/src/transport/test_transport_ats.c
   gnunet/src/transport/test_transport_ats_peer1.conf
   gnunet/src/transport/test_transport_ats_peer2.conf
   gnunet/src/transport/transport.h
Log:
unix domains sockets are now preferred


Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c     2011-03-18 14:34:40 UTC 
(rev 14674)
+++ gnunet/src/transport/gnunet-service-transport.c     2011-03-18 16:41:57 UTC 
(rev 14675)
@@ -929,7 +929,7 @@
  *
  * @param neighbour target peer for which to transmit
  */
-static void try_transmission_to_peer (struct NeighbourList *neighbour);
+static void try_transmission_to_peer (struct NeighbourList *n);
 
 
 struct ATS_info * ats_init ();
@@ -947,6 +947,9 @@
                const struct GNUNET_PeerIdentity *peer,
                const struct GNUNET_TRANSPORT_ATS_Information *ats_data);
 
+struct ForeignAddressList * ats_get_preferred_address (struct ATS_info * ats,
+               struct NeighbourList *n);
+
 /**
  * Find an entry in the neighbour list for a particular peer.
  *
@@ -1525,6 +1528,9 @@
   struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
   struct ForeignAddressList *best_address;
 
+  /* Hack to prefer unix domain sockets */
+  struct ForeignAddressList *unix_address = NULL;
+
   best_address = NULL;
   while (head != NULL)
     {
@@ -1566,6 +1572,12 @@
                        (unsigned long long) addresses->timeout.abs_value,
                        (unsigned int) addresses->distance);
 #endif
+                if (0==strcmp(head->plugin->short_name,"unix"))
+                {
+                        if ((unix_address == NULL) || ((unix_address != NULL) 
&&
+                                (addresses->latency.rel_value < 
unix_address->latency.rel_value)))
+                               unix_address = addresses;
+                }
           if ( ( (best_address == NULL) ||
                 (addresses->connected == GNUNET_YES) ||
                 (best_address->connected == GNUNET_NO) ) &&
@@ -1577,12 +1589,22 @@
             connected a chance some times... */
           addresses = addresses->next;
         }
+      if (unix_address != NULL)
+         break;
       head = head->next;
     }
+  if (unix_address != NULL)
+  {
+         best_address = unix_address;
+#if DEBUG_TRANSPORT
+         GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Found unix address, forced this 
address\n");
+#endif
+  }
   if (best_address != NULL)
     {
 #if DEBUG_TRANSPORT
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+
+         GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   "Best address found (`%s') has latency of %llu ms.\n",
                  (best_address->addrlen > 0)
                  ? a2s (best_address->ready_list->plugin->short_name,
@@ -1599,6 +1621,7 @@
                                1,
                                GNUNET_NO);
     }
+
   return best_address;
 
 }
@@ -1626,7 +1649,7 @@
  * @param neighbour target peer for which to transmit
  */
 static void
-try_transmission_to_peer (struct NeighbourList *neighbour)
+try_transmission_to_peer (struct NeighbourList *n)
 {
   struct ReadyList *rl;
   struct MessageQueue *mq;
@@ -1634,7 +1657,7 @@
   ssize_t ret;
   int force_address;
 
-  if (neighbour->messages_head == NULL)
+  if (n->messages_head == NULL)
     {
 #if DEBUG_TRANSPORT
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1644,12 +1667,12 @@
       return;                     /* nothing to do */
     }
   rl = NULL;
-  mq = neighbour->messages_head;
+  mq = n->messages_head;
   force_address = GNUNET_YES;
   if (mq->specific_address == NULL)
     {
          /* TODO: ADD ATS */
-      mq->specific_address = find_ready_address(neighbour);
+      mq->specific_address = ats_get_preferred_address(ats, n);
       GNUNET_STATISTICS_update (stats,
                                gettext_noop ("# transport selected peer 
address freely"),
                                1,
@@ -1680,9 +1703,9 @@
                                    mq->message_buf_size,
                                    GNUNET_NO);
          if (mq->client != NULL)
-           transmit_send_ok (mq->client, neighbour, &neighbour->id, GNUNET_NO);
-         GNUNET_CONTAINER_DLL_remove (neighbour->messages_head,
-                                      neighbour->messages_tail,
+           transmit_send_ok (mq->client, n, &n->id, GNUNET_NO);
+         GNUNET_CONTAINER_DLL_remove (n->messages_head,
+                                      n->messages_tail,
                                       mq);
          GNUNET_free (mq);
          return;               /* nobody ready */
@@ -1691,11 +1714,11 @@
                                gettext_noop ("# message delivery deferred (no 
address)"),
                                1,
                                GNUNET_NO);
-      if (neighbour->retry_task != GNUNET_SCHEDULER_NO_TASK)
-       GNUNET_SCHEDULER_cancel (neighbour->retry_task);
-      neighbour->retry_task = GNUNET_SCHEDULER_add_delayed (timeout,
+      if (n->retry_task != GNUNET_SCHEDULER_NO_TASK)
+       GNUNET_SCHEDULER_cancel (n->retry_task);
+      n->retry_task = GNUNET_SCHEDULER_add_delayed (timeout,
                                                            
&retry_transmission_task,
-                                                           neighbour);
+                                                           n);
 #if DEBUG_TRANSPORT
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                  "No validated destination address available to transmit 
message of size %u to peer `%4s', will wait %llums to find an address.\n",
@@ -1707,8 +1730,8 @@
         (unless that's already pending...) */
       return;
     }
-  GNUNET_CONTAINER_DLL_remove (neighbour->messages_head,
-                              neighbour->messages_tail,
+  GNUNET_CONTAINER_DLL_remove (n->messages_head,
+                              n->messages_tail,
                               mq);
   if (mq->specific_address->connected == GNUNET_NO)
     mq->specific_address->connect_attempts++;
@@ -5675,6 +5698,23 @@
        ats_calculate_bandwidth_distribution(ats);
 }
 
+struct ForeignAddressList * ats_get_preferred_address (struct ATS_info * ats,
+               struct NeighbourList *n)
+{
+#if DEBUG_ATS
+       GNUNET_log (GNUNET_ERROR_TYPE_BULK, "ats_get_prefered_transport for 
peer: %s\n",GNUNET_i2s(&n->id));
+#endif
+       struct ReadyList *next = n->plugins;
+       while (next != NULL)
+       {
+#if DEBUG_ATS
+               GNUNET_log (GNUNET_ERROR_TYPE_BULK, "plugin: %s 
%i\n",next->plugin->short_name,strcmp(next->plugin->short_name,"unix"));
+#endif
+               next = next->next;
+       }
+       return find_ready_address(n);
+}
+
 /**
  * Initiate transport service.
  *

Modified: gnunet/src/transport/test_transport_api_multi_peer1.conf
===================================================================
--- gnunet/src/transport/test_transport_api_multi_peer1.conf    2011-03-18 
14:34:40 UTC (rev 14674)
+++ gnunet/src/transport/test_transport_api_multi_peer1.conf    2011-03-18 
16:41:57 UTC (rev 14675)
@@ -27,6 +27,9 @@
 #BINDTO4 = 127.0.0.1
 #BINDTO6 = ::1
 
+[transport-unix]
+PORT = 30004
+
 [fs]
 AUTOSTART = NO
 
@@ -56,7 +59,7 @@
 MINIMUM-FRIENDS = 0
 
 [transport]
-PLUGINS = tcp udp http
+PLUGINS = tcp udp http unix
 #DEBUG = YES
 #PREFIX = xterm -T transport2 -e gdb --command=cmd --args
 #PREFIX = valgrind --tool=memcheck --leak-check=full --log-file=transport%p

Modified: gnunet/src/transport/test_transport_api_multi_peer2.conf
===================================================================
--- gnunet/src/transport/test_transport_api_multi_peer2.conf    2011-03-18 
14:34:40 UTC (rev 14674)
+++ gnunet/src/transport/test_transport_api_multi_peer2.conf    2011-03-18 
16:41:57 UTC (rev 14675)
@@ -27,6 +27,8 @@
 #BINDTO4 = 127.0.0.1
 #BINDTO6 = ::1
 
+[transport-unix]
+PORT = 40005
 
 [core]
 AUTOSTART = NO
@@ -57,7 +59,7 @@
 MINIMUM-FRIENDS = 0
 
 [transport]
-PLUGINS = tcp udp http
+PLUGINS = tcp udp http unix
 #DEBUG = YES
 ACCEPT_FROM6 = ::1;
 ACCEPT_FROM = 127.0.0.1;

Modified: gnunet/src/transport/test_transport_ats.c
===================================================================
--- gnunet/src/transport/test_transport_ats.c   2011-03-18 14:34:40 UTC (rev 
14674)
+++ gnunet/src/transport/test_transport_ats.c   2011-03-18 16:41:57 UTC (rev 
14675)
@@ -336,7 +336,6 @@
 exchange_hello (void *cls,
                 const struct GNUNET_MessageHeader *message)
 {
-  return;
   struct PeerContext *me = cls;
 
   GNUNET_TRANSPORT_get_hello_cancel (p1.th, &exchange_hello, me);

Modified: gnunet/src/transport/test_transport_ats_peer1.conf
===================================================================
--- gnunet/src/transport/test_transport_ats_peer1.conf  2011-03-18 14:34:40 UTC 
(rev 14674)
+++ gnunet/src/transport/test_transport_ats_peer1.conf  2011-03-18 16:41:57 UTC 
(rev 14675)
@@ -8,6 +8,9 @@
 INTERNAL_ADDRESS = 127.0.0.1
 EXTERNAL_ADDRESS = 127.0.0.1
 
+[transport-unix]
+PORT = 4368
+
 [fs]
 AUTOSTART = NO
 
@@ -37,7 +40,7 @@
 MINIMUM-FRIENDS = 0
 
 [transport]
-PLUGINS = tcp
+PLUGINS = tcp unix
 #DEBUG = YES
 #PREFIX = xterm -T transport2 -e gdb --command=cmd --args
 #PREFIX = valgrind --tool=memcheck --leak-check=full --log-file=transport%p

Modified: gnunet/src/transport/test_transport_ats_peer2.conf
===================================================================
--- gnunet/src/transport/test_transport_ats_peer2.conf  2011-03-18 14:34:40 UTC 
(rev 14674)
+++ gnunet/src/transport/test_transport_ats_peer2.conf  2011-03-18 16:41:57 UTC 
(rev 14675)
@@ -8,6 +8,9 @@
 EXTERNAL_ADDRESS = 127.0.0.1
 INTERNAL_ADDRESS = 127.0.0.1
 
+[transport-unix]
+PORT = 5368
+
 [core]
 AUTOSTART = NO
 
@@ -37,7 +40,7 @@
 MINIMUM-FRIENDS = 0
 
 [transport]
-PLUGINS = tcp
+PLUGINS = tcp unix
 #DEBUG = YES
 ACCEPT_FROM6 = ::1;
 ACCEPT_FROM = 127.0.0.1;

Modified: gnunet/src/transport/transport.h
===================================================================
--- gnunet/src/transport/transport.h    2011-03-18 14:34:40 UTC (rev 14674)
+++ gnunet/src/transport/transport.h    2011-03-18 16:41:57 UTC (rev 14675)
@@ -30,6 +30,27 @@
 #include "gnunet_time_lib.h"
 #include "gnunet_transport_service.h"
 
+/* Minimum time between to calculations*/
+#define ATS_MIN_INTERVAL  
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS,250)
+#define ATS_EXEC_INTERVAL 
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,1)
+
+#define DEBUG_ATS GNUNET_NO
+
+struct ATS_info
+{
+       struct GNUNET_CONTAINER_MultiHashMap * peers;
+       struct GNUNET_TIME_Absolute last;
+       struct GNUNET_TIME_Relative min_delta;
+       struct GNUNET_TIME_Relative reg_delta;
+
+       GNUNET_SCHEDULER_TaskIdentifier ats_task;
+};
+
+struct ATS_peer
+{
+       struct GNUNET_PeerIdentity peer;
+};
+
 #define DEBUG_TRANSPORT GNUNET_NO
 #define DEBUG_TRANSPORT_TIMEOUT GNUNET_NO
 #define DEBUG_TRANSPORT_DISCONNECT GNUNET_NO




reply via email to

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