rfc9186.original   rfc9186.txt 
PIM Working Group G. Mirsky Internet Engineering Task Force (IETF) G. Mirsky
Internet-Draft Ericsson Request for Comments: 9186 Ericsson
Intended status: Standards Track J. Xiaoli Category: Standards Track X. Ji
Expires: 12 June 2022 ZTE Corporation ISSN: 2070-1721 ZTE Corporation
9 December 2021 January 2022
Fast Failover in Protocol Independent Multicast - Sparse Mode (PIM-SM) Fast Failover in Protocol Independent Multicast - Sparse Mode (PIM-SM)
Using Bidirectional Forwarding Detection (BFD) for Multipoint Networks Using Bidirectional Forwarding Detection (BFD) for Multipoint Networks
draft-ietf-pim-bfd-p2mp-use-case-10
Abstract Abstract
This document specifies how Bidirectional Forwarding Detection for This document specifies how Bidirectional Forwarding Detection (BFD)
multipoint networks can provide sub-second failover for routers that for multipoint networks can provide sub-second failover for routers
participate in Protocol Independent Multicast - Sparse Mode (PIM-SM). that participate in Protocol Independent Multicast - Sparse Mode
An extension to the PIM Hello message used to bootstrap a point-to- (PIM-SM). An extension to the PIM Hello message used to bootstrap a
multipoint BFD session is also defined in this document. point-to-multipoint BFD session is also defined in this document.
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 12 June 2022. 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/rfc9186.
Copyright Notice Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2022 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
1.1. Conventions used in this document . . . . . . . . . . . . 3 1.1. Conventions Used in This Document
1.1.1. Terminology . . . . . . . . . . . . . . . . . . . . . 3 1.1.1. Terminology
1.1.2. Requirements Language . . . . . . . . . . . . . . . . 3 1.1.2. Requirements Language
2. BFD Discriminator PIM Hello Option . . . . . . . . . . . . . 3 2. BFD Discriminator PIM Hello Option
2.1. Using P2MP BFD in PIM Router Monitoring . . . . . . . . . 4 2.1. Using P2MP BFD in PIM Router Monitoring
2.2. P2MP BFD in PIM DR Load Balancing . . . . . . . . . . . . 5 2.2. P2MP BFD in PIM DR Load Balancing
2.3. Multipoint BFD Encapsulation . . . . . . . . . . . . . . 5 2.3. Multipoint BFD Encapsulation
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 3. IANA Considerations
4. Security Considerations . . . . . . . . . . . . . . . . . . . 6 4. Security Considerations
5. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 6 5. References
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 6 5.1. Normative References
6.1. Normative References . . . . . . . . . . . . . . . . . . 6 5.2. Informative References
6.2. Informative References . . . . . . . . . . . . . . . . . 7 Acknowledgments
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 7 Authors' Addresses
1. Introduction 1. Introduction
Faster convergence in the control plane minimizes the periods of Faster convergence in the control plane minimizes the periods of
traffic blackholing, transient routing loops, and other situations traffic loss due to the use of stale routing information, transient
that may negatively affect service data flow. Faster convergence in routing loops, and other situations that may negatively affect
the control plane is beneficial to unicast and multicast routing service data flow. Faster convergence in the control plane is
protocols. beneficial to unicast and multicast routing protocols.
[RFC7761] is the current specification of the Protocol Independent [RFC7761] is the current specification of the Protocol Independent
Multicast - Sparse Mode (PIM-SM) for IPv4 and IPv6 networks. A Multicast - Sparse Mode (PIM-SM) for IPv4 and IPv6 networks. A
conforming implementation of PIM-SM elects a Designated Router (DR) conforming implementation of PIM-SM elects a Designated Router (DR)
on each PIM-SM interface. When a group of PIM-SM nodes is connected on each PIM-SM interface. When a group of PIM-SM nodes is connected
to a shared media segment, e.g., Ethernet, the node elected as DR to a shared media segment, e.g., Ethernet, the node elected as the DR
acts on behalf of directly connected hosts in the context of the PIM- acts on behalf of directly connected hosts in the context of the PIM-
SM protocol. Failure of the DR impacts the quality of the multicast SM protocol. Failure of the DR impacts the quality of the multicast
services it provides to directly connected hosts because the default services it provides to directly connected hosts because the default
failure detection interval for PIM-SM routers is 105 seconds. failure detection interval for PIM-SM routers is 105 seconds.
Bidirectional Forwarding Detection (BFD) [RFC5880] was originally Bidirectional Forwarding Detection (BFD) [RFC5880] was originally
defined to detect a failure of a point-to-point (p2p) path, single- defined to detect a failure of a point-to-point (P2P) path, single
hop [RFC5881] or multihop [RFC5883]. In some PIM-SM deployments, a hop [RFC5881], or multihop [RFC5883]. In some PIM-SM deployments, a
p2p BFD can be used to detect a failure and enable faster failover. P2P BFD can be used to detect a failure and enable faster failover.
[RFC8562] extends the BFD base specification [RFC5880] for multipoint [RFC8562] extends the BFD base specification [RFC5880] for multipoint
and multicast networks, which matches the deployment scenarios for and multicast networks, which matches the deployment scenarios for
PIM-SM over a LAN segment. A BFD system in p2mp environment that PIM-SM over a LAN segment. A BFD system in a point-to-multipoint
transmits BFD Control messages using the BFD Demand mode [RFC5880] (P2MP) environment that transmits BFD Control messages using the BFD
creates less BFD state than the Asynchronous mode. Point-to- Demand mode [RFC5880] creates less BFD state than the Asynchronous
multipoint (p2mp) BFD can enable faster detection of PIM-SM router mode. P2MP BFD can enable faster detection of PIM-SM router failure
failure compared to PIM-SM without BFD and thus minimize multicast compared to PIM-SM without BFD and thus minimizes multicast service
service disruption. The monitored PIM-SM router acts as the head and disruption. The monitored PIM-SM router acts as the head and other
other routers as tails of a p2mp BFD session. This document defines routers act as tails of a P2MP BFD session. This document defines
the monitoring of a PIM-SM router using p2mp BFD. This document also the monitoring of a PIM-SM router using P2MP BFD. This document also
defines the extension to PIM-SM [RFC7761] to bootstrap a PIM-SM defines the extension to PIM-SM [RFC7761] to bootstrap a PIM-SM
router to join in p2mp BFD session over shared media segment. router to join in the P2MP BFD session over a shared media segment.
1.1. Conventions used in this document 1.1. Conventions Used in This Document
1.1.1. Terminology 1.1.1. Terminology
This document uses terminology defined in [RFC5880], [RFC8562], and This document uses terminology defined in [RFC5880], [RFC8562], and
[RFC7761]. Familiarity with these specifications and the terminology [RFC7761]. Familiarity with these specifications and the terminology
used is expected. used is expected.
1.1.2. Requirements Language 1.1.2. 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. BFD Discriminator PIM Hello Option 2. BFD Discriminator PIM Hello Option
Figure 1 displays the new optional BFD Discriminator PIM Hello option Figure 1 displays the new optional BFD Discriminator PIM Hello Option
to bootstrap a tail of the p2mp BFD session. to bootstrap a tail of the P2MP BFD session:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OptionType | OptionLength | | OptionType | OptionLength |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| HeadDiscriminator | | HeadDiscriminator |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1: BFD Discriminator PIM Hello Option Figure 1: BFD Discriminator PIM Hello Option
where new fields are interpreted as: where new fields are interpreted as:
OptionType: TBA. OptionType: 39
OptionLength: MUST be set to 4. OptionLength: MUST be set to 4.
HeadDiscriminator: the four-octet field MUST be included in the HeadDiscriminator: the 4-octet field MUST be included in the BFD
BFD Discriminator PIM-SM Hello option. The value MUST NOT be Discriminator PIM-SM Hello Option. The value MUST NOT be zero.
zero. It equals the value of My Discriminator ([RFC5880]) It equals the value of My Discriminator [RFC5880] allocated by the
allocated by the head. head.
If the value of the OptionLength field is not equal to 4, the BFD If the value of the OptionLength field is not equal to 4, the BFD
Discriminator PIM Hello option is considered malformed, and the Discriminator PIM Hello Option is considered malformed, and the
receiver MUST stop processing PIM Hello options. If the value of the receiver MUST stop processing PIM Hello Options. If the value of the
HeadDiscriminator field equals zero, then the BFD Discriminator PIM HeadDiscriminator field equals zero, then the BFD Discriminator PIM
Hello option MUST be considered invalid, and the receiver MUST ignore Hello Option MUST be considered invalid, and the receiver MUST ignore
it. The receiver SHOULD log a notification regarding the malformed it. The receiver SHOULD log a notification regarding the malformed
or invalid BFD Discriminator Hello option under the control of a or invalid BFD Discriminator Hello Option under the control of a
throttling logging mechanism. throttling logging mechanism.
2.1. Using P2MP BFD in PIM Router Monitoring 2.1. Using P2MP BFD in PIM Router Monitoring
If the head is no longer serving the function that prompted it to be If the head is no longer serving the function that prompted it to be
monitored, then it MUST cease including the BFD Discriminator PIM monitored, then it MUST cease including the BFD Discriminator PIM
Hello option in its PIM-Hello message, and it SHOULD shut down the Hello Option in its PIM Hello message, and it SHOULD shut down the
BFD session following the procedures described in Section 5.9 BFD session following the procedures described in [RFC8562],
[RFC8562]. Section 5.9.
The head MUST create a BFD session of type MultipointHead [RFC8562]. The head MUST create a BFD session of type MultipointHead [RFC8562].
Note that any PIM-SM router, regardless of its role, MAY become a Note that any PIM-SM router, regardless of its role, MAY become a
head of a p2mp BFD session. To control the volume of BFD control head of a P2MP BFD session. To control the volume of BFD Control
traffic on a shared media segment, an operator should carefully traffic on a shared media segment, an operator should carefully
select PIM-SM routers configured as a head of a p2mp BFD session. select PIM-SM routers configured as a head of a P2MP BFD session.
The head MUST include the BFD Discriminator PIM Hello option in its The head MUST include the BFD Discriminator PIM Hello Option in its
PIM Hello messages. PIM Hello messages.
A PIM-SM router that is configured to monitor the head by using p2mp A PIM-SM router that is configured to monitor the head by using P2MP
BFD is referred to throughout this document as a "tail". When such a BFD is referred to throughout this document as a "tail". When such a
tail receives a PIM-Hello packet with the BFD Discriminator PIM Hello tail receives a PIM Hello packet with the BFD Discriminator PIM Hello
option, the tail MAY create a p2mp BFD session of type Option, the tail MAY create a P2MP BFD session of type
MultipointTail, as defined in [RFC8562]. MultipointTail, as defined in [RFC8562].
The node that includes the BFD Discriminator PIM Hello option The node that includes the BFD Discriminator PIM Hello Option
transmits BFD Control packets periodically. For the tail to transmits BFD Control packets periodically. For the tail to
correctly demultiplex BFD [RFC8562], the source address and My correctly demultiplex BFD [RFC8562], the source address and My
Discriminator of the BFD packets MUST be the same as the source Discriminator of the BFD packets MUST be the same as the source
address and the HeadDiscriminator, respectively, of the PIM Hello address and the HeadDiscriminator, respectively, of the PIM Hello
message. If that is not the case, the tail BFD node would not be message. If that is not the case, the tail BFD node would not be
able to monitor the state of the PIM-SM node, that is, the head of able to monitor the state of the PIM-SM node -- that is, the head of
the p2mp BFD session, though the regular PIM-SM mechanisms remain the P2MP BFD session -- though the regular PIM-SM mechanisms remain
fully operational. fully operational.
If the tail detects a MultipointHead failure [RFC8562], it MUST If the tail detects a MultipointHead failure [RFC8562], it MUST
delete the corresponding neighbor state and follow procedures defined delete the corresponding neighbor state and follow procedures defined
in [RFC7761] for the DR and additional neighbor state deletion after in [RFC7761] for the DR and additional neighbor state deletion after
the neighbor timeout expires. the neighbor timeout expires.
If the head ceases to include the BFD Discriminator PIM Hello option If the head ceases to include the BFD Discriminator PIM Hello Option
in its PIM-Hello message, tails SHOULD close the corresponding in its PIM Hello message, the tail SHOULD close the corresponding
MultipointTail BFD session without affecting the PIM state in any MultipointTail BFD session without affecting the PIM state in any
way. Thus, the tail stops using BFD to monitor the head and reverts way. Thus, the tail stops using BFD to monitor the head and reverts
to the procedures defined in [RFC7761]. to the procedures defined in [RFC7761].
2.2. P2MP BFD in PIM DR Load Balancing 2.2. P2MP BFD in PIM DR Load Balancing
[RFC8775] specifies the PIM Designated Router Load Balancing (DRLB) [RFC8775] specifies the PIM Designated Router Load-Balancing (DRLB)
functionality. Any PIM router that advertises the DRLB-Cap Hello functionality. Any PIM router that advertises the DR Load-Balancing
Option can become the head of a p2mp BFD session, as specified in Capability (DRLB-Cap) Hello Option can become the head of a P2MP BFD
Section 2.1. The head router administratively sets the session, as specified in Section 2.1. The head router
bfd.SessionState to Up in the MultipointHead session [RFC8562] only administratively sets the bfd.SessionState to Up in the
if it is a Group Designated Router (GDR) Candidate, as specified in MultipointHead session [RFC8562] only if it is a Group Designated
Sections 5.5 and 5.6 of [RFC8775]. If the router is no longer the Router (GDR) Candidate, as specified in Sections 5.5 and 5.6 of
GDR, then it MUST shut down following the procedures described in [RFC8775]. If the router is no longer the GDR, then it MUST shut
Section 5.9 [RFC8562]. For each GDR Candidate that includes BFD down following the procedures described in [RFC8562], Section 5.9.
Discriminator option in its PIM Hello, the PIM DR MUST create a For each GDR Candidate that includes the BFD Discriminator Option in
MultipointTail session [RFC8562]. PIM DR demultiplexes BFD sessions its PIM Hello, the PIM DR MUST create a MultipointTail session
based on the value of the My Discriminator field and the source IP [RFC8562]. PIM DR demultiplexes BFD sessions based on the value of
address. If PIM DR detects a failure of one of the sessions, it MUST the My Discriminator field and the source IP address. If PIM DR
remove that router from the GDR Candidate list and immediately detects a failure of one of the sessions, it MUST remove that router
transmit a new DRLB-List option. from the GDR Candidate list and immediately transmit a new DRLB-List
option.
2.3. Multipoint BFD Encapsulation 2.3. Multipoint BFD Encapsulation
The MultipointHead of a p2mp BFD session when transmitting BFD The MultipointHead of a P2MP BFD session when transmitting BFD
Control packets: Control packets:
MUST set TTL or Hop Limit value to 255 (Section 5 [RFC5881]). * MUST set the TTL or Hop Limit value to 255 ([RFC5881], Section 5).
Similarly, all received BFD Control packets that are demultiplexed Similarly, all received BFD Control packets that are demultiplexed
to the session MUST be discarded if the received TTL or Hop Limit to the session MUST be discarded if the received TTL or Hop Limit
is not equal to 255; is not equal to 255, and
MUST use the group address ALL-PIM-ROUTERS ('224.0.0.13' for IPv4
and 'ff02::d' for IPv6) as destination IP address * MUST use the group address ALL-PIM-ROUTERS ("224.0.0.13" for IPv4
and "ff02::d" for IPv6) as the destination IP address.
3. IANA Considerations 3. IANA Considerations
IANA is requested to allocate a new OptionType value from PIM-Hello IANA has allocated a new OptionType value in the "PIM-Hello Options"
Options registry according to: registry according to Table 1:
+=======+========+==========================+===============+ +=======+========+==========================+===========+
| Value | Length | Name | Reference | | Value | Length | Name | Reference |
+=======+========+==========================+===============+ +=======+========+==========================+===========+
| TBA | 4 | BFD Discriminator Option | This document | | 39 | 4 | BFD Discriminator Option | RFC 9186 |
+-------+--------+--------------------------+---------------+ +-------+--------+--------------------------+-----------+
Table 1: BFD Discriminator option type Table 1: BFD Discriminator Option Type
4. Security Considerations 4. Security Considerations
This document defines a way to accelerate detecting a failure that This document defines a way to accelerate detection of a failure that
affects PIM functionality by using BFD. The operation of either affects PIM functionality by using BFD. The operation of either
protocol is not changed. protocol is not changed.
The security considerations discussed in [RFC7761], [RFC5880], The security considerations discussed in [RFC5880], [RFC5881],
[RFC5881], [RFC8562], and [RFC8775] apply to this document. [RFC7761], [RFC8562], and [RFC8775] apply to this document.
5. Acknowledgments
The authors cannot say enough to express their appreciation of the
comments and suggestions we received from Stig Venaas. The authors
greatly appreciate the comments and suggestions by Alvaro Retana that
improved the clarity of this document.
6. References 5. References
6.1. Normative References 5.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>.
[RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection
(BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010, (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010,
<https://www.rfc-editor.org/info/rfc5880>. <https://www.rfc-editor.org/info/rfc5880>.
skipping to change at page 7, line 30 skipping to change at line 287
[RFC8562] Katz, D., Ward, D., Pallagatti, S., Ed., and G. Mirsky, [RFC8562] Katz, D., Ward, D., Pallagatti, S., Ed., and G. Mirsky,
Ed., "Bidirectional Forwarding Detection (BFD) for Ed., "Bidirectional Forwarding Detection (BFD) for
Multipoint Networks", RFC 8562, DOI 10.17487/RFC8562, Multipoint Networks", RFC 8562, DOI 10.17487/RFC8562,
April 2019, <https://www.rfc-editor.org/info/rfc8562>. April 2019, <https://www.rfc-editor.org/info/rfc8562>.
[RFC8775] Cai, Y., Ou, H., Vallepalli, S., Mishra, M., Venaas, S., [RFC8775] Cai, Y., Ou, H., Vallepalli, S., Mishra, M., Venaas, S.,
and A. Green, "PIM Designated Router Load Balancing", and A. Green, "PIM Designated Router Load Balancing",
RFC 8775, DOI 10.17487/RFC8775, April 2020, RFC 8775, DOI 10.17487/RFC8775, April 2020,
<https://www.rfc-editor.org/info/rfc8775>. <https://www.rfc-editor.org/info/rfc8775>.
6.2. Informative References 5.2. Informative References
[RFC5883] Katz, D. and D. Ward, "Bidirectional Forwarding Detection [RFC5883] Katz, D. and D. Ward, "Bidirectional Forwarding Detection
(BFD) for Multihop Paths", RFC 5883, DOI 10.17487/RFC5883, (BFD) for Multihop Paths", RFC 5883, DOI 10.17487/RFC5883,
June 2010, <https://www.rfc-editor.org/info/rfc5883>. June 2010, <https://www.rfc-editor.org/info/rfc5883>.
Acknowledgments
The authors cannot say enough to express their appreciation of the
comments and suggestions that were received from Stig Venaas. The
authors also greatly appreciate the comments and suggestions by
Alvaro Retana that improved the clarity of this document.
Authors' Addresses Authors' Addresses
Greg Mirsky Greg Mirsky
Ericsson Ericsson
Email: gregimirsky@gmail.com Email: gregimirsky@gmail.com
Ji Xiaoli Xiaoli Ji
ZTE Corporation ZTE Corporation
No.50 Software Avenue, Yuhuatai District Yuhuatai District
Nanjing, No. 50 Software Avenue
Nanjing
China China
Email: ji.xiaoli@zte.com.cn Email: ji.xiaoli@zte.com.cn
 End of changes. 46 change blocks. 
136 lines changed or deleted 136 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/