rfc9503.original | rfc9503.txt | |||
---|---|---|---|---|
IPPM Working Group R. Gandhi, Ed. | Internet Engineering Task Force (IETF) R. Gandhi, Ed. | |||
Internet-Draft C. Filsfils | Request for Comments: 9503 C. Filsfils | |||
Intended status: Standards Track Cisco Systems, Inc. | Category: Standards Track Cisco Systems, Inc. | |||
Expires: 5 February 2024 M. Chen | ISSN: 2070-1721 M. Chen | |||
Huawei | Huawei | |||
B. Janssens | B. Janssens | |||
Colt | Colt | |||
R. Foote | R. Foote | |||
Nokia | Nokia | |||
4 August 2023 | October 2023 | |||
Simple TWAMP (STAMP) Extensions for Segment Routing Networks | Simple Two-Way Active Measurement Protocol (STAMP) Extensions for | |||
draft-ietf-ippm-stamp-srpm-18 | Segment Routing Networks | |||
Abstract | Abstract | |||
Segment Routing (SR) leverages the source routing paradigm. SR is | Segment Routing (SR) leverages the source routing paradigm. SR is | |||
applicable to both Multiprotocol Label Switching (SR-MPLS) and IPv6 | applicable to both Multiprotocol Label Switching (SR-MPLS) and IPv6 | |||
(SRv6) forwarding planes. This document specifies RFC 8762 (Simple | (SRv6) forwarding planes. This document specifies Simple Two-Way | |||
Two-Way Active Measurement Protocol (STAMP)) extensions for SR | Active Measurement Protocol (STAMP) extensions (as described in RFC | |||
networks, for both SR-MPLS and SRv6 forwarding planes by augmenting | 8762) for SR networks, for both the SR-MPLS and SRv6 forwarding | |||
the optional extensions defined in RFC 8972. | planes, by augmenting the optional extensions defined in RFC 8972. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 5 February 2024. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9503. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
2. Conventions Used in This Document . . . . . . . . . . . . . . 3 | 2. Conventions Used in This Document | |||
2.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | 2.1. Requirements Language | |||
2.2. Abbreviations . . . . . . . . . . . . . . . . . . . . . . 3 | 2.2. Abbreviations | |||
2.3. Reference Topology . . . . . . . . . . . . . . . . . . . 3 | 2.3. Reference Topology | |||
3. Destination Node Address TLV . . . . . . . . . . . . . . . . 4 | 3. Destination Node Address TLV | |||
4. Return Path TLV . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. Return Path TLV | |||
4.1. Return Path Sub-TLVs . . . . . . . . . . . . . . . . . . 7 | 4.1. Return Path Sub-TLVs | |||
4.1.1. Return Path Control Code Sub-TLV . . . . . . . . . . 8 | 4.1.1. Return Path Control Code Sub-TLV | |||
4.1.2. Return Address Sub-TLV . . . . . . . . . . . . . . . 9 | 4.1.2. Return Address Sub-TLVs | |||
4.1.3. Return Segment List Sub-TLVs . . . . . . . . . . . . 10 | 4.1.3. Return Path Segment List Sub-TLVs | |||
5. Interoperability with TWAMP Light . . . . . . . . . . . . . . 12 | 5. Interoperability with TWAMP Light | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 6. Security Considerations | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 7. IANA Considerations | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 8. References | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 16 | 8.1. Normative References | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 16 | 8.2. Informative References | |||
Appendix A. Destination Node Address TLV Use-case Example . . . 17 | Appendix A. Destination Node Address TLV Use-Case Example | |||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 18 | Acknowledgments | |||
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | Contributors | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
Segment Routing (SR) leverages the source routing paradigm for | Segment Routing (SR) leverages the source routing paradigm for | |||
Software Defined Networks (SDNs). SR is applicable to both | Software-Defined Networks (SDNs). SR is applicable to both | |||
Multiprotocol Label Switching (SR-MPLS) and IPv6 (SRv6) forwarding | Multiprotocol Label Switching (SR-MPLS) and IPv6 (SRv6) forwarding | |||
planes [RFC8402]. SR Policies as defined in [RFC9256] are used to | planes [RFC8402]. SR Policies as defined in [RFC9256] are used to | |||
steer traffic through a specific, user-defined paths using a stack of | steer traffic through specific, user-defined paths using a stack of | |||
Segments. A comprehensive SR Performance Measurement (PM) toolset is | Segments. A comprehensive SR Performance Measurement (PM) toolset is | |||
one of the essential requirements to measure network performance to | one of the essential requirements to measure network performance to | |||
provide Service Level Agreements (SLAs). | provide Service Level Agreements (SLAs). | |||
The Simple Two-Way Active Measurement Protocol (STAMP) provides | The Simple Two-Way Active Measurement Protocol (STAMP) provides | |||
capabilities for the measurement of various performance metrics in IP | capabilities for the measurement of various performance metrics in IP | |||
networks [RFC8762] without the use of a control channel to pre-signal | networks [RFC8762] without the use of a control channel to pre-signal | |||
session parameters. [RFC8972] defines optional extensions, in the | session parameters. [RFC8972] defines optional extensions, in the | |||
form of TLVs, for STAMP. Note that the YANG data model defined in | form of TLVs, for STAMP. Note that the YANG data model defined in | |||
[I-D.ietf-ippm-stamp-yang] can be used to provision the STAMP | [IPPM-STAMP-YANG] can be used to provision the STAMP Session-Sender | |||
Session-Sender and STAMP Session-Reflector. | and STAMP Session-Reflector. | |||
The STAMP test packets are transmitted along an IP path between a | STAMP test packets are transmitted along an IP path between a | |||
Session-Sender and a Session-Reflector to measure performance delay | Session-Sender and a Session-Reflector to measure performance delay | |||
and packet loss along that IP path. It may be desired in SR networks | and packet loss along that IP path. In SR networks, it may be | |||
that the same path (same set of links and nodes) between the Session- | desired that the same path (same set of links and nodes) between the | |||
Sender and Session-Reflector is used for the STAMP test packets in | Session-Sender and Session-Reflector be used for the STAMP test | |||
both directions. This is achieved by using the STAMP [RFC8762] | packets in both directions. This is achieved by using the STAMP | |||
extensions for SR-MPLS and SRv6 networks specified in this document | [RFC8762] extensions for SR-MPLS and SRv6 networks as specified in | |||
by augmenting the optional extensions defined in [RFC8972]. | this document by augmenting the optional extensions defined in | |||
[RFC8972]. | ||||
2. Conventions Used in This Document | 2. Conventions Used in This Document | |||
2.1. Requirements Language | 2.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2.2. Abbreviations | 2.2. Abbreviations | |||
MPLS: Multiprotocol Label Switching. | MPLS: Multiprotocol Label Switching | |||
SID: Segment Identifier. | SID: Segment Identifier | |||
SR: Segment Routing. | SR: Segment Routing | |||
SR-MPLS: Segment Routing with MPLS forwarding plane. | SR-MPLS: Segment Routing over MPLS | |||
SRv6: Segment Routing with IPv6 forwarding plane. | SRv6: Segment Routing over IPv6 | |||
SSID: STAMP Session Identifier. | SSID: STAMP Session Identifier | |||
STAMP: Simple Two-Way Active Measurement Protocol. | STAMP: Simple Two-Way Active Measurement Protocol | |||
2.3. Reference Topology | 2.3. Reference Topology | |||
In the reference topology shown below, the STAMP Session-Sender S1 | In the reference topology shown below, the STAMP Session-Sender S1 | |||
initiates a STAMP test packet and the STAMP Session-Reflector R1 | initiates a STAMP test packet and the STAMP Session-Reflector R1 | |||
transmits a reply STAMP test packet. The reply test packet may be | transmits a reply STAMP test packet. The reply test packet may be | |||
transmitted to the Session-Sender S1 on the same path (same set of | transmitted to the Session-Sender S1 on the same path (same set of | |||
links and nodes) or a different path in the reverse direction from | links and nodes) or a different path in the reverse direction from | |||
the path taken towards the Session-Reflector R1. The T1 is a | the path taken towards the Session-Reflector R1. | |||
transmit timestamp and T4 is a receive timestamp added by node S1 in | ||||
the STAMP test packet. The T2 is a receive timestamp and T3 is a | T1 is a transmit timestamp, and T4 is a receive timestamp added by | |||
transmit timestamp added by node R1 in the STAMP test packet. | node S1. T2 is a receive timestamp, and T3 is a transmit timestamp | |||
added by node R1. | ||||
The nodes S1 and R1 may be connected via a link or an SR path | The nodes S1 and R1 may be connected via a link or an SR path | |||
[RFC8402]. The link may be a physical interface, virtual link, or | [RFC8402]. The link may be a physical interface, virtual link, Link | |||
Link Aggregation Group (LAG) [IEEE802.1AX], or LAG member. The SR | Aggregation Group (LAG) [IEEE802.1AX], or LAG member. The SR path | |||
path may be an SR Policy [RFC9256] on node S1 (called head-end) with | may be an SR Policy [RFC9256] on node S1 (called "head-end") with a | |||
destination to node R1 (called tail-end). | destination to node R1 (called "tail-end"). | |||
T1 T2 | T1 T2 | |||
/ \ | / \ | |||
+-------+ Test Packet +-------+ | +-------+ Test Packet +-------+ | |||
| | - - - - - - - - - ->| | | | | - - - - - - - - - ->| | | |||
| S1 |=====================| R1 | | | S1 |=====================| R1 | | |||
| |<- - - - - - - - - - | | | | |<- - - - - - - - - - | | | |||
+-------+ Reply Test Packet +-------+ | +-------+ Reply Test Packet +-------+ | |||
\ / | \ / | |||
T4 T3 | T4 T3 | |||
STAMP Session-Sender STAMP Session-Reflector | STAMP Session-Sender STAMP Session-Reflector | |||
Reference Topology | Figure 1: Reference Topology | |||
3. Destination Node Address TLV | 3. Destination Node Address TLV | |||
The Session-Sender may need to transmit test packets to the Session- | The Session-Sender may need to transmit test packets to the Session- | |||
Reflector with a destination address that is not a routable (i.e., | Reflector with a Destination Address that is not a routable address | |||
suitable for use as the Source Address of the reply test packet) | (i.e., not suitable for use as the Source Address of the reply test | |||
address of the Session-Reflector. This can be facilitated, for | packet) of the Session-Reflector. This can be facilitated, for | |||
example, by encapsulating the STAMP packet by a tunneling protocol, | example, by encapsulating the STAMP packet by a tunneling protocol; | |||
see Appendix A, for a worked example. | see Appendix A for an example. | |||
[RFC8972] defines STAMP Session-Sender and Session-Reflector test | [RFC8972] defines STAMP Session-Sender and Session-Reflector test | |||
packets that can include one or more optional TLVs. In this | packets that can include one or more optional TLVs. In this | |||
document, the TLV type (value 9 for IPv4 and IPv6) is defined for the | document, the TLV Type (value 9 for IPv4 and IPv6) is defined for the | |||
Destination Node Address TLV for the STAMP test packet [RFC8972]. | Destination Node Address TLV for the STAMP test packet [RFC8972]. | |||
The formats of the Destination Node Address TLVs are shown in | The formats of the Destination Node Address TLVs are shown in | |||
Figure 1: | Figure 2: | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|STAMP TLV Flags| Type=9 | Length=4 | | |STAMP TLV Flags| Type=9 | Length=4 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| IPv4 Address | | | IPv4 Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|STAMP TLV Flags| Type=9 | Length=16 | | |STAMP TLV Flags| Type=9 | Length=16 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| IPv6 Address | | | IPv6 Address | | |||
| | | | | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 1: Destination Node Address TLV Format | Figure 2: Destination Node Address TLV Formats | |||
TLV fields are defined as follows: | The TLV fields are defined as follows: | |||
STAMP TLV Flags : The STAMP TLV Flags follow the procedures described | STAMP TLV Flags: The STAMP TLV Flags follow the procedures described | |||
in [RFC8972] and this document. | in [RFC8972] and this document. | |||
Type : Type (value 9) for IPv4 Destination Node Address TLV or IPv6 | Type: Type (value 9) for the IPv4 Destination Node Address TLV or | |||
Destination Node Address TLV. | IPv6 Destination Node Address TLV. | |||
Length : A two-octet field equal to the length of the Address field | Length: A 2-octet field equal to the length of the Address field in | |||
in octets. The length is 4 octets for IPv4 address and 16 octets for | octets. The length is 4 octets for an IPv4 address and 16 octets | |||
IPv6 address. | for an IPv6 address. | |||
The Destination Node Address TLV indicates an address of the intended | The Destination Node Address TLV indicates an address of the intended | |||
Session-Reflector node of the test packet. If the received | Session-Reflector node of the test packet. If the received | |||
Destination Node Address is one of the addresses of the Session- | Destination Node Address is one of the addresses of the Session- | |||
Reflector, it SHOULD be used as the Source Address in the IP header | Reflector, it SHOULD be used as the Source Address in the IP header | |||
of the reply test packet. If the Destination Node Address TLV is | of the reply test packet. If the Destination Node Address TLV is | |||
sent, the SSID MUST also be sent. | sent, the SSID MUST also be sent. | |||
A Session-Reflector that recognizes this TLV, MUST set the U flag | A Session-Reflector that recognizes this TLV MUST set the U flag | |||
[RFC8972] in the reply test packet to 1 if the Session-Reflector | [RFC8972] in the reply test packet to 1 if the Session-Reflector | |||
determined that it is not the intended Destination as identified in | determined that it is not the intended destination as identified in | |||
the Destination Node Address TLV. In this case, the Session- | the Destination Node Address TLV. In this case, the Session- | |||
Reflector does not use the received Destination Node Address as the | Reflector does not use the received Destination Node Address as the | |||
Source Address in the IP header of the reply test packet. Otherwise, | Source Address in the IP header of the reply test packet. Otherwise, | |||
the Session-Reflector MUST set the U flag in the Destination Node | the Session-Reflector MUST set the U flag in the Destination Node | |||
Address TLV in the reply test packet to 0. | Address TLV in the reply test packet to 0. | |||
4. Return Path TLV | 4. Return Path TLV | |||
For end-to-end SR paths, the Session-Reflector may need to transmit | For end-to-end SR paths, the Session-Reflector may need to transmit | |||
the reply test packet on a specific return path. The Session-Sender | the reply test packet on a specific Return Path. The Session-Sender | |||
can request this in the test packet to the Session-Reflector using a | can request this in the test packet to the Session-Reflector using a | |||
Return Path TLV. With this TLV carried in the Session-Sender test | Return Path TLV. With this TLV carried in the Session-Sender test | |||
packet, signaling and maintaining dynamic SR network state for the | packet, signaling and maintaining dynamic SR network state for the | |||
STAMP sessions on the Session-Reflector are avoided. | STAMP sessions on the Session-Reflector are avoided. | |||
There are two modes defined for the behaviors on the Session- | There are two modes defined for the behaviors on the Session- | |||
Reflector in Section 4 of [RFC8762]. A Stateful Session-Reflector | Reflector in Section 4 of [RFC8762]: Stateless and Stateful. A | |||
that requires configuration that must match all Session-Sender | Stateful Session-Reflector requires configuration that must match all | |||
parameters, including Source Address, Destination Address, Source UDP | Session-Sender parameters, including the Source Address, Destination | |||
Port, Destination UDP Port, and possibly SSID (assuming the SSID is | Address, Source UDP Port, Destination UDP Port, and possibly SSID | |||
configurable and not auto-generated). In this case, a local policy | (assuming the SSID is configurable and not auto-generated). In this | |||
can be used to direct the test packet by creating additional states | case, a local policy can be used to direct the test packet by | |||
for the STAMP sessions on the Session-Reflector. In the case of | creating additional states for the STAMP sessions on the Session- | |||
promiscuous operation, the Stateless Session-Reflector will require | Reflector. In the case of promiscuous operation, the Stateless | |||
an indication of how to return the test packet on a specific path, | Session-Reflector will require an indication of how to return the | |||
for example, for measurement in an ECMP environment. | test packet on a specific path, for example, for measurement in an | |||
ECMP environment. | ||||
For links, the Session-Reflector may need to transmit the reply test | For links, the Session-Reflector may need to transmit the reply test | |||
packet on the same incoming link in the reverse direction. The | packet on the same incoming link in the reverse direction. The | |||
Session-Sender can request this in the test packet to the Session- | Session-Sender can request this in the test packet to the Session- | |||
Reflector using a Return Path TLV. | Reflector using a Return Path TLV. | |||
[RFC8972] defines STAMP test packets that can include one or more | [RFC8972] defines STAMP test packets that can include one or more | |||
optional TLVs. In this document, the TLV Type (value 10) is defined | optional TLVs. In this document, the TLV Type (value 10) is defined | |||
for the Return Path TLV that carries the return path for the Session- | for the Return Path TLV that carries the Return Path for the Session- | |||
Sender test packet. The format of the Return Path TLV is shown in | Sender test packet. The format of the Return Path TLV is shown in | |||
Figure 2: | Figure 3: | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|STAMP TLV Flags| Type=10 | Length | | |STAMP TLV Flags| Type=10 | Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Return Path Sub-TLVs | | | Return Path Sub-TLVs | | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 2: Return Path TLV | Figure 3: Return Path TLV Format | |||
TLV fields are defined as follows: | The TLV fields are defined as follows: | |||
STAMP TLV Flags : The STAMP TLV Flags follow the procedures described | STAMP TLV Flags: The STAMP TLV Flags follow the procedures described | |||
in [RFC8972] and this document. | in [RFC8972] and this document. | |||
Type : Type (value 10) for Return Path TLV. | Type: Type (value 10) for the Return Path TLV. | |||
Length : A two-octet field equal to the length of the Return Path | Length: A 2-octet field equal to the length of the Return Path Sub- | |||
Sub-TLVs field in octets. | TLVs field in octets. | |||
Return Path Sub-TLVs : As defined in Section 4.1. | Return Path Sub-TLVs: As defined in Section 4.1. | |||
A Session-Sender MUST NOT insert more than one Return Path TLV in the | A Session-Sender MUST NOT insert more than one Return Path TLV in the | |||
STAMP test packet. A Session-Reflector that supports this TLV MUST | STAMP test packet. A Session-Reflector that supports this TLV MUST | |||
only process the first Return Path TLV in the test packet and ignore | only process the first Return Path TLV in the test packet and ignore | |||
other Return Path TLVs if present. A Session-Reflector that supports | other Return Path TLVs if present. A Session-Reflector that supports | |||
this TLV MUST reply using the Return Path received in the Session- | this TLV MUST reply using the Return Path received in the Session- | |||
Sender test packet, if no error was encountered while processing the | Sender test packet, if no error was encountered while processing the | |||
TLV. | TLV. | |||
A Session-Reflector that recognizes this TLV, MUST set the U flag | A Session-Reflector that recognizes this TLV MUST set the U flag | |||
[RFC8972] in the reply test packet to 1 if the Session-Reflector | [RFC8972] in the reply test packet to 1 if the Session-Reflector | |||
determined that it cannot use the return path in the test packet to | determined that it cannot use the Return Path in the test packet to | |||
transmit the reply test packet. Otherwise, the Session-Reflector | transmit the reply test packet. Otherwise, the Session-Reflector | |||
MUST set the U flag in the reply test packet to 0. | MUST set the U flag in the reply test packet to 0. | |||
4.1. Return Path Sub-TLVs | 4.1. Return Path Sub-TLVs | |||
The Return Path TLV contains one or more Sub-TLVs to carry the | The Return Path TLV contains one or more Sub-TLVs to carry the | |||
information for the requested return path. A Return Path Sub-TLV can | information for the requested Return Path. A Return Path Sub-TLV can | |||
carry Return Path Control Code, Return Path IP Address or Return Path | carry a Return Path Control Code, Return Path IP Address, or Return | |||
Segment List. | Path Segment List. | |||
The STAMP Sub-TLV Flags are set using the procedures described in | The STAMP Sub-TLV Flags are set using the procedures described in | |||
[RFC8972]. | [RFC8972]. | |||
A Return Path TLV MUST NOT contain more than one Control Code Sub-TLV | A Return Path TLV MUST NOT contain more than one Control Code Sub- | |||
or more than one Return Address Sub-TLV or more than one Segment List | TLV, Return Address Sub-TLV, or Return Path Segment List Sub-TLV in a | |||
Sub-TLV in Session-Sender test packet. | Session-Sender test packet. | |||
A Return Path TLV MUST NOT contain both Control Code Sub-TLV as well | A Return Path TLV MUST NOT contain both a Control Code Sub-TLV and a | |||
as Return Address or Return Segment List Sub-TLV in Session-Sender | Return Address or Return Path Segment List Sub-TLV in a Session- | |||
test packet. | Sender test packet. | |||
A Return Path TLV MAY contain both Return Address as well as Return | A Return Path TLV MAY contain both a Return Address and a Return Path | |||
Segment List Sub-TLV in Session-Sender test packet. | Segment List Sub-TLV in a Session-Sender test packet. | |||
4.1.1. Return Path Control Code Sub-TLV | 4.1.1. Return Path Control Code Sub-TLV | |||
The format of the Return Path Control Code Sub-TLV is shown in | The format of the Control Code Sub-TLV in the Return Path TLV is | |||
Figure 3. | shown in Figure 4. | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|STAMP TLV Flags| Type=1 | Length=4 | | |STAMP TLV Flags| Type=1 | Length=4 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Control Code Flags | | | Control Code Flags | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 3: Control Code Sub-TLV in Return Path TLV | Figure 4: Format of the Control Code Sub-TLV in the Return Path TLV | |||
TLV fields are defined as follows: | The TLV fields are defined as follows: | |||
* Type (value 1): Return Path Control Code. The Session-Sender can | Type: Type (value 1) for the Return Path Control Code. The Session- | |||
request the Session-Reflector to transmit the reply test packet | Sender can request the Session-Reflector to transmit the reply | |||
based on the flags defined in the Control Code Flags field. | test packet based on the flags defined in the Control Code Flags | |||
field. | ||||
STAMP TLV Flags : The STAMP TLV Flags follow the procedures described | STAMP TLV Flags: The STAMP TLV Flags follow the procedures described | |||
in [RFC8972] and this document. | in [RFC8972] and this document. | |||
Length : A two-octet field equal to the length of the Control Code | Length: A 2-octet field equal to the length of the Control Code | |||
flags which is 4 octets. | flags, which is 4 octets. | |||
Control Code Flags (32-bit): Reply Request Flag at bit 31 (least | Control Code Flags (32 bits): Reply Request Flag at bit 31 (least | |||
significant bit) is defined as follows. | significant bit) is defined as follows. | |||
0x0 : No Reply Requested. | 0x0: No Reply Requested | |||
0x1 : Reply Requested on the Same Link. | 0x1: Reply Requested on the Same Link | |||
All other bits are reserved and must be transmitted as 0 and ignored | All other bits are reserved and must be transmitted as 0 and ignored | |||
by the receiver. | by the receiver. | |||
When Control Code flag for Reply Request is set to 0x0 in the | When Control Code flag for Reply Request is set to 0x0 in the | |||
Session-Sender test packet, the Session-Reflector does not transmit | Session-Sender test packet, the Session-Reflector does not transmit a | |||
reply test packet to the Session-Sender and terminates the STAMP test | reply test packet to the Session-Sender and terminates the STAMP test | |||
packet. Only the one-way measurement is applicable in this case. | packet. Only the one-way measurement is applicable in this case. | |||
Optionally, the Session-Reflector may locally stream performance | Optionally, the Session-Reflector may locally stream performance | |||
metrics via telemetry using the information from the received test | metrics via telemetry using the information from the received test | |||
packet. All other Return Path Sub-TLVs MUST be ignored in this case. | packet. All other Return Path Sub-TLVs MUST be ignored in this case. | |||
When Control Code flag for Reply Request is set to 0x1 in the | When Control Code flag for Reply Request is set to 0x1 in the | |||
Session-Sender test packet, the Session-Reflector transmits the reply | Session-Sender test packet, the Session-Reflector transmits the reply | |||
test packet over the same incoming link where the test packet is | test packet over the same incoming link where the test packet is | |||
received in the reverse direction towards the Session-Sender. The | received in the reverse direction towards the Session-Sender. The | |||
link may be a physical interface, virtual link, or Link Aggregation | link may be a physical interface, virtual link, LAG [IEEE802.1AX], or | |||
Group (LAG) [IEEE802.1AX], or LAG member. All other Return Path Sub- | LAG member. All other Return Path Sub-TLVs MUST be ignored in this | |||
TLVs MUST be ignored in this case. When using LAG member links, | case. When using LAG member links, the STAMP extension for the | |||
STAMP extension for Micro-Session ID TLV defined in | Micro-Session ID TLV defined in [STAMP-ON-LAG] can be used to | |||
[I-D.ietf-ippm-stamp-on-lag] can be used to identify the link. | identify the link. | |||
4.1.2. Return Address Sub-TLV | 4.1.2. Return Address Sub-TLVs | |||
The STAMP reply test packet may be transmitted to the Session-Sender | The STAMP reply test packet may be transmitted to the Session-Sender | |||
to the specified Return Address in the Return Address Sub-TLV instead | to the specified Return Address in the Return Address Sub-TLV instead | |||
of transmitting to the Source Address in the Session-Sender test | of transmitting to the Source Address in the Session-Sender test | |||
packet. | packet. | |||
The formats of the IPv4 and IPv6 Return Address Sub-TLVs are shown in | The formats of the IPv4 and IPv6 Return Address Sub-TLVs in the | |||
Figure 4. | Return Path TLV are shown in Figure 5. | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|STAMP TLV Flags| Type=2 | Length=4 | | |STAMP TLV Flags| Type=2 | Length=4 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Return IPv4 Address | | | Return IPv4 Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|STAMP TLV Flags| Type=2 | Length=16 | | |STAMP TLV Flags| Type=2 | Length=16 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| Return IPv6 Address | | | Return IPv6 Address | | |||
| | | | | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 4: Return Address Sub-TLV in Return Path TLV | Figure 5: Formats of the Return Address Sub-TLVs in the Return | |||
Path TLV | ||||
The TLV fields are defined as follows: | The TLV fields are defined as follows: | |||
* Type : Type (value 2) for IPv4 Return Address or IPv6 Return | Type: Type (value 2) for the Return IPv4 Address or Return IPv6 | |||
Address. | Address. | |||
The Return Address requests that the Session-Reflector reply test | The Return Address requests that the Session-Reflector reply test | |||
packet be sent to the specified address, rather than to the Source | packet be sent to the specified address rather than to the Source | |||
Address in the Session-Sender test packet. | Address in the Session-Sender test packet. | |||
STAMP TLV Flags : The STAMP TLV Flags follow the procedures described | STAMP TLV Flags: The STAMP TLV Flags follow the procedures described | |||
in [RFC8972] and this document. | in [RFC8972] and this document. | |||
Length : A two-octet field equal to the length of the Return Address | Length: A 2-octet field equal to the length of the Return Address | |||
field in octets. The length is 4 octets for IPv4 address and 16 | field in octets. The length is 4 octets for an IPv4 address and | |||
octets for IPv6 address. | 16 octets for an IPv6 address. | |||
4.1.3. Return Segment List Sub-TLVs | 4.1.3. Return Path Segment List Sub-TLVs | |||
The format of the Segment List Sub-TLVs in the Return Path TLV is | The format of the Segment List Sub-TLVs in the Return Path TLV is | |||
shown in Figures 5 and 6. The Segments carried in Segment List Sub- | shown in Figures 6 and 7. The Segments carried in Segment List Sub- | |||
TLVs are described in [RFC8402]. The segment entries MUST be in | TLVs are described in [RFC8402]. The segment entries MUST be in | |||
network order. | network order. | |||
The Session-Sender MUST only insert one Segment List Return Path Sub- | The Session-Sender MUST only insert one Return Path Segment List Sub- | |||
TLV in the test packet and Segment List MUST contain at least one | TLV in the test packet, and the Segment List MUST contain at least | |||
Segment. The Session-Reflector MUST only process the first Segment | one Segment. The Session-Reflector MUST only process the first | |||
List Return Path Sub-TLV in the test packet and ignore other Segment | Return Path Segment List Sub-TLV in the test packet and ignore other | |||
List Return Path Sub-TLVs if present. | Return Path Segment List Sub-TLVs if present. | |||
TLV fields are defined as follows: | The TLV fields are defined as follows: | |||
The Segment List Sub-TLV can be one of the following Types: | The Return Path Segment List Sub-TLV can be one of the following | |||
Types: | ||||
* Type (value 3): SR-MPLS Label Stack of the Return Path | Type (value 3): SR-MPLS Label Stack of the Return Path | |||
* Type (value 4): SRv6 Segment List of the Return Path | Type (value 4): SRv6 Segment List of the Return Path | |||
STAMP TLV Flags : The STAMP TLV Flags follow the procedures described | STAMP TLV Flags: The STAMP TLV Flags follow the procedures described | |||
in [RFC8972] and this document. | in [RFC8972] and this document. | |||
Length : A two-octet field equal to the length of the Segment List | Length: A 2-octet field equal to the length of the Segment List | |||
field in octets. Length MUST NOT be 0. | field in octets. The length MUST NOT be 0. | |||
4.1.3.1. Return Path SR-MPLS Segment-List Sub-TLV | 4.1.3.1. Return Path SR-MPLS Label Stack Sub-TLV | |||
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 | 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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|STAMP TLV Flags| Type=3 | Length | | |STAMP TLV Flags| Type=3 | Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Segment(1) | TC |S| TTL | | | Segment(1) | TC |S| TTL | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
. . | . . | |||
. . | . . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Segment(n) (bottom of stack) | TC |S| TTL | | | Segment(n) (bottom of stack) | TC |S| TTL | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 5: SR-MPLS Segment List Sub-TLV in Return Path TLV | Figure 6: Format of the SR-MPLS Label Stack Sub-TLV in the Return | |||
Path TLV | ||||
The SR-MPLS Label Stack contains a list of 32-bit Label Stack Entry | The SR-MPLS Label Stack contains a list of 32-bit Label Stack Entries | |||
(LSE) that includes a 20-bit label value, 8-bit Time-To-Live (TTL) | (LSEs) that includes a 20-bit label value, an 8-bit Time-To-Live | |||
value, 3-bit Traffic Class (TC) value and 1-bit End-Of-Stack (S) | (TTL) value, a 3-bit Traffic Class (TC) value, and a 1-bit End-of- | |||
field. Length of the Sub-TLV modulo 4 MUST be 0. | Stack (S) field. The length of the Sub-TLV modulo 4 MUST be 0. | |||
As an example, an SR-MPLS Label Stack Sub-TLV could carry only the | As an example, an SR-MPLS Label Stack Sub-TLV could carry only the | |||
Binding SID Label [I-D.ietf-pce-binding-label-sid] of the Return SR- | Binding SID Label [PCE-BINDING-LABEL-SID] of the Return SR-MPLS | |||
MPLS Policy. The Binding SID Label of the Return SR-MPLS Policy is | Policy. The Binding SID Label of the Return SR-MPLS Policy is local | |||
local to the Session-Reflector. The mechanism to signal the Binding | to the Session-Reflector. The mechanism to signal the Binding SID | |||
SID Label to the Session-Sender is outside the scope of this | Label to the Session-Sender is outside the scope of this document. | |||
document. | ||||
As another example, an SR-MPLS Label Stack Sub-TLV could include the | As another example, an SR-MPLS Label Stack Sub-TLV could include the | |||
Path Segment Identifier Label of the Return SR-MPLS Policy in the | Path Segment Identifier Label of the Return SR-MPLS Policy in the | |||
Segment List of the SR-MPLS Policy. | Segment List of the SR-MPLS Policy. | |||
4.1.3.2. Return Path SRv6 Segment-List Sub-TLV | 4.1.3.2. Return Path SRv6 Segment List Sub-TLV | |||
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 | 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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|STAMP TLV Flags| Type=4 | Length | | |STAMP TLV Flags| Type=4 | Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| Segment(1) (128-bit IPv6 address) | | | Segment(1) (128-bit IPv6 Address) | | |||
| | | | | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
. . | . . | |||
. . | . . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| Segment(n) (128-bit IPv6 address) (bottom of stack) | | | Segment(n) (128-bit IPv6 Address) (bottom of stack) | | |||
| | | | | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 6: SRv6 Segment List Sub-TLV in Return Path TLV | Figure 7: Format of the SRv6 Segment List Sub-TLV in the Return | |||
Path TLV | ||||
The SRv6 Segment List contains a list of 128-bit IPv6 addresses | The SRv6 Segment List contains a list of 128-bit IPv6 addresses | |||
representing the SRv6 SIDs. Length of the Sub-TLV modulo 16 MUST be | representing the SRv6 SIDs. The length of the Sub-TLV modulo 16 MUST | |||
0. | be 0. | |||
As an example, an SRv6 Segment List Sub-TLV could carry only the SRv6 | As an example, a Return Path SRv6 Segment List Sub-TLV could carry | |||
Binding SID [I-D.ietf-pce-binding-label-sid] of the Return SRv6 | only the SRv6 Binding SID [PCE-BINDING-LABEL-SID] of the Return SRv6 | |||
Policy. The SRv6 Binding SID of the Return SRv6 Policy is local to | Policy. The SRv6 Binding SID of the Return SRv6 Policy is local to | |||
the Session-Reflector. The mechanism to signal the SRv6 Binding SID | the Session-Reflector. The mechanism to signal the SRv6 Binding SID | |||
to the Session-Sender is outside the scope of this document. | to the Session-Sender is outside the scope of this document. | |||
As another example, an SRv6 Segment List Sub-TLV could include the | As another example, a Return Path SRv6 Segment List Sub-TLV could | |||
SRv6 Path Segment Identifier of the Return SRv6 Policy in the Segment | include the SRv6 Path Segment Identifier of the Return SRv6 Policy in | |||
List of the SRv6 Policy. | the Segment List of the SRv6 Policy. | |||
5. Interoperability with TWAMP Light | 5. Interoperability with TWAMP Light | |||
This document does not introduce any additional considerations for | This document does not introduce any additional considerations for | |||
interoperability with TWAMP Light than those described in Section 4.6 | interoperability with the Two-Way Active Measurement Protocol (TWAMP) | |||
of [RFC8762]. | Light than those described in Section 4.6 of [RFC8762]. | |||
As described in [RFC8762], there are two possible combinations for | As described in [RFC8762], there are two possible combinations for | |||
such an interoperability use case: | such an interoperability use case: | |||
- STAMP Session-Sender with TWAMP Light Session-Reflector | * STAMP Session-Sender with TWAMP Light Session-Reflector | |||
- TWAMP Light Session-Sender with STAMP Session-Reflector | * TWAMP Light Session-Sender with STAMP Session-Reflector | |||
If any of STAMP extensions defined in this document are used by STAMP | ||||
Session-Sender, the TWAMP Light Session-Reflector will view them as | If any of the STAMP extensions defined in this document are used by | |||
the Packet Padding field. | STAMP Session-Sender, the TWAMP Light Session-Reflector will view | |||
them as the Packet Padding field. | ||||
6. Security Considerations | 6. Security Considerations | |||
The security considerations specified in [RFC8762] and [RFC8972] also | The security considerations specified in [RFC8762] and [RFC8972] also | |||
apply to the extensions defined in this document. Specifically, the | apply to the extensions defined in this document. Specifically, the | |||
authenticated mode and the message integrity protection using HMAC, | authenticated mode and the message integrity protection using Hashed | |||
as defined in [RFC8762] Section 4.4, also apply to the procedure | Message Authentication Code (HMAC), as defined in Section 4.4 of | |||
described in this document. | [RFC8762], also apply to the procedures described in this document. | |||
STAMP uses the well-known UDP port number that could become a target | STAMP uses the well-known UDP port number that could become a target | |||
of denial of service (DoS) or could be used to aid on-path attacks. | of denial of service (DoS) or could be used to aid on-path attacks. | |||
Thus, the security considerations and measures to mitigate the risk | Thus, the security considerations and measures to mitigate the risk | |||
of the attack documented in Section 6 of [RFC8545] equally apply to | of the attack documented in Section 6 of [RFC8545] equally apply to | |||
the STAMP extensions in this document. | the STAMP extensions in this document. | |||
If desired, attacks can be mitigated by performing basic validation | If desired, attacks can be mitigated by performing basic validation | |||
checks of the timestamp fields (such as T2 is later than T1 in the | checks of the timestamp fields (such as T2 is later than T1 in the | |||
Reference Topology in Section 2.3) in received reply test packets at | reference topology in Section 2.3) in received reply test packets at | |||
the Session-Sender. The minimal state associated with these | the Session-Sender. The minimal state associated with these | |||
protocols also limit the extent of measurement disruption that can be | protocols also limit the extent of measurement disruption that can be | |||
caused by a corrupt or invalid test packet to a single test cycle. | caused by a corrupt or invalid test packet to a single test cycle. | |||
The usage of STAMP extensions defined in this document is intended | The usage of STAMP extensions defined in this document is intended | |||
for deployment in a single network administrative domain. As such, | for deployment in a single network administrative domain. As such, | |||
the Session-Sender address, Session-Reflector address, and Return | the Session-Sender address, Session-Reflector address, and Return | |||
Path are provisioned by the operator for the STAMP session. It is | Path are provisioned by the operator for the STAMP session. It is | |||
assumed that the operator has verified the integrity of the Return | assumed that the operator has verified the integrity of the Return | |||
Path and identity of the far-end Session-Reflector. | Path and identity of the far-end Session-Reflector. | |||
The STAMP extensions defined in this document may be used for | The STAMP extensions defined in this document may be used for | |||
potential address spoofing. For example, a Session-Sender may | potential address spoofing. For example, a Session-Sender may | |||
specify a Return Path IP Address that is different from the Session- | specify a Return Path IP Address that is different from the Session- | |||
Sender address. The Session-Reflector MAY drop the Session-Sender | Sender address. The Session-Reflector MAY drop the Session-Sender | |||
test packet when it cannot determine whether the Return Path IP | test packet when it cannot determine whether the Return Path IP | |||
Address is local on the Session-Sender. To help Session-Reflector to | Address is local on the Session-Sender. To help the Session- | |||
make that determination, the Return Path IP Address may also be | Reflector to make that determination, the Return Path IP Address may | |||
provisioned by the operator, for example, in an access control list. | also be provisioned by the operator, for example, in an access | |||
control list. | ||||
7. IANA Considerations | 7. IANA Considerations | |||
IANA has created the "STAMP TLV Types" registry for [RFC8972]. IANA | IANA has allocated a value for the Destination Address TLV Type and a | |||
has early allocated a value for the Destination Address TLV Type and | value for the Return Path TLV Type from the IETF Review TLV range in | |||
a value for the Return Path TLV Type from the IETF Review TLV range | the "STAMP TLV Types" registry [RFC8972] as follows. | |||
of the same registry. | ||||
+======================+======================+===========+ | +=======+=======================================+===========+ | |||
| Value | Description | Reference | | | Value | Description | Reference | | |||
+======================+======================+===========+ | +=======+=======================================+===========+ | |||
| 9 (Early Allocation) | Destination Node | This | | | 9 | Destination Node IPv4 or IPv6 Address | RFC 9503 | | |||
| | IPv4 or IPv6 Address | document | | +-------+---------------------------------------+-----------+ | |||
+----------------------+----------------------+-----------+ | | 10 | Return Path | RFC 9503 | | |||
| 10 (Early | Return Path | This | | +-------+---------------------------------------+-----------+ | |||
| Allocation) | | document | | ||||
+----------------------+----------------------+-----------+ | ||||
Table 1: STAMP TLV Types | Table 1: STAMP TLV Types | |||
IANA is requested to create a sub-registry for "Return Path Sub-TLV | IANA has created the "Return Path Sub-TLV Types" registry. All code | |||
Type". All code points in the range 1 through 175 in this registry | points in the range 1 through 175 in this registry shall be allocated | |||
shall be allocated according to the "IETF Review" procedure as | according to the "IETF Review" procedure as specified in [RFC8126]. | |||
specified in [RFC8126]. Code points in the range 176 through 239 in | Code points in the range 176 through 239 shall be allocated according | |||
this registry shall be allocated according to the "First Come, First | to the "First Come First Served" procedure as specified in [RFC8126]. | |||
Served" procedure as specified in [RFC8126]. Remaining code points | Remaining code points shall be allocated according to Table 2: | |||
are allocated according to Table 2: | ||||
+===========+==========================+===============+ | +=========+=========================+ | |||
| Value | Description | Reference | | | Range | Registration Procedures | | |||
+===========+==========================+===============+ | +=========+=========================+ | |||
| 0 - 175 | IETF Review | This document | | | 1-175 | IETF Review | | |||
+-----------+--------------------------+---------------+ | +---------+-------------------------+ | |||
| 176 - 239 | First Come, First Served | This document | | | 176-239 | First Come First Served | | |||
+-----------+--------------------------+---------------+ | +---------+-------------------------+ | |||
| 240 - 251 | Experimental Use | This document | | | 240-251 | Experimental Use | | |||
+-----------+--------------------------+---------------+ | +---------+-------------------------+ | |||
| 252 - 255 | Private Use | This document | | | 252-254 | Private Use | | |||
+-----------+--------------------------+---------------+ | +---------+-------------------------+ | |||
Table 2: Return Path Sub-TLV Type Registry | Table 2: Return Path Sub-TLV | |||
Types Registry | ||||
IANA is requested to allocate the values for the following Sub-TLV | IANA has allocated values for the following Sub-TLV Types in the | |||
Types from this registry. | "Return Path Sub-TLV Types" registry. | |||
+======+========================================+===============+ | +=======+========================================+===========+ | |||
| Type | Description | Reference | | | Value | Description | Reference | | |||
+======+========================================+===============+ | +=======+========================================+===========+ | |||
| 0 | Reserved | This document | | | 0 | Reserved | RFC 9503 | | |||
+------+----------------------------------------+---------------+ | +-------+----------------------------------------+-----------+ | |||
| 1 | Return Path Control Code | This document | | | 1 | Return Path Control Code | RFC 9503 | | |||
+------+----------------------------------------+---------------+ | +-------+----------------------------------------+-----------+ | |||
| 2 | Return IPv4 or IPv6 Address | This document | | | 2 | Return IPv4 or IPv6 Address | RFC 9503 | | |||
+------+----------------------------------------+---------------+ | +-------+----------------------------------------+-----------+ | |||
| 3 | SR-MPLS Label Stack of the Return Path | This document | | | 3 | SR-MPLS Label Stack of the Return Path | RFC 9503 | | |||
+------+----------------------------------------+---------------+ | +-------+----------------------------------------+-----------+ | |||
| 4 | SRv6 Segment List of the Return Path | This document | | | 4 | SRv6 Segment List of the Return Path | RFC 9503 | | |||
+------+----------------------------------------+---------------+ | +-------+----------------------------------------+-----------+ | |||
| 255 | Reserved | This document | | | 255 | Reserved | RFC 9503 | | |||
+------+----------------------------------------+---------------+ | +-------+----------------------------------------+-----------+ | |||
Table 3: Return Path Sub-TLV Types | Table 3: Return Path Sub-TLV Types | |||
IANA is requested to create a sub-registry for "Return Path Control | IANA has created the "Return Path Control Code Flags" registry for | |||
Code Flags" for the Return Path Control Code Sub-TLV. All code | Return Path Control Code Sub-TLVs. All code points in the bit | |||
points in the bit position 31 (counting from bit 31 as the least | position 31 (counting from bit 31 as the least significant bit) | |||
significant bit) through 12 in this registry shall be allocated | through 12 in this registry shall be allocated according to the "IETF | |||
according to the "IETF Review" procedure as specified in [RFC8126]. | Review" procedure as specified in [RFC8126]. Code points in the bit | |||
Code points in the bit position 11 through 8 in this registry shall | position 11 through 8 shall be allocated according to the "First Come | |||
be allocated according to the "First Come, First Served" procedure as | First Served" procedure as specified in [RFC8126]. Remaining code | |||
specified in [RFC8126]. Remaining code points are allocated | points shall be allocated according to Table 4: | |||
according to Table 4: | ||||
+=========+==========================+===============+ | +=======+=========================+ | |||
| Bit | Description | Reference | | | Range | Registration Procedures | | |||
+=========+==========================+===============+ | +=======+=========================+ | |||
| 31 - 12 | IETF Review | This document | | | 31-12 | IETF Review | | |||
+---------+--------------------------+---------------+ | +-------+-------------------------+ | |||
| 11 - 8 | First Come, First Served | This document | | | 11-8 | First Come First Served | | |||
+---------+--------------------------+---------------+ | +-------+-------------------------+ | |||
| 7 - 4 | Experimental Use | This document | | | 7-4 | Experimental Use | | |||
+---------+--------------------------+---------------+ | +-------+-------------------------+ | |||
| 3 - 0 | Private Use | This document | | | 3-0 | Private Use | | |||
+---------+--------------------------+---------------+ | +-------+-------------------------+ | |||
Table 4: Return Path Control Code Flags Registry | Table 4: Return Path Control | |||
Code Flags Registry | ||||
IANA is requested to allocate the value for the following Return Path | IANA has allocated a value in the "Return Path Control Code Flags" | |||
Control Code Flag from this registry. | registry as follows. | |||
+=====+===============+===============+ | +=======+===============+===========+ | |||
| Bit | Description | Reference | | | Value | Description | Reference | | |||
+=====+===============+===============+ | +=======+===============+===========+ | |||
| 31 | Reply Request | This document | | | 31 | Reply Request | RFC 9503 | | |||
+-----+---------------+---------------+ | +-------+---------------+-----------+ | |||
Table 5: Return Path Control Code Flags | Table 5: Return Path Control Code | |||
Flags | ||||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
skipping to change at page 16, line 39 ¶ | skipping to change at line 703 ¶ | |||
<https://www.rfc-editor.org/info/rfc8762>. | <https://www.rfc-editor.org/info/rfc8762>. | |||
[RFC8972] Mirsky, G., Min, X., Nydell, H., Foote, R., Masputra, A., | [RFC8972] Mirsky, G., Min, X., Nydell, H., Foote, R., Masputra, A., | |||
and E. Ruffini, "Simple Two-Way Active Measurement | and E. Ruffini, "Simple Two-Way Active Measurement | |||
Protocol Optional Extensions", RFC 8972, | Protocol Optional Extensions", RFC 8972, | |||
DOI 10.17487/RFC8972, January 2021, | DOI 10.17487/RFC8972, January 2021, | |||
<https://www.rfc-editor.org/info/rfc8972>. | <https://www.rfc-editor.org/info/rfc8972>. | |||
8.2. Informative References | 8.2. Informative References | |||
[RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., | [IEEE802.1AX] | |||
Decraene, B., Litkowski, S., and R. Shakir, "Segment | IEEE, "IEEE Standard for Local and metropolitan area | |||
Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, | networks -- Link Aggregation", IEEE Std 802.1AX-2014, | |||
July 2018, <https://www.rfc-editor.org/info/rfc8402>. | DOI 10.1109/IEEESTD.2014.7055197, December 2014, | |||
<https://doi.org/10.1109/IEEESTD.2014.7055197>. | ||||
[IPPM-STAMP-YANG] | ||||
Mirsky, G., Min, X., and W. S. Luo, "Simple Two-way Active | ||||
Measurement Protocol (STAMP) Data Model", Work in | ||||
Progress, Internet-Draft, draft-ietf-ippm-stamp-yang-11, | ||||
13 March 2023, <https://datatracker.ietf.org/doc/html/ | ||||
draft-ietf-ippm-stamp-yang-11>. | ||||
[PCE-BINDING-LABEL-SID] | ||||
Sivabalan, S., Filsfils, C., Tantsura, J., Previdi, S., | ||||
and C. Li, Ed., "Carrying Binding Label/Segment Identifier | ||||
(SID) in PCE-based Networks.", Work in Progress, Internet- | ||||
Draft, draft-ietf-pce-binding-label-sid-16, 27 March 2023, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-pce- | ||||
binding-label-sid-16>. | ||||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
[RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., | ||||
Decraene, B., Litkowski, S., and R. Shakir, "Segment | ||||
Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, | ||||
July 2018, <https://www.rfc-editor.org/info/rfc8402>. | ||||
[RFC8545] Morton, A., Ed. and G. Mirsky, Ed., "Well-Known Port | [RFC8545] Morton, A., Ed. and G. Mirsky, Ed., "Well-Known Port | |||
Assignments for the One-Way Active Measurement Protocol | Assignments for the One-Way Active Measurement Protocol | |||
(OWAMP) and the Two-Way Active Measurement Protocol | (OWAMP) and the Two-Way Active Measurement Protocol | |||
(TWAMP)", RFC 8545, DOI 10.17487/RFC8545, March 2019, | (TWAMP)", RFC 8545, DOI 10.17487/RFC8545, March 2019, | |||
<https://www.rfc-editor.org/info/rfc8545>. | <https://www.rfc-editor.org/info/rfc8545>. | |||
[RFC9256] Filsfils, C., Talaulikar, K., Voyer, D., Bogdanov, A., and | [RFC9256] Filsfils, C., Talaulikar, K., Ed., Voyer, D., Bogdanov, | |||
P. Mattes, "Segment Routing Policy Architecture", | A., and P. Mattes, "Segment Routing Policy Architecture", | |||
RFC 9256, DOI 10.17487/RFC9256, July 2022, | RFC 9256, DOI 10.17487/RFC9256, July 2022, | |||
<https://www.rfc-editor.org/info/rfc9256>. | <https://www.rfc-editor.org/info/rfc9256>. | |||
[I-D.ietf-pce-binding-label-sid] | [STAMP-ON-LAG] | |||
Sivabalan, S., Filsfils, C., Tantsura, J., Previdi, S., | ||||
and C. L. (editor), "Carrying Binding Label/Segment | ||||
Identifier in PCE-based Networks.", Work in Progress, | ||||
Internet-Draft, draft-ietf-pce-binding-label-sid-16, 27 | ||||
March 2023, <https://www.ietf.org/archive/id/draft-ietf- | ||||
pce-binding-label-sid-16.txt>. | ||||
[I-D.ietf-ippm-stamp-yang] | ||||
Mirsky, G., Min, X., and W. S. Luo, "Simple Two-way Active | ||||
Measurement Protocol (STAMP) Data Model", Work in | ||||
Progress, Internet-Draft, draft-ietf-ippm-stamp-yang-11, | ||||
13 March 2023, <https://www.ietf.org/archive/id/draft- | ||||
ietf-ippm-stamp-yang-11.txt>. | ||||
[I-D.ietf-ippm-stamp-on-lag] | ||||
Li, Z., Zhou, T., Guo, J., Mirsky, G., and R. Gandhi, | Li, Z., Zhou, T., Guo, J., Mirsky, G., and R. Gandhi, | |||
"Simple Two-Way Active Measurement Protocol Extensions for | "Simple Two-Way Active Measurement Protocol Extensions for | |||
Performance Measurement on LAG", Work in Progress, | Performance Measurement on LAG", Work in Progress, | |||
Internet-Draft, draft-ietf-ippm-stamp-on-lag-03, 2 July | Internet-Draft, draft-ietf-ippm-stamp-on-lag-05, 17 | |||
2023, <https://www.ietf.org/archive/id/draft-ietf-ippm- | October 2023, <https://datatracker.ietf.org/doc/html/ | |||
stamp-on-lag-03.txt>. | draft-ietf-ippm-stamp-on-lag-05>. | |||
[IEEE802.1AX] | ||||
IEEE Std. 802.1AX, "IEEE Standard for Local and | ||||
metropolitan area networks - Link Aggregation", November | ||||
2008. | ||||
Appendix A. Destination Node Address TLV Use-case Example | Appendix A. Destination Node Address TLV Use-Case Example | |||
The STAMP test packets can be encapsulated with an SR-MPLS Segment | STAMP test packets can be encapsulated with 1) an SR-MPLS Label Stack | |||
List and IPv4 header containing destination IPv4 address from 127/8 | and IPv4 header containing an IPv4 Destination Address from the 127/8 | |||
range or STAMP test packets encapsulated with outer IPv6 header and | range or 2) an outer IPv6 header and a Segment Routing Header (SRH) | |||
Segment Routing Header (SRH) with inner IPv6 header containing IPv6 | with an inner IPv6 header containing an IPv6 Destination Address from | |||
destination IPv6 address ::1/128. | the ::1/128 range. | |||
In an ECMP environment, the hashing function in forwarding may decide | In an ECMP environment, the hashing function in forwarding may decide | |||
the outgoing path using the source address, destination address, UDP | the outgoing path using the Source Address, Destination Address, UDP | |||
ports, IPv6 flow-label, etc. from the packet. Hence, for IPv4, for | ports, IPv6 flow-label, etc. from the packet. Hence, for IPv4, for | |||
example, different values of IPv4 destination address from 127/8 | example, different values of an IPv4 Destination Address from the | |||
range may be used in the IPv4 header of the STAMP test packets to | 127/8 range may be used in the IPv4 header of the STAMP test packets | |||
measure different ECMP paths. For IPv6, for example, different | to measure different ECMP paths. For IPv6, for example, different | |||
values of flow-label may be used in the IPv6 header of the STAMP test | values of flow-label may be used in the IPv6 header of the STAMP test | |||
packets to measure different ECMP paths. | packets to measure different ECMP paths. | |||
In those cases, the STAMP test packets may reach a node that is not | In those cases, the STAMP test packets may reach a node that is not | |||
the Session-Reflector for this STAMP session in an error condition, | the Session-Reflector for this STAMP session in an error condition, | |||
and this un-intended node may transmit reply test packet that can | and this unintended node may transmit a reply test packet that can | |||
result in reporting of invalid measurement metrics. The intended | result in the reporting of invalid measurement metrics. The intended | |||
Session-Reflector address can be carried in the Destination Node | Session-Reflector address can be carried in the Destination Node | |||
Address TLV to help detect this error. | Address TLV to help detect this error. | |||
Acknowledgments | Acknowledgments | |||
The authors would like to thank Thierry Couture for the discussions | The authors would like to thank Thierry Couture for the discussions | |||
on the use-cases for Performance Measurement in Segment Routing. The | on the use cases for Performance Measurement in Segment Routing. The | |||
authors would also like to thank Greg Mirsky, Mike Koldychev, Gyan | authors would also like to thank Greg Mirsky, Mike Koldychev, Gyan | |||
Mishra, Tianran Zhou, Al Mortons, Reshad Rahman, Zhenqiang Li, Frank | Mishra, Tianran Zhou, Al Morton, Reshad Rahman, Zhenqiang Li, Frank | |||
Brockners, Henrik Nydell, and Cheng Li for providing comments and | Brockners, Henrik Nydell, and Cheng Li for providing comments and | |||
suggestions. Thank you Joel Halpern for Gen-ART review, Martin Duke | suggestions. Thank you to Joel Halpern for the Gen-ART review, | |||
for AD review, and Kathleen Moriarty for Security review. The | Martin Duke for the AD review, and Kathleen Moriarty for the Security | |||
authors would like to thank Robert Wilton, Eric Vyncke, Paul Wouters, | review. The authors would also like to thank Robert Wilton, Éric | |||
John Scudder, Roman Danyliw, and Jim Guichard for IESG review. | Vyncke, Paul Wouters, John Scudder, Roman Danyliw, Lars Eggert, Erik | |||
Kline, Warren Kumari, and Jim Guichard for the IESG review. | ||||
Contributors | Contributors | |||
The following people have substantially contributed to this document: | The following person has contributed substantially to this document: | |||
Daniel Voyer | Daniel Voyer | |||
Bell Canada | Bell Canada | |||
Email: daniel.voyer@bell.ca | Email: daniel.voyer@bell.ca | |||
Authors' Addresses | Authors' Addresses | |||
Rakesh Gandhi (editor) | Rakesh Gandhi (editor) | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
Canada | Canada | |||
End of changes. 129 change blocks. | ||||
359 lines changed or deleted | 368 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |