Annotation of embedaddon/pimd/TODO.org, revision 1.1.1.1

1.1       misho       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>