#
# $XORP: xorp/mld6igmp/TODO,v 1.15 2004/06/09 19:02:13 pavlin Exp $
#

* During shutdown, the following code in Mld6igmpNode::final_stop()
  may actually return XORP_ERROR:

    if (! (is_up() || is_pending_up() || is_pending_down()))
        return (XORP_ERROR);
  However, in case of PIM the above check is OK. Find the problem and fix it.

* Implement RFC 3590 "Source Address Selection for the
  Multicast Listener Discovery (MLD) Protocol"

* Implement an MLD/IGMP "proxy" where the Join/Leave messages
  from one interface are forwarded on another interface.
  This may be useful with satellite routers which do support
  IGMP, but do NOT support PIM-SM for example.

* Implement graceful stopping of node and/or a vif. I.e., perform
  protocol-related operations to inform other nodes that
  this node/vif is stopping operations (if there are such operations).

* Add vif manager config similar to PIM.

* Add configuration option to enable checking for Router Alert option
  (NOTE: applies to PIM as well).

* Add Mld6igmpConfig class to Mld6igmpNode.

* Add Mld6igmpNode::pending_down() and Mld6igmpVif::pending_down()
  similar to PIM.

* When a protocol registers with MLD6IGMP, that protocol should try
  periodically the registration if MLD6IGMP has not been started yet
  (applies to PIM as well).
  Similarly, protocols that register with MFEA should retry the
  registration if the MFEA is not UP yet (applies to MLD6IGMP, PIM)

* When adding a protocol (for membership info), the return messages
  should use vif_name instead of vif_index. Also, check that
  in add/delete_protocol, the vif_name and vif_index match.
  Similar match check should be applied for all XRLs in MFEA, MLD6IGMP and PIM

* The "State" in "show igmp interface" should be "Up/Down" instead
  of "UP/DOWN" ?? (for consistency with Juniper??)

* Change all (Foo *)casting to static_cast<>

* Replace all proto_family with family ?
  (in all mcast-related directories)

* Check return error when sending XRLs

* The return XrlCmdError values in mld6igmp_proto_access.hh are probably
  bogus.

* Mld6igmpVif->_proto_flags setting with MLD6IGMP_VIF_QUERIER bitset
  should be done by a member function.

* Initialize/setup mld6igmp_vif::vif_index() and vif_name();

* All the JOIN/PRUNE routing notification should happen when
  MemberQuery is deleted?

* Instead of using Join/Prune in the context of IGMP/MLD6, use
  Join/Leave instead?

* The IGMP spec must say that the Group Address in Membership Report
  and Leave Group messages must be a valid multicast address.

* In mld6igmp_recv(), if the mld6igmp_vif interface is NULL, e.g.
  the interface is not configured, then print a warning or at least a message??
  Currently, the program will crash (XLOG_UNREACHABLE()).

* mld6igmp_recv() should decode the first 4/8 octets and pass
  the rest to igmp_process() and mld6_process()

* Add igmp_api.h

* Create all missing header files, then abstract the common stuff
  between IGMP and MLD6 and put it in those files.
