-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathTODO
311 lines (271 loc) · 14.6 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
Dibbler code TODO
-------------------
Travis build fails, because the ubuntu 12.04 images install libgtest-dev.
dibbler doesn't handle this packet too well, as it's sources only.
Note: This is a scratchpad. It just happens to be available with the
rest of the code.
- remove TClntOptStatusCode, TClntOptIAAddress
- must include *.l *.y files in dist
- Check if client message retransmissions have proper digests.
Subnet support:
- rcv: clean up SrvIfaceMgr::decodeRelayForw()
- remove getUnderlaying(), getOverlaying() (WTF???)
- snd: Fix TSrvMsg::send() (sending responses)
- remove adding relays to IfaceMgr (WTF is that???)
- move TSrvIfaceIface::getRelayByInterface() -> TSrvIfaceMgr
- SrvCfgMgr wrong subnet print format to server-CfgMgr.xml
- TSrvIfaceMgr::decodeMsg(SPtr<TSrvIfaceIface> -> SPtr<TSrvCfgIface>, ...)
(or even better -> int ifindex,...)
- Implement tests in tests/Srv/ for SrvIfaceMgr::decodeRelayForw()
- modify send() to use SrvMsg::getPhysicalInterface()
- remove the need to specify physical underlying interfaces in config
Important:
- Implement 8 step lease assignment algorithm (done for IA_NA, todo for IA_PD)
- Implement support for fixed leases: (see dibbler-devel-06-arch 6.6.2)
- Srv: Implement access control for PD
- Expressions (options, client-id, ...)
- DNS Update(delete) after expiration
- Common option parsing
========= Authentication ========
- implement authentication option: framework for multiple auth protocols (done)
- 2 protocols defined in 3315, 3rd done by Kowalczuk (3 total)
- at most one auth option incluended
- unit-tests for client
- unit-tests for server
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_AUTH | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| protocol | algorithm | RDM | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
| replay detection (64 bits) +-+-+-+-+-+-+-+-+
| | auth-info |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
. authentication information .
. (variable length) .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
RDM = 0 => monotonically increasing counter
(must be supported by all protocols)
Delayed auth protocol
protocol = 2, delayed auth mechanism.
algorithm
1 = hmac-md5
- Client and server preconfigured with keys
-client requests auth in solicit
-srv includes auth in advertise
-contains nonce value generate by the source as a message auth code (MAC)
HMAC-MD5 is used
Refactor:
- remove Msg* in TOpt
- remove many SrvOpt and ClntOpt classes
- rename TSrvOptTA to TSrvOptIA_TA
MUST-FIX before 0.9.0:
- once exceptions are read, remove corresponding addrs from cache. Otherwise cached
client may get an address that is reserved for someone else.
tentative plans for 0.9.0:
- DNS Updates: UDP support [DONE]
- add cppcheck to make devel
- DNS Updates: DHC ID record (RFC4701)
- DNS Updates: conflict resolution (RFC4703)
- DNS Updates: security (TSIG)
- Support for subscriber-id (bug 209)
- Support for storing remote-id, subscriber-id in server-cache.xml
- Reconfigure
- BSD support [done]
- Routing configuration [done]
- Universal system for handling new (custom) options
1.0.0
- Received options are stored in /var/lib/dibbler/option-{option-name}.
This MUST be done for ALL options. Also, it MUST add interface name
to those file names.
- Implement support for SNTP option (RFC4075 replacement)
- remaining RFC3315 features (M,O bits)
- Bulk Leasequery
- Fix references in User's guide
- Describe MOD_REMOTE_AUTOCONF Remote autoconf extension in Developer's Guide
- Describe MOD_CLNT_CONFIRM in Developer's Guide
- Add examples for ds-lite, custom options and remote-autoconf
- Mac OS: configure DNS and domain properly (used mDNSresponder or Bonjour APIs)
- Mac OS: create dmg package for easier installation
- accept "option domain-name" besides "option domain"
- RFC3315, 9.1 duid length is no longer than 128 octets
- Add sanity length checks in Options constructors
- Remove setDUID() method from TOpt()
- Implement support for Client vendor class options
- Fix: Elapsed time should be specified with 10ms granulation.
- Cleanup: Migrated to STL. Remove Container.h and replace it with <list>
- CLI: AUTH: set ClntCfgIface->getKeyGenerationState() somewhere
- SRV: PD: prefixes are not removed from db if valid goes to 0.
- CLI: PD: radvd.conf is invalid if there were more than one prefix added to the same interface
- CLI: Implement client side prefix delegation hints. It must be possible to define,
what prefix(es) client will send as hints.
- SRV: Prefixes stored in server's AddrMgr for too long (i.e. after its valid lifetime
has expired) should be removed from the server's database (see SrvAddrMgr::doDuties())
- CLI: When server is not configured to support PD and client requests PD,
server sends PD with status code set to NOADDRSAVAIL (that is ok). However,
client should complain about it (and maybe try to do something with it).
Right now it prints information that "PD set successfully."
- ALL: Migrate SPtr -> SPtr, TIPv6Addr -> TAddr
- ALL: Make TAddrAddr a derived class from TAddr
- CLI: Remember last assigned address.
- DOC: Add "Static reservation" section to User's Guide (describe white-list and cache-function)
- CLI/BUG: when FQDN is assigned, client performs update first, then verifies tentative status.
It should be done in reverse order.
- SRV: When client does not send RELEASE (crash, went out of range), server does not perform FQDN delete.
- When server shuts down, it does not perform FQDN delete.
- SRV/CLI: TransMgr->dump() should be implemented.
- CLI: Clnt requests for Address and options (receives both and lifetime option). It should send renew only if T1<lifetime
and renew and inf-request if T1>lifetime.
- REL: 20. RFC3315: If the relay agent has not been explicitly configured, it MUST use the All_DHCP_Servers multicast address as the default.
- CLI: setting up a domain: echo homenetwork > /etc/dnsdomainname
- check server's behavior: there isn't any addrs left, and srv receives SOLICIT.
Does PREFERENCE have normal value (e.g. not faulty 255, check
tex/test09/10th packet)
- When client receives NO-ADDR AVAILABLE, it simultaneusly: starts SOLICIT transaction, sends REQUEST to
next server on backup list.
- test11: reply contains empty IA with 2 STATUS CODE options: 1. unspecfail (1) + description "no such IA"
2. ok (!!!) [This entry is so old and lots of the code has been rewritten since. Is it still valid bug?]
- CLI: client's answers are generated by answer(...) method, whereas server's answers
are generated in the relayMsg method by differents constructors of the same message.
Shouldn't it be better to make it homogeneous ? I don't have any preference :)
- CLI: ClntIfaceMgr: remove ugly sleep(3) instruction.
- CLI: Server ADVERTISE evaluations. There should be some kind of ranking
system, which checks that IAs, TAs and PDs were provided. And
options too.
- SRV/CLI: Suboptions parsing. It's done in lots of places, but should be done
in one. e.g. TSrvOptIA_NA, TClntOptIA_NA, TClntOptTA, TSrvOptTA constructors.
- SRV: {Server|Client}Identifier is added in numerous places in SrvOpt*.cpp. It should be added
in TSrvMsg::appendRequestedOptions()
- SRV: How many addrs can be assigned to the client? Implement counter in the TAddrClient class.
- TEST: Implement test environment [Megatask]
Dibbler BUGS
--------------
- When RELEASEing PDs, there's a warning about second attempt to remove PD from AddrMgr.
- Remove msg cache from server.
- Add GetCfgMgr, GetAddrMgr, GetTransMgr, GetIfaceMgr singletons
Philly bakeoff BUGS/OBSERVATIONS
----------------------------------
1. There are 2 servers, one of them responds with IA/NOADDRSAVAIL, second responds fine.
Client sends REQUEST and gets address configured. BUG: It also sends another SOLICIT.
2. Several RELEASEs from Richard, sending REPLYies.
3. HP-UX server sends address with valid-lifetime set to 0. Client adds and removes address immediately,
then waits 30 seconds for RENEW. Dibbler client tries to RENEW and crash.
4. Client stateless. Insist mode implemented. [done]
5. Client gets confused when after RENEW, server sends NO-BINDING. The address eventually expires
and client sleeps for 0xffffffff seconds.
6. Make (INFORMATION_REFRESH_TIME configurable).
7. Dibbler client asks for TA, dibbler server provides it. Client accepts, adds address, but for some
reason it sends SOLICIT.
8. Leasequery: (Discussion with Bernie) Asking about address from the pool, but not assigned, should
return empty (without LQ Client option) response. Asking about address outside of the pool should
report not-configured (that works ok right now).
9. Add configuration to send InfRefreshTime in stateless-mode
Vancouver bakeoff BUGS/OBSERVATIONS
-------------------------------------
+ Windows client tested.
1. Zero padding in DUID parsing (e.g. in requestor cmd-line, but the TDUID constructor is messed up)
is wrong: 0:1:2:3:4:5 parsed as: 012345
2. Cli gets addr from SRV1, SRV1 goes down, CLI rebinds to SRV2 and gets addr from it.
CLI sends renew for both addrs: the one it got from SRV1 and
SRV2. [nobug. That is proper behavior. First address is still valid.]
3. Client does not request for a UNICAST option (does not send the ORO with unicast). [done]
4. Unicast over 2 relays does not work. Cli send Solicit, Srv sends ADV, CLI send REQ using unicast address,
but that REQ is not seen by the SRV.
5. CLI should send REQ to multicast (because it does not have address with sufficient scope). [done]
6. CLI gets addr from SRV, SRV goes down and up, SRV ignores RENEW, then goes REBIND,
and then goes for RENEW. (should go SOLICIT)
7. SRV configured to pref: 60 valid: 120, CLI asks for 7200/10800 and SRV grants 7200/10800.
(CLI behind double relay, looks like messing pools, i.e. using pool
on the eth0, not relay2 interface). [rootcause: server misconfiguration]
8. SRV: LeaseQuery (by address) about PD should check if the address is contained within the prefix.
9. Implement insist-mode off in stateless autoconf.
10. Windows client does not set DNS server in the stateless mode.
11. DAD does not work on Windows.
12. FQDN does not start if rapid-commit is used.
13. No log created (no directory) silently omitted.
New tasks should be added to the TODO list. After task is implemented, it should be moved to the
'DONE/Not Validated' list. After confirmation that it is working properly, it can be removed completely.
- CLI: link-change detection: part of the log file.
kernel: ADDRCONF(NETDEV_UP): eth1: link is not ready
kernel: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
DONE/Not validated
--------------------
- CLI: PD: this should be possible "iface eth0 { pd { prefix 2000::/64 } }"
- CLI: PD: this should be possible "iface eth0 { pd { prefix prefix } }"
- CLI: Win32: prefix delegation low-level support is not implemented.
- CLI: PD: prefixes are not removed if valid goes to 0.
- CLI: PD: Rebind attempt segfaults
- CLI: PD: this cfg: "iface eth0 { pd }" does not work
- CLI: PD: this should be possible "iface eth0 { pd pd }"
- CLI: PD: RENEW does not work
- SRV: Prefix hint analysis. (client support for hints is required)
- SRV: Perform DNS Update delete, when RELEASE is sent (SrvMsgReply.cpp:387)
- CLI: Perform DNS Update delete, when RELEASE is sent (ClntMsgRelease.cpp:102)
- CLI/BUG: domain format in /etc/resolv.conf must be fixed
DONE
------
- ALL: Fix linux low-level interface (don't use PKTINFO anymore).
- CLI: Elapsed time is not recalculated when SOLICIT is resent
- SRV/REL: Support InterfaceID option with length other than 4
- Feature: Add support for admin configured options both on server and client as well.
- Fix (easy): run unicast server, run client, cli gets single addr, restart server, restart client,
srv will send NoAddrsAvail.
- CLI: Linux: prefixes should be moved to Port-linux.
- DOC: Describe dumping XML files, option files
- SRV: Crashes when not configured to support prefix-delegation, but client sends pd option.
- DOC: Describe strict-rfc-no-routing on the client side
- CLI/BUG: option fqdn - does not work, option fqdn some.name.com must be used in client.conf file
- SRV: Add cache. SrvAddrMgr - cachedLst.
- SRV: Add to SrvParser options: cache-size
- SRV: Store cache on disk. Read cache during startup.
- SRV/CLI: Implement vendor-class support.
- CLI: Add address with /64 prefix, add option to ClntParser strict-rfc-no-routing
to disable this.
BUGS
------
See http://klub.com.pl/bugzilla/
DRAFTS & RFCs
---------------
Netboot: https://datatracker.ietf.org/doc/draft-ietf-dhc-dhcpv6-opt-netboot/
DS-Lite tunnel: https://datatracker.ietf.org/doc/draft-ietf-softwire-ds-lite-tunnel-option/
REDESIGN IDEAS
----------------
Current hierarchy:
class TClntParsGlobalOpt : public TClntParsIfaceOpt
class TClntParsIfaceOpt : public TClntParsIAOpt
class TClntParsIAOpt : public TClntParsAddrOpt
class TClntParsAddrOpt
ClntCfgMgr
ClntCfgIface
ClntCfgIA
ClntCfgTA
ClntCfgPD
ClntCfgAddr
ClntCfgPrefix
CODE CLEANUP
--------------
- remove void TClntMsg::invalidAllowOptInMsg(int msg, int opt) {
- remove void TClntMsg::invalidAllowOptInOpt(int msg, int parentOpt, int childOpt) {
- rename TClntTransMgr::addAdvertise to addReceivedAdvertise
REMOTE-AUTOCONF
-----------------
- target server uses unicasts
- previous server announces option_REMOTE_AUTOCONF_NEIGHNORS option:
- List of addresses (list of neighboring DHCPv6 servers)
- Client receives list of neighbors
- Client obtains configuration locally
- Client Sends unicast solicit to all dst servers with OPTION_REMOTE_AUTOCONF
- Server responds with ADVERTISE (including OPTION_REMOTE_AUTOCONF)
- Client sends unicast request to dst server wthi OPTION_REMOTE_AUTOCONF
- Server responds with REPLY (including OPTION_REMOTE_AUTOCONF)
- external entities (mip daemon?) are notified
- Client maintains extra information till handover
- After handover, client uses a priori knowledge to configure parameters
instanteously (copy alternative configuration to main configuration)
Client operation:
- Store additional configuration in AddrMgr->Client->IA->alternativeConf
- Add CheckRemoteAutoConf to ClntTransMgr
- Add UseAlternativeIA(copies from alternative IA to "main" IA after HO)
- Modify Reply (if handled IA is remote, then don't call IfaceMgr->addAddr() )