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>