<?xml version="1.0" encoding="US-ASCII"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>

<rfc number="7899" 
     category="std" 
     submissionType="IETF"
     consensus="yes"
     ipr="trust200902" 
     updates="6514">
  <front>
    <title abbrev="MVPN Damping">Multicast VPN State Damping</title>

    <author fullname="Thomas Morin" initials="T" role="editor" surname="Morin">
      <organization>Orange</organization>

      <address>
        <postal>
          <street>2, avenue Pierre Marzin</street>

          <city>Lannion</city>

          <code>22307</code>

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

        <email>thomas.morin@orange.com</email>
      </address>
    </author>

    <author fullname="Stephane Litkowski" initials="S" surname="Litkowski">
      <organization>Orange</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

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

        <email>stephane.litkowski@orange.com</email>
      </address>
    </author>

    <author fullname="Keyur Patel" initials="K" surname="Patel">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street>170 W. Tasman Drive</street>

          <city>San Jose</city>

          <region>CA</region>

          <code>95134</code>

          <country>United States</country>
        </postal>

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

    <author fullname="Zhaohui Zhang" initials="Z" surname="Zhang">
      <organization abbrev="Juniper Networks">Juniper Networks
      Inc.</organization>

      <address>
        <postal>
          <street>10 Technology Park Drive</street>

          <city>Westford</city>

          <region>MA</region>

          <code>01886</code>

          <country>United States</country>
        </postal>

        <email>zzhang@juniper.net</email>
      </address>
    </author>

    <author fullname="Robert Kebler" initials="R" surname="Kebler">
      <organization abbrev="Juniper Networks">Juniper Networks
      Inc.</organization>

      <address>
        <postal>
          <street>10 Technology Park Drive</street>

          <city>Westford</city>

          <region>MA</region>

          <code>01886</code>

          <country>United States</country>
        </postal>

        <email>rkebler@juniper.net</email>
      </address>
    </author>

    <author fullname="Jeffrey Haas" initials="J" surname="Haas">
      <organization>Juniper Networks</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <email>jhaas@juniper.net</email>
      </address>
    </author>

    <date month="June" year="2016"/>

    <abstract>
      <t>This document describes procedures to damp Multicast VPN (MVPN) routing
      state changes and control the effect of the churn due to the multicast
      dynamicity in customer sites. The procedures described in this document
      are applicable to BGP-based multicast VPN and help avoid uncontrolled
      control-plane load increase in the core routing infrastructure.
      The new procedures proposed were inspired by BGP unicast route 
      damping principles that have been adapted to multicast.</t>

    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>In a multicast VPN <xref target="RFC6513"/> deployed with BGP-based
      procedures <xref target="RFC6514"/>, when receivers in VPN sites join
      and leave a given multicast group or channel through multicast
      membership control protocols (Internet Group Management Protocol (IGMP)
      <xref target="RFC3376"/> and Multicast
      Listener Discovery (MLD) <xref target="RFC3810"/>), multicast routing protocols accordingly adjust
      multicast routing states and P-multicast tree states to forward or
      prune multicast traffic to these receivers. Similar challenges arise in
      the context of the <xref target="RFC7117">multicast specification for
      Virtual Private LAN Service (VPLS)</xref>.</t>

      <t>In VPN contexts, providing isolation between customers of a shared
      infrastructure is a core requirement resulting in stringent expectations
      with regard to risks of denial-of-service attacks.</t>

      <t>By nature, multicast memberships change based on the behavior of
      multicast applications running on end hosts. Hence, the frequency of
      membership changes can legitimately be much higher than the typical
      churn of unicast routing states.</t>

      <t>Therefore, mechanisms need to be put in place to ensure that the load put
      on the BGP control plane, and on the P-tunnel setup control plane,
      remains under control regardless of the frequency at which multicast
      membership changes are made by end hosts.</t>

      <t>This document describes procedures inspired by existing BGP route
      damping <xref target="RFC2439"/> that are aimed at offering means to set an
      upper bound to the amount of processing for the MVPN control-plane
      protocols: more precisely, the BGP control plane in <xref target="RFC6514"/>, the P-tunnel control-plane protocol in the
      contexts of <xref target="RFC6514"/>, and the <xref
      target="RFC7117">multicast specification for VPLS</xref>. 
  The goal of setting this upper bound is pursued simultaneous
  with the goal of preserving the service provided (delivering
  the multicast stream as requested by Customer Edge devices),
  although at the expense of a minimal increase of average
  bandwidth use in the provider network).
The upper bound to the control-plane load due
      to the processing of a given multicast state is controlled indirectly
      via configurable parameters.</t>

      <t><xref target="RFC6514">Section 16 of</xref> specifically spells out
      the need for damping the activity of C-multicast and Leaf Auto-discovery
      routes and outlines how to do it by "delaying the advertisement of
      withdrawals of C-multicast routes". This specification provides
      appropriate detail on how to implement this approach and how to provide
      control to the operator; for this reason, it is an update to <xref target="RFC6514"/>.</t>

      <t>The base principle of this specification is described in <xref target="overview"/>. Existing mechanisms that could be relied upon are
      discussed in <xref target="existing"/>. <xref target="procedures"/>
      details the procedures introduced by this specification.</t>

      <t>Section <xref format="counter" target="ptunnel"/> provides specific
      details related to the damping of multicast VPNs P-tunnel state.</t>

      <t>Finally, <xref target="operational"/> discusses operational
      considerations related to the proposed mechanism.</t>
    </section>

    <section 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">RFC 2119</xref>.</t>

      <t>This document reuses terminology from <xref target="RFC7761"/> and
      <xref target="RFC6514"/>.</t>

      <t>In this specification, damping of a multicast state will be said to
      be "active" or "inactive". Note that in <xref target="RFC2439"/>, the
      term used for a unicast route that is dampened is "suppressed", but we
      will avoid this term in this specification given that the proposed
      solution consists in holding active a damped multicast state.</t>
    </section>


<!--[rfced] Throughout the document, we see the use of "consist(s) in".
Please review these occurrences to ensure the meaning is "have as
an essential feature" (per the American Heritage Dictionary) and
that they should not be made "consists of" or something else.

-->
    <section anchor="overview" title="Overview">
      <t>The procedures described in this document allow the network operator
      to configure multicast VPN PEs (Provider Edge routers) so that they can
      delay the propagation of multicast state prune messages between PEs
      when faced with a rate of multicast state dynamicity exceeding a certain
      configurable threshold. Assuming that the number of multicast states
      that can be created by a receiver is bounded, delaying the propagation
      of multicast state pruning results in setting up an upper bound to the
      average frequency at which the router will send state updates to an
      upstream router.</t>

      <t>From the point of view of a downstream router, such as a CE (Customer
      Edge router), this approach has no impact: the multicast routing state
      changes that it solicits to its PE will be honored without any
      additional delay. Indeed, the propagation of Joins is not impacted by the
      procedures specified here, and having the upstream router delay state
      prune propagation to its own upstream router does not affect what
      traffic is sent to the downstream router. In particular, the amount of
      bandwidth used on the PE-CE link downstream to a PE applying this
      damping technique is not increased.</t>

      <t>This approach increases the average bandwidth utilization on a link
      upstream to a PE applying this technique, such as a PE-PE link: indeed,
      a given multicast flow will be forwarded for a longer time than if no
      damping was applied. That said, it is expected that this technique will
      meet the goals of protecting the multicast routing infrastructure
      control plane without a significant average increase of bandwidth; for
      instance, damping events happening at a frequency higher than one event
      per X seconds can be done without increasing by more than X seconds the
      time during which a multicast flow is present on a link.</t>

      <t>That said, simulation of the exponential decay algorithm shows that
      the multicast state churn can be drastically reduced without
      significantly increasing the duration for which multicast traffic is
      forwarded. Hence, using this technique will efficiently protect the
      multicast routing infrastructure control plane against the issues
      described here without a significant average increase of bandwidth. The
      exception will be a scenario with strict constraints on multicast
      bandwidth, where extending the time a multicast flow is forwarded would
      result in congestion.</t>

      <t>To be practical, such a mechanism requires configurability. In
      particular, means are required to control when damping is triggered and
      to allow delaying the pruning of a multicast state for a time increasing
      with the churn of this multicast state. This will let the operator
      control the trade-off made between minimizing the dynamicity and reducing
      bandwidth consumption.</t>
    </section>

    <section anchor="existing" title="Existing Mechanisms">
      <t>This section describes mechanisms that could be considered to address
      the issue but that end up appearing as not suitable or not efficient
      enough.</t>

      <section anchor="rate-limiting" title="Rate-Limiting Multicast Control Traffic">
        <t><xref target="RFC7761">The Protocol Independent Multicast - Sparse Mode
	(PIM-SM) specification</xref> examines
        multicast security threats and, among other things, the risk of denial-of-service
        attacks described in <xref target="intro"/>. A mechanism
        relying on rate-limiting PIM messages is proposed in <xref target="RFC4609">Section 5.3.3 of </xref> but has the identified
        drawbacks of impacting the service delivered and having side-effects
        on legitimate users.</t>
      </section>

      <section anchor="existing-timers" title="Existing PIM, IGMP, and MLD Timers">
        <t>In the context of PIM multicast routing protocols <xref target="RFC7761"/>, a mechanism exists that may offer a form of
        de facto damping of multicast states, under some conditions. Indeed,
        when active, the prune override mechanism consists in having a PIM
        upstream router introduce a delay ("prune override interval") before
        taking into account a PIM Prune message sent by a downstream
        neighbor.</t>

        <t>This mechanism has not been designed specifically for the purpose
        of damping multicast state, but as a means to allow PIM to operate on
        multi-access networks. See Section 4.3.3 of <xref target="RFC7761"/>.
	However, when
	active, this mechanism will prevent a downstream router from producing
	multicast routing protocol messages that would cause, for a given
	multicast state, the upstream router to send to its own upstream
	router multicast routing protocol messages at a rate higher than
	1/[J_P_Override_Interval]. This provides a form of de facto damping.</t>

        <t>Similarly, the IGMP and MLD multicast membership control protocols
        can provide a similar behavior under the right conditions.</t>

        <t>These mechanisms are not considered suitable to meet the goals
        spelled out in <xref target="intro"/>, the main reasons being
        that:<list style="symbols">
            <t>when enabled, these mechanisms require additional bandwidth on
            the local link on which the effect of a prune is delayed (in our
            case, the PE-CE link);</t>

            <t>when enabled, these mechanisms require disabling explicit
            tracking (see <xref target="RFC7761">Section 4.3.3 of</xref>),
            even though enabling this feature may otherwise be desired;</t>

            <t>on certain implementations, these mechanisms are incompatible
            with behaviors that cannot be turned off (e.g., implementation
            applying a fast-leave behavior on interfaces with only two
            neighbors);</t>

            <t>they do not provide a suitable level of configurability; and</t>

            <t>they do not provide a way to discriminate between multicast
            flows based on estimation of their dynamicity.</t>
          </list></t>
      </section>

      <section anchor="unicast-damping" title="BGP Route Damping">
        <t>The procedures defined in <xref target="RFC2439"/> and <xref target="RFC7196"/> for BGP route flap damping are useful for operators
        who want to control the impact of unicast route churn on the routing
        infrastructure and offer a standardized set of parameters to control
        damping.</t>

        <t>These procedures are not directly relevant in a multicast context
        for the following reasons:<list style="symbols">
            <t>they are not specified for multicast routing protocol in
            general, and</t>

            <t>even in contexts where BGP routes are used to carry multicast
            routing states (e.g., <xref target="RFC6514"/>), these procedures
            do not allow the implementation of the principle described in this
            document; the main reason being that a damped route becomes
            suppressed while the target behavior would be to keep advertising
            when damping is triggered on a multicast route.</t>
          </list></t>

        <t>However, the set of parameters standardized to control the
        thresholds of the exponential decay mechanism can be relevantly
        reused. This is the approach proposed for the procedures described in
        this document (<xref target="procedures"/>). Motivations for doing so
        are to help the network operator deploy this feature based on
        consistent configuration parameters and to obtain predictable results
        without the drawbacks of relying on rate-limiting multicast control
        protocol exchanges (as is exposed in <xref target="rate-limiting"/>) or
        on the use of existing PIM/IGMP timers (as is exposed in <xref target="existing-timers"/>).</t>
      </section>
    </section>

    <section anchor="procedures" title="Procedures for Multicast State Damping">
      <section anchor="pim-procedures" title="PIM Procedures">
        <t>This section describes procedures for multicast state damping
        satisfying the goals spelled out in <xref target="intro"/>. This
        section describes procedures for (S,G) states in the PIM-SM protocol
        <xref target="RFC7761"/>; they apply unchanged for such states created
        based on multicast group management protocols (IGMP <xref target="RFC3376"/>, MLD <xref target="RFC3810"/>) on downstream
        interfaces. The same procedures are applied to (*,G) states in the
        context of PIM-SM Any-Source Multicast (ASM) groups (damping is not applied to (S,G,Rpt)
        Prune state).</t>

        <t>The following notions of <xref target="RFC2439"/> are reused in
        these procedures:<list style="hanging">
            <t hangText="figure-of-merit:">A number reflecting the current
            estimation of recent past activity of an (S,G) multicast routing
            state, which increases based on routing events related to this
            state and decreases between these events following an exponential
            decay function (see below); the activation or inactivation of
            damping on the state is based on this number. This number is
            associated with the upstream state machine for (S,G) and is
            initialized to a value of zero on state creation.</t>

            <t hangText="exponential decay function:">A mathematical function
            as defined in <xref target="RFC2439"> Section 2.3 of</xref>
            (ignoring the first paragraph of the section, as it does not apply
            here).</t>

            <t hangText="decay-half-life:"> The duration used to control how fast
            the exponential decay of the <spanx
	    style="strong">figure-of-merit</spanx> is; this parameter of the exponential decay function is the time
            duration during which the <spanx style="strong">figure-of-merit</spanx>
            will be reduced by half when in the absence of a routing event
            (configurable parameter).</t>

            <t hangText="cutoff-threshold:">The value of the <spanx style="strong">figure-of-merit</spanx> over which damping is
            applied (configurable parameter).</t>

            <t hangText="reuse-threshold:">The value of the <spanx style="strong">figure-of-merit</spanx>
            under which damping stops being applied (configurable
            parameter).</t>
          </list>In addition to these values, a configurable <spanx style="strong">increment-factor</spanx> parameter is introduced that
        controls by how much the <spanx style="strong">figure-of-merit</spanx>
        is incremented on multicast state update events.</t>

        <t><xref target="default-max-values"/> proposes default and maximum
        values for the configurable parameters.</t>

        <t>On reception of updated multicast membership or routing information
        on a downstream interface I for a given (S,G) state, which results in a
        change of the state of the PIM downstream state machine (see <xref target="RFC7761">Section 4.5.3 of </xref>), a router implementing
        these procedures MUST:<list style="symbols">
            <t>apply procedures of <xref target="RFC7761"/> unchanged, for
            everything relating to what multicast traffic ends up being sent
            on downstream interfaces, including interface I</t>

            <t>update the <spanx style="strong">figure-of-merit</spanx>
            following the exponential decay algorithm</t>

            <t>increase the <spanx style="strong">figure-of-merit</spanx> for
            the (S,G) by the <spanx style="strong">increment-factor</spanx></t>

            <t>update the damping state for the (S,G) state: damping becomes
            active on the state if the recomputed <spanx style="strong">figure-of-merit</spanx>
            is strictly above the configured <spanx style="strong">cutoff-threshold</spanx>:<list style="symbols">
                <t>if damping remains inactive on (S,G) state, update the
                upstream state machine as usual (as per <xref target="RFC7761">Section 4.5.7 of</xref>).</t>

                <t>if damping becomes active for the (S,G) state:<list style="symbols">
                    <t>if the received message has caused the upstream state
                    machine to transition to Joined state, update the upstream
                    state machine for (S,G) applying usual PIM procedures in
                    <xref target="RFC7761">Section 4.5.7 of</xref> and including
                    sending a PIM Join to the upstream neighbor</t>

                    <t>if the received message has caused the upstream state
                    machine to transition to NotJoined state, do not update
                    the upstream state machine for (S,G)</t>

                    <t>hold the upstream state machine in Joined state until
                    the reuse threshold is reached: for the purpose of
                    updating this state machine, events that may result in
                    updating the state based on <xref target="RFC7761"/>
                    SHOULD be ignored until the <spanx style="strong">reuse-threshold</spanx>
                    is reached. The effect is that in the meantime, while PIM
                    Join messages may be sent as refreshes to the upstream
                    neighbor, no PIM Prune message will be sent.</t>
                  </list></t>

                <t>if damping was already active, do not update the upstream
                state machine for (S,G); the upstream state machine was frozen
                after processing the previous message.</t>
              </list></t>
          </list></t>

        <t>Once the <spanx style="strong">figure-of-merit</spanx> for (S,G)
        damping state decays to a value strictly below the configured <spanx style="strong">reuse-threshold</spanx>, the upstream state machine for
        (S,G) is recomputed based on states of downstream state machines,
        eventually leading to a PIM Join or Prune message to be sent to the
        upstream neighbor.</t>

        <t>Given the specificity of multicast applications, it is REQUIRED for
        the implementation to let the operator configure the <spanx style="strong">decay-half-life</spanx> in seconds, rather than in
        minutes.</t>

        <t>This specification does not impose the use of a particular
        technique to update the <spanx style="strong">figure-of-merit</spanx>
        following the exponential decay controlled by the configured <spanx style="strong">decay-half-life</spanx>.&nbsp;For instance, the same
        techniques as the ones described in <xref target="RFC2439"/> can be
        applied. The only requirement is that the <spanx style="strong">figure-of-merit</spanx>
        has to be updated prior to increasing it and that its decay below the
        <spanx style="strong">reuse-threshold</spanx> has to be reacted
        upon in a timely manner: in particular, if the recomputation is done with a fixed time
        granularity, this granularity should be low enough to not
        significantly delay the inactivation of damping on a multicast state
        beyond what the operator wanted to configure (e.g., for a <spanx style="strong">decay-half-life</spanx> of 10s, recomputing the <spanx style="strong">figure-of-merit</spanx> each minute would result in a
        multicast state remaining damped for a much longer time than
        specified).</t>

        <t>PIM implementations typically follow the suggestion from Section
	4.1 of <xref target="RFC7761"/> that:
	<list style="empty">
        
	<t>implementations will only maintain state when it is
        relevant to forwarding operations - for example, the 'NoInfo' state
        might be assumed from the lack of other state information, rather than
        being held explicitly.</t></list></t>

	<t>To properly implement damping procedures, an implementation
        MUST keep an explicit (S,G) state as long as damping is active on an
        (S,G). Once an (S,G) state expires, and damping becomes inactive on
        this state, its associated <spanx style="strong">figure-of-merit</spanx>
        and damping state are removed as well.</t>

        <t>Note that these procedures:</t>

        <t><list style="symbols">
            <t>do not impact PIM procedures related to refreshes or expiration
            of multicast routing states: PIM Prune messages triggered by the
            expiration of the (S,G) keep-alive timer are not suppressed or
            delayed, and the reception of Join messages not causing transition
            of state on the downstream interface does not lead to incrementing
            the <spanx style="strong">figure-of-merit</spanx>;</t>

            <t>do not impact the PIM Assert mechanism: in particular, PIM Prune
            messages triggered by a change of the PIM Assert winner on the
            upstream interface are not suppressed or delayed;</t>

            <t>do not impact PIM Prune messages that are sent when the RPF
            neighbor is updated for a given multicast flow; and</t>

            <t>do not impact PIM Prune messages that are sent in the context
            of switching between a Rendezvous Point Tree and a Shortest Path
            Tree.</t>

<!--[rfced] Throughout the document, it may be beneficial to clarify the relationship between items in a given indented list, perhaps by adding "and" or "or" between items.  For example:

Original:
   o  providing means to configure the *decay-half-life* in seconds if
      that option is not already available 

   o  using parameters for the exponential decay that are specific to...


Perhaps:
   o  providing means to configure the *decay-half-life* in seconds if
      that option is not already available; and 

   o  using parameters for the exponential decay that are specific to...
-->
          </list></t>

        <t>Note also that no action is triggered based on the reception of PIM
        Prune messages (or corresponding IGMP/MLD messages) that relate to
        non-existing (S,G) state: in particular, no <spanx style="strong">figure-of-merit</spanx>
        or damping state is created in this case.</t>
      </section>

      <section anchor="mvpn-procedures" title="Procedures for Multicast VPN State Damping">
        <t>The procedures described in <xref target="pim-procedures"/> can be
        applied in the Virtual Routing and Forwarding (VRF) PIM-SM implementation (in the "C-PIM instance"),
        with the corresponding action to suppressing the emission of a
        Prune(S,G) message being to not withdraw the C-multicast Source Tree
        Join (C-S,C-G) BGP route. An implementation of <xref target="RFC6513"/> relying on the use of PIM to carry C-multicast
        routing information MUST support this technique to be compliant with
        this specification.</t>

        <t>In the context of <xref target="RFC6514"/>, where BGP is used to
        distribute C-multicast routing information, the following procedure is
        proposed as an alternative to the procedures in <xref target="pim-procedures"/> and consists in applying damping in the BGP
        implementation based on existing BGP damping mechanisms applied to
        C-multicast Source Tree Join routes and Shared Tree Join routes (and
        as well to Leaf A-D routes - see <xref target="ptunnel"/>) and
        modified to implement the behavior described in <xref target="overview"/> along the following guidelines:<list style="symbols">
            <t>not withdrawing (instead of not advertising) damped routes;</t>

            <t>providing means to configure the <spanx style="strong">decay-half-life</spanx>
            in seconds if that option is not already available; and</t>

            <t>using parameters for the exponential decay that are specific to
            multicast based on default values and multicast-specific
            configuration.</t>
          </list></t>

        <t>While these procedures would typically be implemented on PE
        routers, in a context where BGP Route Reflectors (RRs) <xref target="RFC4456"/> are used it can be considered useful to also be
        able to apply damping on RRs as well to provide additional protection
        against activity created behind multiple PEs. Additionally, for MVPN
        Inter-AS deployments, it can be needed to protect one Autonomous System (AS) from the
        dynamicity of multicast VPN routing events from other ASes.</t>

        <t>The choice to implement damping based on BGP routes or the
        procedures described in <xref target="pim-procedures"/> is up to the
        implementor, but at least one of the two MUST be implemented. In the
        perspective of allowing damping to be done on RRs and Autonomous
	System Border Routers (ASBRs),
        implementing the BGP approach is recommended.</t>

        <t>When not all routers in a deployment have the capability to drop
        traffic coming from the wrong PE (as spelled out in <xref target="RFC6513">Section 9.1.1 of</xref>), then the withdrawal of a
        C-multicast route resulting from a change in the Upstream Multicast
        Hop or Upstream Multicast PE SHOULD NOT be damped.
	An implementation of this specification MUST do at least one of the
	two following things:<list style="symbols">
	<t>not damp these withdrawals by default, and/or</t>
	<t>provide a tuning knob to disable the damping of these withdrawals.</t>
      </list>
      Additionally, in such a deployment context, it
        is RECOMMENDED not to enable any multicast VPN route damping on RRs
        and ASBRs since these types of equipment cannot distinguish the event having
        caused a C-multicast to be withdrawn.</t>

        <t>Note well that it is out of scope of this section to consider the
        application of these damping techniques on MVPN BGP routes other than
        C-multicast routes.</t>
      </section>
    </section>

    <section anchor="ptunnel" title="Procedures for P-Tunnel State Damping">
      <section anchor="ptunnel-mvpn" title="Damping MVPN P-Tunnel Change Events">
        <t>When selective P-tunnels are used (see <xref target="RFC6513">Section 7 of</xref>), the effect of updating the
        upstream state machine for a given (C-S,C-G) state on a PE connected
        to multicast receivers is not only to generate activity to propagate
        C-multicast routing information to the source connected PE, but also
        to possibly trigger changes related to the P-tunnels carrying
        (C-S,C-G) traffic. Protecting the provider network from an excessive
        amount of change in the state of P-tunnels is required, and this
        section details how this can be done.</t>

        <t>A PE implementing these procedures for MVPN MUST damp Leaf A-D
        routes in the same manner as it would for C-multicast routes (see
        <xref target="mvpn-procedures"/>).</t>

        <t>A PE implementing these procedures for MVPN MUST damp the activity
        related to removing itself from a P-tunnel. Possible ways to do so
        depend on the type of P-tunnel, and local implementation details are
        left up to the implementor.</t>

        <t>The following is proposed as an example of how the above can be
        achieved:</t>

        <t><list style="symbols">
            <t>For P-tunnels implemented with the PIM protocol, this consists
            in applying multicast state damping techniques described in <xref target="pim-procedures"/> to the P-PIM instance, at least for
            (S,G) states corresponding to P-tunnels.</t>

            <t>For P-tunnels implemented with multipoint LDP (mLDP), this consists
            in applying damping techniques completely similar to the one
            described in <xref target="procedures"/> but generalized to apply
            to mLDP states.</t>

            <t>For root-initiated P-tunnels (P-tunnels implemented with the
            Point-to-Multipoint (P2MP) RSVP-TE, or relying on ingress replication), no particular
            action needs to be implemented to damp P-tunnels membership, if
            the activity of Leaf A-D route themselves is damped.</t>

            <t>Another possibility is to base the decision to join or not join
            the P-tunnel to which a given (C-S,C-G) is bound and to advertise
            or not advertise a Leaf A-D route related to (C-S,C-G) based on
            whether or not a C-multicast Source Tree Join route is being
            advertised for (C-S,C-G) rather than by relying on the state of
            the C-PIM Upstream state machine for (C-S,C-G).</t>
          </list></t>
      </section>

      <section anchor="ptunnel-evpn" title="Procedures for Ethernet VPNs">
        <t>Specifications exist to support or optimize multicast and broadcast
        in the context of Ethernet VPNs <xref target="RFC7117"/> relying on
        the use of Selective P-Multicast Service Interface (S-PMSI) and P-tunnels. For the same reasons as for IP
        multicast VPNs, an implementation of <xref target="RFC7117"/> MUST
        follow the procedures described in <xref target="ptunnel-mvpn"/> to
        be compliant with this specification.</t>
      </section>
    </section>

    <section anchor="operational" title="Operational Considerations">
      <section title="Enabling Multicast Damping">
        <t>In the context of multicast VPNs, these procedures would be enabled
        on PE routers. Additionally, in the case of C-multicast routing based
        on BGP extensions (<xref target="RFC6514"/>), these procedures can be
        enabled on ASBRs and RRs.</t>
      </section>

      <section title="Troubleshooting and Monitoring">
        <t>Implementing the damping mechanisms described in this document
        should be complemented by appropriate tools to observe and
        troubleshoot damping activity.</t>

	<t>Complementing the existing interface providing information on
	multicast states with information on eventual damping of
	corresponding states (e.g., Multicast Routing Information Base (MRIB)
	states) is RECOMMENDED for C-multicast routing states and P-tunnel
	states.</t>
      </section>

      <section anchor="default-max-values" title="Default and Maximum Values">
        <t>Considering that, by design, multicast streams will be delivered
        unchanged to the end user independent of the value chosen for the
        configurable parameters, and that the only trade-off being made is an
        increase of bandwidth use, the default and maximum values do not have
        to be perfectly tuned.</t>

        <t>This section proposes default and maximum values that are conservative, so
        as to not significantly impact network dimensioning but still prevent
        multicast state churn going beyond what can be considered a reasonably
        low churn for a multicast state (see below for illustrations in order
        of magnitude of the effect of these values).</t>

        <t>The following values are RECOMMENDED to be adopted as default
        values:</t>

        <t><list style="symbols">
            <t><spanx style="strong">increment-factor</spanx>: 1000</t>

            <t><spanx style="strong">cutoff-threshold</spanx>: 3000</t>

            <t><spanx style="strong">decay-half-life</spanx>: 10s</t>

            <t><spanx style="strong">reuse-threshold</spanx>: 1500</t>
          </list></t>

        <t>For unicast damping, it is common to set an upper bound to the time
        during which a route is suppressed. In the case of multicast state
        damping, which relies on not withdrawing a damped route, it may be
        desirable to avoid a situation where a multicast flow would keep
        flowing in a portion of the network for a very long time in the
        absence of receivers.</t>

        <t>The proposed default maximum value for the <spanx style="strong">figure-of-merit</spanx>
        is 20x<spanx style="strong">increment-factor</spanx>, i.e., 20000 with
        the proposed default <spanx style="strong">increment-factor</spanx> of
        1000.</t>

        <t>As illustrations, with these values:<list style="symbols">
            <t>a multicast state updated less frequently than once every 6 s
            will not be damped at all;</t>

            <t>a multicast state changing once per second for 3 s, and then not
            changing, will not be damped;</t>

            <t>a multicast state changing once per second for 4 s, and then not
            changing, will be damped after the fourth change for approximately
            13 s;</t>

            <t>a multicast state changing twice per second for 15 s, and then
            not changing, will be damped after the fourth change for
            approximately 50 s; and</t>

            <t>a multicast state changing at a fast pace for a long time will
            reach the maximum of <spanx style="strong">figure-of-merit</spanx>;
            once the activity on this state stops, corresponding traffic may
            still flow in the network for approximately 37 s before dampening
            stops being active.</t>
          </list></t>

        <t>The following values are proposed as maximums:<list style="symbols">
            <t><spanx style="strong">decay-half-life</spanx>: 60 s</t>

            <t><spanx style="strong">cutoff-threshold</spanx>: 50000</t>
          </list></t>

        <t>More aggressive protection against the risk of denial of service
        can be achieved by increasing the <spanx style="strong">increment-factor</spanx>
        or the <spanx style="strong">decay-half-life</spanx>, or by reducing the
        <spanx style="strong">cutoff-threshold</spanx> and/or <spanx style="strong">reuse-threshold</spanx>.</t>
      </section>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The procedures defined in this document do not introduce additional
      security issues not already present in the contexts addressed and
      actually aim at addressing some of the identified risks without
      introducing as much denial-of-service risk as some of the mechanisms
      already defined.</t>

      <t>The protection provided relates to the control plane of the multicast
      routing protocols, including the components implementing the routing
      protocols and the components responsible for updating the multicast
      forwarding plane.</t>

      <t>The procedures described are meant to provide some level of protection
      for the router on which they are enabled by reducing the amount of
      routing state updates that it needs to send to its upstream neighbor or
      peers but do not provide any reduction of the control-plane load
      related to processing routing information from downstream neighbors.
      Protecting routers from an increase in control-plane load due to
      activity on downstream interfaces toward core routers (or in the context
      of BGP-based MVPN C-multicast routing, BGP peers) relies on the
      activation of damping on corresponding downstream neighbors (or BGP
      peers) and/or at the edge of the network. Protecting routers from an
      increase in control-plane load due to activity on customer-facing
      downstream interfaces or downstream interfaces to routers in another
      administrative domain is out of the scope of this document and should
      use already defined mechanisms (see <xref target="RFC4609"/>).</t>

      <t>To be effective, the procedures described here must be complemented by
      configuration limiting the number of multicast states that can be
      created on a multicast router through protocol interactions with
      multicast receivers, neighbor routers in adjacent ASes, or in multicast
      VPN contexts with multicast CEs. Note well that the two mechanisms may
      interact: the state for which Prune has been requested may still remain
      taken into account for some time if damping has been triggered and hence
      result in an otherwise acceptable new state from being successfully
      created.</t>

      <t>Additionally, it is worth noting that these procedures are not meant
      to protect against peaks of control-plane load but only address
      averaged load. For instance, assuming a set of multicast states
      are submitted to the same Join/Prune events, damping can prevent more than a
      certain number of Join/Prune messages to be sent upstream in the period
      of time that elapses between the reception of Join/Prune messages
      triggering the activation of damping on these states and when damping
      becomes inactive after decay.</t>
    </section>

  </middle>

  <back>
    <references title="Normative References">

<reference  anchor='RFC2119' target='http://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>

<reference  anchor='RFC2439' target='http://www.rfc-editor.org/info/rfc2439'>
<front>
<title>BGP Route Flap Damping</title>
<author initials='C.' surname='Villamizar' fullname='C. Villamizar'><organization /></author>
<author initials='R.' surname='Chandra' fullname='R. Chandra'><organization /></author>
<author initials='R.' surname='Govindan' fullname='R. Govindan'><organization /></author>
<date year='1998' month='November' />
</front>
<seriesInfo name='RFC' value='2439'/>
<seriesInfo name='DOI' value='10.17487/RFC2439'/>
</reference>

<reference  anchor='RFC3376' target='http://www.rfc-editor.org/info/rfc3376'>
<front>
<title>Internet Group Management Protocol, Version 3</title>
<author initials='B.' surname='Cain' fullname='B. Cain'><organization /></author>
<author initials='S.' surname='Deering' fullname='S. Deering'><organization /></author>
<author initials='I.' surname='Kouvelas' fullname='I. Kouvelas'><organization /></author>
<author initials='B.' surname='Fenner' fullname='B. Fenner'><organization /></author>
<author initials='A.' surname='Thyagarajan' fullname='A. Thyagarajan'><organization /></author>
<date year='2002' month='October' />
</front>
<seriesInfo name='RFC' value='3376'/>
<seriesInfo name='DOI' value='10.17487/RFC3376'/>
</reference>

<reference  anchor='RFC3810' target='http://www.rfc-editor.org/info/rfc3810'>
<front>
<title>Multicast Listener Discovery Version 2 (MLDv2) for IPv6</title>
<author initials='R.' surname='Vida' fullname='R. Vida' role='editor'><organization /></author>
<author initials='L.' surname='Costa' fullname='L. Costa' role='editor'><organization /></author>
<date year='2004' month='June' />
</front>
<seriesInfo name='RFC' value='3810'/>
<seriesInfo name='DOI' value='10.17487/RFC3810'/>
</reference>

<reference  anchor='RFC6513' target='http://www.rfc-editor.org/info/rfc6513'>
<front>
<title>Multicast in MPLS/BGP IP VPNs</title>
<author initials='E.' surname='Rosen' fullname='E. Rosen' role='editor'><organization /></author>
<author initials='R.' surname='Aggarwal' fullname='R. Aggarwal' role='editor'><organization /></author>
<date year='2012' month='February' />
</front>
<seriesInfo name='RFC' value='6513'/>
<seriesInfo name='DOI' value='10.17487/RFC6513'/>
</reference>

<reference  anchor='RFC6514' target='http://www.rfc-editor.org/info/rfc6514'>
<front>
<title>BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs</title>
<author initials='R.' surname='Aggarwal' fullname='R. Aggarwal'><organization /></author>
<author initials='E.' surname='Rosen' fullname='E. Rosen'><organization /></author>
<author initials='T.' surname='Morin' fullname='T. Morin'><organization /></author>
<author initials='Y.' surname='Rekhter' fullname='Y. Rekhter'><organization /></author>
<date year='2012' month='February' />
</front>
<seriesInfo name='RFC' value='6514'/>
<seriesInfo name='DOI' value='10.17487/RFC6514'/>
</reference>

<reference  anchor='RFC7117' target='http://www.rfc-editor.org/info/rfc7117'>
<front>
<title>Multicast in Virtual Private LAN Service (VPLS)</title>
<author initials='R.' surname='Aggarwal' fullname='R. Aggarwal' role='editor'><organization /></author>
<author initials='Y.' surname='Kamite' fullname='Y. Kamite'><organization /></author>
<author initials='L.' surname='Fang' fullname='L. Fang'><organization /></author>
<author initials='Y.' surname='Rekhter' fullname='Y. Rekhter'><organization /></author>
<author initials='C.' surname='Kodeboniya' fullname='C. Kodeboniya'><organization /></author>
<date year='2014' month='February' />
</front>
<seriesInfo name='RFC' value='7117'/>
<seriesInfo name='DOI' value='10.17487/RFC7117'/>
</reference>

<reference  anchor='RFC7196' target='http://www.rfc-editor.org/info/rfc7196'>
<front>
<title>Making Route Flap Damping Usable</title>
<author initials='C.' surname='Pelsser' fullname='C. Pelsser'><organization /></author>
<author initials='R.' surname='Bush' fullname='R. Bush'><organization /></author>
<author initials='K.' surname='Patel' fullname='K. Patel'><organization /></author>
<author initials='P.' surname='Mohapatra' fullname='P. Mohapatra'><organization /></author>
<author initials='O.' surname='Maennel' fullname='O. Maennel'><organization /></author>
<date year='2014' month='May' />
</front>
<seriesInfo name='RFC' value='7196'/>
<seriesInfo name='DOI' value='10.17487/RFC7196'/>
</reference>

<reference  anchor='RFC7761' target='http://www.rfc-editor.org/info/rfc7761'>
<front>
<title>Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)</title>
<author initials='B.' surname='Fenner' fullname='B. Fenner'><organization /></author>
<author initials='M.' surname='Handley' fullname='M. Handley'><organization /></author>
<author initials='H.' surname='Holbrook' fullname='H. Holbrook'><organization /></author>
<author initials='I.' surname='Kouvelas' fullname='I. Kouvelas'><organization /></author>
<author initials='R.' surname='Parekh' fullname='R. Parekh'><organization /></author>
<author initials='Z.' surname='Zhang' fullname='Z. Zhang'><organization /></author>
<author initials='L.' surname='Zheng' fullname='L. Zheng'><organization /></author>
<date year='2016' month='March' />
</front>
<seriesInfo name='STD' value='83'/>
<seriesInfo name='RFC' value='7761'/>
<seriesInfo name='DOI' value='10.17487/RFC7761'/>
</reference>
</references>
    <references title="Informative References">

<reference  anchor='RFC4456' target='http://www.rfc-editor.org/info/rfc4456'>
<front>
<title>BGP Route Reflection: An Alternative to Full Mesh Internal BGP (IBGP)</title>
<author initials='T.' surname='Bates' fullname='T. Bates'><organization /></author>
<author initials='E.' surname='Chen' fullname='E. Chen'><organization /></author>
<author initials='R.' surname='Chandra' fullname='R. Chandra'><organization /></author>
<date year='2006' month='April' />
</front>
<seriesInfo name='RFC' value='4456'/>
<seriesInfo name='DOI' value='10.17487/RFC4456'/>
</reference>

<reference  anchor='RFC4609' target='http://www.rfc-editor.org/info/rfc4609'>
<front>
<title>Protocol Independent Multicast - Sparse Mode (PIM-SM) Multicast Routing Security Issues and Enhancements</title>
<author initials='P.' surname='Savola' fullname='P. Savola'><organization /></author>
<author initials='R.' surname='Lehtonen' fullname='R. Lehtonen'><organization /></author>
<author initials='D.' surname='Meyer' fullname='D. Meyer'><organization /></author>
<date year='2006' month='October' />
</front>
<seriesInfo name='RFC' value='4609'/>
<seriesInfo name='DOI' value='10.17487/RFC4609'/>
</reference>
    </references>

    <section anchor="Acknowledgements" title="Acknowledgements" numbered="no">
      <t>We would like to thank Bruno Decraene and Lenny Giuliano for
      discussions that helped shape this proposal. We would also like to thank 
      Yakov Rekhter and Eric Rosen for their reviews and helpful comments. 
      Thanks to Wim Henderickx for his comments and support of this proposal. 
      Additionally, Martin Vigoureux, Gunter Van De Velde, and Alvaro Retana provided useful comments to finalize the document.</t>
    </section>

  </back>
</rfc>
