RFC 9747

Unaffiliated Bidirectional Forwarding Detection (BFD) Echo

πŸ“… published March 2025, from ietf

Abstract ✨

RFC 9747 is Unaffiliated Bidirectional Forwarding Detection (BFD) Echo πŸ’–, and it's a Standards Track document from March 2025 (ISSN 2070-1721). Written by W. Cheng, R. Wang, X. Min (Ed.), R. Rahman, and R. Boddireddy. It updates RFC 5880 and doesn't obsolete anything πŸ¦‹.

Okay so the big idea: BFD Echo normally needs a whole BFD control session behind it. This spec adds an "Unaffiliated BFD Echo" mode that skips the control session entirely 🌸. Networks where setting up BFD control sessions is a hassle (or just not worth it) can still get that speedy failure detection, with a simpler setup that makes the whole network more resilient πŸ’….

Also, this doc updates RFC 5880 by defining the new Unaffiliated BFD Echo mechanism πŸŽ€.

Status of This Memo πŸ“

This is an Internet Standards Track document 🌈.

It's a product of the Internet Engineering Task Force (IETF) ✨. It represents the consensus of the IETF community, got public review, and was approved for publication by the Internet Engineering Steering Group (IESG). More on Internet Standards is in Section 2 of RFC 7841 🫢.

For the current status, any errata, and how to send feedback, check https://www.rfc-editor.org/info/rfc9747 πŸ”₯.

Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved πŸ’œ.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as they stand on the publication date. Please actually read these, bestie, because they spell out your rights and restrictions for this document πŸ™ˆ. Code Components pulled out of this document must include the Revised BSD License text described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, as the Revised BSD License describes πŸ“.

Table of Contents πŸ“š

1.  Introduction
  1.1.  Conventions Used in This Document
2.  Unaffiliated BFD Echo Procedures
3.  Updates to RFC 5880
4.  Operational Considerations
5.  Security Considerations
6.  IANA Considerations
7.  References
  7.1.  Normative References
  7.2.  Informative References
Acknowledgements
Contributors
Authors' Addresses

1. Introduction 🧚

Okay, so the goal here is to make sure a network device can spot communication faults with its neighbors quickly πŸƒβ€β™€οΈ. That matters for single-hop links, since the whole point is to keep services running and boost availability. Fast detection means fast fixes, and that's how you keep the service continuous πŸ’–.

BFD [RFC5880] is the low-overhead, short-interval method for catching faults on the path between adjacent forwarding engines. That path can include interfaces, data links, and the forwarding engines themselves πŸ¦‹. BFD gives you one unified way to watch any media and protocol layer in real time, which is honestly iconic ✨.

BFD has two main modes, Asynchronous mode and Demand mode, so it can fit lots of different deployments 🌸. It also has an Echo function that lowers how much BFD support device implementations need, as described in Section 3.2 of [RFC5880] πŸ’…. When Echo is on, the local system sends BFD Echo packets, and the remote system loops them back through the forwarding path (see Section 5 of [RFC5880] and Section 4 of [RFC5881]) πŸ”. If the local system misses several Echo packets in a row, the BFD session gets declared Down πŸ’€.

There are two typical ways to use the BFD Echo function πŸ‘‘:

  • Full BFD protocol capability with adjunct Echo function (Affiliated BFD Echo): Both the local device and the adjacent device need to support the full BFD protocol. Nothing changes here from [RFC5880] πŸŽ€.
  • BFD Echo-Only method without full BFD protocol capability (Unaffiliated BFD Echo): Only the local device needs to support sending and demultiplexing BFD Control packets 🫢. The BFD Control packets get sent over the BFD Echo port and use the Asynchronous mode processing procedures, with the modifications this document specifies 🌈. Heads up: this method requires the local device to send packets with one of its own IP addresses as the destination. The adjacent device then loops them back to the local device πŸ”₯. Also, this method watches connectivity to a device over one specific interface. It does not check whether a particular IP address on that device is available πŸ™ˆ.

This document is all about the Unaffiliated BFD Echo scenario πŸ¦‹.

Now, Section 5 of [RFC5880] says the payload of an Affiliated BFD Echo packet is a local matter, so its contents are out of scope for that spec 🌸. This document does specify the contents of Unaffiliated BFD Echo packets and how to handle them πŸ’œ. Yes, that might look like it goes against Section 5 of [RFC5880], but that RFC's core behavior says Echo packet contents are a local matter, and this document is literally defining what that "local matter" is 😭. For choosing IP addresses, the rules in Section 4 of [RFC5881] apply to encapsulating an Unaffiliated BFD Echo packet ✨.

Section 6.2.2 of [BBF-TR-146] describes a use case for the Unaffiliated BFD Echo 🧚.

This document updates [RFC5880] by defining a new way to do BFD Echo-only operation πŸ’…. It only affects the sender of BFD Echo packets. The loopback device doesn't need to implement the BFD protocol, so any IP forwarder can loop the packets back 🌟. It specifies using Unaffiliated BFD Echo over IPv4 and IPv6 for a single IP hop πŸ“. It can't be used for multihop paths, because the first hop would loop the Unaffiliated BFD Echo packets back πŸ™ˆ. You'll find the full list of updates to [RFC5880] in Section 3 πŸ‘‘.

1.1. Conventions Used in This Document πŸ“–

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here πŸ’–.

2. Unaffiliated BFD Echo Procedures ✨

okay so this section is where the Unaffiliated BFD Echo procedures get spelled out, bestie πŸ¦‹

        Device A                                     Device B
   +----------------+                           +----------------+
   |                |                           |                |
   |   |------------|                           |                |
   |   |Unaffiliated|                           |                |
   |   | BFD Echo  --->                         |                |
   |   | Session    |                           |                |
   |   |            |   Unaffiliated BFD Echo   |                |
   |   |           -------------------------------| BFD          |
   |   |            |                             | packets      |
   |   |          <-------------------------------| looped       |
   |   |------------|                           |                |
   |                |                           |                |
   |                |                           |                |
   +----------------+                           +----------------+
     BFD supported                               BFD not supported

Figure 1: Unaffiliated BFD Echo πŸŽ€

As shown in Figure 1, device A supports BFD, whereas device B is a regular IP forwarder that does not support BFD. πŸ’… Device A sends Unaffiliated BFD Echo packets, and once they arrive from device A, the one-hop-away BFD peer (device B) immediately loops them back using normal IP forwarding. πŸ” This lets device A rapidly detect a connectivity loss to device B. Also, device B would not intercept any received Unaffiliated BFD Echo packet or parse any BFD protocol field within it. Not even a peek, periodt πŸ™ˆ

An Unaffiliated BFD Echo session is not actually a BFD session, ngl πŸ’€ because there is no coordination of BFD protocol state between the two link ends. The remote end doesn't support BFD, so it can't engage in a BFD session. From the standpoint of the local end (as an initiator), the Unaffiliated BFD Echo session may be regarded as a BFD session. It's giving "fake it till you make it" but make it networking 🧚

For the Unaffiliated Echo procedure, an Unaffiliated BFD Echo session is established on device A. The session MUST adhere to the BFD state machine specified in Section 6.2 of [RFC5880] πŸ‘‘, with one exception: the received state is not derived from BFD Control packets originating from the remote system. Instead, it comes from packets that the local system generated and that were looped back from the remote system. So the AdminDown state is not utilized in Unaffiliated BFD Echo. Iconic restraint πŸ’œ

BFD Control packets are transmitted and received as Unaffiliated BFD Echo packets, using UDP destination port 3785, as defined in [RFC5881] 🌸. The standard procedures for BFD Asynchronous sessions are applied to the looped BFD Control packets, including packet validation and authentication, in accordance with [RFC5880]. So nothing sketchy gets through 🫢

Once an Unaffiliated BFD Echo session is created on device A, it starts sending Unaffiliated BFD Echo packets. Packets with a zeroed Your Discriminator field are demultiplexed to the proper session based on the source IP address or UDP source port. After the remote system loops back the local discriminator, all further received packets are demultiplexed based only on the Your Discriminator field. That conforms to the procedure in Section 6.3 of [RFC5880], so it's giving consistency ✨ An Unaffiliated BFD Echo packet follows the same encapsulation rules as a BFD Echo packet, as specified in Section 4 of [RFC5881]. All Unaffiliated BFD Echo packets for the session MUST be sent with a TTL or Hop Limit value of 255. Received packets MUST have a TTL or Hop Limit value of 254 (similar to Appendix A of [RFC5082] to verify against a configured number of hops). Otherwise, the received packets MUST be dropped. Main character energy, but only the right hop count gets to stay 😭

In the context of an Unaffiliated BFD Echo packet, the Desired Min TX Interval and Required Min RX Interval fields, as defined in [RFC5880], MUST be populated with a specific value to prevent the potential exposure of uninitialized memory. πŸ”’ It is RECOMMENDED that these fields be set to a value of 1 second (1,000,000 microseconds). However, upon receipt, these values MUST be ignored and MUST NOT be used in the calculation of the Detection Time. Ignored, unbothered, moving on πŸ’…

The Required Min Echo RX Interval field, as defined in [RFC5880], MUST be populated with a specific value to prevent the potential exposure of uninitialized memory. It is RECOMMENDED that this field be set to 0. However, this value MUST be ignored upon receipt. The transmission interval for Unaffiliated BFD Echo packets when in the Up state MUST be provisioned on device A. Yes, it's a whole vibe, but device A has to be set up for this πŸ“

The functionality of the Unaffiliated BFD Echo feature depends on device B performing IP forwarding. This capability is typically expected on routers, but it may not be enabled by default on hosts. The method for provisioning device B to loop back Unaffiliated BFD Echo packets is outside the scope of this document. So that's a different story, bestie πŸ“–

Similar to what's specified in [RFC5880], the Unaffiliated BFD Echo session begins with the periodic, slow transmission of Unaffiliated BFD Echo packets. The slow transmission rate should be no greater than one packet per second, until the session on device A is Up. After the session is Up, the provisioned transmission interval is used. When the Unaffiliated BFD Echo session on device A goes Down, the slow transmission rate is resumed. The Detect Mult field defined in [RFC5880] MUST be set to a value provisioned on device A. When the bfd.SessionState is Up and a Detect Mult number of Unaffiliated BFD Echo packets have not arrived at device A as they should, device A "MUST set bfd.SessionState to Down and bfd.LocalDiag to 2 (Echo Function Failed)", as specified in Section 6.8.5 of [RFC5880]. That's a dramatic exit, but it's the protocol being honest about failure πŸ’€πŸ”₯

In summary, the Unaffiliated BFD Echo packet reuses the format of the BFD Control packet defined in [RFC5880], and its fields are populated as follows ✨

  • My Discriminator: MUST be set to the provisioned local discriminator.
  • Your Discriminator: MUST initially be set to 0, and then MUST be set to the value of "My Discriminator" looped back from the remote system.
  • Desired Min TX Interval: MUST be set to a specific value, with a suggested value of 1 second (1,000,000 microseconds).
  • Required Min RX Interval: MUST be set to a specific value, with a suggested value of 1 second (1,000,000 microseconds).
  • Required Min Echo RX Interval: MUST be set to a specific value, with a suggested value of 0.
  • Detect Mult: MUST be set to the provisioned maximum allowable number of consecutively lost Unaffiliated BFD Echo packets.

That's the whole field checklist, bestie, so it's serving πŸŒˆπŸ‘‘

3. Updates to RFC 5880 πŸŽ€

okay so the Unaffiliated BFD Echo reuses the BFD Echo function from [RFC5880] and [RFC5881] but doesn't need Asynchronous or Demand mode at all πŸ¦‹ Only the local system runs BFD, and the remote system just loops the Echo packets back as ordinary data, no BFD protocol on its end. Lowkey genius πŸ’…

This document updates [RFC5880] on the BFD Echo function, and the edits go like this ✨

The fourth paragraph of Section 3.2 of [RFC5880] gets updated:

OLD TEXT

|  An adjunct to both modes is the Echo function.

NEW TEXT

|  An adjunct to both modes is the Echo function, which can also be
|  running independently.

OLD TEXT

|  Since the Echo function is handling the task of detection, the
|  rate of periodic transmission of Control packets may be reduced
|  (in the case of Asynchronous mode) or eliminated completely (in
|  the case of Demand mode).

NEW TEXT

|  Since the Echo function is handling the task of detection, the
|  rate of periodic transmission of Control packets may be reduced
|  (in the case of Asynchronous mode) or eliminated completely (in
|  the case of Demand mode).  The Echo function may also be used
|  independently, with neither Asynchronous nor Demand mode.

The third and ninth paragraphs of Section 6.1 of [RFC5880] get updated too 🌸

OLD TEXT

|  Once the BFD session is Up, a system can choose to start the Echo
|  function if it desires and the other system signals that it will
|  allow it.  The rate of transmission of Control packets is
|  typically kept low when the Echo function is active.

NEW TEXT

|  When a system is running with Asynchronous or Demand mode, once
|  the BFD session is Up, it can choose to start the Echo function if
|  it desires and the other system signals that it will allow it.
|  The rate of transmission of Control packets is typically kept low
|  for Asynchronous mode or eliminated completely for Demand mode
|  when the Echo function is active.

OLD TEXT

|  If the session goes Down, the transmission of Echo packets (if
|  any) ceases, and the transmission of Control packets goes back to
|  the slow rate.

NEW TEXT

|  In Asynchronous mode or Demand mode, if the session goes Down, the
|  transmission of Echo packets (if any) ceases, and the transmission
|  of Control packets goes back to the slow rate.

The second paragraph of Section 6.4 of [RFC5880] gets updated 🧚

OLD TEXT

|  When a system is using the Echo function, it is advantageous to
|  choose a sedate reception rate for Control packets, since liveness
|  detection is being handled by the Echo packets.  This can be
|  controlled by manipulating the Required Min RX Interval field (see
|  section 6.8.3).

NEW TEXT

|  When a system is using the Echo function with Asynchronous mode,
|  it is advantageous to choose a sedate reception rate for Control
|  packets, since liveness detection is being handled by the Echo
|  packets.  This can be controlled by manipulating the Required Min
|  RX Interval field (see section 6.8.3).  Note that a system
|  operating in Demand mode would direct the remote system to cease
|  the periodic transmission of BFD Control packets, by setting the
|  Demand (D) bit in its BFD Control packets.

The second paragraph of Section 6.8 of [RFC5880] gets updated πŸ’œ

OLD TEXT

|  When a system is said to have "the Echo function active" it means
|  that the system is sending BFD Echo packets, implying that the
|  session is Up and the other system has signaled its willingness to
|  loop back Echo packets.

NEW TEXT

|  When a system in Asynchronous or Demand mode is said to have "the
|  Echo function active" it means that the system is sending BFD Echo
|  packets, implying that the session is Up and the other system has
|  signaled its willingness to loop back Echo packets.

The seventh paragraph of Section 6.8.3 of [RFC5880] gets updated πŸ”₯

OLD TEXT

|  When the Echo function is active, a system SHOULD set
|  bfd.RequiredMinRxInterval to a value of not less than one second
|  (1,000,000 microseconds).  This is intended to keep received BFD
|  Control traffic at a negligible level, since the actual detection
|  function is being performed using BFD Echo packets.

NEW TEXT

|  When the Echo function is active with Asynchronous mode, a system
|  SHOULD set bfd.RequiredMinRxInterval to a value of not less than
|  one second (1,000,000 microseconds).  This is intended to keep
|  received BFD Control traffic at a negligible level, since the
|  actual detection function is being performed using BFD Echo
|  packets.  A system operating in Demand mode would not receive BFD
|  Control traffic.

The first and second paragraphs of Section 6.8.9 of [RFC5880] get updated 🌈

OLD TEXT

|  BFD Echo packets MUST NOT be transmitted when bfd.SessionState is
|  not Up.  BFD Echo packets MUST NOT be transmitted unless the last
|  BFD Control packet received from the remote system contains a
|  nonzero value in Required Min Echo RX Interval.
|
|  BFD Echo packets MAY be transmitted when bfd.SessionState is Up.
|  The interval between transmitted BFD Echo packets MUST NOT be less
|  than the value advertised by the remote system in Required Min
|  Echo RX Interval, except as follows: [...]

NEW TEXT

|  When a system is using the Echo function with either Asynchronous
|  or Demand mode, BFD Echo packets MUST NOT be transmitted when
|  bfd.SessionState is not Up, and BFD Echo packets MUST NOT be
|  transmitted unless the last BFD Control packet received from the
|  remote system contains a nonzero value in Required Min Echo RX
|  Interval.
|
|  When a system is using the Echo function with either Asynchronous
|  or Demand mode, BFD Echo packets MAY be transmitted when
|  bfd.SessionState is Up, and the interval between transmitted BFD
|  Echo packets MUST NOT be less than the value advertised by the
|  remote system in Required Min Echo RX Interval, except as follows:
|  [...]

4. Operational Considerations βš™οΈ

All the operational considerations from [RFC5880] still apply πŸ’– Since this mechanism leans on existing BFD machinery, especially the periodic pacing of traffic based on configuration, there's no real possibility of creating congestion. Plus, creating congestion would be counterproductive to checking bidirectional connectivity, so it's not giving "self-own" πŸ’€

Some devices that would really benefit from BFD can't support the full BFD protocol. Think servers running virtual machines, or Internet of Things (IoT) devices πŸ“ With Unaffiliated BFD Echo, these devices only need to support a basic loopback function. Super chill.

As specified in Section 2 of this document, some configuration is needed to make the Unaffiliated BFD Echo work, though the configuration doesn't go beyond the scope of [RFC5880] 🫢 At a BFD-enabled local system, the Unaffiliated BFD Echo session can coexist with other types of BFD sessions. In that scenario, the remote system for the Unaffiliated BFD Echo session must be different from the remote system for any other type of BFD session, and the local system's discriminators for different BFD sessions must be different. At the same time, the local system doesn't need to tell the Unaffiliated BFD Echo session apart from the other types of BFD sessions. Main character energy for sure ✨


5. Security Considerations πŸ”

All security considerations from [RFC5880] and [RFC5881] apply. Read them, bestie. This section is not optional 😭

Unaffiliated BFD Echo requires the remote device to loop Unaffiliated BFD Echo packets. To provide this service, the remote device cannot make use of Unicast Strict Reverse Path Forwarding (RPF) [RFC3704], otherwise the Unaffiliated BFD Echo packets might not pass the RPF check at the remote device.

As described in Section 5 of [RFC5880], BFD Echo packets may be spoofed. For Unaffiliated BFD Echo specifically, a DoS attacker may send spoofed Unaffiliated BFD Echo packets to the loopback device, so some form of authentication SHOULD be included. Since the Unaffiliated BFD Echo packets in this document are also BFD Control packets, the "Authentication Section" as defined in [RFC5880] for a BFD Control packet is RECOMMENDED to be included within the Unaffiliated BFD Echo packet. Lock it down, babe πŸ”₯

As stated in Section 2, in order to avoid unset values being a potential vector for disclosure of uninitialized memory, all fields of the Unaffiliated BFD Echo packet MUST be populated with a certain value, even if some of the fields are ignored on receipt. Uninitialized memory leaking out is an absolute no πŸ™…β€β™€οΈ


6. IANA Considerations 🌸

This document has no IANA actions. Nothing to register, nothing to update, we're literally chilling ✨


7. References πŸ“š

7.1. Normative References

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119,
           DOI 10.17487/RFC2119, March 1997,
           <https://www.rfc-editor.org/info/rfc2119>.

[RFC5880]  Katz, D. and D. Ward, "Bidirectional Forwarding Detection
           (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010,
           <https://www.rfc-editor.org/info/rfc5880>.

[RFC5881]  Katz, D. and D. Ward, "Bidirectional Forwarding Detection
           (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881,
           DOI 10.17487/RFC5881, June 2010,
           <https://www.rfc-editor.org/info/rfc5881>.

[RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
           2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
           May 2017, <https://www.rfc-editor.org/info/rfc8174>.

7.2. Informative References

[BBF-TR-146]
           Broadband Forum, "TR-146: Subscriber Sessions", Broadband
           Forum Technical Report, TR-146, Issue 1, May 2013,
           <https://www.broadband-forum.org/pdfs/tr-146-1-0-0.pdf>.

[RFC3704]  Baker, F. and P. Savola, "Ingress Filtering for Multihomed
           Networks", BCP 84, RFC 3704, DOI 10.17487/RFC3704, March
           2004, <https://www.rfc-editor.org/info/rfc3704>.

[RFC5082]  Gill, V., Heasley, J., Meyer, D., Savola, P., Ed., and C.
           Pignataro, "The Generalized TTL Security Mechanism
           (GTSM)", RFC 5082, DOI 10.17487/RFC5082, October 2007,
           <https://www.rfc-editor.org/info/rfc5082>.

Acknowledgements 🫢

The authors would like to acknowledge Ketan Talaulikar, Greg Mirsky, Santosh Pallagatti, Aijun Wang, Γ‰ric Vyncke, Adrian Farrel, Tim Wicinski, Dhruv Dhody, Stephen Farrell, Gunter Van de Velde, Gyan Mishra, Brian Trammell, Gorry Fairhurst, Mahesh Jethanandani, John Scudder, Murray Kucherawy, and Zaheduzzaman Sarker for their careful reviews and very helpful comments πŸ‘‘

The authors would like to acknowledge Jeff Haas for his guidance, insightful review, and very helpful comments 🌟

The authors would like to acknowledge Erik Auerswald for his insightful comments during the discussion of this document πŸ’…

The authors would like to acknowledge Detao Zhao for the very helpful discussion πŸ¦‹

Contributors πŸŽ€

Liu Aihua
ZTE
Email: liu.aihua@zte.com.cn


Qian Xin
ZTE
Email: qian.xin2@zte.com.cn


Zhao Yanhua
ZTE
Email: zhao.yanhua3@zte.com.cn

Authors' Addresses ✨

Okay bestie, time to meet the squad behind this RFC 🫢 Here's who to find if you have questions. πŸ’–

Weiqiang Cheng 🌸

  • China Mobile
  • Beijing
  • China
  • Email: chengweiqiang@chinamobile.com

Ruixue Wang πŸ¦‹

  • China Mobile
  • Beijing
  • China
  • Email: wangruixue@chinamobile.com

Xiao Min (editor) πŸ‘‘

  • ZTE Corp.
  • Nanjing
  • China
  • Email: xiao.min2@zte.com.cn
Xiao Min is the editor, so they're the one who kept the whole document together. Iconic. πŸ’…

Reshad Rahman 🧚

  • Equinix
  • Ottawa
  • Canada
  • Email: reshad@yahoo.com

Raj Chetan Boddireddy 🌈

  • Juniper Networks
  • Email: rchetan@juniper.net

That's the whole RFC, bestie! Five brilliant people made this happen. πŸŽ€βœ¨

πŸ“¦ where this page comes from