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