126 lines
4.5 KiB
Plaintext
126 lines
4.5 KiB
Plaintext
|
KAME Id: BUGS.TODO,v 1.1.1.1 1999/08/08 23:30:57 itojun Exp
|
||
|
|
||
|
THIS LIST IS FAR AWAY FROM BEING COMPLETE, so these are the few things
|
||
|
that came up at the right moment to be written down.
|
||
|
|
||
|
* Experimental kernel MFC (*,G) related:
|
||
|
If the (S,G) iif or oifs are different from the (*,G) or (*,*,RP)
|
||
|
iifs/oifs, the resp. (*,G) or (*,*,RP) will delete and disallow
|
||
|
creating (*,G) MFC. Only after all MRT (S,G) are deleted, the
|
||
|
corresponding (*,G) or (*,*,RP) will create (*,G) MFC.
|
||
|
|
||
|
* Experimental kernel MFC (*,G) related:
|
||
|
Right now when the MFC (*,G) total datarate is above the SPT switch
|
||
|
threshold, the (*,G) MFC will be deleted, and any further cache miss
|
||
|
will result in (S,G) MFC (the problem is that we must do (S,G)
|
||
|
monitoring for eventually high datagate sources). Only after all
|
||
|
(S,G) MFCs expire, the daemon's MRT will stop creating (S,G) MFCs
|
||
|
(i.e. the next cache miss will result in (*,G) kernel MFC).
|
||
|
A better selection should be applied to sort out the higher
|
||
|
datarate sources, and at the same time to have (*,G)MFC as well.
|
||
|
For example, create few (S,G), and after that create the (*,G). If some
|
||
|
of the created (S,G) MFC entries have very low datarate, delete them.
|
||
|
|
||
|
* Use NetBSD's definition for IPADDR (netinet/in.h):
|
||
|
#ifdef _KERNEL
|
||
|
#define __IPADDR(x) ((u_int32_t) htonl((u_int32_t)(x)))
|
||
|
#else
|
||
|
#define __IPADDR(x) ((u_int32_t)(x))
|
||
|
#endif
|
||
|
|
||
|
|
||
|
* The (S,G)RPbit in the DR for the sender and the (S,G)SPT in the
|
||
|
downstream router won't timeout and will refresh each other even
|
||
|
if the sender is not active:
|
||
|
|
||
|
S--DR-----------------R1------------RP
|
||
|
(S,G)RPbit (S,G)
|
||
|
iif toward S
|
||
|
|
||
|
* Check whether the kernel code sends CACHE_MISS and WRONG_IIF for
|
||
|
the LAN-scoped addresses
|
||
|
|
||
|
* If the RP for a group changes, the DR should cancel any PIM-register-stop
|
||
|
timers (XXX: not in the spec, but should be there)
|
||
|
|
||
|
* If a new interface is configured, include it automatically
|
||
|
|
||
|
* Don't create routing entries for local link scoped groups
|
||
|
|
||
|
* Implement adm. scoped filters
|
||
|
|
||
|
* Do precise check of the timer events to speed up the propagation of the
|
||
|
Cand-RP messages + Cand-BSR messages and the election of the BSR.
|
||
|
|
||
|
* Fix the bug for messing up the things when the receiver is on the
|
||
|
same host as the RP for the multicast group (probably was fixed with alpha6,
|
||
|
because I cannot reproduce it anymore)
|
||
|
|
||
|
* Do more precise error check for the received PIM messages. In most cases,
|
||
|
the whole message must be parsed completely before starting processing it.
|
||
|
|
||
|
* Clean up the debugging messages.
|
||
|
|
||
|
* Use Patricia tree to search the routing table
|
||
|
(There is a nice paper in Sigcomm '97 about fast routing tables
|
||
|
implementation, so need to check it as well)
|
||
|
|
||
|
* Do switch back to the Shared Tree by timing out the SPT if the rate
|
||
|
is too low (not in the spec, but Ahmed pointed out some complications if
|
||
|
this happens)
|
||
|
|
||
|
* Change all countdown timers to events timeout (callout.c)
|
||
|
(The current implementation is very unefficient if the routing table becomes
|
||
|
very large)
|
||
|
|
||
|
* Send immediately Join/Prune, instead of relying of Join/Prune timer = 0
|
||
|
|
||
|
* Fix the code allowing interface UP/DOWN without restarting pimd.
|
||
|
|
||
|
* Do more testings for SPT switch, Join/Prune, asserts, etc...
|
||
|
|
||
|
* Test the (*,*,RP) code (need PIM/DVMRP border router to do so)
|
||
|
|
||
|
* Test the RSRR (RSVP support) code
|
||
|
|
||
|
* Send Initial_Reply RSRR message if the interfaces detected by pimd change
|
||
|
|
||
|
* SNMP support
|
||
|
|
||
|
===TODO by function name===
|
||
|
igmp_proto.c:
|
||
|
* accept_group_report():
|
||
|
- add a leaf if DR or forwarder (currently only if DR)???
|
||
|
* accept_leave_message():
|
||
|
- send immediately PIM prune message if the last member has left
|
||
|
|
||
|
main.c
|
||
|
* main():
|
||
|
- use a combination of time and hostid to initialize the random generator.
|
||
|
* restart():
|
||
|
- check the implementation
|
||
|
|
||
|
pim_proto.c
|
||
|
* pim_register():
|
||
|
- IF THE BORDER BIT IS SET, THEN FORWARD THE WHOLE PACKET FROM USER SPACE
|
||
|
AND AT THE SAME TIME IGNORE ANY CACHE_MISS SIGNALS FROM THE KERNEL.
|
||
|
* register_stop():
|
||
|
- REGISTER_STOP rate limiting
|
||
|
|
||
|
route.c
|
||
|
* process_cache_miss()
|
||
|
- use negative cache.
|
||
|
|
||
|
rp.c
|
||
|
* add_rp_grp_entry():
|
||
|
- FIX THE BUG when adding an RP for different prefix requires remapping
|
||
|
for some groups!!!
|
||
|
(Intentionally left, waiting to come up with an idea how to implement
|
||
|
it simple and efficient. If you configure all RPs to advertise the
|
||
|
same prefix, the bug won't "show up")
|
||
|
|
||
|
================DONE=====================
|
||
|
|
||
|
* When receive PIM_REGISTER, check whether I am the chosen RP
|
||
|
|