Annotation of embedaddon/pimd/TODO.org, revision 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>