1: TODO List -*-org-*-
2:
3: THIS LIST IS FAR AWAY FROM BEING COMPLETE, so these are the few things
4: that came up at the right moment to be written down.
5:
6: * Random issues:
7: ** Run the code checker sparse harder on the code: CC=cgcc make
8:
9: ** Start work on ironing out a TODO list for RFC 4601 compliancy.
10:
11: ** Look into updates RFC 5059 and RFC 5796
12:
13: ** Test again on Debian GNU/kFreeBSD. Atm it lacks netinet/pim.h, but
14: it should be possible to run the default config on it, probing the
15: __FreeBSD_kernel__ and doing the right thing.
16:
17: ** Check Kame's pim6sd old sources for relevant fixes.
18: http://www.kame.net/dev/cvsweb2.cgi/kame/kame/kame/pim6sd/Attic/
19:
20: ** Import Kame's pim6sd cfparse.[yl] config file parser reimplemented
21: in lex & yacc, like mrouted does.
22:
23: ** DONE When receive PIM_REGISTER, check whether I am the chosen RP
24:
25:
26: ** Install negative cache in kernel for non-frequently requested groups.
27:
28: ** The code should use the _PIM_VT handling of the 'struct pim'
29:
30: ** Check 2.10 from the spec "Unicast Routing Changes", and verify
31: that it is properly implemented
32:
33: ** <masklen> in pimd.conf should be mandatory, instead of relaying
34: of its default value (16)
35:
36: ** Candidate RP priority configuration in pimd.conf should be per
37: prefix, instead of a single priority for the whole RP.
38:
39: ** Check whether Asserts received on the iif are really evaluated
40: by using the metrics of other asserts received on that iif, or
41: the comparison uses the local metric and preference info (it must
42: be the former!).
43:
44: ** Experimental kernel MFC (*,G) related:
45: If the (S,G) iif or oifs are different from the (*,G) or (*,*,RP)
46: iifs/oifs, the resp. (*,G) or (*,*,RP) will delete and disallow
47: creating (*,G) MFC. Only after all MRT (S,G) are deleted, the
48: corresponding (*,G) or (*,*,RP) will create (*,G) MFC.
49:
50: ** Experimental kernel MFC (*,G) related:
51: Right now when the MFC (*,G) total datarate is above the SPT switch
52: threshold, the (*,G) MFC will be deleted, and any further cache miss
53: will result in (S,G) MFC (the problem is that we must do (S,G)
54: monitoring for eventually high datagate sources). Only after all
55: (S,G) MFCs expire, the daemon's MRT will stop creating (S,G) MFCs
56: (i.e. the next cache miss will result in (*,G) kernel MFC).
57: A better selection should be applied to sort out the higher
58: datarate sources, and at the same time to have (*,G)MFC as well.
59: For example, create few (S,G), and after that create the (*,G). If some
60: of the created (S,G) MFC entries have very low datarate, delete them.
61:
62: ** Use NetBSD's definition for IPADDR (netinet/in.h):
63: #ifdef _KERNEL
64: #define __IPADDR(x) ((u_int32_t) htonl((u_int32_t)(x)))
65: #else
66: #define __IPADDR(x) ((u_int32_t)(x))
67: #endif
68:
69:
70: ** The (S,G)RPbit in the DR for the sender and the (S,G)SPT in the
71: downstream router won't timeout and will refresh each other even
72: if the sender is not active:
73:
74: S--DR-----------------R1------------RP
75: (S,G)RPbit (S,G)
76: iif toward S
77:
78: ** Check whether the kernel code sends CACHE_MISS and WRONG_IIF for
79: the LAN-scoped addresses
80:
81: ** If the RP for a group changes, the DR should cancel any PIM-register-stop
82: timers (XXX: not in the spec, but should be there)
83:
84: ** If a new interface is configured, include it automatically
85:
86: ** Don't create routing entries for local link scoped groups
87:
88: ** Implement adm. scoped filters
89:
90: ** Do precise check of the timer events to speed up the propagation of the
91: Cand-RP messages + Cand-BSR messages and the election of the BSR.
92:
93: ** Fix the bug for messing up the things when the receiver is on the
94: same host as the RP for the multicast group (probably was fixed with alpha6,
95: because I cannot reproduce it anymore)
96:
97: ** Do more precise error check for the received PIM messages. In most cases,
98: the whole message must be parsed completely before starting processing it.
99:
100: ** Clean up the debugging messages.
101:
102: ** Use Patricia tree to search the routing table
103: (There is a nice paper in Sigcomm '97 about fast routing tables
104: implementation, so need to check it as well)
105:
106: ** Do switch back to the Shared Tree by timing out the SPT if the rate
107: is too low (not in the spec, but Ahmed pointed out some complications if
108: this happens)
109:
110: ** Change all countdown timers to events timeout (callout.c)
111: (The current implementation is very unefficient if the routing table becomes
112: very large)
113:
114: ** Send immediately Join/Prune, instead of relying of Join/Prune timer = 0
115:
116: ** Fix the code allowing interface UP/DOWN without restarting pimd.
117:
118: ** Do more testings for SPT switch, Join/Prune, asserts, etc...
119:
120: ** Test the (*,*,RP) code (need PIM/DVMRP border router to do so)
121:
122: ** Test the RSRR (RSVP support) code
123:
124: ** Send Initial_Reply RSRR message if the interfaces detected by pimd change
125:
126: ** SNMP support, RFC2934
127:
128: * Issues by function name:
129: ** igmp_proto.c:
130: - accept_group_report():
131: * add a leaf if DR or forwarder (currently only if DR)???
132: - accept_leave_message():
133: * send immediately PIM prune message if the last member has left
134:
135: ** main.c
136: - main():
137: * use a combination of time and hostid to initialize the random generator.
138: - restart():
139: * check the implementation
140:
141: ** pim_proto.c
142: - pim_register():
143: * IF THE BORDER BIT IS SET, THEN FORWARD THE WHOLE PACKET FROM USER SPACE
144: AND AT THE SAME TIME IGNORE ANY CACHE_MISS SIGNALS FROM THE KERNEL.
145: - register_stop():
146: * REGISTER_STOP rate limiting
147:
148: ** route.c
149: - process_cache_miss()
150: * use negative cache.
151:
152: ** rp.c
153: - add_rp_grp_entry():
154: * FIX THE BUG when adding an RP for different prefix requires remapping
155: for some groups!!! (Intentionally left, waiting to come up with an idea
156: how to implement it simple and efficient. If you configure all RPs to
157: advertise the same prefix, the bug won't "show up")
158:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>