<?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 comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-geng-spring-redundancy-policy-02"
     ipr="trust200902">
  <front>
    <title abbrev="Redundancy Policy">Redundancy Policy for Redundancy
    Protection</title>

    <author fullname="Xuesong Geng" initials="X." surname="Geng">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country>China</country>
        </postal>

        <email>gengxuesong@huawei.com</email>
      </address>
    </author>

    <author fullname="Mach(Guoyi) Chen" initials="M." surname="Chen">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country>China</country>
        </postal>

        <email>mach.chen@huawei.com</email>
      </address>
    </author>

    <author fullname="Fan Yang" initials="F." surname="Yang, Ed.">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country>China</country>
        </postal>

        <email>shirley.yangfan@huawei.com</email>
      </address>
    </author>

    <date day="7" month="March" year="2022"/>

    <abstract>
      <t>Redundancy Protection is a generalized protection mechanism to
      achieve the high reliability of service transmission in Segment Routing
      network. Specifically, packets of flows are replicated at a network node
      into two or more copies, which are transported via different and
      disjoint paths in parallel. To support redundancy protection in Segment
      Routing domain, this document introduces Redundancy Policy, as a variant
      of SR Policy, to intrust the replication of service packets and the
      multiple ordered lists of segments used for packet carrying.</t>
    </abstract>

    <note title="Requirements Language">
      <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 .</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>Redundancy protection <xref
      target="I-D.ietf-spring-sr-redundancy-protection"/> is a generalized
      protection mechanism by replicating and transmitting copies of flow
      packets on redundancy node over multiple different and disjoint paths,
      and further eliminating the redundant packets at merging node. This
      document introduces Redundancy Policy to support redundancy protection,
      which is a variant of SR Policy <xref
      target="I-D.ietf-spring-segment-routing-policy"/> . Redundancy Policy
      applys equally to both MPLS data plane (SR-MPLS) <xref
      target="RFC8660"/> and Segment Routing with IPv6 data plane (SRv6) <xref
      target="RFC8986"/>.</t>
    </section>

    <section title="Terminology and Conventions">
      <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"/>.</t>

      <t>Redundancy Node: the start point of Redundancy protection, where the
      network node replicates the flow packets.</t>

      <t>Merging Node: the end point of redundancy protection, where the
      network node eliminates and ordering(optionally) the flow packets.</t>

      <t>Redundancy Policy: an extended SR Policy which instructs more than
      one active segment lists for the multiple paths to support redundant
      transmission of flow packets.</t>

      <t/>
    </section>

    <section title="Redundancy Policy">
      <t>Redundancy Policy is used to enable packet replication and
      instantiation more than one active ordered lists of segments between
      redundancy node and merging node to steer the same flow through
      different paths in an SR domain.</t>

      <section title="Identification of Redundancy Policy">
        <t>A Redundancy Policy is identified through the tuple &lt;redundancy
        node, redundancy ID, merging node&gt;. Redundancy node is specified as
        IPv4/IPv6 address of headend of Redundancy Policy, which is the node
        to perform packet replication. Merging node is specified as IPv4/IPv6
        address of endpoint of Redundancy Policy, which is the node to perform
        packet elimination. Redundancy ID could be a specified value of
        "color" define in section 2.1 of <xref
        target="I-D.ietf-spring-segment-routing-policy"/>, which indicates the
        SR policy as a redundancy policy. Redundancy ID could also be used to
        distinguish redundancy policy sharing the same redundancy node and
        merging node.</t>

        <t>The following elements are extended in Redundancy Policy:</t>

        <t><list style="symbols">
            <t>Redundancy ID: is used to distinguish a redundancy policy or
            different redundancy policies</t>

            <t>Redundancy SID: is the Binding SID for a redundancy policy and
            defined in <xref
            target="I-D.ietf-spring-sr-redundancy-protection"/>. Redundancy
            SID triggers the instantiation of a Redundancy Policy in the
            forwarding plane of redundancy node. </t>

            <t>Candidate path: more than one candidate paths are included in
            redundancy policy. In each candidate path, the last segment SHOULD
            be the Merging SID defined in <xref
            target="I-D.ietf-spring-sr-redundancy-protection"/>. The
            preference of candidate paths in redundancy policy SHOULD be the
            same to instantiate more than one active ordered segment
            lists.</t>
          </list></t>
      </section>

      <section title="Redundancy Policy Structure">
        <t>Redundancy policy inherates the basic structure and elements of SR
        Policy, the information model of Redundancy Policy is the
        following:</t>

        <t><figure>
            <preamble/>

            <artwork><![CDATA[Redundany policy POL1 <R Node= R1, Redundancy ID = 1, M Node = M1>
        Candidate-path CP1 <originator = 100:1.1.1.1>
             Preference 200
             Priority 10
             Weight W1, SID-List1 <SID11...SID1i>
             Weight W2, SID-List2 <SID21...SID2j>
        Candidate-path CP2 <originator = 100:1.1.1.1>
             Preference 200
             Priority 10
             Weight W3, SID-List3 <SID31...SID3i>
]]></artwork>
          </figure></t>

        <t>The Redundancy Policy POL1 is identified by the tuple
        &lt;redundancy node, redundancy ID, merging node&gt;, R1 is the
        redundancy node, and M1 is the merging node. Redundancy ID is used to
        identify as a redundancy policy in the context of redundancy node. Two
        candidate-paths CP1 and CP2 instruct the ordered segment lists, with
        the same definition of SR policy. Preference is mandatory for each
        candidate path and used to determine the parallel forwarding paths.
        Candidata paths with the same preference value are chosen as the
        disjoint forwarding path of redundancy protection. Since there is no
        tie-breaking rules of the only one valid best path selection,
        atrributes of protocol-origin and discriminator are not applicable in
        redundancy policy.</t>
      </section>

      <section title="Behavior of Redundancy Policy">
        <t>In Redundancy Policy, the preference of candidate path is used to
        select the valid active candidate paths. The preference of candidate
        paths in redundancy policy SHOULD be the same. Different from SR
        Policy, there is no tie-breaker comparison between candidate path with
        equal preference values. Redundancy Policy has no limit on the number
        of active CPs since more than one forwarding paths are required in
        order to perform redundancy protection. Regarding the instantiation of
        ordered lists of segments for candidate path, it keeps the same
        forwarding instantiation and behavior defined for SR policy. For
        example, traffic steered on POL1 is still flow-based hashed on
        Segment-List1 &lt;SID11...SID1i&gt; with a ratio W1/(W1+W2), so does
        Segment-List2.</t>

        <t>A packet is steered into a Redundancy policy at a redundancy node
        in following ways:<list style="symbols">
            <t>Incoming packets have an active SID matching the Redundancy SID
            at the redundancy node.</t>

            <t>Per-destination Steering: incoming packets match a BGP/Service
            route which recurses on a Redundancy Policy.</t>

            <t>Per-flow Steering: incoming packets match or recurse on a
            forwarding array of where some of the entries are Redundancy
            Policy.</t>

            <t>Policy-based Steering: incoming packets match a routing policy
            which directs them on a Redundancy Policy.</t>
          </list></t>
      </section>

      <section title="Association with Redundancy Segment">
        <t>In Redundancy Policy, each candidate path must be associated with a
        BSID. The endpoint behavior of BSID specifies the instantiation of
        Redundancy Policy in forwarding plane and adopts the endpoint behavior
        definition of Redundancy SID <xref
        target="I-D.ietf-spring-sr-redundancy-protection"/> . The associated
        BSID of Redundancy Policy and its endpoint behavior are signalled
        redundancy node via BGP SR Policy <xref
        target="I-D.ietf-idr-segment-routing-te-policy"/> or PCEP <xref
        target="RFC8664"/> <xref
        target="I-D.ietf-pce-segment-routing-policy-cp"/> or Netconf YANG.</t>

        <t/>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document requires no new registration IANA.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>TBD</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Thanks for the valuable comments from James Guichard and Andrew
      Mail.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?target include='reference.RFC.8964'?>

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

      <?target include="reference.RFC.8660"?>

      <?target include='reference.I-D.ietf-spring-segment-routing-policy'?>

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

      <?target ?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.8655'?>

      <?target include='reference.I-D.ietf-spring-sr-redundancy-protection'
?>

      <?target include='reference.I-D.ietf-idr-segment-routing-te-policy'
?>

      <?target include='reference.RFC.8664'?>

      <?target include='reference.I-D.ietf-pce-segment-routing-policy-cp'?>

      <?target include='reference.I-D.ietf-spring-sr-policy-yang'?>

      <?target ?>

      <?target ?>
    </references>
  </back>
</rfc>
