diff options
author | Christian Grothoff <christian@grothoff.org> | 2009-06-10 05:57:55 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2009-06-10 05:57:55 +0000 |
commit | d5e4648c1a755af9d9b47d446e750d228ce66f99 (patch) | |
tree | 562a0b5f17ede06d961b113e951eef16d790c2bd /src | |
parent | 18bd5e0a920729f0baf414311130e0a92e775bbb (diff) | |
download | gnunet-d5e4648c1a755af9d9b47d446e750d228ce66f99.tar.gz gnunet-d5e4648c1a755af9d9b47d446e750d228ce66f99.zip |
timeout code
Diffstat (limited to 'src')
-rw-r--r-- | src/core/core.h | 2 | ||||
-rw-r--r-- | src/core/core_api.c | 4 | ||||
-rw-r--r-- | src/core/gnunet-service-core.c | 223 | ||||
-rw-r--r-- | src/core/test_core_api.c | 2 | ||||
-rw-r--r-- | src/include/Makefile.am | 1 | ||||
-rw-r--r-- | src/include/gnunet_constants.h | 60 | ||||
-rw-r--r-- | src/include/gnunet_core_service.h | 4 | ||||
-rw-r--r-- | src/transport/gnunet-service-transport.c | 55 | ||||
-rw-r--r-- | src/transport/transport_api.c | 2 |
9 files changed, 267 insertions, 86 deletions
diff --git a/src/core/core.h b/src/core/core.h index fe8bcf9cc..ebdac0aaa 100644 --- a/src/core/core.h +++ b/src/core/core.h | |||
@@ -198,7 +198,7 @@ struct RequestConfigureMessage | |||
198 | * the specified amont. The traffic preference is used to determine | 198 | * the specified amont. The traffic preference is used to determine |
199 | * the share of bandwidth this peer will typcially be assigned. | 199 | * the share of bandwidth this peer will typcially be assigned. |
200 | */ | 200 | */ |
201 | double preference_change GNUNET_PACKED; | 201 | uint64_t preference_change GNUNET_PACKED; |
202 | 202 | ||
203 | /** | 203 | /** |
204 | * Identity of the peer being configured. | 204 | * Identity of the peer being configured. |
diff --git a/src/core/core_api.c b/src/core/core_api.c index 02379e36e..931ffe97e 100644 --- a/src/core/core_api.c +++ b/src/core/core_api.c | |||
@@ -904,7 +904,7 @@ GNUNET_CORE_peer_configure (struct GNUNET_CORE_Handle *handle, | |||
904 | struct GNUNET_TIME_Relative timeout, | 904 | struct GNUNET_TIME_Relative timeout, |
905 | unsigned int bpm_out, | 905 | unsigned int bpm_out, |
906 | int amount, | 906 | int amount, |
907 | double preference, | 907 | unsigned long long preference, |
908 | GNUNET_CORE_PeerConfigurationInfoCallback info, | 908 | GNUNET_CORE_PeerConfigurationInfoCallback info, |
909 | void *info_cls) | 909 | void *info_cls) |
910 | { | 910 | { |
@@ -938,7 +938,7 @@ GNUNET_CORE_peer_configure (struct GNUNET_CORE_Handle *handle, | |||
938 | rcm->reserved = htonl (0); | 938 | rcm->reserved = htonl (0); |
939 | rcm->limit_outbound_bpm = htonl (bpm_out); | 939 | rcm->limit_outbound_bpm = htonl (bpm_out); |
940 | rcm->reserve_inbound = htonl (amount); | 940 | rcm->reserve_inbound = htonl (amount); |
941 | rcm->preference_change = preference; | 941 | rcm->preference_change = GNUNET_htonll(preference); |
942 | rcm->peer = *peer; | 942 | rcm->peer = *peer; |
943 | if (handle->pending_head == th) | 943 | if (handle->pending_head == th) |
944 | trigger_next_request (handle); | 944 | trigger_next_request (handle); |
diff --git a/src/core/gnunet-service-core.c b/src/core/gnunet-service-core.c index 5996a81bf..0d714be3f 100644 --- a/src/core/gnunet-service-core.c +++ b/src/core/gnunet-service-core.c | |||
@@ -25,11 +25,7 @@ | |||
25 | * | 25 | * |
26 | * POST-TESTING: | 26 | * POST-TESTING: |
27 | * - revisit API (which arguments are used, needed)? | 27 | * - revisit API (which arguments are used, needed)? |
28 | * - add code to re-transmit key if first attempt failed | 28 | * - add code to send PINGs if we are about to time-out otherwise (?) |
29 | * + timeout on connect / key exchange, etc. | ||
30 | * + timeout for automatic re-try, etc. | ||
31 | * - add code to give up re-transmission of key if many attempts fail | ||
32 | * - add code to send PINGs if we are about to time-out otherwise | ||
33 | * ? add heuristic to do another send_key in "handle_set_key" | 29 | * ? add heuristic to do another send_key in "handle_set_key" |
34 | * in case previous attempt failed / didn't work / persist | 30 | * in case previous attempt failed / didn't work / persist |
35 | * (but don't do it always to avoid storm of SET_KEY's going | 31 | * (but don't do it always to avoid storm of SET_KEY's going |
@@ -47,6 +43,7 @@ | |||
47 | * could ideally be changed to O(1) hash map lookups) | 43 | * could ideally be changed to O(1) hash map lookups) |
48 | */ | 44 | */ |
49 | #include "platform.h" | 45 | #include "platform.h" |
46 | #include "gnunet_constants.h" | ||
50 | #include "gnunet_util_lib.h" | 47 | #include "gnunet_util_lib.h" |
51 | #include "gnunet_hello_lib.h" | 48 | #include "gnunet_hello_lib.h" |
52 | #include "gnunet_peerinfo_service.h" | 49 | #include "gnunet_peerinfo_service.h" |
@@ -63,14 +60,18 @@ | |||
63 | */ | 60 | */ |
64 | #define MAX_WINDOW_TIME (5 * 60 * 1000) | 61 | #define MAX_WINDOW_TIME (5 * 60 * 1000) |
65 | 62 | ||
66 | |||
67 | /** | 63 | /** |
68 | * Amount of bytes per minute (in/out) to assume initially | 64 | * Minimum of bytes per minute (out) to assign to any connected peer. |
69 | * (before either peer has communicated any particular | 65 | * Should be rather low; values larger than DEFAULT_BPM_IN_OUT make no |
70 | * preference). Should be rather low. | 66 | * sense. |
71 | */ | 67 | */ |
72 | #define DEFAULT_BPM_IN_OUT 2048 | 68 | #define MIN_BPM_PER_PEER GNUNET_CONSTANTS_DEFAULT_BPM_IN_OUT |
73 | 69 | ||
70 | /** | ||
71 | * What is the smallest change (in number of bytes per minute) | ||
72 | * that we consider significant enough to bother triggering? | ||
73 | */ | ||
74 | #define MIN_BPM_CHANGE 32 | ||
74 | 75 | ||
75 | /** | 76 | /** |
76 | * After how much time past the "official" expiration time do | 77 | * After how much time past the "official" expiration time do |
@@ -81,61 +82,56 @@ | |||
81 | */ | 82 | */ |
82 | #define PAST_EXPIRATION_DISCARD_TIME GNUNET_TIME_UNIT_SECONDS | 83 | #define PAST_EXPIRATION_DISCARD_TIME GNUNET_TIME_UNIT_SECONDS |
83 | 84 | ||
84 | |||
85 | /** | 85 | /** |
86 | * What is the maximum delay for a SET_KEY message? | 86 | * What is the maximum delay for a SET_KEY message? |
87 | */ | 87 | */ |
88 | #define MAX_SET_KEY_DELAY GNUNET_TIME_UNIT_SECONDS | 88 | #define MAX_SET_KEY_DELAY GNUNET_TIME_UNIT_SECONDS |
89 | 89 | ||
90 | |||
91 | /** | 90 | /** |
92 | * What how long do we wait for SET_KEY confirmation initially? | 91 | * What how long do we wait for SET_KEY confirmation initially? |
93 | */ | 92 | */ |
94 | #define INITIAL_SET_KEY_RETRY_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 3) | 93 | #define INITIAL_SET_KEY_RETRY_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 3) |
95 | 94 | ||
96 | |||
97 | /** | 95 | /** |
98 | * What is the maximum delay for a PING message? | 96 | * What is the maximum delay for a PING message? |
99 | */ | 97 | */ |
100 | #define MAX_PING_DELAY GNUNET_TIME_UNIT_SECONDS | 98 | #define MAX_PING_DELAY GNUNET_TIME_UNIT_SECONDS |
101 | 99 | ||
102 | |||
103 | /** | 100 | /** |
104 | * What is the maximum delay for a PONG message? | 101 | * What is the maximum delay for a PONG message? |
105 | */ | 102 | */ |
106 | #define MAX_PONG_DELAY GNUNET_TIME_UNIT_SECONDS | 103 | #define MAX_PONG_DELAY GNUNET_TIME_UNIT_SECONDS |
107 | 104 | ||
105 | /** | ||
106 | * How often do we recalculate bandwidth quotas? | ||
107 | */ | ||
108 | #define QUOTA_UPDATE_FREQUENCY GNUNET_TIME_UNIT_SECONDS | ||
108 | 109 | ||
109 | /** | 110 | /** |
110 | * What is the priority for a SET_KEY message? | 111 | * What is the priority for a SET_KEY message? |
111 | */ | 112 | */ |
112 | #define SET_KEY_PRIORITY 0xFFFFFF | 113 | #define SET_KEY_PRIORITY 0xFFFFFF |
113 | 114 | ||
114 | |||
115 | /** | 115 | /** |
116 | * What is the priority for a PING message? | 116 | * What is the priority for a PING message? |
117 | */ | 117 | */ |
118 | #define PING_PRIORITY 0xFFFFFF | 118 | #define PING_PRIORITY 0xFFFFFF |
119 | 119 | ||
120 | |||
121 | /** | 120 | /** |
122 | * What is the priority for a PONG message? | 121 | * What is the priority for a PONG message? |
123 | */ | 122 | */ |
124 | #define PONG_PRIORITY 0xFFFFFF | 123 | #define PONG_PRIORITY 0xFFFFFF |
125 | 124 | ||
126 | |||
127 | /** | 125 | /** |
128 | * How many messages do we queue per peer at most? | 126 | * How many messages do we queue per peer at most? |
129 | */ | 127 | */ |
130 | #define MAX_PEER_QUEUE_SIZE 16 | 128 | #define MAX_PEER_QUEUE_SIZE 16 |
131 | 129 | ||
132 | |||
133 | /** | 130 | /** |
134 | * How many non-mandatory messages do we queue per client at most? | 131 | * How many non-mandatory messages do we queue per client at most? |
135 | */ | 132 | */ |
136 | #define MAX_CLIENT_QUEUE_SIZE 32 | 133 | #define MAX_CLIENT_QUEUE_SIZE 32 |
137 | 134 | ||
138 | |||
139 | /** | 135 | /** |
140 | * What is the maximum age of a message for us to consider | 136 | * What is the maximum age of a message for us to consider |
141 | * processing it? Note that this looks at the timestamp used | 137 | * processing it? Note that this looks at the timestamp used |
@@ -146,7 +142,6 @@ | |||
146 | */ | 142 | */ |
147 | #define MAX_MESSAGE_AGE GNUNET_TIME_UNIT_DAYS | 143 | #define MAX_MESSAGE_AGE GNUNET_TIME_UNIT_DAYS |
148 | 144 | ||
149 | |||
150 | /** | 145 | /** |
151 | * What is the maximum size for encrypted messages? Note that this | 146 | * What is the maximum size for encrypted messages? Note that this |
152 | * number imposes a clear limit on the maximum size of any message. | 147 | * number imposes a clear limit on the maximum size of any message. |
@@ -179,6 +174,7 @@ enum PeerStateMachine | |||
179 | */ | 174 | */ |
180 | #define ENCRYPTED_HEADER_SIZE (sizeof(struct GNUNET_MessageHeader) + sizeof(uint32_t) + sizeof(GNUNET_HashCode)) | 175 | #define ENCRYPTED_HEADER_SIZE (sizeof(struct GNUNET_MessageHeader) + sizeof(uint32_t) + sizeof(GNUNET_HashCode)) |
181 | 176 | ||
177 | |||
182 | /** | 178 | /** |
183 | * Encapsulation for encrypted messages exchanged between | 179 | * Encapsulation for encrypted messages exchanged between |
184 | * peers. Followed by the actual encrypted data. | 180 | * peers. Followed by the actual encrypted data. |
@@ -403,6 +399,11 @@ struct Neighbour | |||
403 | GNUNET_SCHEDULER_TaskIdentifier retry_set_key_task; | 399 | GNUNET_SCHEDULER_TaskIdentifier retry_set_key_task; |
404 | 400 | ||
405 | /** | 401 | /** |
402 | * ID of task used for updating bandwidth quota for this neighbour. | ||
403 | */ | ||
404 | GNUNET_SCHEDULER_TaskIdentifier quota_update_task; | ||
405 | |||
406 | /** | ||
406 | * At what time did we generate our encryption key? | 407 | * At what time did we generate our encryption key? |
407 | */ | 408 | */ |
408 | struct GNUNET_TIME_Absolute encrypt_key_created; | 409 | struct GNUNET_TIME_Absolute encrypt_key_created; |
@@ -430,7 +431,7 @@ struct Neighbour | |||
430 | struct GNUNET_TIME_Relative last_latency; | 431 | struct GNUNET_TIME_Relative last_latency; |
431 | 432 | ||
432 | /** | 433 | /** |
433 | * At what frequency are we currently re-trying SET KEY messages? | 434 | * At what frequency are we currently re-trying SET_KEY messages? |
434 | */ | 435 | */ |
435 | struct GNUNET_TIME_Relative set_key_retry_frequency; | 436 | struct GNUNET_TIME_Relative set_key_retry_frequency; |
436 | 437 | ||
@@ -465,7 +466,7 @@ struct Neighbour | |||
465 | /** | 466 | /** |
466 | * How valueable were the messages of this peer recently? | 467 | * How valueable were the messages of this peer recently? |
467 | */ | 468 | */ |
468 | double current_preference; | 469 | unsigned long long current_preference; |
469 | 470 | ||
470 | /** | 471 | /** |
471 | * Bit map indicating which of the 32 sequence numbers before the last | 472 | * Bit map indicating which of the 32 sequence numbers before the last |
@@ -501,7 +502,7 @@ struct Neighbour | |||
501 | 502 | ||
502 | /** | 503 | /** |
503 | * Internal bandwidth limit set for this peer (initially | 504 | * Internal bandwidth limit set for this peer (initially |
504 | * typcially set to "-1"). "bpm_out" is MAX of | 505 | * typically set to "-1"). "bpm_out" is MAX of |
505 | * "bpm_out_internal_limit" and "bpm_out_external_limit". | 506 | * "bpm_out_internal_limit" and "bpm_out_external_limit". |
506 | */ | 507 | */ |
507 | uint32_t bpm_out_internal_limit; | 508 | uint32_t bpm_out_internal_limit; |
@@ -641,14 +642,63 @@ static struct GNUNET_SERVER_Handle *server; | |||
641 | static struct GNUNET_TRANSPORT_Handle *transport; | 642 | static struct GNUNET_TRANSPORT_Handle *transport; |
642 | 643 | ||
643 | /** | 644 | /** |
645 | * Linked list of our clients. | ||
646 | */ | ||
647 | static struct Client *clients; | ||
648 | |||
649 | /** | ||
644 | * We keep neighbours in a linked list (for now). | 650 | * We keep neighbours in a linked list (for now). |
645 | */ | 651 | */ |
646 | static struct Neighbour *neighbours; | 652 | static struct Neighbour *neighbours; |
647 | 653 | ||
648 | /** | 654 | /** |
649 | * Linked list of our clients. | 655 | * Sum of all preferences among all neighbours. |
650 | */ | 656 | */ |
651 | static struct Client *clients; | 657 | static unsigned long long preference_sum; |
658 | |||
659 | /** | ||
660 | * Total number of neighbours we have. | ||
661 | */ | ||
662 | static unsigned int neighbour_count; | ||
663 | |||
664 | /** | ||
665 | * How much inbound bandwidth are we supposed to be using? | ||
666 | */ | ||
667 | static unsigned long long bandwidth_target_in; | ||
668 | |||
669 | /** | ||
670 | * How much outbound bandwidth are we supposed to be using? | ||
671 | */ | ||
672 | static unsigned long long bandwidth_target_out; | ||
673 | |||
674 | |||
675 | |||
676 | /** | ||
677 | * A preference value for a neighbour was update. Update | ||
678 | * the preference sum accordingly. | ||
679 | * | ||
680 | * @param inc how much was a preference value increased? | ||
681 | */ | ||
682 | static void | ||
683 | update_preference_sum (unsigned long long inc) | ||
684 | { | ||
685 | struct Neighbour *n; | ||
686 | unsigned long long os; | ||
687 | |||
688 | os = preference_sum; | ||
689 | preference_sum += inc; | ||
690 | if (preference_sum >= os) | ||
691 | return; /* done! */ | ||
692 | /* overflow! compensate by cutting all values in half! */ | ||
693 | preference_sum = 0; | ||
694 | n = neighbours; | ||
695 | while (n != NULL) | ||
696 | { | ||
697 | n->current_preference /= 2; | ||
698 | preference_sum += n->current_preference; | ||
699 | n = n->next; | ||
700 | } | ||
701 | } | ||
652 | 702 | ||
653 | 703 | ||
654 | /** | 704 | /** |
@@ -1010,6 +1060,7 @@ handle_client_request_configure (void *cls, | |||
1010 | struct ConfigurationInfoMessage cim; | 1060 | struct ConfigurationInfoMessage cim; |
1011 | struct Client *c; | 1061 | struct Client *c; |
1012 | int reserv; | 1062 | int reserv; |
1063 | unsigned long long old_preference; | ||
1013 | 1064 | ||
1014 | #if DEBUG_CORE_CLIENT | 1065 | #if DEBUG_CORE_CLIENT |
1015 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1066 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -1036,9 +1087,14 @@ handle_client_request_configure (void *cls, | |||
1036 | reserv = n->available_recv_window; | 1087 | reserv = n->available_recv_window; |
1037 | n->available_recv_window -= reserv; | 1088 | n->available_recv_window -= reserv; |
1038 | } | 1089 | } |
1039 | n->current_preference += rcm->preference_change; | 1090 | old_preference = n->current_preference; |
1040 | if (n->current_preference < 0) | 1091 | n->current_preference += GNUNET_ntohll(rcm->preference_change); |
1041 | n->current_preference = 0; | 1092 | if (old_preference > n->current_preference) |
1093 | { | ||
1094 | /* overflow; cap at maximum value */ | ||
1095 | n->current_preference = (unsigned long long) -1; | ||
1096 | } | ||
1097 | update_preference_sum (n->current_preference - old_preference); | ||
1042 | cim.reserved_amount = htonl (reserv); | 1098 | cim.reserved_amount = htonl (reserv); |
1043 | cim.bpm_in = htonl (n->bpm_in); | 1099 | cim.bpm_in = htonl (n->bpm_in); |
1044 | cim.bpm_out = htonl (n->bpm_out); | 1100 | cim.bpm_out = htonl (n->bpm_out); |
@@ -2800,6 +2856,87 @@ handle_transport_receive (void *cls, | |||
2800 | 2856 | ||
2801 | 2857 | ||
2802 | /** | 2858 | /** |
2859 | * Function that recalculates the bandwidth quota for the | ||
2860 | * given neighbour and transmits it to the transport service. | ||
2861 | * | ||
2862 | * @param cls neighbour for the quota update | ||
2863 | * @param tc context | ||
2864 | */ | ||
2865 | static void | ||
2866 | neighbour_quota_update (void *cls, | ||
2867 | const struct GNUNET_SCHEDULER_TaskContext *tc); | ||
2868 | |||
2869 | |||
2870 | /** | ||
2871 | * Schedule the task that will recalculate the bandwidth | ||
2872 | * quota for this peer (and possibly force a disconnect of | ||
2873 | * idle peers by calculating a bandwidth of zero). | ||
2874 | */ | ||
2875 | static void | ||
2876 | schedule_quota_update (struct Neighbour *n) | ||
2877 | { | ||
2878 | GNUNET_assert (n->quota_update_task == | ||
2879 | GNUNET_SCHEDULER_NO_PREREQUISITE_TASK); | ||
2880 | n->quota_update_task | ||
2881 | = GNUNET_SCHEDULER_add_delayed (sched, | ||
2882 | GNUNET_NO, | ||
2883 | GNUNET_SCHEDULER_PRIORITY_IDLE, | ||
2884 | GNUNET_SCHEDULER_NO_PREREQUISITE_TASK, | ||
2885 | QUOTA_UPDATE_FREQUENCY, | ||
2886 | &neighbour_quota_update, | ||
2887 | n); | ||
2888 | } | ||
2889 | |||
2890 | |||
2891 | /** | ||
2892 | * Function that recalculates the bandwidth quota for the | ||
2893 | * given neighbour and transmits it to the transport service. | ||
2894 | * | ||
2895 | * @param cls neighbour for the quota update | ||
2896 | * @param tc context | ||
2897 | */ | ||
2898 | static void | ||
2899 | neighbour_quota_update (void *cls, | ||
2900 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
2901 | { | ||
2902 | struct Neighbour *n = cls; | ||
2903 | uint32_t q_in; | ||
2904 | double pref_rel; | ||
2905 | double share; | ||
2906 | unsigned long long distributable; | ||
2907 | |||
2908 | n->quota_update_task = GNUNET_SCHEDULER_NO_PREREQUISITE_TASK; | ||
2909 | /* calculate relative preference among all neighbours; | ||
2910 | divides by a bit more to avoid division by zero AND to | ||
2911 | account for possibility of new neighbours joining any time | ||
2912 | AND to convert to double... */ | ||
2913 | pref_rel = n->current_preference / (1.0 + preference_sum); | ||
2914 | share = 0; | ||
2915 | distributable = 0; | ||
2916 | if (bandwidth_target_out > neighbour_count * MIN_BPM_PER_PEER) | ||
2917 | distributable = bandwidth_target_out - neighbour_count * MIN_BPM_PER_PEER; | ||
2918 | share = distributable * pref_rel; | ||
2919 | q_in = MIN_BPM_PER_PEER + (unsigned long long) share; | ||
2920 | /* check if we want to disconnect for good due to inactivity */ | ||
2921 | if ( (GNUNET_TIME_absolute_get_duration (n->last_activity).value > GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.value) && | ||
2922 | (GNUNET_TIME_absolute_get_duration (n->time_established).value > GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.value) ) | ||
2923 | q_in = 0; /* force disconnect */ | ||
2924 | if ( (n->bpm_in + MIN_BPM_CHANGE < q_in) || | ||
2925 | (n->bpm_in - MIN_BPM_CHANGE > q_in) ) | ||
2926 | { | ||
2927 | n->bpm_in = q_in; | ||
2928 | GNUNET_TRANSPORT_set_quota (transport, | ||
2929 | &n->peer, | ||
2930 | n->bpm_in, | ||
2931 | n->bpm_out, | ||
2932 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
2933 | NULL, NULL); | ||
2934 | } | ||
2935 | schedule_quota_update (n); | ||
2936 | } | ||
2937 | |||
2938 | |||
2939 | /** | ||
2803 | * Function called by transport to notify us that | 2940 | * Function called by transport to notify us that |
2804 | * a peer connected to us (on the network level). | 2941 | * a peer connected to us (on the network level). |
2805 | * | 2942 | * |
@@ -2827,6 +2964,7 @@ handle_transport_notify_connect (void *cls, | |||
2827 | n = GNUNET_malloc (sizeof (struct Neighbour)); | 2964 | n = GNUNET_malloc (sizeof (struct Neighbour)); |
2828 | n->next = neighbours; | 2965 | n->next = neighbours; |
2829 | neighbours = n; | 2966 | neighbours = n; |
2967 | neighbour_count++; | ||
2830 | n->peer = *peer; | 2968 | n->peer = *peer; |
2831 | n->last_latency = latency; | 2969 | n->last_latency = latency; |
2832 | GNUNET_CRYPTO_aes_create_session_key (&n->encrypt_key); | 2970 | GNUNET_CRYPTO_aes_create_session_key (&n->encrypt_key); |
@@ -2834,10 +2972,10 @@ handle_transport_notify_connect (void *cls, | |||
2834 | n->set_key_retry_frequency = INITIAL_SET_KEY_RETRY_FREQUENCY; | 2972 | n->set_key_retry_frequency = INITIAL_SET_KEY_RETRY_FREQUENCY; |
2835 | n->last_asw_update = now; | 2973 | n->last_asw_update = now; |
2836 | n->last_arw_update = now; | 2974 | n->last_arw_update = now; |
2837 | n->bpm_in = DEFAULT_BPM_IN_OUT; | 2975 | n->bpm_in = GNUNET_CONSTANTS_DEFAULT_BPM_IN_OUT; |
2838 | n->bpm_out = DEFAULT_BPM_IN_OUT; | 2976 | n->bpm_out = GNUNET_CONSTANTS_DEFAULT_BPM_IN_OUT; |
2839 | n->bpm_out_internal_limit = (uint32_t) - 1; | 2977 | n->bpm_out_internal_limit = (uint32_t) - 1; |
2840 | n->bpm_out_external_limit = DEFAULT_BPM_IN_OUT; | 2978 | n->bpm_out_external_limit = GNUNET_CONSTANTS_DEFAULT_BPM_IN_OUT; |
2841 | n->ping_challenge = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, | 2979 | n->ping_challenge = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, |
2842 | (uint32_t) - 1); | 2980 | (uint32_t) - 1); |
2843 | #if DEBUG_CORE | 2981 | #if DEBUG_CORE |
@@ -2845,9 +2983,10 @@ handle_transport_notify_connect (void *cls, | |||
2845 | "Received connection from `%4s'.\n", | 2983 | "Received connection from `%4s'.\n", |
2846 | GNUNET_i2s (&n->peer)); | 2984 | GNUNET_i2s (&n->peer)); |
2847 | #endif | 2985 | #endif |
2986 | schedule_quota_update (n); | ||
2848 | cnm.header.size = htons (sizeof (struct ConnectNotifyMessage)); | 2987 | cnm.header.size = htons (sizeof (struct ConnectNotifyMessage)); |
2849 | cnm.header.type = htons (GNUNET_MESSAGE_TYPE_CORE_NOTIFY_CONNECT); | 2988 | cnm.header.type = htons (GNUNET_MESSAGE_TYPE_CORE_NOTIFY_CONNECT); |
2850 | cnm.bpm_available = htonl (DEFAULT_BPM_IN_OUT); | 2989 | cnm.bpm_available = htonl (n->bpm_out); |
2851 | cnm.peer = *peer; | 2990 | cnm.peer = *peer; |
2852 | cnm.last_activity = GNUNET_TIME_absolute_hton (now); | 2991 | cnm.last_activity = GNUNET_TIME_absolute_hton (now); |
2853 | send_to_all_clients (&cnm.header, GNUNET_YES); | 2992 | send_to_all_clients (&cnm.header, GNUNET_YES); |
@@ -2857,6 +2996,7 @@ handle_transport_notify_connect (void *cls, | |||
2857 | /** | 2996 | /** |
2858 | * Free the given entry for the neighbour (it has | 2997 | * Free the given entry for the neighbour (it has |
2859 | * already been removed from the list at this point). | 2998 | * already been removed from the list at this point). |
2999 | * | ||
2860 | * @param n neighbour to free | 3000 | * @param n neighbour to free |
2861 | */ | 3001 | */ |
2862 | static void | 3002 | static void |
@@ -2880,6 +3020,8 @@ free_neighbour (struct Neighbour *n) | |||
2880 | GNUNET_SCHEDULER_cancel (sched, n->retry_plaintext_task); | 3020 | GNUNET_SCHEDULER_cancel (sched, n->retry_plaintext_task); |
2881 | if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_PREREQUISITE_TASK) | 3021 | if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_PREREQUISITE_TASK) |
2882 | GNUNET_SCHEDULER_cancel (sched, n->retry_set_key_task); | 3022 | GNUNET_SCHEDULER_cancel (sched, n->retry_set_key_task); |
3023 | if (n->quota_update_task != GNUNET_SCHEDULER_NO_PREREQUISITE_TASK) | ||
3024 | GNUNET_SCHEDULER_cancel (sched, n->quota_update_task); | ||
2883 | GNUNET_free_non_null (n->public_key); | 3025 | GNUNET_free_non_null (n->public_key); |
2884 | GNUNET_free_non_null (n->pending_ping); | 3026 | GNUNET_free_non_null (n->pending_ping); |
2885 | GNUNET_free (n); | 3027 | GNUNET_free (n); |
@@ -2922,6 +3064,8 @@ handle_transport_notify_disconnect (void *cls, | |||
2922 | neighbours = n->next; | 3064 | neighbours = n->next; |
2923 | else | 3065 | else |
2924 | p->next = n->next; | 3066 | p->next = n->next; |
3067 | GNUNET_assert (neighbour_count > 0); | ||
3068 | neighbour_count--; | ||
2925 | cnm.header.size = htons (sizeof (struct ConnectNotifyMessage)); | 3069 | cnm.header.size = htons (sizeof (struct ConnectNotifyMessage)); |
2926 | cnm.header.type = htons (GNUNET_MESSAGE_TYPE_CORE_NOTIFY_DISCONNECT); | 3070 | cnm.header.type = htons (GNUNET_MESSAGE_TYPE_CORE_NOTIFY_DISCONNECT); |
2927 | cnm.bpm_available = htonl (0); | 3071 | cnm.bpm_available = htonl (0); |
@@ -2952,6 +3096,8 @@ cleaning_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
2952 | while (NULL != (n = neighbours)) | 3096 | while (NULL != (n = neighbours)) |
2953 | { | 3097 | { |
2954 | neighbours = n->next; | 3098 | neighbours = n->next; |
3099 | GNUNET_assert (neighbour_count > 0); | ||
3100 | neighbour_count--; | ||
2955 | free_neighbour (n); | 3101 | free_neighbour (n); |
2956 | } | 3102 | } |
2957 | while (NULL != (c = clients)) | 3103 | while (NULL != (c = clients)) |
@@ -2983,12 +3129,17 @@ run (void *cls, | |||
2983 | cfg = c; | 3129 | cfg = c; |
2984 | /* parse configuration */ | 3130 | /* parse configuration */ |
2985 | if ( | 3131 | if ( |
2986 | #if 0 | ||
2987 | (GNUNET_OK != | 3132 | (GNUNET_OK != |
2988 | GNUNET_CONFIGURATION_get_value_number (c, | 3133 | GNUNET_CONFIGURATION_get_value_number (c, |
2989 | "CORE", | 3134 | "CORE", |
2990 | "XX", | 3135 | "TOTAL_QUOTA_IN", |
2991 | &qin)) || | 3136 | &bandwidth_target_in)) || |
3137 | (GNUNET_OK != | ||
3138 | GNUNET_CONFIGURATION_get_value_number (c, | ||
3139 | "CORE", | ||
3140 | "TOTAL_QUOTA_OUT", | ||
3141 | &bandwidth_target_out)) || | ||
3142 | #if 0 | ||
2992 | (GNUNET_OK != | 3143 | (GNUNET_OK != |
2993 | GNUNET_CONFIGURATION_get_value_number (c, | 3144 | GNUNET_CONFIGURATION_get_value_number (c, |
2994 | "CORE", | 3145 | "CORE", |
@@ -3052,8 +3203,6 @@ run (void *cls, | |||
3052 | static void | 3203 | static void |
3053 | cleanup (void *cls, struct GNUNET_CONFIGURATION_Handle *cfg) | 3204 | cleanup (void *cls, struct GNUNET_CONFIGURATION_Handle *cfg) |
3054 | { | 3205 | { |
3055 | |||
3056 | |||
3057 | if (my_private_key != NULL) | 3206 | if (my_private_key != NULL) |
3058 | GNUNET_CRYPTO_rsa_key_free (my_private_key); | 3207 | GNUNET_CRYPTO_rsa_key_free (my_private_key); |
3059 | } | 3208 | } |
diff --git a/src/core/test_core_api.c b/src/core/test_core_api.c index 8e572a583..d52b24a4f 100644 --- a/src/core/test_core_api.c +++ b/src/core/test_core_api.c | |||
@@ -34,7 +34,7 @@ | |||
34 | #include "gnunet_scheduler_lib.h" | 34 | #include "gnunet_scheduler_lib.h" |
35 | #include "gnunet_transport_service.h" | 35 | #include "gnunet_transport_service.h" |
36 | 36 | ||
37 | #define VERBOSE GNUNET_YES | 37 | #define VERBOSE GNUNET_NO |
38 | 38 | ||
39 | #define START_ARM GNUNET_YES | 39 | #define START_ARM GNUNET_YES |
40 | 40 | ||
diff --git a/src/include/Makefile.am b/src/include/Makefile.am index 8c49690e7..bc832c444 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am | |||
@@ -15,6 +15,7 @@ gnunetinclude_HEADERS = \ | |||
15 | gnunet_arm_service.h \ | 15 | gnunet_arm_service.h \ |
16 | gnunet_client_lib.h \ | 16 | gnunet_client_lib.h \ |
17 | gnunet_common.h \ | 17 | gnunet_common.h \ |
18 | gnunet_constants.h \ | ||
18 | gnunet_configuration_lib.h \ | 19 | gnunet_configuration_lib.h \ |
19 | gnunet_container_lib.h \ | 20 | gnunet_container_lib.h \ |
20 | gnunet_core_service.h \ | 21 | gnunet_core_service.h \ |
diff --git a/src/include/gnunet_constants.h b/src/include/gnunet_constants.h new file mode 100644 index 000000000..99ed77537 --- /dev/null +++ b/src/include/gnunet_constants.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | (C) 2009 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 2, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file include/gnunet_constants.h | ||
23 | * @brief "global" constants for performance tuning | ||
24 | * @author Christian Grothoff | ||
25 | */ | ||
26 | |||
27 | #ifndef GNUNET_CONSTANTS_H | ||
28 | #define GNUNET_CONSTANTS_H | ||
29 | |||
30 | #ifdef __cplusplus | ||
31 | extern "C" | ||
32 | { | ||
33 | #if 0 /* keep Emacsens' auto-indent happy */ | ||
34 | } | ||
35 | #endif | ||
36 | #endif | ||
37 | |||
38 | /** | ||
39 | * Amount of bytes per minute (in/out) to assume initially (before | ||
40 | * either peer has communicated any particular preference). Should be | ||
41 | * rather low; set so that at least one maximum-size message can be | ||
42 | * send each minute. | ||
43 | */ | ||
44 | #define GNUNET_CONSTANTS_DEFAULT_BPM_IN_OUT GNUNET_SERVER_MAX_MESSAGE_SIZE | ||
45 | |||
46 | /** | ||
47 | * After how long do we consider a connection to a peer dead | ||
48 | * if we don't receive messages from the peer? | ||
49 | */ | ||
50 | #define GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5) | ||
51 | |||
52 | |||
53 | #if 0 /* keep Emacsens' auto-indent happy */ | ||
54 | { | ||
55 | #endif | ||
56 | #ifdef __cplusplus | ||
57 | } | ||
58 | #endif | ||
59 | |||
60 | #endif | ||
diff --git a/src/include/gnunet_core_service.h b/src/include/gnunet_core_service.h index 8b75271b9..be8f4baa0 100644 --- a/src/include/gnunet_core_service.h +++ b/src/include/gnunet_core_service.h | |||
@@ -219,7 +219,7 @@ typedef void | |||
219 | unsigned int bpm_out, | 219 | unsigned int bpm_out, |
220 | struct GNUNET_TIME_Relative | 220 | struct GNUNET_TIME_Relative |
221 | latency, int amount, | 221 | latency, int amount, |
222 | double preference); | 222 | unsigned long long preference); |
223 | 223 | ||
224 | 224 | ||
225 | /** | 225 | /** |
@@ -251,7 +251,7 @@ GNUNET_CORE_peer_configure (struct GNUNET_CORE_Handle *handle, | |||
251 | struct GNUNET_TIME_Relative timeout, | 251 | struct GNUNET_TIME_Relative timeout, |
252 | unsigned int bpm_out, | 252 | unsigned int bpm_out, |
253 | int amount, | 253 | int amount, |
254 | double preference, | 254 | unsigned long long preference, |
255 | GNUNET_CORE_PeerConfigurationInfoCallback info, | 255 | GNUNET_CORE_PeerConfigurationInfoCallback info, |
256 | void *info_cls); | 256 | void *info_cls); |
257 | 257 | ||
diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c index da6ee9df8..f689b54c0 100644 --- a/src/transport/gnunet-service-transport.c +++ b/src/transport/gnunet-service-transport.c | |||
@@ -29,6 +29,7 @@ | |||
29 | */ | 29 | */ |
30 | #include "platform.h" | 30 | #include "platform.h" |
31 | #include "gnunet_client_lib.h" | 31 | #include "gnunet_client_lib.h" |
32 | #include "gnunet_constants.h" | ||
32 | #include "gnunet_getopt_lib.h" | 33 | #include "gnunet_getopt_lib.h" |
33 | #include "gnunet_hello_lib.h" | 34 | #include "gnunet_hello_lib.h" |
34 | #include "gnunet_os_lib.h" | 35 | #include "gnunet_os_lib.h" |
@@ -82,12 +83,6 @@ | |||
82 | */ | 83 | */ |
83 | #define HELLO_ADDRESS_EXPIRATION GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_HOURS, 12) | 84 | #define HELLO_ADDRESS_EXPIRATION GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_HOURS, 12) |
84 | 85 | ||
85 | /** | ||
86 | * After how long do we consider a connection to a peer dead | ||
87 | * if we don't receive messages from the peer? | ||
88 | */ | ||
89 | #define IDLE_CONNECTION_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5) | ||
90 | |||
91 | 86 | ||
92 | /** | 87 | /** |
93 | * Entry in linked list of network addresses. | 88 | * Entry in linked list of network addresses. |
@@ -356,7 +351,7 @@ struct NeighbourList | |||
356 | uint64_t last_received; | 351 | uint64_t last_received; |
357 | 352 | ||
358 | /** | 353 | /** |
359 | * Global quota for outbound traffic for the neighbour in bytes/ms. | 354 | * Global quota for inbound traffic for the neighbour in bytes/ms. |
360 | */ | 355 | */ |
361 | uint32_t quota_in; | 356 | uint32_t quota_in; |
362 | 357 | ||
@@ -641,16 +636,6 @@ static struct GNUNET_SERVER_Handle *server; | |||
641 | static struct NeighbourList *neighbours; | 636 | static struct NeighbourList *neighbours; |
642 | 637 | ||
643 | /** | 638 | /** |
644 | * Default bandwidth quota for receiving for new peers in bytes/ms. | ||
645 | */ | ||
646 | static uint32_t default_quota_in; | ||
647 | |||
648 | /** | ||
649 | * Default bandwidth quota for sending for new peers in bytes/ms. | ||
650 | */ | ||
651 | static uint32_t default_quota_out; | ||
652 | |||
653 | /** | ||
654 | * Number of neighbours we'd like to have. | 639 | * Number of neighbours we'd like to have. |
655 | */ | 640 | */ |
656 | static uint32_t max_connect_per_transport; | 641 | static uint32_t max_connect_per_transport; |
@@ -930,7 +915,7 @@ transmit_send_continuation (void *cls, | |||
930 | } | 915 | } |
931 | if (result == GNUNET_OK) | 916 | if (result == GNUNET_OK) |
932 | { | 917 | { |
933 | rl->timeout = GNUNET_TIME_relative_to_absolute (IDLE_CONNECTION_TIMEOUT); | 918 | rl->timeout = GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT); |
934 | } | 919 | } |
935 | else | 920 | else |
936 | { | 921 | { |
@@ -1139,7 +1124,7 @@ try_transmission_to_peer (struct NeighbourList *neighbour) | |||
1139 | rl, | 1124 | rl, |
1140 | &neighbour->id, | 1125 | &neighbour->id, |
1141 | mq->message, | 1126 | mq->message, |
1142 | IDLE_CONNECTION_TIMEOUT, | 1127 | GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, |
1143 | &transmit_send_continuation, mq); | 1128 | &transmit_send_continuation, mq); |
1144 | } | 1129 | } |
1145 | 1130 | ||
@@ -1510,7 +1495,7 @@ notify_clients_connect (const struct GNUNET_PeerIdentity *peer, | |||
1510 | #endif | 1495 | #endif |
1511 | cim.header.size = htons (sizeof (struct ConnectInfoMessage)); | 1496 | cim.header.size = htons (sizeof (struct ConnectInfoMessage)); |
1512 | cim.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT); | 1497 | cim.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT); |
1513 | cim.quota_out = htonl (default_quota_out); | 1498 | cim.quota_out = htonl (GNUNET_CONSTANTS_DEFAULT_BPM_IN_OUT / (60*1000)); |
1514 | cim.latency = GNUNET_TIME_relative_hton (latency); | 1499 | cim.latency = GNUNET_TIME_relative_hton (latency); |
1515 | memcpy (&cim.id, peer, sizeof (struct GNUNET_PeerIdentity)); | 1500 | memcpy (&cim.id, peer, sizeof (struct GNUNET_PeerIdentity)); |
1516 | cpos = clients; | 1501 | cpos = clients; |
@@ -2196,15 +2181,15 @@ setup_new_neighbour (const struct GNUNET_PeerIdentity *peer) | |||
2196 | n->id = *peer; | 2181 | n->id = *peer; |
2197 | n->last_quota_update = GNUNET_TIME_absolute_get (); | 2182 | n->last_quota_update = GNUNET_TIME_absolute_get (); |
2198 | n->peer_timeout = | 2183 | n->peer_timeout = |
2199 | GNUNET_TIME_relative_to_absolute (IDLE_CONNECTION_TIMEOUT); | 2184 | GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT); |
2200 | n->quota_in = default_quota_in; | 2185 | n->quota_in = (GNUNET_CONSTANTS_DEFAULT_BPM_IN_OUT + 59999) / (60 * 1000); |
2201 | add_plugins (n); | 2186 | add_plugins (n); |
2202 | n->hello_version_sent = our_hello_version; | 2187 | n->hello_version_sent = our_hello_version; |
2203 | n->timeout_task = GNUNET_SCHEDULER_add_delayed (sched, | 2188 | n->timeout_task = GNUNET_SCHEDULER_add_delayed (sched, |
2204 | GNUNET_NO, | 2189 | GNUNET_NO, |
2205 | GNUNET_SCHEDULER_PRIORITY_IDLE, | 2190 | GNUNET_SCHEDULER_PRIORITY_IDLE, |
2206 | GNUNET_SCHEDULER_NO_PREREQUISITE_TASK, | 2191 | GNUNET_SCHEDULER_NO_PREREQUISITE_TASK, |
2207 | IDLE_CONNECTION_TIMEOUT, | 2192 | GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, |
2208 | &neighbour_timeout_task, n); | 2193 | &neighbour_timeout_task, n); |
2209 | transmit_to_peer (NULL, | 2194 | transmit_to_peer (NULL, |
2210 | (const struct GNUNET_MessageHeader *) our_hello, | 2195 | (const struct GNUNET_MessageHeader *) our_hello, |
@@ -2297,7 +2282,7 @@ plugin_env_receive (void *cls, | |||
2297 | service_context->connect_attempts++; | 2282 | service_context->connect_attempts++; |
2298 | } | 2283 | } |
2299 | service_context->timeout | 2284 | service_context->timeout |
2300 | = GNUNET_TIME_relative_to_absolute (IDLE_CONNECTION_TIMEOUT); | 2285 | = GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT); |
2301 | service_context->plugin_handle = plugin_context; | 2286 | service_context->plugin_handle = plugin_context; |
2302 | service_context->latency = latency; | 2287 | service_context->latency = latency; |
2303 | } | 2288 | } |
@@ -2306,12 +2291,12 @@ plugin_env_receive (void *cls, | |||
2306 | n->last_received += msize; | 2291 | n->last_received += msize; |
2307 | GNUNET_SCHEDULER_cancel (sched, n->timeout_task); | 2292 | GNUNET_SCHEDULER_cancel (sched, n->timeout_task); |
2308 | n->peer_timeout = | 2293 | n->peer_timeout = |
2309 | GNUNET_TIME_relative_to_absolute (IDLE_CONNECTION_TIMEOUT); | 2294 | GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT); |
2310 | n->timeout_task = | 2295 | n->timeout_task = |
2311 | GNUNET_SCHEDULER_add_delayed (sched, GNUNET_NO, | 2296 | GNUNET_SCHEDULER_add_delayed (sched, GNUNET_NO, |
2312 | GNUNET_SCHEDULER_PRIORITY_IDLE, | 2297 | GNUNET_SCHEDULER_PRIORITY_IDLE, |
2313 | GNUNET_SCHEDULER_NO_PREREQUISITE_TASK, | 2298 | GNUNET_SCHEDULER_NO_PREREQUISITE_TASK, |
2314 | IDLE_CONNECTION_TIMEOUT, | 2299 | GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, |
2315 | &neighbour_timeout_task, n); | 2300 | &neighbour_timeout_task, n); |
2316 | update_quota (n); | 2301 | update_quota (n); |
2317 | if (n->quota_violation_count > QUOTA_VIOLATION_DROP_THRESHOLD) | 2302 | if (n->quota_violation_count > QUOTA_VIOLATION_DROP_THRESHOLD) |
@@ -2426,7 +2411,7 @@ handle_start (void *cls, | |||
2426 | /* tell new client about all existing connections */ | 2411 | /* tell new client about all existing connections */ |
2427 | cim.header.size = htons (sizeof (struct ConnectInfoMessage)); | 2412 | cim.header.size = htons (sizeof (struct ConnectInfoMessage)); |
2428 | cim.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT); | 2413 | cim.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT); |
2429 | cim.quota_out = htonl (default_quota_out); | 2414 | cim.quota_out = htonl (GNUNET_CONSTANTS_DEFAULT_BPM_IN_OUT / (60 * 1000)); |
2430 | cim.latency = GNUNET_TIME_relative_hton (GNUNET_TIME_UNIT_ZERO); /* FIXME? */ | 2415 | cim.latency = GNUNET_TIME_relative_hton (GNUNET_TIME_UNIT_ZERO); /* FIXME? */ |
2431 | im = GNUNET_malloc (sizeof (struct InboundMessage) + | 2416 | im = GNUNET_malloc (sizeof (struct InboundMessage) + |
2432 | sizeof (struct GNUNET_MessageHeader)); | 2417 | sizeof (struct GNUNET_MessageHeader)); |
@@ -2639,7 +2624,7 @@ create_environment (struct TransportPlugin *plug) | |||
2639 | plug->env.receive = &plugin_env_receive; | 2624 | plug->env.receive = &plugin_env_receive; |
2640 | plug->env.lookup = &plugin_env_lookup_address; | 2625 | plug->env.lookup = &plugin_env_lookup_address; |
2641 | plug->env.notify_address = &plugin_env_notify_address; | 2626 | plug->env.notify_address = &plugin_env_notify_address; |
2642 | plug->env.default_quota_in = default_quota_in; | 2627 | plug->env.default_quota_in = (GNUNET_CONSTANTS_DEFAULT_BPM_IN_OUT + 59999) / (60 * 1000); |
2643 | plug->env.max_connections = max_connect_per_transport; | 2628 | plug->env.max_connections = max_connect_per_transport; |
2644 | } | 2629 | } |
2645 | 2630 | ||
@@ -2738,8 +2723,6 @@ run (void *cls, | |||
2738 | char *plugs; | 2723 | char *plugs; |
2739 | char *pos; | 2724 | char *pos; |
2740 | int no_transports; | 2725 | int no_transports; |
2741 | unsigned long long qin; | ||
2742 | unsigned long long qout; | ||
2743 | unsigned long long tneigh; | 2726 | unsigned long long tneigh; |
2744 | char *keyfile; | 2727 | char *keyfile; |
2745 | 2728 | ||
@@ -2749,16 +2732,6 @@ run (void *cls, | |||
2749 | if ((GNUNET_OK != | 2732 | if ((GNUNET_OK != |
2750 | GNUNET_CONFIGURATION_get_value_number (c, | 2733 | GNUNET_CONFIGURATION_get_value_number (c, |
2751 | "TRANSPORT", | 2734 | "TRANSPORT", |
2752 | "DEFAULT_QUOTA_IN", | ||
2753 | &qin)) || | ||
2754 | (GNUNET_OK != | ||
2755 | GNUNET_CONFIGURATION_get_value_number (c, | ||
2756 | "TRANSPORT", | ||
2757 | "DEFAULT_QUOTA_OUT", | ||
2758 | &qout)) || | ||
2759 | (GNUNET_OK != | ||
2760 | GNUNET_CONFIGURATION_get_value_number (c, | ||
2761 | "TRANSPORT", | ||
2762 | "NEIGHBOUR_LIMIT", | 2735 | "NEIGHBOUR_LIMIT", |
2763 | &tneigh)) || | 2736 | &tneigh)) || |
2764 | (GNUNET_OK != | 2737 | (GNUNET_OK != |
@@ -2773,8 +2746,6 @@ run (void *cls, | |||
2773 | return; | 2746 | return; |
2774 | } | 2747 | } |
2775 | max_connect_per_transport = (uint32_t) tneigh; | 2748 | max_connect_per_transport = (uint32_t) tneigh; |
2776 | default_quota_in = (uint32_t) qin; | ||
2777 | default_quota_out = (uint32_t) qout; | ||
2778 | my_private_key = GNUNET_CRYPTO_rsa_key_create_from_file (keyfile); | 2749 | my_private_key = GNUNET_CRYPTO_rsa_key_create_from_file (keyfile); |
2779 | GNUNET_free (keyfile); | 2750 | GNUNET_free (keyfile); |
2780 | if (my_private_key == NULL) | 2751 | if (my_private_key == NULL) |
diff --git a/src/transport/transport_api.c b/src/transport/transport_api.c index fb2451447..d38954445 100644 --- a/src/transport/transport_api.c +++ b/src/transport/transport_api.c | |||
@@ -92,7 +92,7 @@ struct NeighbourList | |||
92 | uint64_t last_sent; | 92 | uint64_t last_sent; |
93 | 93 | ||
94 | /** | 94 | /** |
95 | * Global quota for outbound traffic to the neighbour in bytes/ms. | 95 | * Quota for outbound traffic to the neighbour in bytes/ms. |
96 | */ | 96 | */ |
97 | uint32_t quota_out; | 97 | uint32_t quota_out; |
98 | 98 | ||