<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 SYSTEM
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY rfc3292 SYSTEM
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.3292.xml">
<!ENTITY rfc5384 SYSTEM
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.5384.xml">
<!ENTITY rfc5713 SYSTEM
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.5713.xml">
<!ENTITY rfc5851 SYSTEM
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.5851.xml">
<!ENTITY rfc6320 SYSTEM
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.6320.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc strict="yes" ?>
<?rfc linkmailto="yes" ?>
<rfc category="std" docName="draft-ietf-ancp-mc-extensions-06.txt"
     ipr="pre5378Trust200902">
  <front>
    <title abbrev="ANCP Multicast Extensions">Multicast Control
    Extensions for ANCP</title>

    <author fullname="Francois Le Faucheur" initials="F."
            surname="Le Faucheur">
      <organization abbrev="Cisco">Cisco Systems</organization>

      <address>
        <postal>
          <street>Greenside, 400 Avenue de Roumanille</street>

          <city>Sophia Antipolis</city>

          <code>06410</code>

          <country>France</country>
        </postal>

        <phone>+33 4 97 23 26 19</phone>

        <email>flefauch@cisco.com</email>
      </address>
    </author>

    <author fullname="Roberta Maglione" initials="R." surname="Maglione">
      <organization abbrev="">Telecom Italia</organization>

      <address>
        <postal>
          <street>Via Reiss Romoli 274</street>

          <city>Torino</city>

          <code>10148</code>

          <country>Italy</country>
        </postal>

        <phone></phone>

        <email>roberta.maglione@telecomitalia.it</email>
      </address>
    </author>

    <author fullname="Tom Taylor" initials="T." surname="Taylor">
      <organization abbrev="Huawei">Huawei Technologies</organization>

      <address>
        <postal>
          <street></street>

          <city>Ottawa</city>

          <code></code>
          <country>Canada</country>
        </postal>
        <email>tom111.taylor@bell.net</email>
      </address>
    </author>

    <date year="2011" />

    <area>Internet</area>

    <workgroup>ANCP</workgroup>

    <abstract>
      <t>This document specifies the extensions to the Access Node Control
      Protocol required for support of the multicast use cases defined in the
      Access Node Control Protocol framework document and one additional use
      case described in this document. These use cases are
      organized into the following ANCP capabilities: <list style="symbols">
          <t>NAS-initiated multicast replication;</t>

          <t>conditional access with white and black lists;</t>

          <t>conditional access with grey lists;</t>

          <t>bandwidth delegation;</t>

          <t>committed bandwidth reporting.</t>
        </list> These capabilities may be combined
      according to the rules given in this specification.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t><xref target="RFC5851"></xref> defines a framework
      and requirements for an Access Node control mechanism between a Network
      Access Server (NAS) and an Access Node (e.g. a Digital Subscriber Line
      Access Multiplexer (DSLAM)) in a multi-service reference architecture in
      order to perform QoS-related, service-related and subscriber-related
      operations. <xref target="RFC6320"></xref> specifies a
      protocol for Access Node Control in broadband networks in line with this
      framework.</t>

      <t><xref target="RFC6320"></xref> supports three use cases
defined in <xref target="RFC5851"></xref>, specifically for DSL access: the DSL
Topology Discovery use case, the DSL Line Configuration use case and the DSL
Remote Connectivity Test use case. However, it does not support the multicast
use cases defined in <xref target="RFC5851"></xref>. The present document
specifies the extensions to the Access Node Control Protocol required for
support of these multicast use cases. In addition, it supports the Committed
Bandwidth Reporting use case, described below. In terms of the ANCP protocol,
these use cases are organized into five capabilities: 
      <list style="symbols">
          <t>NAS-initiated multicast replication;</t>

          <t>conditional access with white and black lists;</t>

          <t>conditional access with grey lists;</t>

          <t>bandwidth delegation;</t>

          <t>committed bandwidth reporting.</t>
        </list></t>

      <t>NAS-initiated multicast replication assumes that multicast "join" and
"leave" requests are terminated on the NAS, or that the NAS receives requests to
establish multicast sessions through other means (e.g., application-level
signalling). The NAS sends commands to the AN to start or stop replication of
specific multicast flows on specific subscriber ports. This use case is
described briefly in the next-to-last paragraph of Section 3.4 of <xref
target="RFC5851"></xref>.</t>

      <t>Conditional access is described in Sections 3.4.1 and 3.4.2.3 of <xref
target="RFC5851"></xref>, with the latter section particularly applicable to
operation with white and black lists only. In case of "conditional access with
white and black lists", multicast join and leave requests are terminated at the
AN and accepted or ignored in accordance with the direction provided by white
and black lists respectively. The white and black lists are provisioned per port
at startup time and may be modified thereafter. The NAS may enable admission
control of white-listed flows by appropriate provisioning.</t>

      <t>Conditional access with grey lists is similar to conditional access
with white lists, except that before accepting any request matching a grey list
entry, the AN sends a request to the NAS for permission to replicate the flow.
Again, the NAS can enable admission control of grey-listed flows at the AN.</t>

      <t>Bandwidth delegation is described in Section 3.4.2.1 of <xref
target="RFC5851"></xref>. It allows flexible sharing of total video bandwidth on
an access line between the AN and the NAS. One application of such bandwidth
sharing is where the AN does multicast admission control, while the NAS or
Policy Server does unicast admission control. In that case, bandwidth delegation
allows dynamic sharing of bandwidth between unicast and multicast video traffic
on each access line. </t>

      <t>Committed bandwidth reporting is described below, in 
<xref target="comRepUseCase"/>. The AN reports the amount of multicast bandwidth
it has granted to a given access line each time that value changes. 
These reports may be buffered for a NAS-provisionable interval so that
reports for multiple access lines can be bundled into the same message.</t>

      <t>The formal specification of the behaviours associated with each of
these capabilities, singly and in combination, is given in <xref
target="CapDefs"></xref>.</t>

      <t>In addition to the multicast service processing behaviour just
sketched, the definition of each capability includes support for the multicast
accounting and reporting services described in Section 3.4.3 of <xref
target="RFC5851"></xref>. Because of this common content and because of other
protocol overlaps between the different capabilities, the protocol descriptions
for the multicast extensions specified in this document are merged into a single
non-redundant narrative. Tables in <xref target="CapDefs"></xref> then indicate
the specific sub-sections of the protocol description that have to be
implemented to support each capability.</t>
    </section><!-- intro -->

    <section anchor="term" title="Terminology">
      <t>The 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 <xref
      target="RFC2119"></xref>.</t>

      <t>The expression "delegated bandwidth" is used as a shorter way of
      saying: "the total amount of video bandwidth delegated to the AN for
      multicast admission control".</t>
    </section> <!-- term -->

<section title="Multicast Use Cases">

      <t>Quoting from <xref target="RFC5851"></xref>:</t>

      <t>"... the Access Node, aggregation node(s) and the NAS must all be
      involved in the multicast replication process. This avoids that several
      copies of the same stream are sent within the access/aggregation
      network. In case of an Ethernet-based access/aggregation network, this
      may, for example, be achieved by means of IGMP snooping or IGMP proxy in
      the Access Node and aggregation node(s). By introducing IGMP processing
      in the access/aggregation nodes, the multicast replication process is
      now divided between the NAS, the aggregation node(s) and Access Nodes.
      In order to ensure backward compatibility with the ATM-based model, the
      NAS, aggregation node and Access Node need to behave as a single logical
      device. This logical device must have exactly the same functionality as
      the NAS in the ATM access/aggregation network. The Access Node Control
      Mechanism can be used to make sure that this logical/functional
      equivalence is achieved by exchanging the necessary information between
      the Access Node and the NAS. "</t>

      <t><xref target="RFC5851"></xref> describes the use cases for ANCP
associated with such multicast operations, and identifies the associated ANCP
requirements. The present section describes a subset of these use cases as
background to facilitate reading of this document, but the reader is refered to
<xref target="RFC5851"></xref> for a more exhaustive description of the ANCP
multicast use cases. Detailed example message flows can also be found in <xref
target="protoc"></xref>.</t>

      <section anchor="nasinitiated-usecase"
               title="NAS Initiated Multicast Replication Control Use Case">

        <section title="Goals">

          <t>One option for multicast handling is for the subscriber to
communicate the "join/leave" information to the NAS. This can be done for
instance by terminating all subscriber IGMP (<xref target="RFC3376"></xref>) or
MLD (<xref target="RFC2710"></xref>, <xref target="RFC3810"></xref>) signaling
on the NAS. Another example could be a subscriber using some form of application
level signaling, which is redirected to the NAS. In any case, this option is
transparent to the access and aggregation network. In this scenario, the NAS
uses ANCP to create and remove replication state in the AN for efficient
multicast replication. Thus, the NAS only sends a single copy of the multicast
stream towards the AN, which in turn performs replication to multiple
subscribers as instructed by the NAS via ANCP. The NAS first performs
conditional access and multicast admission control when processing multicast
join requests, and only creates replication state in the AN if admission
succeeds.</t>

        </section>

        <section title="Message Flow">

          <t>With the NAS-initiated use case, a Multicast Replication Control
Message is sent by the NAS to the AN with a directive to either join or leave
one (or more) multicast flow(s). In the example message flow, the AN uses a
Generic Response message to convey the outcome of the directive. <xref
target="FIG_replication-ctrl"></xref> illustrates such an ANCP message exchange
as well as the associated AN behavior.</t>

          <figure anchor="FIG_replication-ctrl"
                  title="NAS Initiated Multicast Replication Control">
            <preamble></preamble>

            <artwork><![CDATA[
+----------+    +-------+     +-----+        ANCP          +-----+        
|Subscriber|    | Home  |     | AN  |<-------------------->| NAS |   
+----------+    |Gateway|     +-----+                      +-----+    
      |         +-------+         |                           |          
      |            |              |                          (*)  
      |            |              | Multicast-Replication-Crl |
      |            |              |   (Target,add, Flow 1)    |
      |            |              |<--------------------------|
      |       Mcast Flow 1        |                           |
      |<==========================+                           |
      |            |              |     Generic Response      |
      |            |              |-------------------------->|
      |            |              |                           |
      |            |              |                           |
      ~            ~              ~                           ~
      |            |              |                           |
      |            |              | Multicast-Replication-Crl |
      |            |              |   (Target,delete, Flow 1) |
      |            |              |<--------------------------|
      |            |              |                           |
      |  <Stop Replication of     X                           |
      |            Mcast Flow 1>  |     Generic Response      |
      |            |              |-------------------------->|

     (*) The NAS may optionally seek direction from an external 
    Authorization/Policy Server before admitting the flow.]]></artwork>

            <postamble></postamble>
          </figure>
        </section>
      </section> <!-- nasinitiated-usecase -->

      <section anchor="cac-usecase"
               title="Conditional Access and Admission Control Use Case">

        <section title="Goals">

          <t>One option for multicast handling is for the access/aggregation
nodes to participate in IGMP/MLD processing (e.g. via IGMP/MLD snooping). In
this scenario, on detecting a join/leave request from an enduser for a multicast
flow (in the grey list), the AN uses ANCP to request conditional access and
admission control decision from the NAS. In turn, after conditional access and
admission control checks, the NAS uses ANCP to instruct the AN to change the
replication states accordingly.</t>

        </section>

        <section title="Message Flow">

          <t>For support of the conditional access and admission control use
case, on detection of an IGMP/MLD Join, the AN sends an Admission Control
message to the NAS to request conditional access and admission control check. In
case of positive outcome, the NAS sends a Multicast Replication Control Message
to the AN with a directive to replicate the multicast flow to the corresponding
user. Similarly on detection of an IGMP/MLD leave, an Admission Control message
is sent by the AN to the NAS to keep the NAS aware of user departure for the
flow. This message flow is illustrated in <xref 
target="FIG_conditional_access"></xref>.</t>

          <figure anchor="FIG_conditional_access"
                  title="Multicast Conditional Access and Admission Control">
            <preamble></preamble>

            <artwork><![CDATA[
+----------+    +-------+   +-----+      ANCP           +-----+        
|Subscriber|    | Home  |   | AN  |<------------------->| NAS |   
+----------+    |Gateway|   +-----+                     +-----+    
      |         +-------+      |                           |          
      |            |           |                           |            
      |       Join(Gr-Flow1)   |  Admission-Control        |            
      |------------+---------->|   (Target,add,Gr-Flow1)   |            
      |            |           |-------------------------->|             
      |            |           |                          (*)  
      |            |           | Multicast-Replication-Crl |
      |            |           |   (Target,add,Gr-Flow 1)  |
      |            |           |<--------------------------|    
      |     Mcast Gr-Flow1     |                           |    
      |<=======================+                           |            
      |            |           |                           |
      ~            ~           ~                           ~   
      |            |           |                           |          
      |      Leave(Gr-Flow1)   |  Admission-Control        |            
      |------------+---------->| (Target,delete,Gr-Flow1)  |                   
      |            |           |-------------------------->|            
      | <Stop Replication of   X                           |
      |       Mcast Gr-Flow1>  |                           |
      |            |           |                           |           


Gr-Flow1: a multicast flow matching the grey list for that port

(*) The NAS may optionally seek direction from an external 
    Authorization/Policy Server before admitting the flow.]]></artwork>

            <postamble></postamble>
          </figure>
        </section>
      </section> <!-- cac-usecase -->

      <section anchor="reporting-usecase"
               title="Multicast Flow Reporting Use Case">

        <section title="Goals">
          <t>The Multicast flow reporting use case allows the NAS to
          asynchronously query the AN to obtain an instantaneous status report
          related to multicast flows currently replicated by the AN.</t>
        </section>

        <section title="Message Flow">

          <t>The NAS sends a Multicast Flow Query Request message to the AN in
order to query the AN about information such as which multicast flows are
currently active on a given AN port or which ports are currently replicating a
given multicast flow. The AN conveys the requested information to the NAS in a
Multicast Flow Query Response message. This message flow is illustrated in <xref
target="FIG_query"></xref>.</t>

          <figure anchor="FIG_query" title="Multicast Flow Reporting">
            <preamble></preamble>

            <artwork><![CDATA[
+----------+    +-------+   +-----+    ANCP    +-----+        
|Subscriber|    | Home  |   | AN  |<---------->| NAS |   
+----------+    |Gateway|   +-----+            +-----+    
      |         +-------+     |                   |          
      |           |           |  Multicast Flow   |            
      |           |           |  Query Request    |            
      |           |           |<------------------|             
      |           |           |                   |  
      |           |           | Multicast Flow    |  
      |           |           | Query Response    | 
      |           |           |------------------>|           
      |           |           |                   |            
      |           |           |                   |
]]></artwork>
          </figure>
        </section> <!-- Message Flow -->
      </section> <!-- reporting-usecase -->

<section anchor="comRepUseCase" title="Committed Bandwidth Reporting Use Case">

<section anchor="comRepGoals" title="Goals">

<t>The committed bandwidth reporting use case allows the NAS to maintain current
awareness of how much multicast bandwidth the AN has committed to a given access
line, so that the NAS can adjust its forwarding scheduler to ensure the
associated QoS. Note that this involves a finer level of detail than provided
by bandwidth delegation, since the amount of delegated bandwidth is an upper 
limit on the amount of bandwidth committed rather than an actual value. To
reduce the volume of messaging, reports from the AN may be buffered so that one
message reports on changes for multiple access lines. 
</t>

</section><!-- comRepGoals -->

<section anchor="comRepMsg" title="Message Flow">

<t>The message flow associated with this use case is shown in <xref 
target="fig_comRepMsgFlow"/>. The figure assumes that a non-zero buffering 
interval was previously provisioned on the AN.</t>

<figure anchor="fig_comRepMsgFlow" 
         title="Message Flow For Committed Bandwidth Reporting">
<artwork>
+-----+    +-------+       +-----+    ANCP    +-----+        
|Subs |+   | Home  |+      | AN  |&lt;---------->| NAS |   
|1,2  ||   |GW 1,2 ||      +-----+            +-----+    
+-----+|   +-------+|         |                   |          
 +|----+    +|------+         |                   |            
  | |        | |              |                   |            
  | |Join(Subs1, Ch1)         |                   |            
  |----------+--------------->|  Start buffering  |            
  | |        | Multicast flow |  timer. Create    |
  |&lt;==========================|  message with     |
  | |        | |              |  initial contents |    
  | |        | |              |  reporting new    | 
  | |        | |              |  Subs1 bandwidth. |          
  | | Join(Subs2, Ch2)        |                   |            
  | |----------+------------->|  Add report for   |
  | |        | Multicast flow |  new Subs2 b/w.   |
  | |&lt;========================|                   |
  | |        | |              |                   |            
  | |Leave(Subs1, Ch1)        |                   |            
  |----------+--------------->|  Replace report   |            
  | |        | |              |  for Subs1 with   |            
  | |      Stop replication   X  new value (which |            
  | |        | |              |  happens to be    |            
  | |        | |              |  the same as the  |            
  | |        | |              |  starting value.  |            
  | |        | |              |                   |            
  | |        | |             >|&lt; TIMER expires    |            
  | |        | |              |                   |            
  | |        | |              |Committed          |            
  | |        | |              |  Bandwidth Report |            
  | |        | |              |------------------>|            
  | |        | |              |   (for latest     |            
  | |        | |              |   Subs1 and Subs2 |            
  | |        | |              |   bandwidth)      | 
  | |        | |              |                   |            
</artwork>
</figure>

</section><!-- comRepMsg -->

</section><!-- comRepUseCase -->

    </section> <!-- Multicast Use Cases -->

    <!--
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->

    <section anchor="Messages" title="ANCP Messages">

      <t>This section defines new ANCP messages and new usage of existing ANCP
messages as well as procedures associated with the use of these messages.</t>

      <section anchor="provisioning" title="Provisioning Message">

        <t>Section 4.1 of <xref target="RFC6320"></xref>
defines the Provisioning message that is sent by the NAS to the AN to provision
information in the AN.</t>

        <t>The present document specifies that the Provisioning message MAY be
used by the NAS to provision multicast-related information (e.g. multicast
service profiles). The ANCP Provisioning message payload MAY contain:
<list style="symbols">
<t> one or more instances of the Multicast-Service-Profile TLV. The Multicast-
Service-Profile TLV is defined in the present document in <xref
target="TLV_msp"></xref>. Each instance of the Multicast-Service-Profile TLV
contains a multicast service profile name and one or more list actions. A list
action consists of an action (add, delete, replace), a list type (White, Black,
or Grey), and list content (multicast source and group addresses).</t>

<t>an instance of the White-List-CAC TLV. The White-List-CAC TLV is defined in
<xref target="TLV_White_AC"/>. If present, this TLV indicates that the AN is
required to do admission control before replicating White-listed flows.</t>

<t>an instance of the MRepCtl-CAC TLV. The MRepCtl-CAC TLV is defined in <xref
target="TLV_MRepCtl_AC"/>. If present, this TLV indicates that the AN is
required to do admission control before replicating flows specified in
Multicast Replication Control messages.  </t>

<t>an instance of the Report-Buffering-Time TLV. The Report-Buffering-Time TLV
is defined in <xref target="TLV_RepBufTime"/>. If present, this TLV indicates
Committed Bandwidth Report messages should be buffered for the amount of time
given by the TLV before being transmitted to the NAS. </t>
</list>
 See <xref target="CapDefs"></xref> for information on which multicast
capabilities require support of these TLVs in the Provisioning message.</t>

        <section anchor="ProvSnd" title="Sender Behaviour">

          <t>When directed by the Policy Server or by management action, the NAS
sends the Provisioning message to initially provision or to update the White,
Black, and/or Grey multicast channel lists associated with a set of named
multicast service profiles, or to enable the AN to perform admission control for
specific classes of flows.
</t>

  <t>To provision or update a multicast service profile, the NAS MUST include
  within the message one or more instances of the Multicast-Service-Profile TLV
  specifying the content to be provisioned or updated. The NAS SHOULD NOT include
  any list type (White, Black, or Grey) that is not supported by the set of
  multicast capabilities negotiated between the NAS and the AN. The NAS MUST 
  NOT use the Provisioning message to send instances of the 
  Multicast-Service-Profile TLV to the AN unless the Multicast-Service-Profile
  TLV is supported by the set of multicast capabilities negotiated between
  the NAS and the AN.</t>

  <t>To require admission control to be performed at the AN on White-listed
  flows, the NAS MUST include a copy of the White-List-CAC TLV in the Provisioning
  message. The White-List-CAC TLV MUST NOT be provided unless the negotiated set
  of capabilities includes conditional access with White and Black lists.</t>

  <t>To require admission control to be performed at the AN on Grey-listed flows
  or on NAS-initiated flows, the NAS MUST include a copy of the MRepCtl-CAC TLV 
  in the Provisioning message. The MRepCtl-CAC TLV MUST NOT be provided unless the
  negotiated set of capabilities includes NAS-initiated replication control or
  conditional access with Grey lists.</t>

  <t>To require buffering of Committed Bandwidth Report messages so that reports
  for multiple access lines can be included in the same message, the NAS MUST
  include a copy of the Report-Buffering-Time TLV containing a non-zero time 
  value in a Provisioning message sent to the AN. The Report-Buffering-Time TLV 
  MUST NOT be provided unless the negotiated set of capabilities includes 
  committed bandwidth reporting.</t>

        </section><!-- ProvSnd -->

        <section anchor="ProvRecv" title="Receiver Behaviour">

          <t>The receiving AN provisions/updates the White, Black, and/or Grey
lists associated with the multicast service profile names contained in the
Multicast-Service-Profile TLV instances within the message according to the
contents of the associated List-Action TLVs. The AN MUST process List-Action
TLVs in the order in which they appear within the message. The AN MUST ignore
instances of the List-Action TLV referring to any list type (White, Black, or
Grey) that is not supported by the set of multicast capabilities negotiated
between the NAS and the AN. </t>

<t>   When a new multicast service profile is identified by a 
Multicast-Service-Profile TLV, the initial state of all lists associated with
that profile according to the negotiated set of multicast capabilities is empty
until changed by the contents of Multicast-Service-Profile TLVs.</t>

<t>The receipt of a Provisioning message containing updates to an existing
multicast service profile subsequent to startup will cause the AN to review the
status of active flows on all ports to which that profile has been assigned.
For further details, see <xref target="CapDefs"/>.</t>

<t>If the White-List-CAC and/or MRepCtl-CAC TLV is present in the Provisioning
message and the respective associated capabilities have been negotiated, the AN
prepares (or continues) to do connection admission control on the indicated
class(es) of flow. If one or both of these TLVs was present in an earlier
Provisioning message but is absent in the latest message received, the AN
ceases to do connection admission control on the indicated class(es) of flow.
</t>

<t>The buffering time specified in an instance of the Report-Buffering-Time 
TLV applies to only to Committed Bandwidth Report messages initiated after the
new buffering time is received at the AN, not to any message already in the
process of accumulation.  </t>

          <t>As indicated in <xref target="RFC6320"></xref>, the
AN MUST NOT reply to the Provisioning message if it processed it successfully.
If an error prevents successful processing of the message content, the AN MUST
return a Generic Response message as defined in <xref 
target="RFC6320"></xref>, containing a Status-Info TLV with the
appropriate content describing the error. For this purpose, the presence of a
list type in a Multicast-Service-Profile TLV which was ignored because it was
not supported by the negotiated set of capabilities is not considered to be an
error. </t>

        </section><!-- ProvRecv -->
      </section><!-- provisioning -->

      <section anchor="port-management" title="Port Management Message"> 

    <t>As specified in <xref target="RFC6320"></xref>, the NAS
    may send DSL line configuration information to the AN ("ANCP based DSL Line
    Configuration" use case) using ANCP Port Management messages. See Section 7.3
    of <xref target="RFC6320"></xref> for the format of the Port
    Management message in that usage.</t>

    <t>This document specifies that the Port Management message MAY
    be used to convey either or both of the following TLVs: 
<list style="symbols">
            <t>Multicast-Service-Profile-Name TLV (defined in <xref
            target="TLV_profile-name"></xref>). This TLV associates a Multicast
            Service Profile with the Access Port specified by the extension
            block.</t>

            <t>Bandwidth-Allocation TLV (defined in <xref
            target="TLV_bw_alloc"></xref>). This TLV specifies the total
            multicast bandwidth available to the AN for admission control at
            the Access Port.</t>
</list></t>
     
     <t>When used for this purpose, the Port Management message MUST include
     TLV(s) to identify the access line concerned. If the access line is a DSL
     loop, the line-identifying TLV(s) MUST be as specified in Section 5.1.2 of 
     <xref target="RFC6320"></xref>. For non-DSL access lines, the
     appropriate alternative line-identifying TLV(s) MUST be present. Line
     configuration data other than the two TLVs listed in the previous paragraph
     MAY be present.</t>

        <section anchor="PortMgmtSend" title="Sender Behaviour">
          <t>The NAS sends the Port Management message at startup time to
          initialize parameters associated with the Access Port specified in
          the message and with the multicast capabilities negotiated between
          the NAS and the AN. The NAS MAY send additional Port Management
          messages subsequent to startup, to update or, in the case of the
          Bandwidth-Allocation TLV, reset these parameters. If the NAS includes
          a Multicast-Service-Profile-Name TLV in the Port Management message,
          the name MUST match a profile name provided in a 
          Multicast-Service-Profile TLV
          in a prior Provisioning message.  The NAS MUST NOT
          include a TLV unless it is supported by the set of multicast
          capabilities negotiated between the NAS and the AN. See <xref
          target="CapDefs"></xref> for further information.</t>
        </section>

        <!-- PortMgmtSend -->

        <section anchor="PortMgmtRecv" title="Receiver Behaviour">
          <t>If the Port Management message contains a
          Multicast-Service-Profile-Name TLV, the AN associates the named
          profile with the specified Access Port. This association replaces
          any previous association. That is, a given Access Port is associated
          with at most one multicast service profile. The replacement of one
          multicast service profile with another will cause the AN to review
          the status of all active flows on the target port. For further details
          see <xref target="CapDefs"/>. </t>

          <t>If the Port Management message contains a Bandwidth-Allocation
          TLV, the AN adopts this as the current value of its total multicast
          bandwidth limit for the target port. If the AN has already committed
          multicast bandwidth exceeding the amount given in the
          Bandwidth-Allocation TLV, the AN SHOULD NOT discontinue any
          multicast streams in order to bring bandwidth down to within the new
          limit. However, the AN MUST NOT admit new multicast streams that are
          subject to admission control until it
          can do so within the limit specified by the Bandwidth-Allocation
          TLV.</t>

          <t>If the Port Management request cannot be processed due to error
          and the Result field of the request is Nack (0x1) or AckAll (0x2),
          the AN SHOULD add a Status-Info TLV to the Extension Value field in
          its reply if this will provide useful information beyond what is
          provided by the Result Code value returned in the response header. 
          In particular, if the name within the
          Multicast-Service-Profile-Name TLV does not match a profile name
          given in a prior Provisioning message, the AN SHOULD return a
          reply where the Result Code field in the header indicates "Invalid TLV value"
          (85), the Error Message field in the Status-Info TLV contains  
          the text "Multicast profile name not provisioned",
          and the Status-Info TLV contains a copy of the
          Multicast-Service-Profile-Name TLV. </t>
        </section>

        <!-- PortMgmtRecv -->
      </section>

      <!-- port-management -->

      <section anchor="replication-control"
               title="Multicast Replication Control Message">
        <t>This section defines a new message called the Multicast Replication
        Control message. The Multicast Replication Control message is sent by
        the NAS to the AN with one or more directives to add (join) or delete
        (leave) a multicast flow on a target object identified in the content
        of the message.</t>

        <t>The Message Type for the Multicast Replication Control message is
        144.</t>

        <t>The ANCP Multicast Replication Control message payload contains the
        following TLVs:</t>

        <t><list style="symbols">
            <t>Target TLV: The Target TLV is defined in Section 4.3 of <xref
            target="RFC6320"></xref>. It MUST appear once and
            only once. It is encoded as specified in <xref
            target="RFC6320"></xref> or extensions and
            identifies the AN port subject to the request for admission or
release.</t>

            <t>Command TLV: The Command TLV is defined in Section 4.4 of <xref
            target="RFC6320"></xref>. It MUST be present. It
            MAY appear multiple times. </t>
          </list></t>

        <t>As <xref target="RFC6320"></xref> indicates, the
        contents of the Command Info field within the Command TLV are specific
        to the message in which the TLV occurs. For the Multicast Replication
        Control Message, these contents consist of:
	  <list style="symbols">
	    <t>a Command Code field;</t>
	    <t>an Accounting field;</t>
	    <t>an instance of the Multicast-Flow TLV.</t>
	  </list>

 	  <xref target="FIG_command"></xref> illustrates the complete Command TLV
        with the contents specific to the Multicast Replication Control message.
        </t>

        <t><figure anchor="FIG_command"
            title="Contents of the Command TLV in the Multicast Replication
Control Message">
            <preamble></preamble>

            <artwork><![CDATA[
                      1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |     TLV Type = Command      |       Command-TLV Length      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |Command Code |  Accounting   |         Reserved              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                     Multicast-Flow TLV                      |
  |                           ...                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Other embedded TLV Type   |   Other embedded TLV Length   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                             |
  ~                   Other embedded TLV data                   ~
  |                                                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure></t>

        <t><list hangIndent="10" style="hanging">
            <t hangText="Command Code:"><vspace blankLines="0" />
            Command directive:
            <list style="empty">
			<t> 0x01 &ndash; Add;</t>
			<t> 0x02 &ndash; Delete;</t>
			<t> 0x03 &ndash; Delete All;</t>
                  <t> 0x04 &ndash; Admission Control Reject;</t>
			<t> 0x05 &ndash; Conditional Access Reject;</t> 
			<t> 0x06 &ndash; Admission Control and Conditional Access Reject.</t>
            </list>
            Directives 0x04 through 0x06 are used as described in <xref 
            target="Admit_recv"/>
            </t>

            <t hangText="Accounting:"><vspace blankLines="0" /> 
            Meaningful only when the Command Code is "Add" (0x01).
            In that case, 0x00 indicates no flow accounting, 0x01 indicates
            that octet accounting for the flow is to commence. The
            Accounting field MUST be set to 0x00 for other Command Code
            values. </t>

            <t hangText="Reserved:"><vspace blankLines="0" /> 
            Reserved for future use. MUST be set to 0x0000 by the sender
            and ignored by the receiver.</t>

            <t hangText="Multicast-Flow TLV:"><vspace blankLines="0" />
            An instance of the Multicast-Flow TLV (<xref 
target="TLV_multicast-flow"/>) specifying the flow to be added or deleted. The
Multicast-Flow TLV MUST be omitted if the Command Code has value "Delete All"
(0x03).</t>

            <t hangText="Other embedded TLV:"><vspace blankLines="0" />
            No other embedded TLVs are currently specified within the Multicast
            Replication Control message/Command TLV. Unrecognized
            embedded TLVs SHOULD be silently discarded.</t>
          </list></t>

        <t>The figure below is an example of a Multicast Replication Control
        message that would result in a swap from multicast SSM flows
        192.0.2.1, 233.252.0.2, to 192.0.2.2, 233.252.0.3 on the Target
        identified by the &ldquo;Access Loop Circuit ID&rdquo;:</t>

        <figure>
          <preamble></preamble>

          <artwork><![CDATA[
                          1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Type (0x88-0C)         |           Length              |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     | Vers  |  Sub  |MessageType=144| 0x02  |     Result Code       | 
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     | Partition ID  |            Transaction Identifier = 0001      | 
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     |I|      SubMessage Number      |           Length              | 
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Type = Target 0x1000   |        Target TLV Length      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     | Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     |                                                               |
     ~                    Access Loop Circuit ID                     ~
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Type = Command TLV     |  Command-TLV Length = 0x0014  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     | Cmd Code=0x02 |Acctg = 0x00   |      Reserved = 0x0000        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |TLV Type = Multicast-Flow      |      TLV Length = 0x000C      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     |Flow Type=0x02 |AddrFam = 0x01 |      Reserved = 0x0000        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |             Multicast Group Address: 233.252.0.2              |  
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+--+
     |                       Source Address =  192.0.2.1             |  
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+--+
     |        Type = Command-TLV     |  Command-TLV Length = 0x0014  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     | Cmd Code=0x01 |Acctg = 0x01   |      Reserved = 0x0000        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |TLV Type = Multicast-Flow      |      TLV Length = 0x000C      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     |Flow Type=0x02 |AddrFam = 0x01 |      Reserved = 0x0000        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |             Multicast Group Address = 233.252.0.3             |    
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                       Source Address =  192.0.2.2             |  
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+--+
]]></artwork>

          <postamble></postamble>
        </figure>

        <section anchor="ReplicSend" title="Sender Behaviour">
          <t>The NAS MAY issue a Multicast Replication Control message to the
          AN to convey one or more directives to add (join) or delete (leave)
          one or more multicast flows.</t> 

<t>The NAS MAY send this message on its own
          initiative to support the NAS initiated Multicast Control use case
          presented in <xref target="RFC5851"></xref> and
          summarized in <xref target="nasinitiated-usecase"></xref>. In that
case, the NAS MUST set the Result field to AckAll (0x2) or Nack (0x1) according
to its requirements. </t>

<t>          The NAS
MAY also send this message in response to a Multicast Admission Control
          message (defined in <xref target="admission-control"></xref>)
          received from the AN to support the conditional access and admission
          control use case presented in <xref
          target="RFC5851"></xref> and summarized in <xref
          target="cac-usecase"></xref>. In that case, the NAS MUST set the
Result field to NAck (0x1).</t>

<t>In either case, the sender MUST populate the Result Code field with the value
0x000 and the
   ANCP Transaction Identifier field with a unique value, as described
   in Section 3.6.1.6 of <xref target="RFC6320"/>.</t>

          <t>Each Multicast Replication Control Message MUST contain one or
          more commands, each encapsulated in its own Command TLV. The sender
          MUST use a separate Command TLV for each distinct multicast
          flow.</t>

          <t>When the order of processing of two commands does not matter, the
          commands MUST be transmitted in separate Multicast Replication
          Control messages.</t>

        </section>

        <!-- ReplicSend -->

        <section anchor="ReplicRecv" title="Receiver Behaviour">
          <t>When successive commands (in the same or different messages)
          relate to the same Target and multicast flow, the state of each
          feature controlled or affected by attributes
          received in the Multicast Replication Control message, SHALL be as
          set by the last command or message referring to that target and flow
          and containing the controlling attribute. As an
          example, successive Multicast Replication Control messages
          containing add commands for a given port and flow, but differing
          only in the Accounting field setting SHALL be interpreted to mean
          that the state of the accounting feature is as set in the final
          command received, but all other features are as set in the initial
          message.</t>

          <t>If more than one Command TLV is present in a Multicast
          Replication Control message, the AN MUST act on the commands in the
          order in which they are presented in the message. The AN SHALL
          assign a sequence number to each command in a given Multicast
          Replication Control message, starting from 0x01 for the first
          command.</t>

<t>If a Command TLV adds a flow and the AN is performing admission control for
Multicast Replication Control messages, then the AN MUST perform admission
control before replicating the flow. If the admission control check fails, the
AN MUST treat the failure as an error as described below. The appropriate Result Code
value for the response is 18 (0x012) "Insufficient resources".</t>

<t>If the AN processes the complete Multicast Replication
   Control message successfully and the Result field of the Multicast
Replication
   Control message was set to AckAll (0x2), the AN MUST respond with a Generic
Response message where the Result field is set to Success (0x3), the Result Code field
is set to 0x000, and the Transaction Identifier field is copied from the
Multicast Replication Control message. The body of the response MAY be empty or
MAY be copied from the Multicast Replication Control message.</t>

<t>If the AN processes the complete Multicast Replication Control message
successfully and the Result field of the Multicast Replication Control message
was set to Nack (0x1), the AN MUST NOT respond to the message.</t>


          <t>The processing/execution of multiple commands contained in a
          single Multicast Control message MUST be interrupted at the first
          error encountered, and the remaining commands in the Multicast
          Replication Control message discarded.</t>

          <t>If the AN detects an error in a received Multicast Replication
          Control message and the Result field in that message was set to Nack
(0x1)
          or AckAll(0x2), the AN MUST generate a Generic Response message
          providing error information to the NAS. This specification
          identifies the following new Result Code values beyond those specified in
          <xref target="RFC6320"></xref>, which MAY be used in
          a Generic Response sent in reply to a Multicast Replication Control
          message: <list style="hanging">
              <t hangText="100">Command error. This SHOULD be reported for
              the case that an invalid command code has been received.</t>

              <t hangText="101">Bad flow address. This SHOULD be reported
              for the following cases: <list style="symbols">
                  <t>unsupported address family;</t>
                  <t>source address present for an ASM flow, or absent
                  for an SSM flow.</t>
                </list></t>

              <t hangText="102">Multicast flow does not exist. This SHOULD
              be reported if the NAS attempts to delete a flow that is not
              enabled.</t>
            </list></t>

          <t>A Generic Response message responding to the Multicast
          Replication Control message and containing one of the above Result Code
          values MUST include a Status-Info TLV which includes one or two
          embedded TLVs as follows: <list style="symbols">
              <t>a Sequence-Number TLV as described in <xref
              target="TLV_cmndNmbr"></xref>, giving the sequence number of the
              failed command, MUST be included;</t>

              <t>the failed Command TLV itself SHOULD be included.</t>
            </list></t>

<t><list style="empty">
<t>Note that the Error Message field of the Status-Info TLV MAY be used to
report more details than implied by the Result Code value in the message header. For
example, the Result Code value could be 101 and the Error Message field could contain
the text: "Source address present for ASM flow".</t>
</list>
</t>
        </section>

        <!-- ReplicRecv -->
      </section>

      <!-- replication-control -->

      <section anchor="admission-control"
               title="Multicast Admission Control Message">
        <t>This section defines a new message called the Multicast Admission
        Control message. The Multicast Admission Control message is sent by
        the AN to the NAS to request admission of a multicast flow, or to
        notify of the removal of a multicast flow, for a given target.</t>

        <t>The Message Type for the Multicast Admission Control message is
        145.</t>

        <t>The ANCP Multicast Admission Control message payload contains two
        TLVs: <list style="symbols">
            <t>Target TLV: The Target TLV is defined in <xref
            target="RFC6320"></xref>. It MUST appear once and
            only once in the Multicast Admission Control message. It is
            encoded as specified in <xref
            target="RFC6320"></xref> or extensions and identifies
            the AN port subject to the request for admission or release.</t>

            <t>Command TLV: The Command TLV is defined in <xref
            target="RFC6320"></xref>. It MUST be present. If it
            appears more than once, only the first instance is considered
            meaningful in the present version of this specification and the
            other instances are ignored.</t>
          </list></t>

        <t>Informative note: <list style="empty">
            <t>In the future, the specification of the Admission Control
            message may be extended to allow transport of more than a single
            directive (e.g. to carry both a leave from one group and a join to
            another group for the same Target). It is expected that this would
            support a similar notion of strict sequenced processing as
            currently defined for handling multiple directives in the
            Multicast Replication Control message whereby all directives
            following the first directive that can not be executed are not
            executed either. When the strict sequenced processing of the
            directives is not required the directives are distributed across
            separate messages.</t>
          </list></t>

        <t>The Command TLV has the same contents as were described above for the
        Multicast Replication Control message, with the following additions:
        <list style="symbols">
        <t>a Request-Source-IP TLV MAY be appended to the Command TLV as an 
        additional embedded TLV;</t>
        <t>similarly, a Request-Source-MAC TLV MAY be appended to the Command
TLV as an 
        additional embedded TLV.</t>
        </list>
        Note that the Command TLV length includes the length of any
        embedded TLVs, including the embedded TLV headers.
        </t>

        <section anchor="Admit_send" title="Sender Behaviour">
          <t>The AN sending the Multicast Admission Control message MUST set
          the Result field to Ignore (0x0).</t>

          <t>The AN MUST populate the ANCP Transaction Identifier field with a
          unique value, as described in Section 3.6.1.6 of <xref
          target="RFC6320"></xref> .</t>

          <t>The AN MUST encode the Command TLV as specified in <xref
          target="replication-control"></xref> with the following additional
          rules: <list style="symbols">
              <t>the Accounting field MUST be set to 0;</t>

              <t>the Command Code field MUST be set to "0x01 - Add" when the
              message conveys a Join , to "0x02 - Delete" when the message
              conveys a Leave and to "0x03 - Delete All" when the message
              conveys a Leave of all channels (on the target);</t>

              <t>The Multicast-Flow TLV within the Command TLV identifies the
              multicast flow subject
              to the request for admission or release. When the Command Code
              is 0x03, the Multicast-Flow TLV is meaningless and MUST
              be omitted.</t>

              <t>the Request-Source-IP embedded TLV MAY be included by the AN to
              convey the IP address of the sender of the join/leave message
              (e.g. IGMP/MLD Join/Leave) that triggered the AN to include the
              corresponding Command TLV in the Admission Control message. If
              it appears more than once, only the first instance is considered
              meaningful and the other instances are ignored.</t>

              <t>the Request-Source-MAC embedded TLV MAY be included by the AN
              to convey the MAC address of the sender of the join/leave
              message (e.g. IGMP/MLD Join/Leave) that triggered the AN to
              include the corresponding Command TLV in the Admission Control
              message. If it appears more than once, only the first instance
              is considered meaningful and the other instances are
              ignored.</t>
            </list></t>
        </section>

        <!-- Admit_send -->

        <section anchor="Admit_recv" title="Receiver Behaviour">
          <t>On receipt of an Multicast Admission Control message, the NAS:
          <list style="symbols">
              <t>MUST ignore the Result field;</t>

              <t>if the directive in the Multicast Admission Control message
              is "0x02 - Delete" or "0x03 - Delete All" and is processed
              correctly by the NAS, the NAS MUST NOT generate any ANCP message
              in response to the Multicast Admission Control message;</t>

              <t>if the directive in the Multicast Admission Control message
              is "0x01 - Add" and is accepted by the NAS, the NAS MUST
              generate a Multicast Replication Control in response to the
              Multicast Admission Control message. The Multicast Replication
              Control message: <list style="symbols">
                  <t>MUST contain a Result set to Nack (0x1);</t>

                  <t>MUST contain a Transaction ID generated by the NAS
                  (distinct non-zero, and linearly incremented by NAS for each
                  request per adjacency);</t>

                  <t>MUST contain the directive as accepted by the NAS. The NAS
                  MAY modify the Accounting field if flow accounting is
required.</t>
                </list></t>

              <t>if the directive in the Multicast Admission Control message
              is "0x01 - Add", is processed correctly but not accepted by the
              NAS (i.e. it does not pass the admission control or conditional
              access check), the NAS MAY generate a Multicast Replication
              Control message in response to the Multicast Admission Control
              message. This optional message can be used by the AN to maintain
              statistics about admission control rejections.
              <list style="empty">
              <t> In the future, the AN may be able to notify the subscriber
that the request was rejected (e.g. using <xref 
target="I-D.morin-mboned-igmpmld-error-feedback"></xref>).</t>
              </list>
              When used in this situation, the Multicast Replication Control
              message: <list style="symbols">
                  <t>MUST contain a Result set to 0x0;</t>

                  <t>MUST contain a Transaction ID generated by the NAS
                  (distinct non-zero, and linearly incremented by NAS for each
                  request per adjacency);</t>

                  <t>MUST contain the directive rejected by the NAS (i.e.
                  Target TLV and Command TLV) but with a Command Code set to
                  "0x04 - Admission Control Reject", "0x05 - Conditional
                  Access Reject", or "0x06 - Admission Control and Conditional
                  Access Reject".</t>
                </list></t>

              <t>if the Multicast Admission Control message cannot be
              processed correctly by the NAS (e.g. the message is malformed,
              the multicast flow does not exist etc.), the NAS MUST generate a
              Generic Response message (defined in Section 4.2 of <xref
              target="RFC6320"></xref>) with appropriate
              content indicating the reason for the failure.</t>
            </list></t>
        </section>

        <!-- Admit_recv -->
      </section>

      <!-- admission-control -->

      <section anchor="MSG_bw_realloc_req"
               title="Bandwidth Reallocation Request Message">
        <t>The Bandwidth Reallocation Request message is used when the
        bandwidth delegation capability is included in the negotiated set. It
MAY be sent
        either by the NAS or by the AN to request an adjustment in the amount
        of delegated bandwidth. It will be sent by the NAS typically to reduce
        the multicast bandwidth allocated to the AN in order for the NAS to
        satisfy a request to add one or more flows. Conversely, the AN
        will send a Bandwidth Reallocation Request to obtain additional
        bandwidth to satisfy a request to add a multicast channel. In each
        case, the requestor has a minimum requirement for additional
        bandwidth, and MAY ask for additional bandwidth beyond this amount
        (e.g., to handle anticipated future requests).</t>

        <t>The Bandwidth Reallocation Request message contains two TLVs: <list
            style="symbols">
            <t>the Target TLV (Section 4.3 of <xref
            target="RFC6320"></xref> or an extension),
            specifying a single access line;</t>

            <t>the Bandwidth-Request TLV (<xref
            target="TLV_bw_request"></xref>), specifying the required and
            preferred amounts of delegated bandwidth.</t>
          </list></t>

        <t>The Message Type for the Bandwidth Reallocation Request message is
        146.</t>

        <section anchor="BWReq_Send" title="Sender Behaviour">
          <t>The Result field in the header of the Bandwidth Reallocation
          Request message is not used and the sender MUST set it to Ignore
          (0x0).</t>

          <t>The bandwidth values in the Bandwidth-Request TLV are expressed
          in terms of total multicast bandwidth allocated to the AN. <list
              style="empty">
              <t>The choice of "total bandwidth" rather than "incremental
              bandwidth" was made so that it would be easier for the AN and
              NAS to keep their respective views of the current amount of
              delegated bandwidth synchronized.</t>
            </list> Because the values are totals rather than desired
          increments/decrements, the relationship between the required amount
          and the preferred amount will differ depending on whether the
          Bandwidth Reallocation Request message is issued by the NAS or the
          AN. <list style="symbols">
              <t>If the NAS is making the request, the preferred amount MUST
              be less than or equal to the required amount. The required
              amount MUST be less than the currently amount of delegated
              bandwidth.</t>

              <t>If the AN is making the request, the preferred amount MUST be
              greater than or equal to the required amount. The required
              amount MUST be greater than the currently amount of delegated
              bandwidth.</t>
            </list></t>
        </section>

        <!-- BWReq_Send -->

        <section anchor="BWReq_Recv" title="Receiver Behaviour">
          <t>When the peer receives a valid Bandwidth Reallocation Request
          message, it SHOULD determine whether it can satisfy the request from
          its existing allocation of unused video bandwidth. If it decides
          that it can reallocate bandwidth to the peer, it MAY choose to
          return any amount between the required and the preferred amounts
          indicated in the Bandwidth Reallocation Request message.</t>

          <t>The peer MUST return a Bandwidth Transfer message <xref
          target="MSG_bw_transfer_req"></xref> indicating its decision. If the
          request is met, the Result field of the Bandwidth Transfer message
          MUST be set to Success (0x3), the Result Code field MUST be set to 0x000,
and the Bandwidth-Allocation TLV
          (<xref target="TLV_bw_alloc"></xref>) MUST contain the new value of
          total multicast bandwidth. This new value MUST lie between the
          required and preferred values, inclusive, from the request message.
          If the request is not met, the Result field of the Bandwidth
          Transfer message MUST be set to Failure (0x4), the Result Code field MUST
          be set to 0x000, and the Bandwidth Allocation TLV MUST contain the
          value of the currently allocated amount of delegated bandwidth as
          the responder views it.</t>

          <t>The following cases indicate that the sender holds a different
          view of the amount of delegated bandwidth from the receiver: <list
              style="symbols">
              <t>the NAS receives a request where the required amount is less
              than its view of the current amount of delegated bandwidth;</t>

              <t>the AN receives a request where the required amount is
              greater than its view of the current amount of delegated
              bandwidth.</t>
            </list></t>

          <t>If one of these cases occurs, the receiver with one exception
          MUST send a Bandwidth Transfer message indicating Success. <list
              style="symbols">
              <t>If the NAS received the request, the allocated amount in the
              NAS's response MUST be at least equal to NAS's view of the
              current amount of delegated bandwidth.</t>

              <t>If the AN received the request, the allocated amount in the
              AN's response MUST be no greater than the AN's view of the
              current amount of delegated bandwidth.</t>
            </list> The exception is when the NAS receives a request while it
          has a request of its own outstanding. Handling of that case is
          described below.</t>

          <t><list style="empty">
              <t>While the cases just described are an error condition, the
              success response achieves a graceful recovery.</t>
            </list></t>

          <t>To avoid deadlock due to race conditions, the following rules
          MUST be applied: <list style="letters">
              <t>If the NAS receives a Bandwidth Reallocation Request message
              while it has a Bandwidth Reallocation Request message of its own
              outstanding for the same access line, the NAS MUST provide an
              immediate failure response to the request from the AN, with a
              Result Code value set to 105 "Bandwidth request conflict".</t>

              <t>If the AN receives a Bandwidth Reallocation Request message
              while it has a Bandwidth Reallocation Request message of its own
              outstanding for the same access line, the AN MUST release any
              bandwidth it has already committed to an outstanding Join
              request while it is awaiting a response from the NAS. It MUST
              decide upon and send its response to the NAS taking the released
              bandwidth into account.</t>
            </list> </t>

          <t>If the receiver is unable to process the Bandwidth Reallocation
          Request message due to an error, then the receiver MUST return a
          Bandwidth Transfer message where: <list style="symbols">
              <t>the Result field is set to Failure (0x4),</t>

              <t>the Result Code field is set appropriately to indicate the type of
              error that was detected,</t>

              <t>the Bandwidth Allocation TLV contains the value of the
              current amount of delegated bandwidth as the responder views it,
              and</t>

              <t>a Status-Info TLV MAY follow the Bandwidth Allocation TLV
giving
              further information about the error.</t>
            </list></t>

          <t>This specification provides three new Result Code values applicable
          specifically to the contents of the Bandwidth-Request TLV. These
          Result Code values by their nature MUST only be used when the error is
          being reported in a Bandwidth Transfer message rather than a Generic
          Response message. <list style="hanging">
              <t hangText="103">invalid preferred bandwidth amount. This
              indicates that the preferred and required amounts of bandwidth
              in the TLV do not have the numerical relationship described in
              the previous section.</t>

              <t hangText="104">inconsistent views of delegated bandwidth
              amount. This will appear only in a Bandwidth Transfer message
              from the NAS to the AN in the case where the NAS has an
              outstanding Bandwidth Reallocation Request. The recommended
              procedure for recovery is described in <xref
              target="BWTran_Recv"></xref>.</t>

              <t hangText="105">bandwidth request conflict. The NAS has
              rejected the AN's request for more bandwidth because the NAS has
              an outstanding bandwidth request.</t>
            </list></t>
        </section>

        <!-- BWReq_Recv -->
      </section>

      <!-- MSG_bw_realloc_req -->

      <section anchor="MSG_bw_transfer_req" title="Bandwidth Transfer Message">
        <t>The Bandwidth Transfer message is used to transfer video bandwidth
        from the sender to the peer for a specific access line. This message
        MAY be sent either from the AN or from the NAS. As described in the
        previous section, it is the required response to a valid Bandwidth
        Reallocation Request message.</t>

        <t>The Bandwidth Transfer message MAY also be used to transfer
        bandwidth autonomously from one peer to another. One example of this
        usage is to release bandwidth borrowed earlier by means of the
        Bandwidth Reallocation Request message. When the message is used in
        this way, the Result field in the Bandwidth Transfer message MUST be
        set to Ignore (0x0). <list style="empty">
            <t>This allows the receiver to distinguish between an autonomous
            transfer and a response to a previous Bandwidth Reallocation
            Request, for purposes of validation.</t>
          </list></t>

        <t>The Message Type for the Bandwidth Transfer message is 147. The
        Bandwidth Transfer message contains the following TLVs: <list
            style="symbols">
            <t>the Target TLV, designating the access line concerned;</t>

            <t>an instance of the Bandwidth-Allocation TLV (<xref
            target="TLV_bw_alloc"></xref>). The bandwidth value in the
            Bandwidth-Allocation TLV is the new amount of delegated bandwidth
            allocated to the target.</t>
          </list></t>

        <section anchor="BWTran_Send" title="Sender Behaviour">
          <t>When sending a Bandwidth Transfer message where the Result value
          is Ignore (0x0) or Success (0x3), the following relationships MUST
          hold: <list style="symbols">
              <t>if the message is sent by the NAS, the bandwidth value in the
              Bandwidth-Allocation TLV MUST be greater than or equal to the
sender's view
              of the current amount of delegated bandwidth for the access line
              concerned;</t>

              <t>if the message is sent by the AN, the bandwidth value in the
              Bandwidth-Allocation TLV MUST be less than or equal to the
sender's view of
              the current amount of delegated bandwidth for the access line
              concerned.</t>
            </list></t>

          <t>Further sender behaviour is specified above, in <xref
          target="BWReq_Recv"></xref>.</t>
        </section>

        <!-- BWTran_Send -->

        <section anchor="BWTran_Recv" title="Receiver Behaviour">
          <section anchor="BWTran_R-NAS" title="Behaviour of the NAS">
            <t>If the amount of delegated bandwidth provided in the
            Bandwidth-Allocation TLV is not greater than the NAS's view of the
            current amount of delegated bandwidth, the NAS MUST update its
            view of the current amount of delegated bandwidth to the amount
            indicated in the Bandwidth Transfer message. This is required
            regardless of whether the Result field of that message indicates
            Success or Failure.</t>

            <t>If the amount of delegated bandwidth provided in the
            Bandwidth-Allocation TLV is greater than the NAS's view of the
            current amount of delegated bandwidth, the NAS MAY accept the
            given value as its new value of delegated bandwidth.
            Alternatively, the NAS MAY force the AN to modify its view of the
            amount of delegated bandwidth to that held by the NAS, by sending
            a Port Management message for the target access line concerned,
            containing a Bandwidth-Allocation TLV with a value equal to the
            amount of delegated bandwidth the NAS wishes to enforce.</t>
          </section>

          <!-- BWTran_R-NAS -->

          <section anchor="BWTran_R_AN" title="Behaviour of the AN">
            <t>If the amount of delegated bandwidth provided in the
            Bandwidth-Allocation TLV of the Bandwidth Transfer message differs
            from the AN's view of the current amount of delegated bandwidth,
            the AN MUST update its view of the current amount of delegated
            bandwidth to the amount indicated in the Bandwidth Transfer
            message. This is required with the exception of a Bandwidth
            Transfer message with a Result field equal to Failure (0x4) and a
            Result Code field equal to 104 "Inconsistent views of delegated
            bandwidth amount" or 105 "Bandwidth request conflict". If Result Code
            value 104 is received, the AN MUST issue a Delegated Bandwidth
            Query Request message to determine the NAS's current view of the
            amount of delegated bandwidth. The AN MUST update its own view
            based on the value returned in the Delegated Bandwidth Query
            Response. If Result Code value 105 is received, the AN SHOULD carry out
            this procedure unless it can account for the discrepancy as a
            result of a transfer of bandwidth to the NAS that was carried out
            just before the incoming Bandwidth Transfer message was
            processed.</t>

            <t><list style="empty">
                <t>The two Result Code values indicate a race condition where the AN
                may have just completed a transfer of bandwidth to the NAS. As
                a result, the value given in the Bandwidth Transfer message
                may be outdated, and the AN needs to query the NAS to find its
                latest view. The procedure assumes that ordering is preserved
                between the Bandwidth Transfer message sent by the AN in
                response to the NAS's request and the subsequent Delegated
                Bandwidth Query Request message.</t>
              </list></t>

            <t>If as the result of the procedures just described the AN
            determines that it has over-committed multicast bandwidth, it MUST
            NOT terminate any currently-active programs, but MUST NOT honour
            any more "join" requests until it is possible to do so within the
            limit set by its current value of delegated bandwidth.</t>
          </section>

          <!-- BWTran_R_AN -->
        </section>

        <!-- BWTran_Recv -->
      </section>

      <!-- MSG_bw_transfer_req -->

      <section anchor="MSG_bw_query"
               title="Delegated Bandwidth Query Request Message">
        <t>The Message Type for the Delegated Bandwidth Query Request (and
        Response) messages is 148.</t>

        <t>The Delegated Bandwidth Query Request message MAY be sent either by
        the NAS or by the AN to retrieve the peer's view of the amount of
        delegated bandwidth. The request contains one TLV: <list
            style="symbols">
            <t>a Target TLV designating the access line for which the
            information is requested.</t>
          </list></t>

        <section anchor="MSG_bw_query_Send" title="Sender Behaviour">
          <t>The sender MUST set the Result field in the header of the
          Delegated Bandwidth Query Request message to AckAll
          (0x2). The Result Code value MUST be set to 0x000. The sender MUST populate
          the ANCP Transaction Identifier field with a unique value, as
          described in Section 3.6.1.6 of [RFC6320].</t>
        </section>

        <!-- MSG_bw_query_Send -->

        <section anchor="MSG_bw_query_Recv" title="Receiver Behaviour">
          <t>If the AN or NAS receives a valid Delegated Bandwidth Query
          Request message, it MUST respond with a Delegated Bandwidth Query
          Response message. The Result field in the header of the response
          MUST be set to Success (0x3). The Result Code field MUST be set to 0x000.
          The Transaction-Id field MUST be copied from the request message.
          The body of the response MUST contain the Target TLV, copied from
          the request message. Finally, the body of the response MUST contain
          a Bandwidth-Allocation TLV, containing the current amount of
          delegated bandwidth from the point of view of the receiver of the
          request.</t>

          <t>If the contents of the Delegated Bandwidth Query Request message
          are in error, the receiver MUST return a Delegated Bandwidth Query
          Response message with the Result field in the header set to Failure
          (0x3). The Result Code field MUST be set to the value that indicates the
          nature of the error (e.g., 4 "Unrecognized target"). The
          Transaction-Id field MUST be copied from the request. The body of
          the response MUST contain the Target TLV copied from the request.
          This MAY be followed by a Status-Info TLV giving further information
          about the error.</t>
        </section>

        <!-- MSG_bw_query_Recv -->
      </section>

      <!-- MSG_bw_query -->

<section anchor="MSG_bw_query_resp" title="Delegated Bandwidth Query Response
Message">

        <t>The Delegated Bandwidth Query Response message is sent in reply to
        a Delegated Bandwidth Query Request. The response to a valid request
        contains two TLVs: <list style="symbols">
            <t>the Target TLV, copied from the request;</t>

            <t>a Bandwidth-Allocation TLV, giving the responder's view of the
            current amount of multicast bandwidth delegated to the AN.</t>
          </list></t>

        <t>The Message Type for the Delegated Bandwidth Query Response message
is 148.</t>

<section anchor="MSG_bw_resp_Send" title="Sender Behaviour">

<t>Sender behaviour for the Delegated Bandwidth Query Response message is
specified in <xref target="MSG_bw_query_Recv"/>.</t>

</section><!-- MSG_bw_resp_Send -->

<section anchor="MSG_bw_resp_Recv" title="Receiver Behaviour">

<t>If the Delegated Bandwidth Query Response message indicates Success (0x3),
the following actions apply.</t>

<section anchor="MSG_bw_resp_Recv_NAS" title="Behaviour at the NAS">

  <t> If the amount of delegated bandwidth provided in the Bandwidth-
   Allocation TLV is less than the NAS's view of the current
   amount of delegated bandwidth, the NAS MUST update its view of the
   current amount of delegated bandwidth to the amount indicated in the
   Delegated Bandwidth Query Response message.</t>

<t>   If the amount of delegated bandwidth provided in the Bandwidth-
   Allocation TLV is greater than the NAS's view of the current amount
   of delegated bandwidth, the NAS MAY accept the given value as its new
   value of delegated bandwidth.  Alternatively, the NAS MAY force the
   AN to modify its view of the amount of delegated bandwidth to that
   held by the NAS, by sending a Port Management message for the target
   access line concerned, containing a Bandwidth-Allocation TLV with a
   value equal to the amount of delegated bandwidth the NAS wishes to
   enforce.</t>

</section><!-- MSG_bw_resp_Recv_NAS -->

<section anchor="MSG_bw_resp_Recv_AN" title="Behaviour at the AN">

<t>   The AN SHOULD accept the value returned in the Bandwidth-Allocation TLV
of the Delegated Bandwidth Query Response message as the correct value of the
current amount of delegated bandwidth. If the AN has currently committed more
than this amount to active programs, it MUST NOT cease replicating the flows
concerned, but MUST NOT honour any more Join requests until possible to do so
within the new limit.

<list style="empty">
<t>A race condition is possible, where the AN sends a query, the NAS requests
more bandwidth, then receives and responds to the query, then receives the
Bandwidth Transfer message responding to its request. It is up to the AN to
take appropriate action in this case. The best action appears to be not to act
on the result of the first query, but to repeat the query after sending the
Bandwidth Transfer message. Similar considerations apply to a race between
queries from both sides.</t>
</list>
</t>

</section><!-- MSG_bw_resp_Recv_AN -->

</section><!-- MSG_bw_resp_Recv -->

</section><!-- MSG_bw_query_resp -->


      <section anchor="MSG_flow_query"
               title="Multicast Flow Query Request and Response Messages">

        <t>This section defines two new messages called the Multicast Flow
        Query Request and Multicast Flow Query Response. The Multicast Flow
        Query Request is sent by the NAS to request information about the
        multicast flows that are active on the AN. The Multicast Flow Query
        Response is sent in response by the AN to provide the requested
        information to the NAS.</t>

        <t>The Message Type for the Multicast Flow Query Request and Multicast
        Flow Query Response messages is 149.</t>

        <t>The contents of the Multicast Flow Query Request and Response
        depend on the nature of the query, as described below.</t>

        <section anchor="MSG_flow_query_Send" title="Sender Behaviour">

          <t>The sender of a Multicast Flow Query Request message MUST set the
          Result field to AckAll (0x2). The Result Code field MUST be set to 0x000.
          The sender MUST populate the ANCP Transaction Identifier field with
          a unique value, as described in section 3.6.1.6 of
          [RFC6320].</t>

          <t>The Multicast Flow Query Request MAY be used by the NAS to
          retrieve: <list style="symbols">
              <t>the AN's view of which multicast flows are currently active
              on a specified set of access ports; or</t>

              <t>the AN's view of the access ports on which a specified set of
              multicast flows are currently active; or</t>

              <t>the AN's view of all the multicast flows currently active on
              each and every port of the AN.</t>
            </list>
            </t>

          <t>To retrieve the AN's view of which multicast flows are currently
          active on a given port of the AN, the NAS MUST include a Target TLV 
          in the Multicast Flow Query Request payload identifying that port.
          The Target TLV is encoded as specified in <xref 
target="RFC6320"></xref>.</t>

          <t>To retrieve the AN's view of the ports currently receiving a given
          multicast flow, the NAS MUST include a Multicast-Flow TLV in the
Multicast Flow
          Query Request payload identifying that flow. The Multicast-Flow TLV
is encoded
          as specified in <xref target="TLV_multicast-flow"></xref>.</t>

          <t>The NAS MAY include multiple Target TLVs or multiple Multicast-Flow
          TLVs in the Multicast Flow Query Request, but MUST NOT include both
          Target and Multicast-Flow TLVs in the same message.</t>

          <t> To retrieve the AN's view of all of the multicast flows
          currently active on each port of the AN, the NAS MUST send a Multicast
          Flow Query Request which does not contain any instance of the Target
TLV or
          the Multicast-Flow TLV.</t>
        </section>

        <!-- MSG_flow_query_Send -->

        <section anchor="MSG_flow_query_Recv" title="Receiver Behaviour">

          <t>The AN MUST respond to a Multicast Flow Query Request message
          that has a valid format and a valid content with a Multicast Flow
          Query Response message. The Result field in the response MUST be set
          to Success (0x3). The Result Code field MUST be set to 0x000. The
          Transaction-Id field MUST be copied from the request.</t>

          <t>If the Multicast Flow Query Request contained one (or more)
          Target TLVs, the AN MUST include, for each of these Target TLVs, the
          following set of TLVs:</t>

          <t><list style="symbols">
              <t>Target TLV. This MUST be identical to the Target TLV in the
              received Multicast Flow Query Request message.</t>

              <t>Multicast-Flow TLV(s). The Multicast-Flow TLV MUST appear
              once per multicast flow that is currently active on the AN port
              identified in the preceding Target TLV.</t>
            </list></t>

          <t>The Target TLVs MUST appear in the response from the AN in the
          same order as in the query from the NAS.</t>

          <t>If the Multicast Flow Query Request contained one (or more)
          Multicast-Flow TLVs, the AN MUST include, for each of these
          Multicast-Flow TLVs, the following set of TLVs:</t>

          <t><list style="symbols">
              <t>Multicast-Flow TLV. This MUST be identical to the Multicast-
Flow TLV
              in the received Multicast Flow Query Request message.</t>

              <t>Target TLV(s). The Target TLV MUST appear once per AN port on
              which the multicast flow identified in the preceding Multicast
              Flow TLV is active.</t>
            </list></t>

          <t>The Multicast-Flow TLVs MUST appear in the response from the AN
          in the same order as in the query from the NAS.</t>

          <t>If the Multicast Flow Query Request contained no Target TLV and
          no Multicast Flow TLV, the AN MUST include, for each AN port currently
          receiving multicast flow(s), the following set of TLVs:</t>

          <t><list style="symbols">
              <t>Target TLV. This MUST identify one AN port.</t>

              <t>Multicast-Flow TLV(s). The Multicast-Flow TLV MUST appear
              once per Multicast Flow that is currently active on the AN port
              identified in the preceding Target TLV.</t>
            </list></t>

          <t>If the contents of the Multicast Flow Query Request are in error,
          the AN MUST reply with a Multicast Flow Query Response message with
          the Result field set to Failure (0x4) and the Result Code field set to
          indicate the nature of the error. If the request contained multiple
          instances of the Target TLV or the Multicast-Flow TLV and one of
          these is in error, the response message MUST contain the results for
          the preceding instances of the TLV as if there had been no error.
          These successful results MUST be followed by the TLV in error,
          copied from the request. The AN MUST NOT do further processing of
          the request. The AN MAY add a Status-Info TLV to provide further
          information on the nature of the error.</t>

        </section><!-- MSG_flow_query_Recv -->
      </section><!-- MSG_flow_query -->

<section anchor="MSG_comBW_Rep" title="Committed Bandwidth Report Message">

<t>This section describes the Committed Bandwidth Report message, which is sent
from the AN to the NAS to report the most recent amount of multicast bandwidth
usage committed to one or more access lines.</t>

<t>The Message Type for the Committed Bandwidth Report message is 150.</t>

<t>The Committed Bandwidth Report message contains one or more instances 
of the Committed-Bandwidth TLV, as described in <xref target="TLV_Com_BW"/>.</t>

<section anchor="ComBW_Rep_send" title="Sender Behaviour">

          <t>The sender of a Committed Bandwidth Report message MUST set the
Result field to Ignore (0x0). The Result Code field MUST be set to 0x000. The sender
MUST populate the ANCP Transaction Identifier field with a unique value, as
described in section 3.6.1.6 of [RFC6320].</t>

<t>Each instance of the Committed-Bandwidth TLV included in the message MUST
identify an access line for which the amount of committed multicast bandwidth
has changed since the previous Committed Bandwidth Report message was sent and
MUST report the latest amount of multicast bandwidth committed to that line.
There MUST be only one instance of the Committed-Bandwidth TLV present in the
message for any given access line. The message MUST include an instance of the
Committed-Bandwidth TLV for every access line for which committed multicast
bandwidth has changed since the previous Committed Bandwidth Report message was
sent.</t>

<t>Further behaviour at the AN is specified in <xref 
target="CapProc_Com_BW_Rep"/>. </t>

</section><!-- ComBW_Rep_send -->

<section anchor="ComBW_Rep_recv" title="Receiver Behaviour">

<t>The usage of the contents of a Committed Bandwidth Report message
received by the NAS is implementation-dependent. One example is that the NAS
uses the reports of multicast bandwidth commitments to adjust its forwarding
scheduler operation to provide the intended level of QoS.</t>

<t>The NAS MUST NOT reply to a valid Committed Bandwidth Report message. 
The NAS MAY send a Generic Response message indicating the nature of
any errors detected in a Committed Bandwidth Report message that it
has received.</t>

</section><!-- ComBW_Rep_recv -->

</section><!-- MSG_comBW_Rep -->

    </section><!-- ANCP messages -->

    <!--
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->

    <section anchor="TLVs" title="ANCP TLVs For Multicast">
      <t>This section defines new ANCP TLVs for the control of multicast
flows.</t>

      <section anchor="TLV_msp"
               title="Multicast-Service-Profile TLV">
        <t>This document defines the new Multicast-Service-Profile TLV.</t>

        <t>The Multicast-Service-Profile TLV MAY be included in a Provisioning
        message as specified in <xref target="provisioning"></xref>.</t>

        <t>The Multicast-Service-Profile TLV is illustrated in <xref
        target="FIG_msp"></xref>. It consists of a TLV
        header encapsulating a single instance of the Multicast-Service-
Profile-Name
        TLV and one or more instances of the List-Action TLV.</t>

        <figure anchor="FIG_msp"
                title="Multicast-Service-Profile TLV">
          <artwork><![CDATA[
                    1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type = Mcast Serv Profile  |             TLV Length        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|   Multicast-Service-Profile-Name TLV                          |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   List-Action TLV                                             |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          ...                                  |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   List-Action TLV                                             |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

<t>The Multicast-Service-Profile TLV has the following fields:
<list style="symbols">
        <t>The Multicast-Service-Profile TLV Type is 0x13.</t>

        <t>The TLV length is determined by the contents following the TLV
header.</t>

        <t>The Multicast-Service-Profile-Name TLV is described in <xref 
        target="TLV_profile-name"/>. The Multicast-Service-Profile-Name TLV MUST
        contain an identifier which is unique over all profiles provisioned to
the
        same AN partition. This identifier will be used
        to refer to the profile when activating it for a given target within a
        Port Management message (see <xref 
target="port-management"></xref>).</t>

        <t>The List-Action TLV is described in <xref target="TLV_list-action"/>.
        The List-Action TLV(s) provide the content of a newly defined multicast
        service profile or modify the existing content. If more than one List-
Action
        TLV is present, the order of the TLVs may be significant, since List-
Action TLVs
        are processed in the order in whch they appear.
        </t>
</list>
</t>
      </section>

      <!-- TLV_msp -->

      <section anchor="TLV_profile-name"
               title="Multicast-Service-Profile-Name TLV">
        <t>The Multicast-Service-Profile-Name TLV carries the identifier of a
        multicast service profile provisioned on the AN. It is illustrated in
<xref
        target="FIG_mspName"/>.</t>

        <figure anchor="FIG_mspName"
                title="Multicast-Service-Profile-Name TLV">
          <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type = MSP Name            |             TLV Length        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|   Multicast service profile identifier                        |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

<t>The Multicast-Service-Profile-Name TLV has the following fields:
<list style="symbols">
            <t>The Multicast-Service-Profile-Name TLV Type is 0x18.</t>

            <t>TLV Length: up to 255 octets.</t>

            <t>Multicast service profile identifier: an opaque sequence of bits 
            identifying a specific multicast service profile.
<list style="empty">
<t>The identifier could have the form of human-readable text or an arbitrary
binary value, depending on the operator's practices.</t>
</list>
</t>
</list>
</t>
      </section>

      <!-- TLV_profile-name -->

<section anchor="TLV_list-action" title="List-Action TLV">
        <t>The List-Action TLV identifies multicast flows to be added to or
        removed from a list of White-, Black-, or Grey-listed flows. It is
        meaningful only in association with a Multicast-Service-Profile-Name TLV
        identifying the profile to which the List-Action TLV applies. Such an
	  association can be achieved by placing both TLVs in the same base
 	  message payload or as embedded TLVs of another TLV such as the
        Multicast-Service-Profile. The List-Action TLV is shown in <xref
        target="FIG_ListAct"></xref>.</t>

        <figure anchor="FIG_ListAct" title="List-Action TLV">
          <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TLV Type = List-Action TLV    |          TLV Length           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Operation     | List Type     |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Family                |     Number of flow fields     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Multicast flow fields                      |
                          ......
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Family                |     Number of flow fields     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Multicast flow fields                      |
                                 ......
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

<t>The  List-Action TLV contains the following fields: 
<list style="symbols">
            <t>The List-Action TLV Type is 0x21.</t>

            <t>TLV Length: length of the subsequent contents.</t>

            <t>Operation: operation to be performed upon the White, Black, or
Grey
            list identified by the List Type field within the profile identified
            by the associated Multicast-Service-Profile-Name embedded TLV.
            The possible values are:
<list style="symbols">
   <t> Add (0x01): the multicast flow fields are to be added to the list. </t>

   <t>Delete (0x02): the multicast flow fields are to be removed from the
list. Each multicast flow field in the List-Action MUST match exactly an
existing entry in the list concerned.
Thus to remove part of the range provided by a wildcarded list entry, it is
necessary to remove the entire entry and add back the remaining partial
range(s).</t>

   <t>Replace (0x03): the multicast flow fields replace the existing contents
of the list.</t>
</list>
</t>

            <t>List Type: the list type being modified by this List-Action. The
            possible values are White (0x01), Black (0x02), or Grey (0x03).</t>

            <t>Reserved: a sender MUST set this field to 0x0000. A receiver
            MUST ignore the contents of this field.</t>

            <t>Address Family: the IP version of the set of multicast
            flow fields that follow, encoded according to <xref
target="PIMreg"/>.
            Possible values are 0x0001 (IPv4) or 0x0002 (IPv6). Either an IPv4
            list or an IPv6 list or both MAY be present in the List-Action
TLV.</t>

            <t>Number of flow fields: the number of multicast flow fields of the
            given address family which follow.</t>

            <t>Multicast flow field: a field identifying one or
            more multicast flows. It consists of an 8-bit group address prefix
            length, an 8-bit source address prefix length, a 0-16 octet group
            prefix, and a 0-16 octet source prefix, as shown in <xref
            target="FIG_FlowField"></xref>.</t>
</list>
</t>

        <t>Each multicast flow field refers either to a Source-Specific
        Multicast (SSM) channel or to an Any Source Multicast (ASM) group. The
        scope of the designation may be broadened to multiple channels or
        groups through use of prefix length values smaller than the total
        address length for the given address family. Multicast flow fields
        MUST be placed consecutively within the embedded TLV without intervening
        padding except to round out individual addresses to the nearest octet
        boundary.</t>

        <t>A multicast flow field consists of two single-octet prefix lengths
        followed by zero to two prefix values as shown in <xref
        target="FIG_FlowField"></xref>:</t>

        <figure anchor="FIG_FlowField"
                title="Organization of a Single Multicast Flow Field">
          <artwork><![CDATA[
 +-+-+-+-+-+-+-+-+
 | Group PrefLen |
 +-+-+-+-+-+-+-+-+
 | Source PrefLen|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Group Prefix (multicast)  (0 to 16 octets)                    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Source Prefix (unicast, SSM only) (0 to 16 octets)            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

        <t>The prefix length has its usual meaning. It is the number of
        most-significant bits specified within the corresponding prefix. The
        prefix length MAY vary from 0 to 32 in the IPv4 sub-list, and from 0
        to 128 in the IPv6 sub-list.</t>

        <t>A value of 0x00 for either the Group PrefLen (prefix length) or the
        Source PrefLen indicates that any value of the corresponding address
        will match (wild card). If the value 0x00 is provided for a particular
        prefix length, the corresponding prefix MUST be omitted from the field
        contents. In particular, a value of 0x00 for the Source PrefLen
        indicates an ASM multicast entry, and the Source Prefix will be
        absent.</t>

        <t>The length of a Source or Group Prefix field is equal to (PrefLen +
        7)/8 octets, truncated to the nearest integer. Unused bits at the end
        of the prefix MUST be set to zeroes.</t>

</section><!-- TLV_list-action -->

      <section anchor="TLV_cmndNmbr" title="Sequence-Number TLV">
        <t>The Sequence-Number TLV conveys a sequence number of some sort.
        The specific meaning of the sequence number is message-specific. Within
        this specification, the Sequence-Number TLV
        is used as a embedded TLV within a Status-Info TLV, in a Generic
        Response reporting a failed command within a Multicast Replication
        Control or Multicast Admission Request message. It identifies the
        sequence number within the message of the command that failed.</t>

        <t>The Sequence-Number TLV has the format shown in <xref
        target="FIG_cmndNmbr"></xref>. </t>

        <figure anchor="FIG_cmndNmbr"
                title="Sequence-Number TLV">
          <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type = Sequence-Number     |          TLV Length = 4       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                       Sequence number                         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
]]></artwork>
        </figure>

<t>The Sequence-Number TLV has the following fields:
<list style="symbols">
	<t>The Sequence-Number TLV Type is 0x22.</t>

	<t>TLV length is 0x0004.</t>

	<t>Sequence number:  the sequence number of a specific entity within
       a series, where numbering starts from 1 for the first entity in the
series.
       Represented as a 32-bit binary number, most significant bit first.</t>
</list>
</t>
      </section>

      <!-- TLV_cmndNmbr -->

      <section anchor="TLV_bw_alloc" title="Bandwidth-Allocation TLV">

        <t>The Bandwidth-Allocation TLV is used to indicate the total amount
        of video bandwidth delegated to the AN for multicast admission control
        for a given access line, in kilobits per second. The TLV has the
        format shown in <xref target="FIG_bw_alloc"></xref>. </t>

        <figure anchor="FIG_bw_alloc" title="The Bandwidth-Allocation TLV">
          <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type = BW-Allocation       |          TLV Length = 4       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|          Delegated amount (kbits/s)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

<t>The Bandwidth-Allocation TLV has the following fields:
<list style="symbols">

	<t>The Bandwidth-Allocation TLV Type is 0x15.</t>

	<t>TLV length is 4.</t>

	<t>Delegated amount: the bandwidth amount delegated to the AN for admission
      of multicast video on a given port, kilobits per second. Presented as a
32-bit
      binary value, most significant bit first.</t>
</list>
</t>
      </section>

      <!-- TLV_bw_alloc -->

<section anchor="TLV_White_AC" title="White-List-CAC TLV">

<t>The White-List-CAC TLV is used to indicate that the NAS wishes the AN to do
admission control for White-listed flows. Details on when the White-List-CAC
TLV may be provisioned are specified in <xref target="CapDefs"/>. The White-
List-CAC TLV is illustrated in <xref target="FIG_WL-CAC"/>.</t>

        <figure anchor="FIG_WL-CAC" title="White-List-CAC TLV">
          <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type = White-List-CAC      |          TLV Length = 0       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
]]></artwork>
        </figure>

<t>The White-List-CAC TLV contains the following fields:
<list style="symbols">
	<t>The White-List-CAC TLV Type is 0x24.</t>
	<t>TLV length is 0, since the TLV contains no data other than the TLV
header.</t>
</list>
</t>

</section><!-- TLV_White_AC -->

<section anchor="TLV_MRepCtl_AC" title="MRepCtl-CAC TLV">

<t>The MRepCtl-CAC TLV is used to indicate that the NAS wishes the AN to do
admission control for flows added by the Multicast Replication Control message.
Details on when the MRepCtl-CAC TLV may be provisioned are specified in <xref
target="CapDefs"/>. The
MRepCtl-CAC TLV is illustrated in <xref target="FIG_MRepCtl-CAC"/>.</t>


        <figure anchor="FIG_MRepCtl-CAC" title="MRepCtl-CAC TLV">
          <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type = MRepCtl-CAC         |          TLV Length = 0       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
]]></artwork>
        </figure>

<t>The MRepCtl-CAC TLV contains the following fields:
<list style="symbols">
	<t>The MRepCtl-CAC TLV Type is 0x25.</t>
	<t>TLV length is 0, since the TLV contains no data other than the TLV
header.</t>
</list>
</t>

</section><!-- TLV_MRepCtl_AC -->

      <section anchor="TLV_bw_request" title="Bandwidth-Request TLV">

        <t>The Bandwidth-Request TLV is used to request an adjustment of the
        total amount of video bandwidth allocated to the AN for multicast
        admission control for a given line. The "Required amount" field
        indicates the minimum adjustment required to meet the request. The
        "Preferred amount" field indicates the adjustment the requestor would
        prefer to have, if possible. <xref target="MSG_bw_realloc_req"></xref>
        discusses the required relationships between the "Required amount",
        "Preferred amount", and current values of total bandwidth allocated to
        the AN.</t>

        <t>The Bandwidth-Request TLV has the format shown in <xref
        target="FIG_bw_req"></xref>.</t>

        <figure anchor="FIG_bw_req" title="The Bandwidth-Request TLV">
          <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type = Bandwidth-Request   |          TLV Length = 8       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|           Required amount  (kbits/s)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Preferred amount (kbits/s)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

<t>The Bandwidth-Request TLV has the following fields:
<list style="symbols">
	<t>The Bandwidth-Request TLV Type is 0x16.</t>

	<t>The TLV length is 8 octets.</t>

	<t>Required amount: the minimum or maximum amount, depending on whether
      the sender is the AN or the NAS respectively, of delegated video bandwidth
      that is being requested, in kilobits per second.  Presented as a 32-bit
      binary value, most significant bit first.</t>

	<t>Preferred amount: the preferred amount of delegated video bandwidth
	that is being requested, in kilobits per second.  Presented as a 32-bit
      binary value, most significant bit first.</t>
</list>
</t>
      </section>

      <!-- TLV_bw_request -->

      <section anchor="request-source-ip" title="Request-Source-IP TLV">

        <t>The Request-Source-IP TLV provides the IP address of the entity 
        that originated a specific request to join or leave a multicast
channel. The
        TLV is illustrated in <xref target="FIG_ReqSrc-IP"/>.</t>


<figure anchor="FIG_ReqSrc-IP" title="Request-Source-IP TLV">
            <artwork><![CDATA[
                      1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|  TLV Type = Request-Source-IP |   TLV length = 4 or 16        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Unicast Address                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure>

<t>The Request-Source-IP TLV contains the following fields:
<list style="symbols">
	<t>The Request-Source-IP TLV Type is 0x92.</t>

	<t>TLV length is 4 for an IPv4 address or 16 for an IPv6 address.</t>

	<t>Unicast address: IP address of the source of a multicast flow join
      request, in network byte order.</t>
</list>
</t>
      </section>

      <section anchor="request-source-mac" title="Request-Source-MAC TLV">

        <t>The Request-Source-MAC TLV provides the MAC address of the entity
that originated a specific request to join or leave a multicast channel. The TLV
is illustrated in <xref target="FIG_ReqSrc-MAC"/>.</t>

        <t><figure anchor="FIG_ReqSrc-MAC" title="Request-Source-MAC TLV">
            <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type=Request-Source-MAC    |     TLV Length = 6 or 8       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               |
+-+-+-                      IEEE MAC Address              +-+-+-+
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure></t>

<t>The Request-Source-MAC TLV contains the following fields:
<list style="symbols">
	<t>The Request-Source-MAC TLV Type is 0x93.</t>

	<t>TLV length is either 6 octets (MAC-48 or EUI-48) or 8 octets (EUI-64).</t>

	<t>IEEE MAC Address: MAC address of the device originating the request
      to join a multicast flow. Within the address, bytes and bits
respectively shall be ordered from most to least significant, consistently with
<xref target="IEEE48"/> for MAC-48 and EUI-48, and with <xref target="IEEE64"/>
for EUI-64.
<list style="empty">
   <t>EUI-48 and EUI-64 are registered trademarks of the IEEE.</t>
</list>
</t>
</list>
</t>

      </section>

      <section anchor="TLV_multicast-flow" title="Multicast-Flow TLV">

        <t>The Multicast-Flow TLV specifies a multicast flow in terms of its
        multicast group address and, if applicable, its unicast source address.
        It is illustrated in <xref target="FIG_MulFlow"/>.</t>

        <figure anchor="FIG_MulFlow" title="Multicast-Flow TLV">
          <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|TLV Type = Multicast-Flow      |      TLV Length               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Flow Type   |  Addr Family  |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Multicast Group Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+--+
|           Unicast Source Address (for SSM flows only)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

<t>The Multicast-Flow TLV has the following fields:
<list style="symbols">
	<t>The Multicast-Flow TLV Type is 0x19.</t>

	<t>TLV Length: ranges from a minimum of 8 (for an ASM IPv4 flow)
      to 36 (for an IPv6 SSM flow.</t>

      <t>Flow Type: 0x01 for Any Source Multicast (ASM), 0x02 for Specific-
Source
      Multicast (SSM).</t>

      <t>Addr Family: address family of the multicast source and group
addresses, encoded in accordance with the IANA PIM Address Family registry
(<xref target="PIMreg"/>). 0x01 indicates IPv4, 0x02 indicates IPv6.</t>

      <t>Reserved: MUST be set to 0x0000 by the sender and MUST be ignored by
the
      receiver.
      <list style="empty">
            <t>One possible use for this field in the future is to indicate
            the presence of PIM Join attributes attached to the source address
            (see <xref target="RFC5384"/>). The applicability of PIM attributes
            in the context of ANCP is for further study.</t>
      </list>
      </t>

      <t>Multicast Group Address: a multicast group address within the given
      address family. The group address MUST always be present.</t>

      <t>Unicast Source Address: unicast address within the given address
      family. If the Flow Type is 0x01 (ASM), a source address MUST NOT be
present.
      If the Flow Type is 0x02 (SSM), a source address MUST be present.
      </t>
</list>
</t>

      </section>

<section anchor="TLV_RepBufTime" title="Report-Buffering-Time TLV">

        <t>The Report-Buffering-Time TLV provides the time for which
a Committed Bandwidth Report message must be held with the intention of
accumulating multiple reports of changed committed multicast bandwidth
in one report, to reduce the volume of messages sent to the NAS. For
further information see <xref target="CapProc_Com_BW_Rep"/>. The TLV is
illustrated in <xref target="FIG_RepBufTime"/>.</t>

        <t><figure anchor="FIG_RepBufTime" title="Report-Buffering-Time TLV">
            <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type=Report-Buffering-Time |      TLV Length = 4           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                       Buffering Time (ms)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure></t>

<t>The Report-Buffering-Time TLV contains the following fields:
<list style="symbols">
	<t>The Report-Buffering-Time TLV Type is 0x94.</t>

	<t>TLV length is 4 octets.</t>

	<t>Buffering Time is a 32-bit unsigned integer containing a time
         value in ms.
      </t>
</list>
</t>

</section><!-- TLV_RepBufTime -->

<section anchor="TLV_Com_BW" title="Committed-Bandwidth TLV">

        <t>The Committed-Bandwidth TLV identifies an access line and provides
the current amount of multicast bandwidth that the AN has committed to it. The
TLV is illustrated in <xref target="FIG_Com_BW"/>.</t>

        <t><figure anchor="FIG_Com_BW" title="Committed-Bandwidth TLV">
            <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|TLV Type=Committed-Bandwidth   |      TLV Length (variable)    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|             Committed Multicast Bandwidth   (kbits/s)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+-+-+-                      Target TLV                    +-+-+-+
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure></t>

<t>The Committed-Bandwidth TLV contains the following fields:
<list style="symbols">
	<t>The Committed-Bandwidth TLV Type is 0x95.</t>

	<t>TLV length is 4 octets plus the length of the Target TLV
         including its header and any padding.</t>

	<t>Committed Multicast Bandwidth is a 32-bit unsigned integer
         providing a bandwidth amount in kbits/s.</t>

      <t>The Target TLV identifies the access line to which this 
         amount of multicast bandwidth is currently committed.</t>
</list>
</t>

</section><!-- TLV_Com_BW -->

    </section><!-- TLVs -->

    <!--
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->

    <section anchor="CapDefs" title="Multicast Capabilities">
      <t>Section 3.5 of <xref target="RFC6320"></xref> defines
      a capability negotiation mechanism as well as a number of capabilities.
      This section defines five new capabilities in support of different modes
      of multicast operation: 
<list style="symbols">
          <t>NAS-initiated replication (capability type 0x03);</t>

          <t>committed multicast bandwidth reporting (capability type 0x05);</t>

          <t>conditional access with white and black lists (capability type
          0x06);</t>

          <t>conditional access with grey lists (capability type 0x07);</t>

          <t>bandwidth delegation (capability type 0x08).</t>
</list></t>

      <t>The "Capability Data" field within the Capability TLV for all of
      these capabilities is empty. All of these capabilities are
      independent of the access technology.</t>

      <t>The remainder of this section consists of three sub-sections. <xref
      target="CapProto"></xref> specifies the protocol elements that must be
      implemented in order to support each capability. <xref
      target="CapProc"></xref> specifies the procedures that apply to each
      capability on its own. <xref target="Interact"></xref> specifies how the
      capabilities interact if more than one multicast capability is included
      in the set of capabilities negotiated between the AN and the NAS.</t>

      <t>Note that if a request contains content that is not supported
      (according to the tables in <xref target="CapProto"></xref>) by the
      negotiated set of multicast capabilities, the appropriate response is to
      return a Generic Response message indicating Failure (0x4) with an
      appropriate code value (e.g., 84 "TLV or value not supported by
      negotiated capability set"). The body of the message MUST contain a
      Status-Info TLV. See Sections 4.2 and 4.5 in <xref
      target="RFC6320"></xref> for more details.</t>

      <section anchor="CapProto" title="Required Protocol Support">
        <t>This section specifies the protocol elements that MUST be
        implemented to support each of the four multicast capabilities.
        Support of multiple multicast capabilities requires implementation of
        the union of the sets of protocol elements applying to each of the
        individual capabilities in the supported set.</t>

        <section anchor="CapProto_NASCtl"
                 title="Protocol Requirements For NAS-initiated Replication">

          <t><xref target="TAB_NASCtl"></xref> specifies the protocol elements
          within <xref target="Messages"></xref> and <xref
          target="TLVs"></xref> that MUST be implemented to support the
          NAS-initiated replication multicast capability.</t>

          <texttable anchor="TAB_NASCtl"
                     title="Protocol Requirements For NAS-initiated
Replication">
            <ttcol>Reference</ttcol>

            <ttcol>Protocol Element</ttcol>

            <c><xref target="provisioning"></xref></c>
            <c>Provisioning message with MRepCtl-CAC TLV</c>

            <c><xref target="port-management"></xref></c>
            <c>Port Management message with Bandwidth-Allocation TLV. </c>

            <c><xref target="replication-control"></xref></c>
            <c>Multicast Replication Control message</c>

            <c><xref target="MSG_flow_query"></xref></c>
            <c>Multicast Flow Query Request and Response messages</c>

            <c><xref target="TLV_cmndNmbr"></xref></c>
            <c>Command Number TLV</c>

            <c><xref target="TLV_MRepCtl_AC"></xref></c>
            <c>MRepCtl-CAC TLV</c>

            <c><xref target="TLV_multicast-flow"></xref></c>
            <c>Multicast-Flow TLV</c>
          </texttable>
        </section>

        <section anchor="CapProto_Com_BW_Rep"
                 title="Protocol Requirements For Committed Multicast
Bandwidth Reporting">

          <t><xref target="TAB_Com_BW_Rep"></xref> specifies the protocol
elements
          within <xref target="Messages"></xref> and <xref
          target="TLVs"></xref> that MUST be implemented to support the
          NAS-initiated replication multicast capability.</t>

          <texttable anchor="TAB_Com_BW_Rep"
                     title="Protocol Requirements For Committed Multicast
Bandwidth Reporting">
            <ttcol>Reference</ttcol>

            <ttcol>Protocol Element</ttcol>

            <c><xref target="provisioning"></xref></c>
            <c>Provisioning message with Report-Buffering-Time TLV</c>

            <c><xref target="MSG_comBW_Rep"></xref></c>
            <c>Committed Bandwidth Report message</c>

            <c><xref target="MSG_flow_query"></xref></c>
            <c>Multicast Flow Query Request and Response messages</c>

            <c><xref target="TLV_RepBufTime"></xref></c>
            <c>Report-Buffering-Timer TLV</c>

            <c><xref target="TLV_Com_BW"></xref></c>
            <c>Committed-Bandwidth TLV</c>

            <c><xref target="TLV_multicast-flow"></xref></c>
            <c>Multicast-Flow TLV</c>
          </texttable>

        </section><!-- CapProto_Com_BW_Rep -->

        <section anchor="CapProto_WhiteBlack"
                 title="Protocol Requirements For Conditional Access With
White and Black Lists">
          <t><xref target="TAB_Cnd_WB"></xref> specifies the protocol elements
          within <xref target="Messages"></xref> and <xref
          target="TLVs"></xref> that MUST be implemented to support the
          conditional access with white and black lists multicast
          capability.</t>

          <texttable anchor="TAB_Cnd_WB"
                     title="Protocol Requirements For Conditional Access with
White and Black Lists">
            <ttcol>Reference</ttcol>
            <ttcol>Protocol Element</ttcol>

            <c><xref target="provisioning"></xref></c>
            <c>Provisioning message with Multicast-Service-Profile TLV, White
            and Black lists only, and White-List-CAC TLV</c>

            <c><xref target="port-management"></xref></c>
            <c>Port Management message with Multicast-Service-Profile-Name and
            Bandwidth-Allocation TLVs.</c>

            <c><xref target="MSG_flow_query"></xref></c>
            <c>Multicast Flow Query Request and Response messages</c>

            <c><xref target="TLV_msp"></xref></c>
            <c>Multicast-Service-Profile TLV</c>

            <c><xref target="TLV_profile-name"></xref></c>
            <c>Multicast-Service-Profile-Name TLV</c>

            <c><xref target="TLV_list-action"></xref></c>
            <c>List-Action TLV, White and Black lists only</c>

            <c><xref target="TLV_bw_alloc"></xref></c>
            <c>Bandwidth-Allocation TLV</c>

            <c><xref target="TLV_White_AC"></xref></c>
            <c>White-List-CAC TLV</c>

            <c><xref target="TLV_multicast-flow"></xref></c>
            <c>Multicast-Flow TLV</c>

          </texttable>
        </section>

        <!-- CapProto_WhiteBlack -->

        <section anchor="CapProto_Grey"
                 title="Protocol Requirements For Conditional Access With Grey
Lists">
          <t><xref target="TAB_Cnd_Grey"></xref> specifies the protocol
          elements within <xref target="Messages"></xref> and <xref
          target="TLVs"></xref> that MUST be implemented to support the
          conditional access with grey lists multicast capability.</t>

          <texttable anchor="TAB_Cnd_Grey"
                     title="Protocol Requirements For Conditional Access with
Grey Lists">
            <ttcol>Reference</ttcol>

            <ttcol>Protocol Element</ttcol>

            <c><xref target="provisioning"></xref></c>
            <c>Provisioning message with Multicast-Service-Profile TLV, Grey
            lists only, and MRepCtl-CAC TLV</c>

            <c><xref target="port-management"></xref></c>
            <c>Port Management message with Multicast-Service-Profile-Name and
            Bandwidth-Allocation TLVs.</c>

            <c><xref target="replication-control"></xref></c>
            <c>Multicast Replication Control message</c>

            <c><xref target="admission-control"></xref></c>
            <c>Multicast Admission Control Message</c>

            <c><xref target="MSG_flow_query"></xref></c>
            <c>Multicast Flow Query Request and Response messages</c>

            <c><xref target="TLV_msp"></xref></c>
            <c>Multicast-Service-Profile TLV, Grey lists only</c>

             <c><xref target="TLV_profile-name"></xref></c>
            <c>Multicast-Service-Profile-Name TLV</c>

            <c><xref target="TLV_list-action"></xref></c>
            <c>List-Action TLV, Grey lists only</c>

           <c><xref target="TLV_cmndNmbr"></xref></c>
            <c>Command Number TLV</c>

            <c><xref target="TLV_bw_alloc"></xref></c>
            <c>Bandwidth-Allocation TLV</c>

            <c><xref target="TLV_MRepCtl_AC"></xref></c>
            <c>MRepCtl-CAC TLV</c>

            <c><xref target="request-source-ip"></xref></c>
            <c>Request-Source-IP TLV</c>

            <c><xref target="request-source-mac"></xref></c>
            <c>Request-Source-MAC TLV</c>

            <c><xref target="TLV_multicast-flow"></xref></c>
            <c>Multicast-Flow TLV</c>
          </texttable>
        </section>

        <!-- CapProto_Grey -->

        <section anchor="CapProto_Delegated"
                 title="Protocol Requirements For Delegated Bandwidth">
          <t><xref target="TAB_Delegated"></xref> specifies the protocol
          elements within <xref target="Messages"></xref> and <xref
          target="TLVs"></xref> that MUST be implemented to support the
          delegated bandwidth multicast capability.</t>

          <texttable anchor="TAB_Delegated"
                     title="Protocol Requirements For Delegated Bandwidth">
            <ttcol>Reference</ttcol>
            <ttcol>Protocol Element</ttcol>

            <c><xref target="port-management"></xref></c>
            <c>Port Management message with Bandwidth-Allocation TLV.</c>

            <c><xref target="MSG_bw_realloc_req"></xref></c>
            <c>Bandwidth Reallocation Request Message</c>

            <c><xref target="MSG_bw_transfer_req"></xref></c>
            <c>Bandwidth Transfer Message</c>

            <c><xref target="MSG_bw_query"></xref></c>
            <c>Delegated Bandwidth Query Request Message</c>

            <c><xref target="MSG_bw_query_resp"></xref></c>
            <c>Delegated Bandwidth Query Response Message</c>

            <c><xref target="MSG_flow_query"></xref></c>
            <c>Multicast Flow Query Request and Response messages</c>

            <c><xref target="TLV_bw_alloc"></xref></c>
            <c>Bandwidth-Allocation TLV</c>

            <c><xref target="TLV_bw_request"></xref></c>
            <c>Bandwidth-Request TLV</c>

            <c><xref target="TLV_multicast-flow"></xref></c>
            <c>Multicast-Flow TLV</c>

          </texttable>
        </section>

        <!-- CapProto_Delegated -->
      </section>

      <!-- CapProto -->

      <section anchor="CapProc"
               title="Capability-Specific Procedures for Providing Multicast
Service">
        <t>This section describes multicast service procedures for each
        capability as if it were the only multicast capability within the
        negotiated set. Procedures involving combinations of multicast
        capabilities are described in <xref target="Interact"></xref>.</t>

        <t>The use of the Multicast Flow Query Request and Response messages
        to determine the association between multicast flows and ports is
        common to all multicast capabilities. No additional text is required
        here, beyond that already given in <xref
        target="MSG_flow_query"></xref> to describe the use of those
        messages.</t>

        <section anchor="CapProc_NASCtl"
                 title="Procedures For NAS-Initiated Replication">

<t>NAS-initiated replication MAY be negotiated to support a mode of operation
where IGMP/MLD requests are terminated on the NAS. Alternatively, it MAY be
negotiated to allow the NAS to respond to requests sent by other means (e.g.,
through application signalling) that require the replication of multicast
channels to a given access line.
</t>

<section anchor="NASCtl_provis" title="Provisioning">

<t>The NAS MAY perform admission control for NAS-initiated replication. In
this case, it MUST NOT include the MRepCtl-CAC TLV in a Provisioning message
sent to the AN. Alternatively, the NAS MAY enable admission control at the AN
for NAS-initiated replication. To do this, it MUST include the MRepCtl-CAC TLV
in a Provisioning message sent to the AN and it MUST also include a Bandwidth-
Allocation TLV in a Port Management message for each access line.</t>

</section><!-- NASCtl_provis -->

<section anchor="NASCtl_serv" title="Multicast Service Procedures">
<t>The procedures associated with NAS-initiated replication are
straightforward. To initiate replication, the NAS MUST send a Multicast
Replication Control message to the AN, containing one or more commands adding
flows, as described in <xref target="ReplicSend"/>. To terminate replication
the NAS MUST send a Multicast Replication Control message where the commands
delete instead of adding the flows. The AN acts upon these messages as
specified in <xref target="ReplicRecv"/>.</t>

</section><!-- NASCtl_serv -->

        </section><!-- CapProc_NASCtl -->

<section anchor="CapProc_Com_BW_Rep" title="Procedures For 
Committed Bandwidth Reporting">

<t>Committed bandwidth reporting MAY be negotiated if the NAS requires
current knowledge of the amount of multicast bandwidth committed to each 
access line and cannot obtain this information by other means. </t>

<section anchor="Com_BW_Rep_provis" title="Provisioning">

<t>The default buffering time when committed bandwidth reporting is enabled is
zero (immediate reporting). To change this, the NAS MAY send an instance of the
Report-Buffering-Time TLV containing a non-zero time value to the AN in a
Provisioning message. If the NAS subsequently wishes to change the buffering
time again, it MAY do so in another Provisioning message.</t>

</section><!-- Com_BW_Rep_provis -->

<section anchor="CapProc_Com_BW_Rep_serv" title="Multicast Service Procedures">

<t>If the buffering time for committed bandwidth reporting is zero, the AN MUST
send a Committed Bandwidth Report message to the NAS each time the amount of
multicast bandwidth committed to any access line under its control changes.</t>

<t>If a non-zero value is provided in the Report-Buffering-Time TLV, the AN at
any given moment is in one of two states: not-buffering, or buffering. The AN
enters buffering state if it is in not-buffering state and the multicast
bandwidth amount committed to some access line changes. It leaves buffering
state when the AN sends a Committed Bandwidth Report.</t>

<t>Upon entry to the buffering state, the AN MUST start a buffering timer and
create a Committed Bandwidth Report message containing a Committed-Bandwidth
TLV for the triggering access line, but MUST NOT send it. If a multicast
bandwidth change occurs for another access line, the AN MUST add a new
Committed-Bandwidth TLV to the message for that additional line. If a multicast
bandwidth change occurs for a line for which a Committed-Bandwidth TLV is
already
present in the buffered report, the AN MUST update the Committed-Bandwidth TLV
to
contain the new bandwidth value, rather than adding another Committed-Bandwidth 
TLV for the same access line.</t>

<t>The buffering timer expires after the period provided by the 
Report-Buffering-Time TLV. When it expires, the AN MUST send the Committed
Bandwidth Report message that it has been accumulating to the NAS.
Exceptionally, the AN MAY choose to send the message before the timer expires,
in which case it MUST clear the buffering timer when the message is sent. In
either case, the AN enters the not-buffering state as a result.
<list style="empty">
   <t>Report buffering implies that NAS reaction to changes in multicast
   bandwidth usage is delayed by the amount of the buffering period.
   The choice of buffering period must take this into consideration.</t>
</list>
</t>
  
</section><!-- CapProc_Com_BW_Rep_serv -->

</section><!-- CapProc_Com_BW_Rep -->


        <section anchor="CapProc_Cnd_WB"
                 title="Procedures For Conditional Access With Black and White
Lists">
          <section anchor="Cnd_WB_Provis" title="Provisioning">
            <t>The NAS provisions named multicast service profiles containing
            White and Black lists on the AN using the Provisioning message
            containing one or more Multicast-Service-Profile TLVs. The NAS MAY
            update the contents of these profiles from time to time as
            required, by sending additional Provisioning messages with
            Multicast-Service-Profile TLVs containing incremental
            modifications to the existing White and Black lists or
            replacements for them.</t>

            <t>The NAS assigns a specific multicast service profile to an
            individual access line using the Port Management message
            containing a Multicast-Service-Profile-Name TLV. The NAS MAY
            change the multicast service profile for a given access
            line at any time by sending a Port Management message identifying a
            new multicast service profile.</t>

            <t>The NAS MAY choose to enable admission control at the AN for
White-listed flows. To do this, it MUST send a Provisioning message as
described in <xref target="provisioning"/>, which includes the White-List-CAC
TLV and it MUST provide a multicast bandwidth allocation for each access line
by including a Bandwidth-Allocation TLV in a Port Management message.</t>
          </section>

          <!-- Cnd_WB_Provis -->

          <section anchor="Cnd_WB_Serv" title="Multicast Service Procedures">

            <t>The conditional access with White and Black lists capability
assumes that IGMP/MLD requests are terminated on the AN. When the AN receives a
"join" request, it MUST check to see whether the requested flow is White-listed
or Black-listed as described below. Requests for Black-listed flows MUST be
discarded. If the NAS has enabled admission control on the AN as described in
the previous section, but a White-listed flow would cause the amount of
committed multicast bandwidth to exceed the provisioned limit, the request MUST
be discarded. The AN replicates flows passing these checks to the access
line.</t>

            <t> To determine if a requested flow is White-listed, the AN
searches for a best match to the flow in the applicable multicast service
profile. Matching is done on the prefixes specified in the profile, ignoring the
address bits of lower order than those in the prefix.</t>

            <t>If the requested multicast flow matches multiple lists associated
with the access line, then the most specific match will be considered by the AN.
If the most specific match occurs in multiple lists, the Black list entry takes
precedence over the White list. In this context, the most specific match is
defined as: <list style="symbols"> <t>first, most specific match (longest prefix
length) on the multicast flow address (i.e., on G of &lt;S,G&gt;)</t>

                <t>then, most specific match (longest prefix length) on the
unicast source address (i.e. on S of &lt;S,G&gt;)</t> </list> If the requested
multicast flow is not part of any list, the join message SHOULD be discarded by
the AN. This default behavior can easily be changed by means of a "catch-all"
statement in the White list. For instance, adding (&lt;S=*,G=*&gt;) in the White
List would make the default behavior to accept join messages for a multicast
flow that has no other match on any list.</t>

            <t>When the AN receives a "leave" request, it terminates replication
of the multicast flow.</t>

<t>If the AN receives a Provisioning message which updates an existing
multicast service profile, the AN MUST review the status of active flows on all
ports to which the updated profile is currently assigned. Similarly, if a Port
Management message assigns a new multicast service profile to a given port, the
AN MUST review all active flows on that port. If the most specific match for
any flow is a Black list entry, the flow MUST be terminated immediately. If any
of the remaining flows do not match an entry in the White list, they also MUST
be terminated immediately. White listed flows MUST be allowed to continue. </t>
          </section>

          <!-- Cnd_WB_Serv -->
        </section>

        <!-- CapProc_Cnd_WB -->

        <section anchor="CapProc_Cnd_Grey"
                 title="Procedures For Conditional Access With Grey Lists">
          <section anchor="Cnd_Grey_Provis" title="Provisioning">
            <t>The NAS provisions named multicast service profiles containing
            Grey lists on the AN using the Provisioning message containing one
            or more Multicast-Service-Profile TLVs. The NAS MAY update the
            contents of these profiles from time to time as required, by
            sending additional Provisioning messages with
            Multicast-Service-Profile TLVs containing incremental
            modifications to the existing Grey lists or replacements for
            them.</t>

            <t>The NAS assigns a specific multicast service profile to an
            individual access line using the Port Management message
            containing a Multicast-Service-Profile-Name TLV. The NAS MAY
            change profiles on the line by sending a subsequent Port
            Management message identifying a new profile.</t>

            <t>   The NAS MAY perform admission control for grey-listed flows.
In that case, the NAS MUST NOT include the MRepCtl-CAC TLV in a Provisioning
message sent to the AN. Alternatively, the NAS MAY enable admission control at
the AN for Grey-listed flows. To do this, it MUST include the MRepCtl-CAC TLV
in a Provisioning message sent to the AN and MUST also provide a Bandwidth-
Allocation TLV in a Port Management message for each access line.</t>

          </section>

          <!-- Cnd_Grey_Provis -->

          <section anchor="Cnd_Grey_Serv" title="Multicast Service Procedures">
            <t>The conditional access with Grey lists capability assumes that
            IGMP/MLD requests are terminated on the AN. When the AN receives a
            "join" request, it MUST determine whether there is a match to the
            requested flow in the Grey list of the multicast service profile
            provisioned against the given access line. If there is no match,
            the request is discarded. Otherwise, the AN MUST send a Multicast
            Admission Control message to the NAS with content identifying the
            access line and the multicast flow to be added. As indicated in
            <xref target="admission-control"></xref>, the AN MAY add
            information identifying the requestor by IP address and/or MAC
            address.</t>

            <t>If the NAS decides to enable the flow, it MUST send a Multicast
            Replication Control request to the AN to replicate the flow to the
            access line with the Result field set to Nack (0x1), as described
in <xref target="ReplicSend"/>. </t>

<t>When the AN receives the Multicast Replication
            Control request, it performs admission control if admission
control has been enabled as described in the previous section. If admitting the
flow would cause the committed multicast bandwidth at the access line to exceed
the provisioned limit, the AN reports an error to the NAS as described in <xref
target="ReplicRecv"/>. Otherwise it replicates the multicast flow as
requested.</t>

            <t>If the NAS decides not to permit the flow, it MAY send a
            Multicast Replication Control message in response to the Multicast
            Admission Control message to allow the AN to update its internal
            records. The content of this message is described in <xref
            target="Admit_recv"></xref>.</t>

            <t>When the AN receives a "leave" request, it MUST terminate
            replication of the flow to the access line. It MUST then send a
            Multicast Admission Control message to the NAS indicating the
            deletion. The NAS updates its internal records but MUST NOT
            respond to the message.</t>

<t>If the AN receives a Provisioning message which updates an existing
multicast service profile, the AN MUST review the status of active flows on all
ports to which the updated profile has been assigned. Similarly, if a Port
Management message that assigns a new profile to a given port, the AN MUST
review all active flows on that port. In either case, if any flow does not
match an entry in the Grey list, it MUST be terminated immediately.  </t>

          </section>

          <!-- Cnd_Grey_Serv -->
        </section>

        <!-- CapProc_Cnd_Grey -->

        <section anchor="CapProc_Delegated"
                 title="Procedures For Delegated Bandwidth">
          <section anchor="Delegated_Provis" title="Provisioning">
            <t>The NAS SHOULD provision an initial amount of delegated
            multicast bandwidth for each access line using the Port Management
            message containing the Bandwidth-Allocation TLV. 
<list style="empty">
<t>If it fails to
            do so and a value has not been provisioned on the AN by other
            means, the AN will be forced to request a bandwidth allocation as
            soon as it receives a "join" request.</t>
</list>
 The NAS MAY at any time force an update of the amount of delegated bandwidth
by the same means.</t>
          </section>

          <!-- Delegated_Provis -->

          <section anchor="Delegated_Serv"
                   title="Multicast Service Procedures">
            <t>The delegated bandwidth capability assumes that IGMP/MLD
            requests are terminated on the AN. When the AN receives a "join"
            request, it checks whether it has sufficient remaining
            uncommitted multicast bandwidth on the access line to accommodate
            the new multicast flow. If not, it MAY send a request to the NAS
            for an increased allocation of delegated bandwidth, using the
            Bandwidth Reallocation Request message. The NAS MUST return a
            Bandwidth Transfer message indicating whether it has granted the
            request, and if so, what is the new amount of delegated
            bandwidth.</t>

            <t>If the AN has sufficient uncommitted multicast capacity to
            admit the request, either originally or as the result of a
            successful request to the NAS, it replicates the requested flow to
            the access line. Otherwise it discards the request.</t>

            <t>When the AN receives a "leave" request for an active flow, it
            ceases replication.</t>

            <t>The NAS or AN MAY at some point detect that their respective
            views of the amount of delegated bandwidth are inconsistent. If
            so, they can recover using procedures described in <xref
            target="MSG_bw_realloc_req"></xref> and <xref
            target="MSG_bw_transfer_req"></xref>. As a further aid to
            synchronization, either the NAS or the AN MAY from time to time
            check the peer's view of the amount of delegated bandwidth using
            the Delegated Bandwidth Query message.</t>

            <t>The NAS or AN MAY at any time release bandwidth to the peer
            using an autonomous Bandwidth Transfer message. The contents of
            this message are described in <xref
            target="MSG_bw_transfer_req"></xref>.</t>
          </section>

          <!-- Delegated_Serv -->
        </section>

        <!-- CapProc_Delegated -->
      </section>

      <!-- CapProc -->

      <section anchor="Interact"
               title="Combinations of Multicast Capabilities">

        <section anchor="WBandGrey"
                 title="Combination of Conditional Access With White and Black
Lists and Conditional Access With Grey Lists">

          <t>If conditional access with White and Black lists is combined with
conditional access with Grey lists, provisioning of the multicast service
profiles is as described in <xref target="Cnd_WB_Provis"></xref> except that
multicast service profiles will also include Grey lists. Admission control is
enabled independently on the AN for White lists by including the White-list-CAC
TLV in the Provisioning message and for Grey lists by including the MRepCtl-CAC
TLV in the Provisioning message. The Bandwidth-Allocation TLV provisions an
amount that applies to both White- and Grey- listed flows if admission control
is enabled for both. </t>

          <t>With regard to multicast service procedures, one point of
difference from the individual capabilities must be noted. This is an
interaction during the profile matching procedure. The AN MUST seek the best
match amongst multiple lists as described in <xref target="Cnd_WB_Serv"></xref>.
However, if there are multiple matches of equal precision, the order of priority
is Black list first, Grey list second, and White list last.</t>

          <t>Once profile matching has been completed, processing of a "join"
request is as described in <xref target="Cnd_WB_Serv"></xref> for White or Black
listed flows or <xref target="Cnd_Grey_Serv"></xref> for Grey listed flows.
Requests that do not match any list SHOULD be discarded.</t>

          <t>When the AN receives a "leave" request, it MUST terminate
replication of the flow to the access line. If the flow was Grey-listed, the AN
MUST then send a Multicast Admission Control message to the NAS indicating the
deletion. Thus the AN needs to retain the fact that the flow was Grey-listed for
the life of the flow. </t>

<t>If the AN receives a Provisioning message which updates an existing
multicast service profile, the AN MUST review the status of active flows on all
ports to which the updated profile is currently assigned. Similarly, if a Port
Management message assigns a new multicast service profile to a given port, the
AN MUST review all active flows on that port. If any flow has its most specific
match in a Black list entry, it MUST be terminated immediately. If any of the
remaining flows do not match an entry in the White or Grey list, they MUST also
be terminated immediately. Finally, if any remaining flows were originally
admitted because they were White-listed, but after the change they are Grey-
listed, the AN MUST generate a Multicast Flow Query response message
autonomously as if it were responding to a Multicast Flow Query request,
listing all such flows. These flows MUST be allowed to continue until the NAS
or the subscriber terminates them. Flows with their most specific match in the
White list MUST be allowed to continue. </t>

<t>The autonomously-generated Multicast Flow Query response message MUST be
formatted as if it were a successful response to a request containing no Target
and no Multicast-Flow TLV, as described in <xref
target="MSG_flow_query_Recv"/>, with the exception that the Transaction-Id MUST
be set to all zeroes.</t>

        </section><!-- WBandGrey -->

        <section anchor="CndandDelegated"
                 title="Combination of Conditional Access With Delegated
Bandwidth">

          <t> The provisioning and bandwidth management procedures of <xref
target="CapProc_Delegated"></xref> apply in addition to the procedures in <xref
target="CapProc_Cnd_WB"></xref>, <xref target="CapProc_Cnd_Grey"></xref>, or
<xref target="WBandGrey"></xref> as applicable. Admission control follows the
rules for conditional access in terms of matching flows against White and Black
and/or Grey lists and performing or not performing bandwidth checks at the AN,
but the amount of bandwidth used by the AN to perform admission control is
negotiable as described in <xref target="Delegated_Serv"/>.</t>

        </section>   <!-- CndandDelegated -->

<section anchor="Interact_NASinit" title="Combination of NAS-Initiated
Replication with Other Capabilities">

<t>NAS-initiated replication can coexist with the other capabilities, but some
means must exist to prevent double replication of flows. The simplest way to do
this is to terminate all IGMP/MLD requests on the AN, so that NAS-initiated
replication is stimulated only by signalling through other channels.  Other
arrangements are possible, but need not be discussed here.</t>

<t>Assuming the necessary separation of responsibilities, the only point of
interaction between NAS-initiated replication and the other multicast
capabilities is in the area of admission control. Specifically, inclusion of
the MRepCtl-CAC TLV in a Provisioning message and the Bandwidth-Allocation TLV
in a Port Management message enables admission control by the AN for flows
added by Multicast Replication Control messages, regardless of whether they are
part of NAS-initiated replication or Grey list multicast service processing. 
Conversely, non inclusion of the MRepCtl-CAC TLV in Provisioning messages to
the AN enables admission control by the NAS for flows added by Multicast
Replication Control messages, regardless of whether they are part of NAS-
initiated replication or Grey list multicast service processing. Admission
Control for white flows can also be enabled independently on the AN
by inclusion by the NAS of the White-List-CAC TLV in the Provisioning message.
</t>

</section><!-- Interact_NASinit -->

<section anchor="Interact_Com_BW_Rep" title="Combinations of Committed
     Bandwidth Reporting with Other Multicast Capabilities">

<t>Committed bandwidth reporting can take independently of which other
multicast capabilities have been negotiated. However, some combinations
do not make sense because of redundancy. In particular, the NAS obtains
the same information that committed bandwidth reporting gives if the
only other capabilities operating are NAS-initiated replication and/or
conditional access with Grey lists. </t>

</section><!-- Interact_Com_BW_Rep -->

      </section> <!-- Interact -->
    </section>  <!-- CapDefs -->

    <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-->

    <section anchor="seccons" title="Security Considerations">
      <t>The security considerations of ANCP are discussed in <xref
      target="RFC6320"></xref> and in <xref
      target="RFC5713"></xref>. </t>
    </section>

    <!-- seccons -->

    <section anchor="IANA" title="IANA Considerations">

<t>IANA NOTE: Please replace XXXX with the RFC number of this
document.</t>

      <t>This document defines the following additional values within the
      ANCP Message Type Name Space registry:</t>

      <texttable>
        <ttcol>Message Type</ttcol>
        <ttcol>Message Name</ttcol>
        <ttcol>Reference</ttcol>

        <c>144</c>
        <c>Multicast Replication Control</c>
        <c>RFC XXXX</c>

        <c>145</c>
        <c>Multicast Admission Control</c>
        <c>RFC XXXX</c>

        <c>146</c>
        <c>Bandwidth Reallocation Request</c>
        <c>RFC XXXX</c>

        <c>147</c>
        <c>Bandwidth Transfer</c>
        <c>RFC XXXX</c>

        <c>148</c>
        <c>Delegated Bandwidth Query</c>
        <c>RFC XXXX</c>

        <c>149</c>
        <c>Multicast Flow Query</c>
        <c>RFC XXXX</c>

        <c>150</c>
        <c>Committed Bandwidth Report</c>
        <c>RFC XXXX</c>
      </texttable>

      <t>This document defines the following additional values for the ANCP
      Result Code registry:</t>

      <texttable>
        <ttcol>Result Code</ttcol>
        <ttcol>One-Line Description</ttcol>
        <ttcol>Reference</ttcol>

        <c>0x64</c>
        <c>Command error.</c>
        <c>RFC XXXX</c>

        <c>0x65</c>
        <c>Bad flow address.</c>
        <c>RFC XXXX</c>

        <c>0x66</c>
        <c>Multicast flow does not exist.</c>
        <c>RFC XXXX</c>

        <c>0x67</c>
        <c>Invalid preferred bandwidth amount.</c>
        <c>RFC XXXX</c>

        <c>0x68</c>
        <c>Inconsistent views of delegated bandwidth amount.</c>
        <c>RFC XXXX</c>

        <c>0x69</c>
        <c>Bandwidth request conflict.</c>
        <c>RFC XXXX</c>
      </texttable>

      <t>This document defines the following additional values for the ANCP
Command Code
      registry:</t>

      <texttable>
        <ttcol>Command Code Value</ttcol>
        <ttcol>Command Code Directive Name</ttcol>
        <ttcol>Reference</ttcol>

        <c>1</c>
        <c>Add</c>
        <c>RFC XXXX</c>

        <c>2</c>
        <c>Delete</c>
        <c>RFC XXXX</c>

        <c>3</c>
        <c>Delete All</c>
        <c>RFC XXXX</c>

        <c>4</c>
        <c>Admission Control Reject</c>
        <c>RFC XXXX</c>

        <c>5</c>
        <c>Conditional Access Reject</c>
        <c>RFC XXXX</c>

        <c>6</c>
        <c>Admission Control and Conditional Access Reject</c>
        <c>RFC XXXX</c>
      </texttable>

      <t>This document defines the following additional values within the ANCP
      TLV Type Registry:</t>

      <texttable>
        <ttcol>Type Code</ttcol>
        <ttcol>TLV Name</ttcol>
        <ttcol>Reference</ttcol>

        <c>0x13</c>
        <c>Multicast-Service-Profile</c>
        <c>RFC XXXX</c>

        <c>0x15</c>
        <c>Bandwidth-Allocation</c>
        <c>RFC XXXX</c>

        <c>0x16</c>
        <c>Bandwidth-Request</c>
        <c>RFC XXXX</c>

        <c>0x18</c>
        <c>Multicast-Service-Profile-Name</c>
        <c>RFC XXXX</c>

        <c>0x19</c>
        <c>Multicast-Flow</c>
        <c>RFC XXXX</c>

        <c>0x21</c>
        <c>List-Action</c>
        <c>RFC XXXX</c>

        <c>0x22</c>
        <c>Sequence-Number</c>
        <c>RFC XXXX</c>

        <c>0x24</c>
        <c>White-List-CAC</c>
        <c>RFC XXXX</c>

        <c>0x25</c>
        <c>MRepCtl-CAC</c>
        <c>RFC XXXX</c>

        <c>0x92</c>
        <c>Request-Source-IP</c>
        <c>RFC XXXX</c>

        <c>0x93</c>
        <c>Request-Source-MAC</c>
        <c>RFC XXXX</c>

        <c>0x94</c>
        <c>Report-Buffering-Time</c>
        <c>RFC XXXX</c>

        <c>0x95</c>
        <c>Committed-Bandwidth</c>
        <c>RFC XXXX</c>
      </texttable>

      <t>This document defines the following additional values for the ANCP
      Capability Type registry:</t>

      <texttable>
        <ttcol>Value</ttcol>
        <ttcol>Capability Type Name</ttcol>
        <ttcol width="10%">Tech Type</ttcol>
        <ttcol width="10%">Capability Data?</ttcol>
        <ttcol>Reference</ttcol>

        <c>3</c>
        <c>NAS-Initiated Replication</c>
        <c>0</c>
        <c>No</c>
        <c>RFC XXXX</c>

        <c>5</c>
        <c>Committed Bandwidth Reporting</c>
        <c>0</c>
        <c>No</c>
        <c>RFC XXXX</c>

        <c>6</c>
        <c>Conditional Access With White and Black Lists</c>
        <c>0</c>
        <c>No</c>
        <c>RFC XXXX</c>

        <c>7</c>
        <c>Conditional Access With Grey Lists</c>
        <c>0</c>
        <c>No</c>
        <c>RFC XXXX</c>

        <c>8</c>
        <c>Bandwidth Delegation</c>
        <c>0</c>
        <c>No</c>
        <c>RFC XXXX</c>
      </texttable>
    </section>

    <!-- IANA -->

    <section anchor="ack" title="Acknowledgements">
      <t>The authors would like to acknowledge Wojciech Dec for providing
      useful input to this document, Robert Rennison for his help in shaping
      the definition of the Multicast-Service-Profile TLV, Shridhar Rao for
      his comments and suggestions and Aniruddha A for his proposal that
      formed the base of the Multicast Flow Reporting solution. Philippe
      Champagne, Sanjay Wadhwa and Stefaan De Cnodder provided substantial
      contributions on the solution for the NAS initiated multicast control
      use case. Kristian Poscic provided the committed bandwidth reporting
      use case.</t>
    </section>

    <!-- ack -->
  </middle>

  <back>
    <references title="Normative References">
      &rfc2119;
      &rfc3292;
      &rfc6320;
      <?rfc include="reference.RFC.3376"?>

      <?rfc include="reference.RFC.2710"?>

      <?rfc include="reference.RFC.3810"?>

<reference anchor="IEEE48">
  <front>
    <title>http://standards.ieee.org/regauth/oui/tutorials/EUI48.html</title>
    <author>
      <organization>IEEE</organization>
    </author>
    <date year="2010" />
  </front>
</reference>

<reference anchor="IEEE64">
  <front>
    <title>http://standards.ieee.org/regauth/oui/tutorials/EUI64.html</title>
    <author>
      <organization>IEEE</organization>
    </author>
    <date year="2010" />
  </front>
</reference>

    </references>
    <!-- Normative -->

    <references title="Informative References">
      &rfc5713;
      <?rfc include='reference.I-D.morin-mboned-igmpmld-error-feedback'?>

      <?rfc include='reference.RFC.5851'?>

      <?rfc include="reference.RFC.4601"?>
      &rfc5384;
 
     <reference anchor="PIMreg">
        <front>
          <title>http://www.iana.org/assignments/pim-parameters/pim-
parameters.xhtml</title>

          <author>
            <organization>IANA</organization>
          </author>

          <date year="2005" />
        </front>
      </reference>

    </references>

    <!--
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->


    <section anchor="protoc" title="Example of Messages and Message Flows">

      <t>This appendix provides an example in which most of the possible
message flows for multicast control are illustrated.  This appendix is for
informational purposes only. In case of discrepancy with text of the body of
this document, the text in the body of the document is to be considered as the
normative text.</t>

<t>Assume the following, for a given access port:
<list style="symbols">
<t>The basic subscribed service is white-listed. The AN will be responsible
for admission control for this service.</t>
<t>Some premium services are available, but requests for these services must
be referred to the policy server for proper credit processing. For this reason
they are grey-listed.  The NAS will be responsible for admission control for
these services.</t>
<t>The subscriber has asked that certain services be blocked so that his
children cannot view them. These services are black-listed.</t>
<t>All of the above services are Source-Specific Multicast (SSM). In addition,
by means which bypass the AN, the subscriber can signal intent to join an on-
line game service which is Any-Source Multicast (ASM). The NAS is responsible
for admission control for this service.</t>
<t>Bandwidth delegation is in effect to share video bandwidth between the AN
and the NAS.</t>
</list>
The stated conditions require the use of four of the five capabilities
specified in this memo.
</t>

<section anchor="EX_provis" title="Provisioning Phase">

<t>Assume that capability negotiation has been completed between the AN and
NAS and that the set of negotiated capabilities includes the following four
multicast capabilities: NAS-initiated replication, conditional access with
white and black list, conditional access with grey list, and bandwidth
delegation. At this point, the NAS can provision the service profiles on the AN
and enable admission control at the AN for white-listed flows. To do this, the
NAS sends the AN a Provisioning message containing this information. An example
message providing the profile for our assumed subscriber is shown in <xref
target="FIG_EX_provis"/>. The message has the following contents:
<list style="symbols">
  <t>Message type is 93.</t>

  <t>The Result and Result Code fields in the header are set to zeroes, as specified
in the
  ANCP base protocol document.</t>

  <t>A Transaction identifier is assigned by the NAS.</t>

  <t>The Multicast-Service-Profile TLV (of which typically there would be
multiple instances) contains a Multicast-Service-Profile-Name TLV (with a length
of 20 octets assumed for the example) and three List-Action TLVs, one each for
the White, Grey, and Black lists within the profile. The White list flows come
in two sets of group addresses: 233.252.0.0/29, coming from a server at
192.0.2.15, and 233.252.0.32/29, coming from a server at 192.0.2.16. The Grey
listed flows are in the band 233.252.0.64/29, coming from a server at
192.0.2.21. Finally, the Black list flows are two individual flows that happen
to overlap with the Grey list band: 233.252.0.65, and 233.252.0.69, also with
source 192.0.2.21.</t>

  <t>The White-List-CAC TLV indicates that the AN does admission control on
White-listed flows.</t>
</list>
</t>

<figure anchor="FIG_EX_provis" title="Example Provisioning Message">
<artwork>
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length = 132        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type = 93 | 0x00  | Result Code = 0x000   | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Partition ID  |            Transaction Identifier             | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|I|      SubMessage Number      |       Length = 132            | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| M-Serv-Prof TLV Type = 0x13   |       TLV Length = 112        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| M-S-Prof-Name TLV Type = 0x18 |  Embedded TLV Length = 20     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Multicast service profile name               |
~                  = "Cust 0127-53681-0003"                     ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| List-Action TLV Type = 0x21   |   Embedded TLV Length = 28    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Oper = 0x01   |Lst Typ = 0x01 |        Reserved = 0x0000      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Family = 0x01         |       List Length = 20        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| G Preflen = 29| S Preflen = 32| Group prefix =                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      233.252.0.0              | Source prefix =               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      192.0.2.15               | G Preflen = 29| S Preflen = 32|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Group prefix = 233.252.0.32                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Source prefix = 192.0.2.15                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| List-Action TLV Type = 0x21   |   Embedded TLV Length = 18    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Oper = 0x01   |Lst Typ = 0x03 |        Reserved = 0x0000      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Family = 0x01         |       List Length = 10        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| G Preflen = 29| S Preflen = 32| Group prefix =                /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/      233.252.0.64             | Source prefix =               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/      192.0.2.21               |   Padding = 0x0000            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| List-Action TLV Type = 0x21   |   Embedded TLV Length = 28    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Oper = 0x01   |Lst Typ = 0x02 |        Reserved = 0x0000      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Family = 0x01         |       List Length = 20        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| G Preflen = 32| S Preflen = 32| Group prefix =                /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/      233.252.0.65             | Source prefix =               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/      192.0.2.21               | G Preflen = 32| S Preflen = 32|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Group prefix = 233.252.0.69                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Source prefix = 192.0.2.21                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|White-List-CAC TLV Type = 0x24 |          TLV Length = 0       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
</artwork>
<postamble>TLV lengths are given in decimal for easier understanding. Note
that the padding after the middle List-Action TLV is counted as part of length
of the Multicast-Service-Profile TLV, but is not included in the length of that
List-Action TLV. Note also that the Length field in the message header, unlike
those in the TLVs, includes the message header itself, as required by <xref
target="RFC3292"/>. Finally, note that the Provisioning message does not
include a MRepCtl-CAC TLV since in our example admission control for Grey
listed flows and for NAS-initiated replication is performed by the
NAS.</postamble>
</figure>

<t>As soon as the AN port comes up, the AN sends an ANCP PORT_UP message to
the NAS specifying the Access Loop Circuit ID. The NAS replies with an ANCP
Port Management message that, together with the other parameters, includes the
multicast service profile name to be associated to that port along with the
initial amount of delegated bandwidth. The corresponding message flow is
illustrated in <xref target="list-mapping-lists-profile-id"></xref>.</t>

          <figure anchor="list-mapping-lists-profile-id"
                  title="Configuring an AN Port With Multicast Service Profile
ID and Delegated Bandwidth amount">
            <preamble></preamble>

            <artwork><![CDATA[ +----------+      +---------+               +---
--+             +-----+ 
 |Subscriber|      |  Home   |               | AN  |             | NAS |
 +----------+      | Gateway |               +-----+             +-----+  
      |            +---------+                 |                     |
      |                 |                      |                     | 
      |                 |                      |                     | 
      |                 |      DSL Synch.      |                     | 
      |                 |--------------------->|                     | 
      |                 |                      |(M1)PORT_UP(Port ID) | 
      |                 |                      |-------------------->| 
      |                 |                      |                    (*) 
      |                 |                      |(M2) PORT_MNGT       | 
      |                 |                      |    (Port ID,        | 
      |                 |                      |Mcast S Profile Name,| 
      |                 |                      |Bandwidth Allocation)| 
      |                 |                      |<--------------------| 


(*) The NAS may optionally seek direction from an external 
    Autorization/Policy Server      ]]></artwork>
          </figure>


<t>The Port Management message will typically contain other TLVs but our
example (<xref target="FIG_EX_PortMgmt"/>) just shows the Target, Multicast-
Service-Profile-Name, and Bandwidth-Allocation TLVs. The Target TLV identifies
the subscriber line, the Multicast-Service-Profile-Name TLV is identical to the
one contained in the Provisioning message, and the Bandwidth-Allocation TLV
provides just enough bandwidth (2000 kbits/s) for one channel to start with.</t>

<t>The following fields in the Port Management message header are shown with
specific values either as directed by the base protocol document or for the
sake of our example: <list style="symbols">
<t>Message Type is 32.</t>
<t>Result is set to Nack (0x01) for this example.</t>
<t>Result Code is 0x000.</t>
<t>Port is set to 0.</t>
<t>Event Sequence Number, the R flag and the other bits marked x, Duration,
the Event Flags, and the Flow Control Flags are all irrelevant for this
function and are set to 0.</t>
<t>Function is set to 0x8, "Configure Connection Service Data".</t>
<t>X-Function is set to 0.</t>
<t>Tech Type is 0x05 (DSL).</t>
<t>Block lengths are calculated assuming a Circuit-Id length of 4 in our
example. Recall that the example Multicast-Service-Profile-Name TLV length is
20.</t>
</list>
</t>

<figure anchor="FIG_EX_PortMgmt" title="Example Port Management Message">
<artwork>
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length = 84         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type = 32 | 0x01  |  Result Code = 0x000  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Partition ID  |            Transaction Identifier             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|I|      SubMessage Number      |           Length = 84         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Port = 0                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Port Session Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Event Sequence Number = 0                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|x|x|x|x|x|x|x| Duration = 0  | Function = 0x8| X-Function = 0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Event Flags         |        Flow Control Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|x|x|x|x|x|x|x|x| Msg Type = 32 |Tech Type=0x05 | Blk Len = 56  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     # of TLVs = 3             | Extension Block length = 44   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target TLV Type = 0x1000      |        Target TLV Length = 8  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length = 4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Access Loop Circuit ID                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| M-S-Prof-Name TLV Type = 0x18 |       TLV Length = 20         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Multicast service profile name               |
~                  = "Cust 0127-53681-0003"                     ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    BW Alloc TLV Type = 0x15   |       TLV Length = 4          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Bandwidth value = 0x000007D0 (2000 kbits/s)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
</figure>

</section><!-- EX_provis -->

<section anchor="EX_Grey-List" title="Handling a Grey-Listed Flow">

<t>Suppose now that the subscriber chooses to watch the premium channel
characterized by source 192.0.2.21, group 233.252.0.67. Upon receiving the Join
request, the AN matches it against the multicast service profile for the port
and determines that it is a Grey-listed flow. <xref
target="FIG_EX_GreyFlow"></xref> illustrates the resulting ANCP message flow
for the case of a simple join and leave, when admission control for Grey-listed
flows is not activated on the AN. To start the flow, the AN sends a Multicast
Admission Control request (M1) to the NAS. The NAS decides whether flow can be
admitted, applying both policy and bandwidth criteria. It returns its decision
(positive in this example) in a Multicast Replication Control message (M2).
Later, when the subscriber leaves the flow, the AN informs the NAS by sending
another Multicast Admission Control message.</t>

<figure anchor="FIG_EX_GreyFlow" title="Successful Join/Leave Operations, Grey-
Listed Flow">

              <artwork><![CDATA[
+----------+    +-------+   +-----+    ANCP    +-----+        
|Subscriber|    | Home  |   | AN  |<---------->| NAS |   
+----------+    |Gateway|   +-----+            +-----+    
      |         +-------+     |                   |          
      |           |           |     Multicast     |            
      |      Join(Grey-Fl)    |     Admission     |            
      |-----------+---------->|      Control (M1) |            
      |           |           |------------------>|             
      |           |           |                   |  (NAS performs
      |           |           |     Multicast     |   admission 
      |           |           |     Replication  (*)  control)
      |           |           |     Control (M2)  |            
      |     Mcast Grey Flow   |<------------------|           
      |<======================+                   |            
      |           |           |                   |
      ~           ~           ~                   ~   
      |           |           |     Multicast     |          
      |     Leave(Grey-Fl)    |     Admission     |            
      |-----------+---------->|      Control (M3) |                   
      |           |           |------------------>|        
      |           |           |                   |
                                                    
Grey-Fl   : Multicast Flow matching an entry in Grey List
]]></artwork>
<postamble>(*) The NAS may optionally seek direction from an external
Authorization/Policy Server</postamble>
 </figure>

<t>The Multicast Admission Control message M1 contains:
<list style="symbols">
   <t>an ANCP Header with:
   <list style="symbols">
      <t>Message-Type = 145 - Multicast Admission Control;</t>

      <t>Result= 0x0 (Ignore);</t>

      <t>Transaction-ID = Transaction-ID maintained by AN;</t>
   </list>
   </t>

   <t>a Target TLV identifying the AN Port</t>

   <t>a Command TLV containing:
   <list style="symbols">
      <t>Command Code = Add (0x01);</t>

      <t>Accounting = 0;</t>

      <t>a Multicast-Flow embedded TLV indicating the SSM multicast flow
      (Flow Type = 0x02) for which the AN received the IGMP Join:
      IPv4 (0x01) Group address= 233.252.0.67, IPv4 (0x01) Source Address =
192.0.2.21;
      </t>

      <t>a Request-Source-IP embedded TLV containing the IGMP join source
      IP (192.0.2.100).</t>
    </list>
    </t>
</list>
The Multicast Admission Control message M1 is illustrated below:</t>

<figure title="Multicast Admission Control Message Seeking To Add A Flow">
<artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length = 98         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type=145  | 0x0   | Result Code = 0x000   | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Partition ID  |            Transaction Identifier             | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|I|      SubMessage Number      |           Length = 98         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length = 8  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length = 4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Access Loop Circuit ID                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Command TLV Type  = 0x11     |       TLV Length = 28         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Cmd Code=0x01 |Acctg = 0x00   |      Reserved = 0x0000        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Multicast-Flow TLV Type = 0x19 |   Embedded TLV Length = 12    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|Flow Type=0x02 |Addr Fam =0x01 |     Reserved = 0x0000         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Multicast Group Address = 233.252.0.67            |    
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Unicast Source Address =  192.0.2.21            |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+--+
| Req-Src-IP TLV Type = 0x92    |   Embedded TLV length = 4     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|         Unicast Address = 192.0.2.100                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>The Multicast Replication Control message M2 contains:
<list style="symbols">
   <t>an ANCP Header with:
   <list style="symbols">
      <t>Message Type = 144 - Multicast Replication Control;</t>

      <t>Result= 0x1 (NAck);</t>

      <t>Transaction-ID = Transaction-ID maintained by NAS;</t>
   </list>
   </t>

   <t>a Target TLV identifying the AN Port;</t>

   <t>a Command TLV containing:
   <list style="symbols">
      <t>Command Code = Add (0x01);</t>

      <t>Accounting = 1 (begin flow accounting), since in our example the
operator wants accounting on this flow.</t>

      <t>a Multicast-Flow embedded TLV indicating the SSM multicast
      flow (Flow Type = 0x02) that the NAS is admitting for
      this access port: IPv4 (0x01) Group address= 233.252.0.67,
      IPv4 (0x01) Source Address = 192.0.2.21.</t>
   </list>
   </t>
</list>
The Multicast Admission Control message M2 is illustrated below.</t>

<figure anchor="FIG_EX_MulRepCtlAdd" title="Multicast Replication Control
Message Admitting A Flow">
<artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length = 48         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type=144  | 0x1   | Result Code = 0x000   | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Partition ID  |            Transaction Identifier             | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|I|      SubMessage Number      |           Length = 48         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length = 8  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length = 4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Access Loop Circuit ID                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Command TLV Type  = 0x11     |       TLV Length = 20         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Cmd Code=0x01 | Acctg = 0x01  |      Reserved = 0x0000        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Multicast-Flow TLV Type = 0x19 |   Embedded TLV Length = 12    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|Flow Type=0x02 |Addr Fam =0x01 |     Reserved = 0x0000         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Multicast Group Address = 233.252.0.67            |    
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Unicast Source Address =  192.0.2.21            |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>The Multicast Admission Control message M3 advising the NAS that the flow
has been terminated contains:
<list style="symbols">
   <t>an ANCP Header with:
   <list style="symbols">
      <t>Message-Type = 145 - Multicast Admission Control</t>

      <t>Result= 0x0 (Ignore)</t>

      <t>Transaction-ID = Transaction-ID maintained by AN</t>
   </list>
   </t>

   <t>a Target TLV identifying the AN Port</t>

   <t>a Command TLV containing:
   <list style="symbols">
      <t>a Command Code = Delete (0x02);</t>

      <t>Accounting = 0;</t>

      <t>a Multicast-Flow embedded TLV indicating the SSM multicast
      flow (Flow Type = 0x02) for which the AN received the IGMP
      leave: IPv4 (0x01) Group address= 233.252.0.67,
      IPv4 (0x01) Source Address = 192.0.2.21.</t>

      <t>a Request-Source-IP embedded TLV containing the IGMP leave request
      source, IPv4 (0x01) address 192.0.2.100.</t>
   </list>
   </t>
</list>
The Multicast Admission Control message M3 is illustrated below.</t>

<figure title="Multicast Admission Control Message Signalling flow Termination">
<artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type=145  | 0x0   | Result Code = 0x000   | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Partition ID  |            Transaction Identifier             | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|I|      SubMessage Number      |           Length              | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length = 8  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length = 4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Access Loop Circuit ID                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Command TLV Type  = 0x11     |       TLV Length = 28         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Cmd Code=0x02 |Acctg = 0x00   |      Reserved = 0x0000        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Multicast-Flow TLV Type = 0x19 |   Embedded TLV Length = 12    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|Flow Type=0x02 |Addr Fam =0x01 |     Reserved = 0x0000         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Multicast Group Address = 233.252.0.67            |    
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Unicast Source Address =  192.0.2.21            |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Req-Src-IP TLV Type = 0x92    |   Embedded TLV length = 4     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|         Unicast Address = 192.0.2.100                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>
</section><!--EX_Grey-List  -->

<section anchor="EX_White-List" title="Handling White-Listed Flows">

<t>The NAS has enabled White list admission control on the AN, and the
bandwidth delegation capability has been negotiated. White listed flows in
themselves require no messages to the NAS, either upon admission or upon
termination, but the AN may request an increase in the amount of delegated
bandwidth if it needs the increase to admit a flow.</t>

<t>Consider an example where the AN has already admitted one White-listed
flow, thereby using up the initially provisioned amount of delegated bandwidth
(2000 kbits/s). A request is received to join a new flow in the White list
range. The AN chooses to send a Bandwidth Reallocation Request message to the
NAS, requesting that the delegated bandwidth allocation be increased to 4000
kbits/s at a minimum, and preferably to 6000 kbits/s.</t>

<t>In our example, the NAS is managing bandwidth tightly, as witnessed by its
minimal initial allocation of just enough for one flow. It is willing to
provide the minimum additional amount only, and therefore returns a Bandwidth
Transfer message where the delegated bandwidth value is given as 4000 kbits/s.
With this amount, the AN is able to admit the second White-listed flow. The AN
could send a similar Bandwidth Transfer message back to the NAS bringing the
delegated bandwidth amount back down to 2000 kbits/s when one of the flows is
terminated, but this shows nothing new and is omitted. </t>

<t>As one more point of illustration, suppose that the NAS chooses to audit
the current amount of delegated bandwidth to ensure it is synchronized with the
AN. It sends a Delegated Bandwidth Query request message to the AN, and
receives a Delegated Bandwidth Query response message with the current
allocation as the AN sees it.</t>

<t>The complete message flow is shown in <xref target="FIG_EX_WhiteFlow"/>.</t>

<figure anchor="FIG_EX_WhiteFlow" title="Successful Join/Leave Operations,
Grey-Listed Flow">

              <artwork><![CDATA[
+----------+    +-------+   +-----+    ANCP    +-----+        
|Subscriber|    | Home  |   | AN  |<---------->| NAS |   
+----------+    |Gateway|   +-----+            +-----+    
      |         +-------+     |                   |          
      |           |           |                   |  
      |      Join(White-F1)   |                   |
      |-----------+---------->|                   |            
      |           |           |AN performs        |  
      |  Mcast White Flow 1   | admission control |           
      |<======================+                   |            
      |           |           |                   |  
      |      Join(White-F2)   |                   |
      |-----------+---------->|No bandwidth left  |            
      |           |           |                   |  
      |           |           |Bandwidth          |            
      |           |           | Reallocation Req  |            
      |           |           |------------------>|(M1)             
      |           |           |                   |  
      |           |           |                  (*) 
      |           |           |Bandwidth Transfer |            
      |           AN can now  |<------------------|(M2)           
      |           admit flow  |                   |  
      |   Mcast White Flow 2  |                   |  
      |<======================+                   |            
      |           |           |                   |  
      ~           ~           ~                   ~           
      |           |           |Delegated Bandwidth|  
      |           |           | Query request     |            
      |           |           |<------------------|(M3)           
      |           |           |                   |            
      |           |           |Delegated Bandwidth|  
      |           |           | Query response    |            
      |           |           |------------------>|(M4)           
      |           |           |                   |            
]]></artwork>
<postamble>(*) The NAS may optionally seek direction from an external
Authorization/Policy Server</postamble>
 </figure>

<t>The Bandwidth Reallocation Request message (M1) is shown in <xref
target="FIG_EX_BwReReq"/>. The contents require little explanation. The Message
Type for the Bandwidth Reallocation Request is 146. The Result field is set to
0x0 (Ignore). Besides the Target, the message has one other TLV, the Bandwidth-
Request, with a TLV Type of 0x16. The TLV contains Required Amount and
Preferred Amount fields, set to 4000 and 6000 kbits/s respectively. 
</t>

<figure anchor="FIG_EX_BwReReq" title="Bandwidth Reallocation Request Message">
<artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length = 36         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type=146  | 0x0   | Result Code = 0x000   | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Partition ID  |            Transaction Identifier             | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|I|      SubMessage Number      |           Length = 36         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length = 8  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length = 4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Access Loop Circuit ID                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Bandwidth-Req TLV Type = 0x16  |          TLV Length = 8       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|           Required Amount = 0x00000FA0 (4000 kbits/s)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Preferred Amount = 0x00001770 (6000 kbits/s)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>The Bandwidth Transfer message (M2) is shown in <xref
target="FIG_EX_BwTrans"/>. Again, the contents are easily understood. The
Message Type for the Bandwidth Transfer message is 147. The Result field is set
to Success (0x3). The message contains the Target TLV and the Bandwidth-
Allocation TLV. The latter has a TLV Type of 0x15 and contains a Delegated
Amount field, set to 4000 kbits/s. 
</t>

<figure anchor="FIG_EX_BwTrans" title="NAS Response, Bandwidth Transfer
Message">
<artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length = 32         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type=147  | 0x3   | Result Code = 0x000   | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Partition ID  |            Transaction Identifier             | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|I|      SubMessage Number      |           Length = 32         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length = 8  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length = 4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Access Loop Circuit ID                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|BW-Allocation TLV Type = 0x15  |          TLV Length = 4       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|          Delegated Amount = 0x00000FA0 (4000 kbits/s)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>The Delegated Bandwidth Query request message (M3) is shown in <xref
target="FIG_EX_BwQueryReq"/>. The Message Type for the Delegated Bandwidth
Query request message is 148. The Result field is set to AckAll (0x2). The
message contains the Target TLV only. 
</t>

<figure anchor="FIG_EX_BwQueryReq" title="Delegated Bandwidth Query Request
Message">
<artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length = 24         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type=148  | 0x2   | Result Code = 0x000   | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Partition ID  |            Transaction Identifier             | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|I|      SubMessage Number      |           Length = 24         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length = 8  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length = 4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Access Loop Circuit ID                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>Finally, the Delegated Bandwidth Query response message (M4) is shown in
<xref target="FIG_EX_BwQueryResp"/>. The Message Type for the Delegated
Bandwidth Query response message is 148. The Result field is set to Success
(0x3). The message contains the Target TLV and the Bandwidth-Allocation TLV
with the Delegated Amount field set to 4000 kbits/s. 
</t>

<figure anchor="FIG_EX_BwQueryResp" title="Delegated Bandwidth Query Response
Message">
<artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length = 32         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type=148  | 0x3   | Result Code = 0x000   | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Partition ID  | Transaction Identifier (copied from request)  | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|I|      SubMessage Number      |           Length = 32         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length = 8  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length = 4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Access Loop Circuit ID                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|BW-Allocation TLV Type = 0x15  |          TLV Length = 4       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|          Delegated Amount = 0x00000FA0 (4000 kbits/s)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

</section><!-- EX_White-List -->

<section anchor="EX_Black-List" title="Handling Of Black-Listed Join Requests">

<t>This section introduces no new messages, since requests for flows in the
Black list are simply ignored. The one thing to point out is the overlap in our
example between the set of flows in the Grey list and the flows in the Black
list. This does not create any ambiguity, since not only does the Black list
have priority for equally good matches, but also the Black list entries are
more specific (group prefix lengths of 32 versus 29 in the Grey list) than the
Grey list flow prefixes.</t>

</section><!-- EX_Black-List -->

<section anchor="EX_OnlineGame" title="Handling Of Requests To Join and Leave
the On-Line Game">

<t>The final class of multicast control actions in our example allows the
subscriber to enter and leave the on-line game. As described at the beginning
of this example, the game uses Any Source Multicast (ASM). Subscriber
signalling bypasses the AN, going directly to the NAS (e.g., through a web
interface). </t>

<t>When the subscriber requests to join the game, the NAS (after applying
policy and bandwidth checks) sends a Multicast Replication Control message to
the AN to enable the flow on the port concerned. The AN knows not to apply
admission control, since it has not
received an MRepCtl-CAC TLV in the Provisioning message. When the subscriber
leaves, the NAS sends another Multicast Replication Control message to delete
the flow. This message sequence is shown in <xref
target="FIG_EX_NASInitFlow"/>. </t>

<t>It is possible that the NAS finds that there is not enough bandwidth
available to accommodate the subscriber's request. In this case, the NAS could
send a Bandwidth Reallocation Request message to the AN, asking it to release
some of the bandwidth delegated to it. This is not shown in the present
example, since the messages are the same as those already presented with the
exception that the Preferred Amount in the request will be *less than* or equal
to the Required amount, rather than *greater than* or equal to it.</t>


<figure anchor="FIG_EX_NASInitFlow" title="NAS-Initiated Flows For On-Line
Gaming">

              <artwork><![CDATA[
+----------+    +-------+   +-----+    ANCP    +-----+        
|Subscriber|    | Home  |   | AN  |<---------->| NAS |   
+----------+    |Gateway|   +-----+            +-----+    
      |         +-------+     |                   |          
      |           |           |                   |            
      |      Join game        |                   |            
      |-----------+------------------------------>|            
      |           |           |     Multicast     |   NAS performs         
      |           |           |     Replication  (*)  admission
      |           |           |     Control (M1)  |   control
      |     Mcast Game Flow   |<------------------|           
      |<=====================>+                   |            
      |           |           |                   |
      ~           ~           ~                   ~   
      |           |           |                   |            
      |     Leave game        |                   |            
      |-----------+------------------------------>|            
      |           |           |     Multicast     |            
      |           |           |     Replication   |  
      |           |           |     Control (M2)  |            
      |     Mcast Game Flow   |<------------------|           
      |       discontinued    |                   |            
      |           |           |                   |
]]></artwork>
<postamble>(*) The NAS may optionally seek direction from an external
Authorization/Policy Server</postamble>
 </figure>

<t>Multicast Replication Control message (M1) in <xref
target="FIG_EX_GameAdd"/> looks like the message in <xref
target="FIG_EX_MulRepCtlAdd"/> with two exceptions. The first is that the NAS
has the option to set the Result field to AckAll (0x02) if it needs positive
reassurance that the flow has been enabled. This was not done here to save
having to depict a response differing only in the Result field. The larger
difference in this example is that the flow description in the Multicast-Flow
embedded TLV is that of an ASM multicast group (Flow Type = 0x01) with IPv4
(0x01) group address 233.252.1.100. </t>

<figure anchor="FIG_EX_GameAdd" title="Enabling The Subscriber To Join An On-
Line Game">
<artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length = 44         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Vers  |  Sub  | Msg Type=144  | 0x1   | Result Code = 0x000   | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Partition ID  |            Transaction Identifier             | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|I|      SubMessage Number      |           Length = 44         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length = 8  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length = 4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                    Access Loop Circuit ID                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Command TLV Type  = 0x11     |       TLV Length = 16         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Cmd Code=0x01 | Acctg = 0x01  |      Reserved = 0x0000        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Multicast-Flow TLV Type = 0x19 |    Embedded TLV Length = 8    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|Flow Type=0x01 |Addr Fam =0x01 |     Reserved = 0x0000         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Multicast Group Address =  233.252.1.100           |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+--+
]]></artwork>
</figure>

<t>Message M2 terminating the flow when the subscriber leaves the game looks
the same as the message in <xref target="FIG_EX_GameAdd"/> with two exceptions:
the Command Code becomes Delete (0x02), and Accounting is set to 0 to turn off
flow accounting. Of course, the Transaction Identifier values will differ
between the two messages.</t>

</section><!-- EX_OnlineGame -->

      <section anchor="XMP_query"
               title="Example Flow For Multicast Flow Reporting">

<t>The example in this section is independent of the example in the preceding
sections.</t>

          <t><xref target="FIG_query-port"></xref> illustrates a message flow
          in a case where the NAS queries the AN about which multicast flows
          are active on port 10, on port 20 and on port 11 of the AN.</t>

          <t><figure anchor="FIG_query-port"
              title="Per Port Multicast Flow Reporting">
              <preamble></preamble>

              <artwork><![CDATA[+----------+    +-------+   +-----+    ANCP   
+-----+        
|Subscriber|    | Home  |   | AN  |<---------->| NAS |   
+----------+    |Gateway|   +-----+            +-----+    
      |         +-------+     |                   |          
      |           |           |  Multicast Flow   |            
      |           |           |  Query Request    |            
      |           |           |      (M1)         |            
      |           |           |<------------------|             
      |           |           |                   |  
      |           |           | Multicast Flow    |  
      |           |           | Query Response    | 
      |           |           |      (M2)         |           
      |           |           |------------------>|           
      |           |           |                   |            
      |           |           |                   |
 

]]></artwork>
            </figure></t>

          <t>The Multicast Flow Query Request message (M1) is illustrated in
          <xref target="FIG_query-port-request"></xref>. The Message Type is
149. The Result field is set to AckAll (0x2). Three Target TLVs are present,
identifying port 10, port 20, and port 11 respectively.</t>

          <figure anchor="FIG_query-port-request"
                  title="Multicast Flow Query Request Message For Per-Port
Multicast Flow Reporting">
            <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers  |  Sub  | Msg Type = 149|Rslt=2 |    Result Code = 0    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Partition ID  |            Transaction Identifier             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|I|      SubMessage Number      |           Length              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               |
~                    Access Loop Circuit ID (port10)            ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               |
~                    Access Loop Circuit ID (port20)            ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               |
~                    Access Loop Circuit ID (port11)            ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure>

          <t>The Multicast Flow Query Response message (M2) is illustrated in
          <xref target="FIG_query-port-response"></xref>. It indicates that
          there is one active multicast flow [(192.0.2.1, 233.252.2.4)] on
          port 10, no active multicast flow on port 20 and two active
          multicast flows [(192.0.2.1, 233.252.2.4) and (192.0.2.2,
          233.252.2.10)] on port 11.</t>

          <t><figure anchor="FIG_query-port-response"
              title="Multicast Flow Query Response message for per-port
Mulicast Flow Reporting">
              <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Type (0x88-0C)         |           Length              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers  |  Sub  | Msg Type = 149|Rslt=3 |    Result Code = 0    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Partition ID  |            Transaction Identifier             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|I|      SubMessage Number      |           Length              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               |
~                   Access Loop Circuit ID (port10)             ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Multicast-Flow TLV Type = 0x19 |    Embedded TLV Length = 12   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|Flow Type=0x02 |Addr Fam =0x01 |       Reserved = 0x0000       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Multicast Group Address = 233.252.2.4             |    
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                Unicast Source Address = 192.0.2.1             |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+--+
|   Type = 0x1000 (Target)      |        Target TLV Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               |
~                   Access Loop Circuit ID (port20)             ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 0x1000 (Target)      |        Target TLV Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| Access-Loop-Circuit-ID 0x0001 |        Circuit-ID Length      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               |
~                    Access Loop Circuit ID (port11)            ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Multicast-Flow TLV Type = 0x19 |    Embedded TLV Length = 12   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|Flow Type=0x02 |Addr Fam =0x01 |       Reserved = 0x0000       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Multicast Group Address = 233.252.2.4             |    
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                Unicast Source Address = 192.0.2.1             |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+--+
|Multicast-Flow TLV Type = 0x19 |   Embedded TLV Length = 12    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|Flow Type=0x02 |Addr Fam =0x01 |       Reserved = 0x0000       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Multicast Group Address: 233.252.2.10             |    
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                Unicast Source Address = 192.0.2.2             |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+--+
]]></artwork>
            </figure></t>
        </section>

</section><!-- protoc -->

  </back>
</rfc>

