diff options
author | Christian Grothoff <christian@grothoff.org> | 2010-03-18 14:21:35 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2010-03-18 14:21:35 +0000 |
commit | a451a2586010ed439a381e2621f29b7c3e197fcf (patch) | |
tree | a1a17a568d9f1cbe3f2859ea815464e6e098ecff /TODO | |
parent | 17660cb999353673f4a04cf37611d47f41672df3 (diff) | |
download | gnunet-a451a2586010ed439a381e2621f29b7c3e197fcf.tar.gz gnunet-a451a2586010ed439a381e2621f29b7c3e197fcf.zip |
update
Diffstat (limited to 'TODO')
-rw-r--r-- | TODO | 214 |
1 files changed, 102 insertions, 112 deletions
@@ -22,104 +22,21 @@ away), in order in which they will likely be done: | |||
22 | transport cost changes | 22 | transport cost changes |
23 | - disconnect notifications from TCP not always as nice as we might want | 23 | - disconnect notifications from TCP not always as nice as we might want |
24 | them to be (but how can we do this cleanly given that UDP is connectionless?) | 24 | them to be (but how can we do this cleanly given that UDP is connectionless?) |
25 | - hostlist testcase shows that (randomly) we jump to an address that | ||
26 | seems to be a plugin function *after* the plugin has been unloaded | ||
27 | (directly from scheduler); check that *all* plugin tasks are cancelled | ||
28 | after plugin is unloaded! (need better testcases for that...) | ||
29 | - implement transport API to pretty-print transport address | 25 | - implement transport API to pretty-print transport address |
30 | + transport_api extension (API extension!) | 26 | + transport_api extension (API extension!) |
31 | + service-transport extension (protocol extension) | 27 | + service-transport extension (protocol extension) |
32 | - implement gnunet-transport (transport configurator / tester) | ||
33 | - instantly filter addresses from *other* peers that | 28 | - instantly filter addresses from *other* peers that |
34 | are *equal* to our own address + port (i.e., localhost:2086). We | 29 | are *equal* to our own address + port (i.e., localhost:2086). We |
35 | no longer filter those for outgoing (helps with loopback testing | 30 | no longer filter those for outgoing (helps with loopback testing |
36 | and keeps the code clean), but we should filter strictly *impossible* | 31 | and keeps the code clean), but we should filter strictly *impossible* |
37 | incoming addresses! This is for efficiency, not correctness. | 32 | incoming addresses! This is for efficiency, not correctness. |
38 | - UPnP-based IP detection | ||
39 | (Note: build library always, build service when libxml2/etc. are available) | ||
40 | - We currently are happy to take any address told to us in a WELCOME | ||
41 | to our set of addresses; we should have some minimal threshold-based | ||
42 | scheme, limiting both the total number of addresses that we accept | ||
43 | this way as well as requiring multiple confirmations; also, we | ||
44 | should possibly try to confirm that the given address works for | ||
45 | us ourselves (loopback-style) before adding it to the list | ||
46 | [SECURITY issue] | ||
47 | + we may be able to simplify WELCOME messages (no need to add | ||
48 | addresses there anymore, but may help to learn them there anyway...). | ||
49 | + we probably want some kind of voting/counting for learning IP addresses | ||
50 | (maybe including IP addresses in ads proportional to how often others | ||
51 | report them? we at least need some protection against >64k HELLOs!), | ||
52 | + provide a way to give the user a list of "learned" IP addresses and | ||
53 | a way to easily "veto" addresses off the list! | ||
54 | => If MiM attacker uses vetoed address, blacklist the specific IP for | ||
55 | the presumed neighbour! | ||
56 | - [./transport/gnunet-service-transport.c:173]: (style) struct or union member 'TransportPlugin::rebuild' is never used | 33 | - [./transport/gnunet-service-transport.c:173]: (style) struct or union member 'TransportPlugin::rebuild' is never used |
57 | - [./transport/plugin_transport_tcp.c:391]: (style) struct or union member 'Plugin::address_update_task' is never used | 34 | - [./transport/plugin_transport_tcp.c:391]: (style) struct or union member 'Plugin::address_update_task' is never used |
58 | * FS: | ||
59 | - [./fs/gnunet-service-fs.c:208]: (style) struct or union member 'LocalGetContext::results_bf_size' is never used | ||
60 | - [./fs/gnunet-service-fs.c:501]: (style) struct or union member 'PendingRequest::used_pids_size' is never used | ||
61 | - [./fs/gnunet-service-fs.c:654]: (style) struct or union member 'ConnectedPeer::last_client_replies' is never used | ||
62 | - [./fs/gnunet-service-fs.c:669]: (style) struct or union member 'ConnectedPeer::avg_delay' is never used | ||
63 | - [./fs/gnunet-service-fs.c:675]: (style) struct or union member 'ConnectedPeer::avg_priority' is never used | ||
64 | - [./fs/gnunet-service-fs.c:688]: (style) struct or union member 'ConnectedPeer::pending_requests' is never used | ||
65 | - [./fs/gnunet-service-fs.c:694]: (style) struct or union member 'ConnectedPeer::last_p2p_replies_woff' is never used | ||
66 | - [./fs/gnunet-service-fs.c:700]: (style) struct or union member 'ConnectedPeer::last_client_replies_woff' is never used | ||
67 | * CORE: | 35 | * CORE: |
68 | - SET_KEY is triggered every 2.5 minutes (after session is up); should | 36 | - SET_KEY is triggered every 2.5 minutes (after session is up); should |
69 | just do PING (not SET_KEY + PING) | 37 | just do PING (not SET_KEY + PING) |
70 | - "Forcing disconnect of XXX due to inactivity" -- can happen every few MS!? | 38 | - "Forcing disconnect of XXX due to inactivity" -- can happen every few MS!? |
71 | (disconnect does not really succeed, or what?) | 39 | (disconnect does not really succeed, or what?) |
72 | * TOPOLOGY: | ||
73 | - needs more testing (especially F2F topology) | ||
74 | - needs to re-try connecting after disconnect (currently, it | ||
75 | initially triggers a connection request, but if that connection | ||
76 | fails / goes down, it does not retry in a timely fashion; | ||
77 | cause seems to be the 'blacklist_after_attempt' being set to 1h, | ||
78 | which is rather long -- and should probably be adjusted based on | ||
79 | the number of connections / known peers) | ||
80 | - If the topology daemon crashes, peers that were put on the | ||
81 | blacklist with transport will never be removed from it (until | ||
82 | transport service dies); we should use the blacklist notification | ||
83 | API to learn about the exact set of blacklisted peers at all times | ||
84 | (FIXME: the transport_api implementation of blacklisting | ||
85 | also does not work nicely for this since it won't let us know about | ||
86 | disconnect-reconnect events and the implicit whitelisting | ||
87 | that might happen here; that's not so bad since we will | ||
88 | re-blacklist on pre-connect attempts anyway, so this is | ||
89 | a minor issue). | ||
90 | - the code uses the term 'blacklist' for both peers that are forbidden | ||
91 | to connect (i.e. F2F mode) as well as peers that we currently | ||
92 | won't try to actively connect to ourselves (since we just tried); | ||
93 | This is confusing. We need two distinct terms. | ||
94 | - move code to use hash table instead of linked list | ||
95 | - instead of periodically discarding blacklisted entries, | ||
96 | simply add task that is triggered at the right time (earlier free, | ||
97 | more balanced load) | ||
98 | - check if new HELLO learned is different from old HELLO | ||
99 | before resetting entire state! | ||
100 | * UTIL: | ||
101 | - trust: need *fast* way to check/update trust in peers | ||
102 | (async peerinfo would not be right) | ||
103 | - scheduler should change OS process priority based on task priority; | ||
104 | should make better use of task priorities in general | ||
105 | - only connect() sockets that are ready (select()) [Nils] | ||
106 | [On W32, we need to select after calling socket before | ||
107 | doing connect etc.] | ||
108 | * STATISTICS: | ||
109 | - synchronous/asynchronous API (& implementation) is not nice; | ||
110 | => provide notification-based API | ||
111 | - does not seem to work with timeouts (especially if service is not running) | ||
112 | * DATACACHE: | ||
113 | - add stats (# bytes available, # bytes used, # PUTs, # GETs, # GETs satisfied) | ||
114 | * ARM: | ||
115 | - need to get rid of synchronous API for service starts (cause all kinds of problems) | ||
116 | [=> eliminate for need to tell ARM about service starts most of the time!] [Safey] | ||
117 | - better tracking of which config changes actually need to cause process restarts by ARM. | ||
118 | - listen for requests to discover dependencies between services (and avoid | ||
119 | having to explicitly program start requests) | ||
120 | - better crash management (attach debugging support, capture and analyze | ||
121 | debug output, detect random vs. deterministic crashes) | ||
122 | - shutdown sequence? | ||
123 | * HELLO: | 40 | * HELLO: |
124 | - need function to test "equivalency" of HELLOs; use in topology! | 41 | - need function to test "equivalency" of HELLOs; use in topology! |
125 | * FS: | 42 | * FS: |
@@ -127,17 +44,14 @@ away), in order in which they will likely be done: | |||
127 | + active reply route caching design & implementation of service, | 44 | + active reply route caching design & implementation of service, |
128 | gap extension! | 45 | gap extension! |
129 | - gnunet-publish cannot be aborted using CTRL-C | 46 | - gnunet-publish cannot be aborted using CTRL-C |
130 | - gnunet-publish segfaults if file does not exist | ||
131 | - on some systems, keyword search does not find locally published content | 47 | - on some systems, keyword search does not find locally published content |
132 | (need testcase of command-line tools!) | 48 | (need testcase of command-line tools!) |
133 | - 2-peer download is still too slow (why?) | 49 | - 2-peer download is still too slow (why?) |
134 | * Module features to implement: | ||
135 | - advanced FS API parts | 50 | - advanced FS API parts |
136 | + namespaces: fundamental namespace API | 51 | + namespaces: fundamental namespace API |
137 | + search: SBlocks, KSBlocks, probes, notify FS-service of known results | 52 | + search: SBlocks, KSBlocks, probes, notify FS-service of known results |
138 | + collection | 53 | + collection |
139 | + location URIs (publish, search, download) | 54 | + location URIs (publish, search, download) |
140 | + persistence support (publish, unindex, search, download) | ||
141 | + indexing: index-failure-cleanup | 55 | + indexing: index-failure-cleanup |
142 | + download: management/bounding of parallel downloads (for recursive dl.) | 56 | + download: management/bounding of parallel downloads (for recursive dl.) |
143 | + datastore reservation (publishing) | 57 | + datastore reservation (publishing) |
@@ -147,8 +61,7 @@ away), in order in which they will likely be done: | |||
147 | + gnunet-download (many options) | 61 | + gnunet-download (many options) |
148 | + gnunet-directory (man page, options) | 62 | + gnunet-directory (man page, options) |
149 | + gnunet-pseudonym (all of it) | 63 | + gnunet-pseudonym (all of it) |
150 | + gnunet-service-fs (remove failing on-demand blocks, stats, hot-path routing, load-based routing, nitpicks) | 64 | + gnunet-service-fs (remove failing on-demand blocks, hot-path routing, load-based routing, nitpicks) |
151 | + datastore: do active migration support here? | ||
152 | - implement adv. FS testcases | 65 | - implement adv. FS testcases |
153 | + getopt API | 66 | + getopt API |
154 | + insert: sblocks, loc uris | 67 | + insert: sblocks, loc uris |
@@ -156,30 +69,20 @@ away), in order in which they will likely be done: | |||
156 | + search: sblocks, skblocks, loc uris | 69 | + search: sblocks, skblocks, loc uris |
157 | + namespaces | 70 | + namespaces |
158 | + collection | 71 | + collection |
159 | - implement FS performance tests (needs TESTING) | 72 | - implement FS performance tests |
160 | + insert | 73 | + insert |
161 | + download | 74 | + download |
162 | + search | 75 | + search |
163 | + unindex | 76 | + unindex |
164 | - non-anonymous FS service (needs DHT) | 77 | - [./fs/gnunet-service-fs.c:208]: (style) struct or union member 'LocalGetContext::results_bf_size' is never used |
165 | + basic DHT integration | 78 | - [./fs/gnunet-service-fs.c:501]: (style) struct or union member 'PendingRequest::used_pids_size' is never used |
166 | + CS-DHT-functions (DHT-put of LOC) | 79 | - [./fs/gnunet-service-fs.c:654]: (style) struct or union member 'ConnectedPeer::last_client_replies' is never used |
167 | + P2P-functions (DHT-get) | 80 | - [./fs/gnunet-service-fs.c:669]: (style) struct or union member 'ConnectedPeer::avg_delay' is never used |
168 | - setup (RC-pre0) | 81 | - [./fs/gnunet-service-fs.c:675]: (style) struct or union member 'ConnectedPeer::avg_priority' is never used |
169 | + default generation | 82 | - [./fs/gnunet-service-fs.c:688]: (style) struct or union member 'ConnectedPeer::pending_requests' is never used |
170 | + need to settle basic design; do we want to keep guile? | 83 | - [./fs/gnunet-service-fs.c:694]: (style) struct or union member 'ConnectedPeer::last_p2p_replies_woff' is never used |
171 | - testing (RC-pre0) | 84 | - [./fs/gnunet-service-fs.c:700]: (style) struct or union member 'ConnectedPeer::last_client_replies_woff' is never used |
172 | + modify configuration to allow controlling connections for non-local starts | 85 | |
173 | + testbed creation with topology (needs working F2F topology) [Nate] | ||
174 | + testbed with churn [Nate] | ||
175 | + implement library for distributed testing [Nate] | ||
176 | + implement testcases for distributed testing [Nate] | ||
177 | + test basic peer re-configure [Nate] | ||
178 | + test topology creation [Nate] | ||
179 | + test churn generation [Nate] | ||
180 | * TESTING: | ||
181 | - consider changing API for peer-group termination to | ||
182 | call continuation when done | ||
183 | * WWW: | 86 | * WWW: |
184 | - Get IPv6 hooked up | 87 | - Get IPv6 hooked up |
185 | - change DNS | 88 | - change DNS |
@@ -203,6 +106,53 @@ away), in order in which they will likely be done: | |||
203 | * HOSTLIST: | 106 | * HOSTLIST: |
204 | - 'server' uses 'GNUNET_PEERINFO_iterate', should probably switch to notification API | 107 | - 'server' uses 'GNUNET_PEERINFO_iterate', should probably switch to notification API |
205 | (for more instant / up-to-date hostlists at lower cost) [OPTIMIZATION] | 108 | (for more instant / up-to-date hostlists at lower cost) [OPTIMIZATION] |
109 | * STATISTICS: | ||
110 | - does not seem to work with timeouts (especially if service is not running) | ||
111 | * UTIL: | ||
112 | - trust: need *fast* way to check/update trust in peers | ||
113 | (async peerinfo would not be right) | ||
114 | - scheduler should change OS process priority based on task priority; | ||
115 | should make better use of task priorities in general | ||
116 | - only connect() sockets that are ready (select()) [Nils] | ||
117 | [On W32, we need to select after calling socket before | ||
118 | doing connect etc.] | ||
119 | * DATACACHE: | ||
120 | - add stats (# bytes available, # bytes used, # PUTs, # GETs, # GETs satisfied) | ||
121 | * FS: | ||
122 | - persistence support (publish, unindex, search, download) | ||
123 | - non-anonymous FS service (needs DHT) | ||
124 | + basic DHT integration | ||
125 | + CS-DHT-functions (DHT-put of LOC) | ||
126 | + P2P-functions (DHT-get) | ||
127 | - active migration support (in fs or in datastore?) | ||
128 | * TOPOLOGY: | ||
129 | - needs more testing (especially F2F topology) | ||
130 | - needs to re-try connecting after disconnect (currently, it | ||
131 | initially triggers a connection request, but if that connection | ||
132 | fails / goes down, it does not retry in a timely fashion; | ||
133 | cause seems to be the 'blacklist_after_attempt' being set to 1h, | ||
134 | which is rather long -- and should probably be adjusted based on | ||
135 | the number of connections / known peers) | ||
136 | - If the topology daemon crashes, peers that were put on the | ||
137 | blacklist with transport will never be removed from it (until | ||
138 | transport service dies); we should use the blacklist notification | ||
139 | API to learn about the exact set of blacklisted peers at all times | ||
140 | (FIXME: the transport_api implementation of blacklisting | ||
141 | also does not work nicely for this since it won't let us know about | ||
142 | disconnect-reconnect events and the implicit whitelisting | ||
143 | that might happen here; that's not so bad since we will | ||
144 | re-blacklist on pre-connect attempts anyway, so this is | ||
145 | a minor issue). | ||
146 | - the code uses the term 'blacklist' for both peers that are forbidden | ||
147 | to connect (i.e. F2F mode) as well as peers that we currently | ||
148 | won't try to actively connect to ourselves (since we just tried); | ||
149 | This is confusing. We need two distinct terms. | ||
150 | - move code to use hash table instead of linked list | ||
151 | - instead of periodically discarding blacklisted entries, | ||
152 | simply add task that is triggered at the right time (earlier free, | ||
153 | more balanced load) | ||
154 | - check if new HELLO learned is different from old HELLO | ||
155 | before resetting entire state! | ||
206 | 156 | ||
207 | 0.9.0pre2: | 157 | 0.9.0pre2: |
208 | * Module features to implement: | 158 | * Module features to implement: |
@@ -220,12 +170,33 @@ away), in order in which they will likely be done: | |||
220 | + Fragmentation library | 170 | + Fragmentation library |
221 | + actual plugin | 171 | + actual plugin |
222 | - HTTP backend (RC-pre2) | 172 | - HTTP backend (RC-pre2) |
173 | * ARM: | ||
174 | - need to get rid of synchronous API for service starts (cause all kinds of problems) | ||
175 | [=> eliminate for need to tell ARM about service starts most of the time!] [Safey] | ||
176 | - better tracking of which config changes actually need to cause process restarts by ARM. | ||
177 | - listen for requests to discover dependencies between services (and avoid | ||
178 | having to explicitly program start requests) | ||
179 | - better crash management (attach debugging support, capture and analyze | ||
180 | debug output, detect random vs. deterministic crashes) | ||
181 | - shutdown sequence? | ||
182 | |||
223 | 183 | ||
224 | 0.9.0pre3: | 184 | 0.9.0pre3: |
225 | * GUIs to implement: | 185 | * GUIs to implement: |
226 | - qt (RC-pre3) | 186 | - qt (RC-pre3) |
227 | + see discussions @ FISL about integration with event loop! | 187 | + see discussions @ FISL about integration with event loop! |
228 | * Determine RC bugs and fix those! | 188 | * Determine RC bugs and fix those! |
189 | * TESTING: | ||
190 | - modify configuration to allow controlling connections for non-local starts | ||
191 | - testbed creation with topology (needs working F2F topology) [Nate] | ||
192 | - testbed with churn [Nate] | ||
193 | - implement testcases for distributed testing [Nate] | ||
194 | - test basic peer re-configure [Nate] | ||
195 | - test topology creation [Nate] | ||
196 | - test churn generation [Nate] | ||
197 | - consider changing API for peer-group termination to | ||
198 | call continuation when done | ||
199 | |||
229 | 200 | ||
230 | 0.9.0: | 201 | 0.9.0: |
231 | * Documentation | 202 | * Documentation |
@@ -253,14 +224,33 @@ away), in order in which they will likely be done: | |||
253 | 224 | ||
254 | 225 | ||
255 | 0.9.x: | 226 | 0.9.x: |
256 | * Plugins to implement: | 227 | * TRANSPORT: |
257 | - SMTP transport backend | 228 | - SMTP transport backend |
258 | - HTTPS transport backend | 229 | - HTTPS transport backend |
259 | + improved HTTPS support in MHD | 230 | + improved HTTPS support in MHD |
260 | + actual plugin | 231 | + actual plugin |
261 | * Remove KBlocks in gnunet-unindex (see discussion with Kenneth Almquist on gnunet-devs in 9/2009) | 232 | - Implement method of learning our external addresses from |
262 | * Allow checking of presence of search results and/or content via command-line tools | 233 | other peers; need some kind of threshold-based |
263 | (add options to gnunet-search / gnunet-download to limit search to local peer) | 234 | scheme, limiting both the total number of addresses that we accept |
235 | this way as well as requiring multiple confirmations; also, we | ||
236 | should possibly try to confirm that the given address works for | ||
237 | us ourselves (loopback-style) before adding it to the list | ||
238 | + we may be able to simplify WELCOME messages (no need to add | ||
239 | addresses there anymore, but may help to learn them there anyway...). | ||
240 | + we probably want some kind of voting/counting for learning IP addresses | ||
241 | (maybe including IP addresses in ads proportional to how often others | ||
242 | report them? we at least need some protection against >64k HELLOs!), | ||
243 | + provide a way to give the user a list of "learned" IP addresses and | ||
244 | a way to easily "veto" addresses off the list! | ||
245 | => If MiM attacker uses vetoed address, blacklist the specific IP for | ||
246 | the presumed neighbour! | ||
247 | - implement gnunet-transport (transport configurator / tester) | ||
248 | - UPnP-based IP detection | ||
249 | (Note: build library always, build service when libxml2/etc. are available) | ||
250 | * FS: | ||
251 | - Remove KBlocks in gnunet-unindex (see discussion with Kenneth Almquist on gnunet-devs in 9/2009) | ||
252 | - Allow checking of presence of search results and/or content via command-line tools | ||
253 | (add options to gnunet-search / gnunet-download to limit search to local peer) | ||
264 | * STATISTICS: | 254 | * STATISTICS: |
265 | - should use BIO instead of mmap | 255 | - should use BIO instead of mmap |
266 | * PEERINFO: | 256 | * PEERINFO: |