tech-invite   World Map
3GPP     Specs     Glossaries     UICC       IETF     RFCs     Groups     SIP     ABNFs       T+       Search     Home

RFC 3810

 Errata 
Proposed STD
Pages: 62
Top     in Index     Prev     Next
in Group Index     Prev in Group     Next in Group     Group: MAGMA

Multicast Listener Discovery Version 2 (MLDv2) for IPv6

Part 1 of 3, p. 1 to 13
None       Next RFC Part

Updates:    2710
Updated by:    4604


Top       ToC       Page 1 
Network Working Group                                       R. Vida, Ed.
Request for Comments: 3810                                 L. Costa, Ed.
Updates: 2710                                                       LIP6
Category: Standards Track                                      June 2004


        Multicast Listener Discovery Version 2 (MLDv2) for IPv6

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2004).

Abstract

   This document updates RFC 2710, and it specifies Version 2 of the
   Multicast Listener Discovery Protocol (MLDv2).  MLD is used by an
   IPv6 router to discover the presence of multicast listeners on
   directly attached links, and to discover which multicast addresses
   are of interest to those neighboring nodes.  MLDv2 is designed to be
   interoperable with MLDv1.  MLDv2 adds the ability for a node to
   report interest in listening to packets with a particular multicast
   address only from specific source addresses or from all sources
   except for specific source addresses.

Top       Page 2 
Table of Contents

   1.  Introduction. . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Protocol Overview . . . . . . . . . . . . . . . . . . . . . .   3
   3.  The Service Interface for Requesting IP Multicast Reception .   9
   4.  Multicast Listening State Maintained by Nodes . . . . . . . .  11
   5.  Message Formats . . . . . . . . . . . . . . . . . . . . . . .  13
   6.  Protocol Description for Multicast Address Listeners. . . . .  27
   7.  Protocol Description for Multicast Routers. . . . . . . . . .  34
   8.  Interoperation with MLDv1 . . . . . . . . . . . . . . . . . .  48
   9.  List of Timers, Counters, and their Default Values. . . . . .  51
   10. Security Considerations . . . . . . . . . . . . . . . . . . .  55
   11. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  56
   12. References. . . . . . . . . . . . . . . . . . . . . . . . . .  56
   13. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .  57
   Appendix A. Design Rationale. . . . . . . . . . . . . . . . . . .  58
   Appendix B. Summary of Changes from MLDv1 . . . . . . . . . . . .  59
   Editors' Contact Information. . . . . . . . . . . . . . . . . . .  61
   Authors' Addresses. . . . . . . . . . . . . . . . . . . . . . . .  61
   Full Copyright Statement. . . . . . . . . . . . . . . . . . . . .  62

1.  Introduction

   The Multicast Listener Discovery Protocol (MLD) is used by IPv6
   routers to discover the presence of multicast listeners (i.e., nodes
   that wish to receive multicast packets) on their directly attached
   links, and to discover specifically which multicast addresses are of
   interest to those neighboring nodes.  Note that a multicast router
   may itself be a listener of one or more multicast addresses; in this
   case it performs both the "multicast router part" and the "multicast
   address listener part" of the protocol, to collect the multicast
   listener information needed by its multicast routing protocol on the
   one hand, and to inform itself and other neighboring multicast
   routers of its listening state on the other hand.

   This document specifies Version 2 of MLD.  The previous version of
   MLD is specified in [RFC2710].  In this document we will refer to it
   as MLDv1.  MLDv2 is a translation of the IGMPv3 protocol [RFC3376]
   for IPv6 semantics.

   The MLDv2 protocol, when compared to MLDv1, adds support for "source
   filtering", i.e., the ability for a node to report interest in
   listening to packets *only* from specific source addresses, as
   required to support Source-Specific Multicast [RFC3569], or from *all
   but* specific source addresses, sent to a particular multicast
   address.  MLDv2 is designed to be interoperable with MLDv1.

Top      ToC       Page 3 
   The capitalized key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
   "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   [RFC2119].  Due to the lack of italics, emphasis is indicated herein
   by bracketing a word or phrase in "*" characters.  Furthermore,
   square brackets are used to denote the value of the enclosed
   variable, as opposed to the variable itself, written without
   brackets.

2.  Protocol Overview

   This section gives a brief description of the protocol operation. The
   following sections present the protocol details.

   MLD is an asymmetric protocol; it specifies separate behaviors for
   multicast address listeners (i.e., hosts or routers that listen to
   multicast packets) and multicast routers.  The purpose of MLD is to
   enable each multicast router to learn, for each of its directly
   attached links, which multicast addresses and which sources have
   interested listeners on that link.  The information gathered by MLD
   is provided to whichever multicast routing protocol is used by the
   router, in order to ensure that multicast packets are delivered to
   all links where there are listeners interested in such packets.

   Multicast routers only need to know that *at least one* node on an
   attached link is listening to packets for a particular multicast
   address, from a particular source; a multicast router is not required
   to *individually* keep track of the interests of each neighboring
   node.  (Nevertheless, see Appendix A2 item 1 for discussion.)

   A multicast router performs the *router part* of the MLDv2 protocol
   (described in details in section 7) on each of its directly attached
   links.  If a multicast router has more than one interface connected
   to the same link, it only needs to operate the protocol on one of
   those interfaces.  The router behavior depends on whether there are
   several multicast routers on the same subnet, or not.  If that is the
   case, a querier election mechanism (described in section 7.6.2) is
   used to elect a single multicast router to be in Querier state.  This
   router is called the Querier.  All multicast routers on the subnet
   listen to the messages sent by multicast address listeners, and
   maintain the same multicast listening information state, so that they
   can take over the querier role, should the present Querier fail.
   Nevertheless, only the Querier sends periodical or triggered query
   messages on the subnet, as described in section 7.1.

Top      ToC       Page 4 
   A multicast address listener performs the *listener part* of the
   MLDv2 protocol (described in details in section 6) on all interfaces
   on which multicast reception is supported, even if more than one of
   those interfaces are connected to the same link.

2.1.  Building Multicast Listening State on Multicast Address Listeners

   Upper-layer protocols and applications that run on a multicast
   address listener node use specific service interface calls (described
   in section 3) to ask the IP layer to enable or disable reception of
   packets sent to specific multicast addresses.  The node keeps
   Multicast Address Listening state for each socket on which the
   service interface calls have been invoked (section 4.1).  In addition
   to this per-socket multicast listening state, a node must also
   maintain or compute multicast listening state for each of its
   interfaces (section 4.2).  Conceptually, that state consists of a set
   of records, with each record containing an IPv6 multicast address, a
   filter mode, and a source list.  The filter mode may be either
   INCLUDE or EXCLUDE.  In INCLUDE mode, reception of packets sent to
   the specified multicast address is enabled *only* from the source
   addresses listed in the source list.  In EXCLUDE mode, reception of
   packets sent to the given multicast address is enabled from all
   source addresses *except* those listed in the source list.

   At most one record per multicast address exists for a given
   interface.  This per-interface state is derived from the per-socket
   state, but may differ from it when different sockets have differing
   filter modes and/or source lists for the same multicast address and
   interface.  After a multicast packet has been accepted from an
   interface by the IP layer, its subsequent delivery to the application
   connected to a particular socket depends on the multicast listening
   state of that socket (and possibly also on other conditions, such as
   what transport-layer port the socket is bound to).  Note that MLDv2
   messages are not subject to source filtering and must always be
   processed by hosts and routers.

2.2.  Exchanging Messages between the Querier and the Listening Nodes

   There are three types of MLDv2 query messages: General Queries,
   Multicast Address Specific Queries, and Multicast Address and Source
   Specific Queries.  The Querier periodically sends General Queries, to
   learn multicast address listener information from an attached link.
   These queries are used to build and refresh the Multicast Address
   Listener state inside all multicast routers on the link.

   Nodes respond to these queries by reporting their per-interface
   Multicast Address Listening state, through Current State Report
   messages sent to a specific multicast address all MLDv2 routers on

Top      ToC       Page 5 
   the link listen to.  On the other hand, if the listening state of a
   node changes, the node immediately reports these changes through a
   State Change Report message.  The State Change Report contains either
   Filter Mode Change records, Source List Change records, or records of
   both types.  A detailed description of the report messages is
   presented in section 5.2.12.

   Both router and listener state changes are mainly triggered by the
   expiration of a specific timer, or the reception of an MLD message
   (listener state change can be also triggered by the invocation of a
   service interface call).  Therefore, to enhance protocol robustness,
   in spite of the possible unreliability of message exchanges, messages
   are retransmitted several times.  Furthermore, timers are set so as
   to take into account the possible message losses, and to wait for
   retransmissions.

   Periodical General Queries and Current State Reports do not apply
   this rule, in order not to overload the link; it is assumed that in
   general these messages do not generate state changes, their main
   purpose being to refresh existing state.  Thus, even if one such
   message is lost, the corresponding state will be refreshed during the
   next reporting period.

   As opposed to Current State Reports, State Change Reports are
   retransmitted several times, in order to avoid them being missed by
   one or more multicast routers.  The number of retransmissions depends
   on the so-called Robustness Variable.  This variable allows tuning
   the protocol according to the expected packet loss on a link.  If a
   link is expected to be lossy (e.g., a wireless connection), the value
   of the Robustness Variable may be increased.  MLD is robust to
   [Robustness Variable]-1 packet losses.  This document recommends a
   default value of 2 for the Robustness Variable (see section 9.1).

   If more changes to the same per-interface state entry occur before
   all the retransmissions of the State Change Report for the first
   change have been completed, each additional change triggers the
   immediate transmission of a new State Change Report.  Section 6.1
   shows how the content of this new report is computed. Retransmissions
   of the new State Change Report will be scheduled as well, in order to
   ensure that each instance of state change is transmitted at least
   [Robustness Variable] times.

   If a node on a link expresses, through a State Change Report, its
   desire to no longer listen to a particular multicast address (or
   source),  the Querier must query for other listeners of the multicast
   address (or source) before deleting the multicast address (or source)
   from its Multicast Address Listener state and stopping the
   corresponding traffic.  Thus, the Querier sends a Multicast Address

Top      ToC       Page 6 
   Specific Query to verify whether there are nodes still listening to a
   specified multicast address or not.  Similarly, the Querier sends a
   Multicast Address and Source Specific Query to verify whether, for a
   specified multicast address, there are nodes still listening to a
   specific set of sources, or not.  Section 5.1.13 describes each query
   in more detail.

   Both Multicast Address Specific Queries and Multicast Address and
   Source Specific Queries are only sent in response to State Change
   Reports, never in response to Current State Reports.  This
   distinction between the two types of reports is needed to avoid the
   router treating all Multicast Listener Reports as potential changes
   in state.  By doing so, the fast leave mechanism of MLDv2, described
   in more detail in section 2.2, might not be effective if a State
   Change Report is lost, and only the following Current State Report is
   received by the router.  Nevertheless, it avoids an increased
   processing at the router and it reduces the MLD traffic on the link.
   More details on the necessity of distinguishing between the two
   report types can be found in Appendix A1.

   Nodes respond to the above queries through Current State Reports,
   that contain their per-interface Multicast Address Listening state
   only for the multicast addresses (or sources) being queried.

   As stated earlier, in order to ensure protocol robustness, all the
   queries, except the periodical General Queries, are retransmitted
   several times within a given time interval.  The number of
   retransmissions depends on the Robustness Variable.  If, while
   scheduling new queries, there are pending queries to be retransmitted
   for the same multicast address, the new queries and the pending
   queries have to be merged.  In addition, host reports received for a
   multicast address with pending queries may affect the contents of
   those queries.  The process of building and maintaining the state of
   pending queries is presented in section 7.6.3.

   Protocol robustness is also enhanced through the use of the S flag
   (Suppress Router-Side Processing).  As described above, when a
   Multicast Address Specific or a Multicast Address and Source Specific
   Query is sent by the Querier, a number of retransmissions of the
   query are scheduled.  In the original (first) query the S flag is
   clear.  When the Querier sends this query, it lowers the timers for
   the concerned multicast address (or source) to a given value;
   similarly, any non-querier multicast router that receives the query
   lowers its timers in the same way.  Nevertheless, while waiting for
   the next scheduled queries to be sent, the Querier may receive a
   report that updates the timers.  The scheduled queries still have to
   be sent, in order to ensure that a non-querier router keeps its state
   synchronized with the current Querier (the non-querier router might

Top      ToC       Page 7 
   have missed the first query).  Nevertheless, the timers should not be
   lowered again, as a valid answer was already received.  Therefore, in
   subsequent queries the Querier sets the S flag.

2.3.  Building Multicast Address Listener State on Multicast Routers

   Multicast routers that implement MLDv2 (whether they are in Querier
   state or not) keep state per multicast address per attached link.
   This multicast address listener state consists of a Filter Mode, a
   Filter Timer, and a Source List, with a timer associated to each
   source from the list.  The Filter Mode is used to summarize the total
   listening state of a multicast address to a minimum set, such that
   all nodes' listening states are respected.  The Filter Mode may
   change in response to the reception of particular types of report
   messages, or when certain timer conditions occur.

   A router is in INCLUDE mode for a specific multicast address on a
   given interface if all the listeners on the link interested in that
   address are in INCLUDE mode.  The router state is represented through
   the notation INCLUDE (A), where A is a list of sources, called the
   "Include List".  The Include List is the set of sources that one or
   more listeners on the link have requested to receive.  All the
   sources from the Include List will be forwarded by the router.  Any
   other source that is not in the Include List will be blocked by the
   router.

   A source can be added to the current Include List if a listener in
   INCLUDE mode sends a Current State or a State Change Report that
   includes that source.  Each source from the Include List is
   associated with a source timer that is updated whenever a listener in
   INCLUDE mode sends a report that confirms its interest in that
   specific source.  If the timer of a source from the Include List
   expires, the source is deleted from the Include List.

   Besides this "soft leave" mechanism, there is also a "fast leave"
   scheme in MLDv2; it is also based on the use of source timers.  When
   a node in INCLUDE mode expresses its desire to stop listening to a
   specific source, all the multicast routers on the link lower their
   timers for that source to a given value.  The Querier then sends a
   Multicast Address and Source Specific Query, to verify whether there
   are other listeners for that source on the link, or not.  If a report
   that includes this source is received before the timer expiration,
   all the multicast routers on the link update the source timer.  If
   not, the source is deleted from the Include List.  The handling of
   the Include List, according to the received reports, is detailed in
   Tables 7.4.1 and 7.4.2.

Top      ToC       Page 8 
   A router is in EXCLUDE mode for a specific multicast address on a
   given interface if there is at least one listener in EXCLUDE mode for
   that address on the link.  When the first report is received from
   such a listener, the router sets the Filter Timer that corresponds to
   that address.  This timer is reset each time an EXCLUDE mode listener
   confirms its listening state through a Current State Report.  The
   timer is also updated when a listener, formerly in INCLUDE mode,
   announces its filter mode change through a State Change Report
   message.  If the Filter Timer expires, it means that there are no
   more listeners in EXCLUDE mode on the link.  In this case, the router
   switches back to INCLUDE mode for that multicast address.

   When the router is in EXCLUDE mode, the router state is represented
   by the notation EXCLUDE (X,Y), where X is called the "Requested List"
   and Y is called the "Exclude List".  All sources, except those from
   the Exclude List, will be forwarded by the router.  The Requested
   List has no effect on forwarding.  Nevertheless, the router has to
   maintain the Requested List for two reasons:

   o  To keep track of sources that listeners in INCLUDE mode listen to.
      This is necessary to assure a seamless transition of the router to
      INCLUDE mode, when there is no listener in EXCLUDE mode left.
      This transition should not interrupt the flow of traffic to
      listeners in INCLUDE mode for that multicast address.  Therefore,
      at the time of the transition, the Requested List should contain
      the set of sources that nodes in INCLUDE mode have explicitly
      requested.

      When the router switches to INCLUDE mode, the sources in the
      Requested List are moved to the Include List, and the Exclude List
      is deleted.  Before switching, the Requested List can contain an
      inexact guess of the sources listeners in INCLUDE mode listen to -
      might be too large or too small.  These inexactitudes are due to
      the fact that the Requested List is also used for fast blocking
      purposes, as described below.  If such a fast blocking is
      required, some sources may be deleted from the Requested List (as
      shown in Tables 7.4.1 and 7.4.2) in order to reduce router state.
      Nevertheless, in each such case the Filter Timer is updated as
      well.  Therefore, listeners in INCLUDE mode will have enough time,
      before an eventual switching, to reconfirm their interest in the
      eliminated source(s), and rebuild the Requested List accordingly.
      The protocol ensures that when a switch to INCLUDE mode occurs,
      the Requested List will be accurate.  Details about the transition
      of the router to INCLUDE mode are presented in Appendix A3.

   o  To allow the fast blocking of previously unblocked sources.  If
      the router receives a report that contains such a request, the
      concerned sources are added to the Requested List.  Their timers

Top      ToC       Page 9 
      are set to a given small value, and a Multicast Address and Source
      Specific Query is sent by the Querier, to check whether there are
      nodes on the link still interested in those sources, or not.  If
      no node announces its interest in receiving those specific source,
      the timers of those sources expire.  Then, the sources are moved
      from the Requested List to the Exclude List.  From then on, the
      sources will be blocked by the router.

   The handling of the EXCLUDE mode router state, according to the
   received reports, is detailed in Tables 7.4.1 and 7.4.2.

   Both the MLDv2 router and listener behaviors described in this
   document were defined to ensure backward interoperability with MLDv1
   hosts and routers.  Interoperability issues are detailed in section
   8.

3.  The Service Interface for Requesting IP Multicast Reception

   Within an IP system, there is (at least conceptually) a service
   interface used by upper-layer protocols or application programs to
   ask the IP layer to enable or disable reception of packets sent to
   specific IP multicast addresses.  In order to take full advantage of
   the capabilities of MLDv2, a node's IP service interface must support
   the following operation:

      IPv6MulticastListen ( socket, interface, IPv6 multicast address,
      filter mode, source list )

      where:

   o  "socket" is an implementation-specific parameter used to
      distinguish among different requesting entities (e.g., programs,
      processes) within the node; the socket parameter of BSD Unix
      system calls is a specific example.

   o  "interface" is a local identifier of the network interface on
      which reception of the specified multicast address is to be
      enabled or disabled.  Interfaces may be physical (e.g., an
      Ethernet interface) or virtual (e.g., the endpoint of a Frame
      Relay virtual circuit or an IP-in-IP "tunnel").  An implementation
      may allow a special "unspecified" value to be passed as the
      interface parameter, in which case the request would apply to the
      "primary" or "default" interface of the node (perhaps established
      by system configuration).  If reception of the same multicast
      address is desired on more than one interface, IPv6MulticastListen
      is invoked separately for each desired interface.

Top      ToC       Page 10 
   o  "IPv6 multicast address" is the multicast address to which the
      request pertains.  If reception of more than one multicast address
      on a given interface is desired, IPv6MulticastListen is invoked
      separately for each desired address.

   o  "filter mode" may be either INCLUDE or EXCLUDE.  In INCLUDE mode,
      reception of packets sent to the specified multicast address is
      requested *only* from the source addresses listed in the source
      list parameter.  In EXCLUDE mode, reception of packets sent to the
      given multicast address is requested from all source addresses
      *except* those listed in the source list parameter.

   o  "source list" is an unordered list of zero or more unicast
      addresses from which multicast reception is desired or not
      desired, depending on the filter mode.  An implementation MAY
      impose a limit on the size of source lists.  When an operation
      causes the source list size limit to be exceeded, the service
      interface SHOULD return an error.

   For a given combination of socket, interface, and IPv6 multicast
   address, only a single filter mode and source list can be in effect
   at any one time.  Nevertheless, either the filter mode or the source
   list, or both, may be changed by subsequent IPv6MulticastListen
   requests that specify the same socket, interface, and IPv6 multicast
   address.  Each subsequent request completely replaces any earlier
   request for the given socket, interface, and multicast address.

   The MLDv1 protocol did not support source filters, and had a simpler
   service interface; it consisted of Start Listening and Stop Listening
   operations to enable and disable listening to a given multicast
   address (from *all* sources) on a given interface.  The equivalent
   operations in the new service interface are as follows:

   The Start Listening operation is equivalent to:

      IPv6MulticastListen ( socket, interface, IPv6 multicast address,
                            EXCLUDE, {} )

   and the Stop Listening operation is equivalent to:

      IPv6MulticastListen ( socket, interface, IPv6 multicast address,
                            INCLUDE, {} )

   where {} is an empty source list.

   An example of an API that provides the capabilities outlined in this
   service interface is given in [RFC3678].

Top      ToC       Page 11 
4.  Multicast Listening State Maintained by Nodes

4.1.  Per-Socket State

   For each socket on which IPv6MulticastListen has been invoked, the
   node records the desired multicast listening state for that socket.
   That state conceptually consists of a set of records of the form:

   (interface, IPv6 multicast address, filter mode, source list)

   The per-socket state evolves in response to each invocation of
   IPv6MulticastListen on the socket, as follows:

   o  If the requested filter mode is INCLUDE *and* the requested source
      list is empty, then the entry that corresponds to the requested
      interface and multicast address is deleted, if present.  If no
      such entry is present, the request has no effect.

   o  If the requested filter mode is EXCLUDE *or* the requested source
      list is non-empty, then the entry that corresponds to the
      requested interface and multicast address, if present, is changed
      to contain the requested filter mode and source list.  If no such
      entry is present, a new entry is created, using the parameters
      specified in the request.

4.2.  Per-Interface State

   In addition to the per-socket multicast listening state, a node must
   also maintain or compute multicast listening state for each of its
   interfaces.  That state conceptually consists of a set of records of
   the form:

      (IPv6 multicast address, filter mode, source list)

   At most one record per multicast address exists for a given
   interface.  This per-interface state is derived from the per-socket
   state, but may differ from it when different sockets have differing
   filter modes and/or source lists for the same multicast address and
   interface.  For example, suppose one application or process invokes
   the following operation on socket s1:

      IPv6MulticastListen ( s1, i, m, INCLUDE, {a, b, c} )

Top      ToC       Page 12 
   requesting reception on interface i of packets sent to multicast
   address m, *only* if they come from the sources a, b, or c.  Suppose
   another application or process invokes the following operation on
   socket s2:

      IPv6MulticastListen ( s2, i, m, INCLUDE, {b, c, d} )

   requesting reception on the same interface i of packets sent to the
   same multicast address m, *only* if they come from sources b, c, or
   d.  In order to satisfy the reception requirements of both sockets,
   it is necessary for interface i to receive packets sent to m from any
   one of the sources a, b, c, or d.  Thus, in this example, the
   listening state of interface i for multicast address m has filter
   mode INCLUDE and source list {a, b, c, d}.

   After a multicast packet has been accepted from an interface by the
   IP layer, its subsequent delivery to the application or process that
   listens on a particular socket depends on the multicast listening
   state of that socket (and possibly also on other conditions, such as
   what transport-layer port the socket is bound to).  So, in the above
   example, if a packet arrives on interface i, destined to multicast
   address m, with source address a, it may be delivered on socket s1
   but not on socket s2.  Note that MLDv2 messages are not subject to
   source filtering and must always be processed by hosts and routers.

   Requiring the filtering of packets based upon a socket's multicast
   reception state is a new feature of this service interface.  The
   previous service interface described no filtering based upon
   multicast listening state; rather, a Start Listening operation on a
   socket simply caused the node to start to listen to a multicast
   address on the given interface; packets sent to that multicast
   address could be delivered to all sockets, whether they had started
   to listen or not.

   The general rules for deriving the per-interface state from the per-
   socket state are as follows:  for each distinct (interface, IPv6
   multicast address) pair that appears in any per-socket state, a per-
   interface record is created for that multicast address on that
   interface.  Considering all socket records that contain the same
   (interface, IPv6 multicast address) pair,

   o  if *any* such record has a filter mode of EXCLUDE, then the filter
      mode of the interface record is EXCLUDE, and the source list of
      the interface record is the intersection of the source lists of
      all socket records in EXCLUDE mode, minus those source addresses
      that appear in any socket record in INCLUDE mode.  For example, if
      the socket records for multicast address m on interface i are:

Top      ToC       Page 13 
         from socket s1:  ( i, m, EXCLUDE, {a, b, c, d} )
         from socket s2:  ( i, m, EXCLUDE, {b, c, d, e} )
         from socket s3:  ( i, m, INCLUDE, {d, e, f} )

      then the corresponding interface record on interface i is:

         ( m, EXCLUDE, {b, c} )

      If a fourth socket is added, such as:

         From socket s4:  ( i, m, EXCLUDE, {} )

      then the interface record becomes:

         ( m, EXCLUDE, {} )

   o  if *all* such records have a filter mode of INCLUDE, then the
      filter mode of the interface record is INCLUDE, and the source
      list of the interface record is the union of the source lists of
      all the socket records.  For example, if the socket records for
      multicast address m on interface i are:

         from socket s1:  ( i, m, INCLUDE, {a, b, c} )
         from socket s2:  ( i, m, INCLUDE, {b, c, d} )
         from socket s3:  ( i, m, INCLUDE, {e, f} )

      then the corresponding interface record on interface i is:

         ( m, INCLUDE, {a, b, c, d, e, f} )

   An implementation MUST NOT use an EXCLUDE interface record for a
   multicast address if all sockets for this multicast address are in
   INCLUDE state.  If system resource limits are reached when a per-
   interface state source list is calculated, an error MUST be returned
   to the application which requested the operation.

   The above rules for deriving the per-interface state are
   (re)evaluated whenever an IPv6MulticastListen invocation modifies the
   per-socket state by adding, deleting, or modifying a per-socket state
   record.  Note that a change of the per-socket state does not
   necessarily result in a change of the per-interface state.



(page 13 continued on part 2)

Next RFC Part