File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / pimd / TODO.org
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jun 12 07:59:37 2017 UTC (6 years, 11 months ago) by misho
Branches: pimd, MAIN
CVS tags: v2_3_2, HEAD
pimd 2.3.2

    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>