<?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="exp" docName="draft-geng-spring-redundancy-protection-srh-00"
     ipr="trust200902">
  <front>
    <title abbrev="Abbreviated-Title">SRH Extension for Redundancy
    Protection</title>

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

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country/>
        </postal>

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

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

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country/>
        </postal>

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

    <date day="09" month="March" year="2020"/>

    <abstract>
      <t>Redundancy protection is a method of service protection by sending
      copies of the same packets of one flow over multiple paths, which
      includes packet replicaiton, elimination and ordering. This document
      defines SRv6 header(SRH) extensions to support redundancy
      protection.</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 is a method of providing 1+1 protection by
      sending copies of the same packets of one flow over multiple paths,
      which includes packet replicaiton, elimination and ordering. This
      document defines SRv6 header(SRH) extensions to support redundancy
      protection.</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 redudancy protection, which is a
      network device that could implement packet replication.</t>

      <t>Merging Node: the end point of redudancy protection, which is a
      network node that could implement packet elimination and
      ordering(optionally).</t>

      <t>Editor's Note: Similar mechanism is defined as "Service Protection"
      in the <xref target="RFC8655"/>. In this document, we define a new term
      "Redundancy Protection" to distinguish with other service protection
      method. Some of the terms are the similar as <xref
      target="RFC8655"/>.</t>
    </section>

    <section title="Redundancy Protection Requirement Analysis">
      <t>The figure shows how to provide redundancy protection over SRv6.</t>

      <t><figure>
          <artwork><![CDATA[             |                                         |
 ----IPv6--->|<---------------SRv6 Domain------------->|<----IPv6---
             |                                         |
             |             +------+T2+----+            |
   +---+    +---+        +-+-+          +-+-+        +---+    +---+
   | E1+----| In|--+T1+--+Red|          |Mer|--+T4+--| Eg+----+ E2|
   +---+    +---+        +-+-+          +-+-+        +---+    +---+
                           +-----+T3+-----+
]]></artwork>
        </figure>As the figure shows, an IPv6 flow is sent out from the end
      station E1. The packet of the flow is encapsulated in an outer IPv6+SRH
      header in the Ingress(In) and transported through an SRv6 domain. In the
      Egress(Eg), the outer IPv6 header+SR of the packet is popped, and the
      packet is sent to the destination E2.</t>

      <t>The process of redundancy protection is as follows: 1) The flow is
      replicated in Rep(Redundancy Node); 2) Tow replicated flows go through
      different paths till Mer (Merging Node); When there is any failures
      happened in one the path, the service continues to deliver through the
      other path without break; 3) The first received packet of the flow is
      transmitted from Mer (Merging Node) to Eg(Egress), and the redundant
      packets are eliminated. 4) Sometimes, the packet will arrive out of
      order because of redundancy protection, the function of reordering may
      be necessary in the Merging Node.</t>

      <t>This document defines Flow Identification and Sequence Number in
      Segment Routing Header(SRH) as an extension of the current draft<xref
      target="I-D.ietf-6man-segment-routing-header"/> to support redundancy
      protection.</t>

      <t>Flow Identification is used to distinguish flows and Sequence Number
      is used to distinguish packets in the same flow when doing packet
      merging and ordering.</t>
    </section>

    <section title="SRH Extensions for Redundancy Protection">
      <t>Flow Identification and Sequence Number could be defined in SRH
      optional TLV.</t>

      <section title="Option 1: seperated TLVs for flow identification and sequence number">
        <t><figure>
            <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      |    Length     |           RESERVED            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |        RESERVED       |           Flow Identification         |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
          </figure>where:</t>

        <t><list style="symbols">
            <t>Type: 8bits, to be assigned by IONA.</t>

            <t>Length: 8 octets.</t>

            <t>RESERVED: 28 bits, MUST be 0 on transmission and ignored on
            receipt.</t>

            <t>Flow Identification: 20 bits, which is used for identifying
            redundant protection flow.</t>
          </list></t>

        <t><figure>
            <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      |    Length     |           RESERVED            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |RESERVED|                    Sequence Number                   |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
          </figure>where:</t>

        <t><list style="symbols">
            <t>Type: 8 bits, to be assigned by IONA.</t>

            <t>Length: 8.</t>

            <t>RESERVED: 20 bits. MUST be 0 on transmission and ignored on
            receipt.</t>

            <t>Sequence Number: 28 bits, which is used for indicating sequence
            number of the redundant protection flow.</t>
          </list></t>

        <t/>
      </section>

      <section title="Option 2 unified TLV for flow identification and sequence number">
        <t/>

        <t><figure>
            <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      |    Length     |    Flow Identification        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |       |                    Sequence Number                    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                             RESERVED                          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
          </figure>where:</t>

        <t><list style="symbols">
            <t>Type: 8bits, to be assigned by IANA.</t>

            <t>Length: 8 octets.</t>

            <t>Flow Identification: 20 bits, which is used for identifying the
            redundant protection flow.</t>

            <t>Sequence Number: 28 bits, which is used for indicating sequence
            number of the redundant protection flow.</t>

            <t>Reserved: 32 bits. MUST be 0 on transmission and ignored on
            receipt.</t>
          </list></t>
      </section>
    </section>

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

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

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

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

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

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

      <?rfc include='reference.I-D.ietf-6man-segment-routing-header'?>
    </references>
  </back>
</rfc>
