gnunet_constants.h (5317B)
1 /* 2 This file is part of GNUnet. 3 Copyright (C) 2009 GNUnet e.V. 4 5 GNUnet is free software: you can redistribute it and/or modify it 6 under the terms of the GNU Affero General Public License as published 7 by the Free Software Foundation, either version 3 of the License, 8 or (at your 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 Affero General Public License for more details. 14 15 You should have received a copy of the GNU Affero General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 SPDX-License-Identifier: AGPL3.0-or-later 19 */ 20 21 /** 22 * @author Christian Grothoff 23 * 24 * @file 25 * Global constants for performance tuning 26 * 27 * @defgroup constants Constant definitions 28 * Global constants for performance tuning 29 * @{ 30 */ 31 32 #ifndef GNUNET_CONSTANTS_H 33 #define GNUNET_CONSTANTS_H 34 35 #ifdef __cplusplus 36 extern "C" 37 { 38 #if 0 /* keep Emacsens' auto-indent happy */ 39 } 40 #endif 41 #endif 42 43 44 /** 45 * Bandwidth (in/out) to assume initially (before either peer has 46 * communicated any particular preference). Should be rather low; set 47 * so that at least one maximum-size message can be send roughly once 48 * per minute. 49 */ 50 #define GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT GNUNET_BANDWIDTH_value_init (1024 \ 51 * 1024) 52 53 /** 54 * After how long do we consider a connection to a peer dead 55 * if we don't receive messages from the peer? 56 */ 57 #define GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT GNUNET_TIME_relative_multiply ( \ 58 GNUNET_TIME_UNIT_MINUTES, 5) 59 60 /** 61 * How long do we delay reading more from a peer after a quota violation? 62 */ 63 #define GNUNET_CONSTANTS_QUOTA_VIOLATION_TIMEOUT GNUNET_TIME_relative_multiply ( \ 64 GNUNET_TIME_UNIT_SECONDS, 2) 65 66 /** 67 * After how long do we consider a service unresponsive 68 * even if we assume that the service commonly does not 69 * respond instantly (DNS, Database, etc.). 70 */ 71 #define GNUNET_CONSTANTS_SERVICE_TIMEOUT GNUNET_TIME_relative_multiply ( \ 72 GNUNET_TIME_UNIT_MINUTES, 10) 73 74 /** 75 * How long do we delay messages to get larger packet sizes (CORKing)? 76 */ 77 #define GNUNET_CONSTANTS_MAX_CORK_DELAY GNUNET_TIME_relative_multiply ( \ 78 GNUNET_TIME_UNIT_SECONDS, 1) 79 80 /** 81 * After what amount of latency for a message do we print a warning? 82 */ 83 #define GNUNET_CONSTANTS_LATENCY_WARN GNUNET_TIME_relative_multiply ( \ 84 GNUNET_TIME_UNIT_SECONDS, 3) 85 86 /** 87 * Until which load do we consider the peer overly idle 88 * (which means that we would like to use more resources).<p> 89 * 90 * Note that we use 70 to leave some room for applications 91 * to consume resources "idly" (i.e. up to 85%) and then 92 * still have some room for "paid for" resource consumption. 93 */ 94 #define GNUNET_CONSTANTS_IDLE_LOAD_THRESHOLD 70 95 96 /** 97 * For how long do we allow unused bandwidth 98 * from the past to carry over into the future? (in seconds) 99 */ 100 #define GNUNET_CONSTANTS_MAX_BANDWIDTH_CARRY_S 5 101 102 103 /** 104 * After how long do we expire an address in a HELLO that we just 105 * validated? This value is also used for our own addresses when we 106 * create a HELLO. 107 */ 108 #define GNUNET_CONSTANTS_HELLO_ADDRESS_EXPIRATION GNUNET_TIME_relative_multiply ( \ 109 GNUNET_TIME_UNIT_HOURS, 12) 110 111 112 /** 113 * How long do we cache records at most in the DHT? 114 */ 115 #define GNUNET_CONSTANTS_DHT_MAX_EXPIRATION GNUNET_TIME_relative_multiply ( \ 116 GNUNET_TIME_UNIT_HOURS, 24) 117 118 119 /** 120 * Size of the `struct EncryptedMessage` of the core (which 121 * is the per-message overhead of the core). 122 */ 123 #define GNUNET_CONSTANTS_CORE_SIZE_ENCRYPTED_MESSAGE (24 + sizeof(struct \ 124 GNUNET_HashCode)) 125 126 /** 127 * What is the maximum size for encrypted messages? Note that this 128 * number imposes a clear limit on the maximum size of any message. 129 * Set to a value close to 64k but not so close that transports will 130 * have trouble with their headers. 131 * 132 * Could theoretically be 64k minus (#GNUNET_CONSTANTS_CORE_SIZE_ENCRYPTED_MESSAGE + 133 * #GNUNET_CONSTANTS_TRANSPORT_SIZE_OUTBOUND_MESSAGE), but we're going 134 * to be more conservative for now. 135 */ 136 #define GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE (63 * 1024) 137 138 /** 139 * Size of the CADET message overhead: 140 * = sizeof (struct GNUNET_CADET_TunnelEncryptedMessage) 141 * + sizeof (struct GNUNET_CADET_ChannelAppDataMessage) 142 * + sizeof (struct GNUNET_CADET_ConnectionEncryptedAckMessage)) 143 * 144 * Checked for correctness in gnunet-service-cadet_tunnel.c: GCT_init(). 145 */ 146 #define GNUNET_CONSTANTS_CADET_P2P_OVERHEAD 164 147 148 /** 149 * Maximum message size that can be sent on CADET. 150 */ 151 #define GNUNET_CONSTANTS_MAX_CADET_MESSAGE_SIZE \ 152 (GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE \ 153 - GNUNET_CONSTANTS_CADET_P2P_OVERHEAD) 154 155 /** 156 * Largest block that can be stored in the DHT. 157 */ 158 #define GNUNET_CONSTANTS_MAX_BLOCK_SIZE (62 * 1024) 159 160 161 /** 162 * K-value that must be used for the bloom filters in 'GET' 163 * queries. 164 */ 165 #define GNUNET_CONSTANTS_BLOOMFILTER_K 16 166 167 168 #if 0 /* keep Emacsens' auto-indent happy */ 169 { 170 #endif 171 #ifdef __cplusplus 172 } 173 #endif 174 175 #endif 176 177 /** @} */ /* end of group */