Fact-checked by Grok 2 weeks ago

Bidirectional Forwarding Detection

Bidirectional Forwarding Detection (BFD) is a network designed to rapidly detect faults in the bidirectional between two forwarding engines, enabling quick in routing and forwarding systems. Developed by the (IETF), BFD operates independently of underlying media types, data protocols, and routing protocols, making it versatile for use across various network environments such as physical links, virtual circuits, tunnels, and multi-hop routed paths. The protocol achieves low-latency failure detection—potentially in milliseconds—through the exchange of lightweight BFD control packets, which allow systems to monitor path integrity without significant overhead. BFD supports two primary operational modes: asynchronous mode, where systems periodically transmit control packets to each other, and demand mode, which reduces packet overhead by relying on an independent connectivity verification mechanism. An optional echo function further enhances testing by looping packets back through the forwarding to verify its operational . Sessions are established using ports 3784 for control packets and 4784 for packets, with detection times configurable via transmit/receive intervals and a detection multiplier to balance speed and reliability. Standardized in 5880 as a Proposed Standard in June 2010, BFD has been extended in subsequent to support specific applications, including single-hop paths (RFC 5881), multi-hop paths ( 5883), and encapsulation in various tunneling protocols.

Overview

Definition and Purpose

Bidirectional Forwarding Detection (BFD) is a -based protocol designed to detect faults in the bidirectional forwarding path between two network devices, such as routers or switches. For single-hop sessions, it utilizes UDP 3784 for control packets and 3785 for echo packets; multi-hop control packets use 4784. This protocol enables rapid identification of issues in the path between forwarding engines. The primary purpose of BFD is to provide low-overhead, short-duration failure detection, typically achieving sub-second detection times to facilitate fast in routing protocols. By operating independently of specific media types, encapsulations, or network topologies, BFD ensures versatile applicability across diverse environments without reliance on underlying data or routing protocols. This independence allows BFD to enhance network reliability by decoupling fault detection from slower control-plane mechanisms. Unlike traditional hello mechanisms in routing protocols, BFD functions at the forwarding plane (data plane), enabling quicker and more efficient path validation. BFD sessions are inherently lightweight, requiring minimal and processing resources, which makes them suitable for high-scale deployments. These sessions can operate over various Layer 2 and Layer 3 transports, including , MPLS, and Ethernet. BFD supports high-level detection modes such as asynchronous, demand, and echo for flexible fault monitoring.

Key Features

BFD operates independently of any specific media types, data protocols, or routing protocols, enabling fault detection across diverse environments such as Ethernet, /SDH, and various topologies including point-to-point and multi-hop paths. This protocol-agnostic design allows BFD to run atop , , or tunnel encapsulations without modification to the underlying forwarding engines. The protocol exhibits high scalability, supporting a very large number of sessions—potentially hundreds or thousands—per with minimal CPU and overhead, achieved through simple periodic hello messages. For instance, achieving a 50-millisecond detection time requires only about 60 packets per second, consuming roughly 48 kbps of , which underscores its efficiency in resource-constrained environments. Unlike unidirectional probing mechanisms, BFD ensures bidirectional verification by confirming two-way communication between systems before declaring a path operational, thereby providing robust fault detection for the full forwarding path. Detection times in BFD are highly configurable to balance speed and resource utilization, with transmit and receive intervals tunable to sub-50-millisecond latencies while keeping overhead low. This flexibility is facilitated by a multiplier mechanism, where the detection time equals the negotiated minimum receive interval multiplied by the detect multiplier value; for example, a multiplier of 3 triggers a down state after three consecutive missed packets.

Protocol Mechanics

Session Establishment and States

Bidirectional Forwarding Detection (BFD) sessions are established through the exchange of BFD Control packets between two systems, with at least one system required to be in the Active mode to initiate the process. This establishment lacks an explicit discovery mechanism, relying instead on application-specific methods to identify peers, and supports both single-hop configurations for adjacent systems and multi-hop configurations across multiple intermediate hops or insecure tunnels. During this phase, peers negotiate key parameters such as transmit and receive intervals by including the Desired Min TX Interval and Required Min RX Interval in packets, allowing each direction to operate independently based on the higher of the proposed values. The BFD protocol employs a four-state to manage session lifecycle: AdminDown, Down, , and Up. The AdminDown state indicates the session is administratively disabled, preventing any packet transmission or reception. The Down state represents the initial or non-operational condition, where no valid packets have been received from the peer. The state occurs when packets are received from the peer but bidirectional communication is not yet confirmed, signaling the start of a three-way . Finally, the Up state denotes a fully operational session with ongoing bidirectional exchange of packets. State transitions are driven by the receipt or absence of packets, following a deterministic three-way process. For instance, a session moves from Down to upon receiving a packet indicating the peer's Down state; from to Up when the peer echoes the local state; and from Up to Down if the Detection Time expires due to missed packets, such as three consecutive failures when the Detect Multiplier is set to three. Other transitions include reverting to Down from if no further packets arrive, ensuring rapid detection of issues. These changes are influenced by timers like the Detection Time, which is the product of the negotiated receive interval and the Detect Multiplier. Sessions are uniquely identified using 32-bit discriminators: the My Discriminator field, a locally generated unique value, and the Your Discriminator field, which echoes the peer's My Discriminator. This pairing allows demultiplexing of multiple concurrent sessions, supporting up to 2^32 unique sessions per system. Initially, before discriminators are exchanged, sessions rely on application-layer or transport-specific identifiers. Upon detecting a fault, such as a transition to the Down state, BFD signals the client protocols (e.g., routing protocols) through an (), including a diagnostic code to indicate the failure reason, like Control Detection Time Expired. This notification enables rapid reconvergence by triggering actions such as route withdrawal or in the dependent protocols.
Current StateEventNext State
DownReceive packet with peer's state Down
Receive packet with peer's state Up
UpDetection Time expires (e.g., 3 missed packets)Down
AnyAdministrative disableAdminDown
AdminDownAdministrative enableDown

Detection Modes

Bidirectional Forwarding Detection (BFD) operates in three primary detection modes to verify path integrity between forwarding engines: asynchronous, , and . These modes determine how and packets are exchanged post-session establishment, with the session typically required to be in the Up state for active detection. In asynchronous mode, the default operational mode, BFD peers continuously exchange BFD packets at negotiated intervals to monitor bidirectional connectivity. Each peer detects a if it misses a predefined number of consecutive packets from the remote peer, triggering a session down event. This mode ensures proactive fault detection without external triggers, making it suitable for most environments requiring ongoing path verification. Demand mode builds on asynchronous mode for session establishment but transitions to a maintenance phase where periodic Control packets are suppressed to reduce overhead. Connectivity is verified only upon demand, such as during periodic polling or specific events, by sending a sequence of Control packets with the Poll bit set; failure to receive responses within the detection window declares the session down. The Demand bit in Control packets signals entry into this mode, though it is less commonly used due to the need for explicit polling mechanisms to maintain reliability. Echo mode provides a supplementary diagnostic where one peer sends BFD Echo packets, which the remote peer loops back at the forwarding plane level without processing, testing the data path directly. Echo packets are encapsulated in with destination port 3785 and require underlying connectivity between peers. This mode enables faster failure detection, often sub-50 ms, by leveraging , but it is diagnostic-only and not intended for standalone ongoing detection; instead, it complements asynchronous or demand modes by allowing reduced packet rates. Echo mode is enabled via the Required Min Echo RX Interval field in packets, set to a nonzero value by the looping peer. Mode selection occurs independently in each direction during session negotiation through flags and fields in BFD packets, such as the bit for and the Required Min Echo RX Interval for echo support. Asynchronous is preferred for general-purpose, continuous detection due to its simplicity and reliability, while echo is selected for scenarios demanding sub-50 ms fault isolation where hardware looping is supported.

Packet Format and Timers

The BFD Control packet consists of a fixed 24-octet header, optionally followed by an Authentication Section, and is transmitted in an encapsulation appropriate to the environment, such as over IPv4 or IPv6. The header fields are bit-packed as follows, with the first two octets containing , diagnostic, , and bits; subsequent fields specify session identifiers, intervals, and detection parameters.
FieldSize (bits)Description
Version (Vers)3Protocol version number, set to 1.
Diagnostic (Diag)5Indicates the local diagnostic code for the last state change (e.g., 0 for no diagnostic, 1 for control detection time expired).
State (Sta)2Current session state (0 = AdminDown, 1 = Down, 2 = Init, 3 = Up).
Poll (P)1Set to 1 to request verification of connectivity and parameters.
Final (F)1Set to 1 in response to a Poll bit, acknowledging the update.
Control Plane Independent (C)1Set to 1 if the session operates independently of the control plane.
Authentication Present (A)1Set to 1 if an Authentication Section follows the header.
Demand (D)1Set to 1 if operating in Demand mode (no periodic transmission).
Multipoint (M)1Reserved; must be 0 (for future multipoint use).
Detect Mult8Detection multiplier (non-zero integer, typically 3-5).
Length8Total length of the packet in octets, including Authentication Section if present (minimum 24).
My Discriminator32Unique local session identifier (non-zero when session is active).
Your Discriminator32Remote system's session discriminator (0 during initialization).
Desired Min TX Interval32Minimum transmission interval desired by sender, in microseconds (0 reserved for Demand mode).
Required Min RX Interval32Minimum receive interval supported by sender, in microseconds (0 means no periodic packets expected).
Required Min Echo RX Interval32Minimum echo packet receive interval supported by sender, in microseconds (0 means no echo support).
The BFD Echo packet format is simpler and defined locally by the transmitting system, consisting of a sufficient to demultiplex the looped-back packet to the correct session (e.g., including the remote discriminator); it is not processed by the receiver beyond forwarding. packets are looped back via the data plane without interpretation, providing a test of the forwarding path. BFD timer mechanisms rely on three key parameters exchanged in packets to negotiate rates and thresholds. The Desired Min TX Interval specifies the sender's preferred minimum time between transmitted packets, while the Required Min RX Interval indicates the minimum interval the sender can reliably receive packets; the actual interval used by each is the maximum of its own Desired Min TX Interval and the peer's Required Min RX Interval, ensuring compatibility. The Detect Multiplier is a small integer (e.g., 3-5) that sets the number of consecutive missing packets tolerated before declaring a . These timers asynchronous , where packets are exchanged periodically for bidirectional detection. The detection time, which determines when a session is considered failed due to missed packets, is calculated independently in each direction as the product of the local Detect Multiplier and the remote system's interval. In Asynchronous or Demand mode using packets, this is formally: \text{Detection Time} = \text{Detect Mult (local)} \times \text{Desired Min TX Interval (remote)} where the remote's Desired Min TX Interval has been adjusted to the negotiated actual interval (maximum of local Required Min RX and remote Desired Min TX). For Echo mode, the formula substitutes the remote's Required Min Echo RX Interval. If no valid packet arrives within this time, the session transitions to Down state with diagnostic code 1 ( Detection Time Expired). For example, with a remote Desired Min TX Interval of 1,000,000 microseconds (1 ) and local Detect Mult of 3, the Detection Time is 3,000,000 microseconds (3 ), allowing failure detection in under 10 bidirectionally for sub-millisecond intervals. Typical packet occurs every 1-999 to balance detection speed and overhead. For multihop paths over or , BFD Control and Echo packets are encapsulated in with destination port 3784 for Control and 3785 for Echo, using 255 and a TTL Security Hop Limit of 254 to mitigate spoofing.

Applications

Integration with Routing Protocols

Bidirectional Forwarding Detection (BFD) integrates with various routing protocols to provide rapid failure detection, enabling faster convergence than native hello mechanisms. Client protocols such as OSPF, , BGP, EIGRP, and PIM register with BFD to monitor forwarding paths, where a BFD session failure prompts immediate actions like neighbor invalidation or route withdrawal, typically reducing detection times from seconds to sub-second intervals. This coupling is achieved through protocol-specific adaptations that leverage BFD's low-overhead hellos without altering the core routing logic. In OSPF, BFD monitors neighbor adjacencies on point-to-point links, where a session transitioning to the Down state triggers immediate neighbor invalidation and adjacency teardown, bypassing the protocol's default hello and dead timers (typically 10 seconds and 40 seconds, respectively) to achieve detection in milliseconds. This integration has been supported in OSPF implementations since , particularly for accelerating on dedicated links without relying on slower detection. IS-IS employs BFD similarly to OSPF for detecting link failures in level-1 and level-2 adjacencies; upon BFD session failure, IS-IS invalidates the adjacency and floods link-state PDUs (LSPs) rapidly, enhancing beyond the protocol's native 1-second minimum hello interval. The BFD-enabled TLV in IS-IS hello PDUs signals support for this fast detection, ensuring timely topology updates in large-scale networks. For BGP, whether internal (iBGP) or external (eBGP), BFD verifies the forwarding path integrity beyond mere control-plane keepalives; a Down state in the BFD session causes immediate route withdrawal and session teardown (unless graceful restart is active), providing sub-second failure detection for peer connectivity over single- or multi-hop paths. This is particularly valuable in inter-domain routing where BGP's default hold timer (180 seconds) is insufficient for high-availability scenarios. EIGRP uses BFD to accelerate and detection across its reliable ; when enabled, BFD session loss invalidates EIGRP neighbors, triggering route recomputation and reducing reliance on the protocol's 15-second default hold time. Similarly, PIM integrates BFD for monitoring multicast tree health, where multipoint BFD sessions detect upstream or downstream in sparse-mode trees, enabling fast and prune/graft actions per the protocol's join/prune intervals. Client protocols register with BFD through implementation-specific mechanisms, such as an adaptation layer that supplies session parameters like discriminators and timers, as outlined in the generic BFD . For instance, OSPF registers BFD sessions for point-to-point interfaces to bidirectional forwarding independently of its hello process. To prevent interference, configurations typically set separate timers for BFD (e.g., 50 ms intervals) and the routing protocol's hellos, ensuring BFD operates as a lightweight supplement without overwhelming the .

Use in MPLS and Other Technologies

Bidirectional Forwarding Detection (BFD) plays a critical role in (MPLS) environments by enabling rapid detection of forwarding failures along Label Switched Paths (LSPs). As defined in RFC 5884, BFD is applied to MPLS LSPs to monitor data plane integrity, allowing for sub-second failure detection in traffic-engineered () tunnels and Virtual Private Networks (VPNs). In these setups, BFD packets are encapsulated within an MPLS label stack that corresponds to the Forwarding Equivalence Class (FEC) of the associated LSP, ensuring that the protocol verifies the actual forwarding path rather than just connectivity. Additionally, for in MPLS-based Layer 2 VPNs, BFD employs PW-ACH (Pseudowire Associated Channel Header) encapsulation without /UDP headers, as specified in RFC 5885, to perform Virtual Circuit Connectivity Verification (VCCV) and detect faults efficiently. Beyond MPLS core functions, BFD validates next-hop reachability for static routes, enhancing reliability in environments where is not used. By associating a static route with a BFD session, the protocol monitors the liveness of the specified next-hop , withdrawing the route if a is detected, which is supported across major implementations for single-hop IPv4 scenarios. Similarly, in (VRRP) deployments, BFD enables fast active-router failover by tracking the forwarding path between VRRP peers, allowing switchover within milliseconds upon session , as integrated in vendor-specific configurations for high-availability gateways. In () and overlay networks, BFD monitors underlay paths to support dynamic path selection and , ensuring overlay routing decisions reflect real-time underlay health. For instance, in Cisco's Viptela-based , BFD sessions underpin the Overlay Management Protocol (OMP) by verifying transport locator (TLOC) connectivity, suspending routes if the underlay fails and enabling automatic rerouting over alternative paths. This integration provides low-overhead failure detection for distributed overlays, maintaining service continuity in multi-cloud or branch-to-branch scenarios. BFD extends to Segment Routing (SR) and Ethernet VPN (EVPN) technologies, where it validates segment lists and monitors fabric health in overlay fabrics. In SR-MPLS, as outlined in draft-ietf-spring-bfd, BFD sessions are bootstrapped over segment-routed tunnels using LSP Ping for initial discovery, then operate to detect data plane faults in explicit segment paths, supporting both single-hop and multi-hop modes for SR Policy monitoring. For EVPN over VXLAN, BFD ensures underlay robustness in data center fabrics by detecting VTEP (VXLAN Tunnel Endpoint) connectivity issues, triggering rapid failover in multi-homed EVPN instances and maintaining symmetric Integrated Routing and Bridging (IRB) paths. MPLS environments also support point-to-multipoint BFD sessions, particularly for multipoint networks like MVPNs or P2MP LSPs, where a single root initiates sessions to multiple leaves for efficient failure detection across tree topologies, as detailed in RFC 9780. Post-2020, BFD adoption has grown in backhaul networks for low-latency detection in transport segments, integrating with /MPLS fronthaul and backhaul to meet stringent reliability requirements. However, limitations exist in these contexts; echo mode, which relies on loopback packets for path validation, is less effective over tunnels like MPLS LSPs due to challenges in ensuring proper return paths without additional configuration, often requiring fallback to asynchronous mode for reliable operation in encapsulated environments.

Standardization and Development

Historical Development

The Bidirectional Forwarding Detection (BFD) protocol originated from the need for a standardized, low-overhead mechanism to detect forwarding path failures rapidly in IP and MPLS networks, particularly as deployments of Multiprotocol Label Switching (MPLS) and Border Gateway Protocol (BGP) expanded in the early 2000s, requiring sub-second convergence times to meet carrier-grade reliability demands. In response, the Internet Engineering Task Force (IETF) chartered the BFD Working Group on May 27, 2004, to develop a uniform liveness detection protocol independent of underlying media, data protocols, and routing protocols, aiming to consolidate disparate vendor-specific techniques into an interoperable solution. Early development focused on defining the core through collaborative drafts led by major vendors. Initial proposals emerged in , with drafts such as "BFD for MPLS Label Switched Paths" co-authored by engineers from and Cisco Systems, addressing single-hop and multi-hop detection scenarios to enable fast failure signaling over MPLS infrastructures. By 2006, foundational documents like "Bidirectional Forwarding Detection" (draft-ietf-bfd-base) outlined the 's lightweight hello-based operation, emphasizing minimal CPU and bandwidth usage for scalability in large networks. These efforts were driven by the limitations of existing routing , such as OSPF's default 40-second dead interval, which hindered rapid ; BFD aimed to reduce detection times to milliseconds, as demonstrated in early interoperability trials achieving 100 ms failure detection by 2008. Key milestones marked BFD's maturation and adoption. The core specifications were published as RFC 5880 (Bidirectional Forwarding Detection), RFC 5881 (BFD for IPv4 and IPv6 (Single Hop)), and related encapsulations in 2010, establishing the protocol as a Proposed Standard and enabling widespread implementation. Vendor support accelerated thereafter, with Cisco integrating BFD into IOS Release 12.0S by around 2007-2008 for platforms like the 12000 series routers, and Juniper providing similar capabilities in Junos OS, facilitating sub-second failover in production BGP and IGP environments. In 2016, the introduction of Seamless BFD (S-BFD) via RFC 7880 addressed overhead concerns in massive-scale networks by decoupling control and echo paths, reducing session setup complexity. BFD's evolution was influenced by carrier requirements for enhanced reliability in emerging technologies, including Ethernet Operations, Administration, and Maintenance (OAM) under IEEE 802.1ag and MPLS Transport Profile (MPLS-TP) for connection-oriented packet transport. By the 2020s, S-BFD saw broader adoption in Segment Routing (SR) deployments for simplified path validation and in 5G fronthaul networks to ensure ultra-low latency fault detection, aligning with the shift toward scalable, source-routed architectures.

Key RFCs and Standards

The Bidirectional Forwarding Detection (BFD) protocol is primarily defined through a series of Internet Engineering Task Force (IETF) Request for Comments (RFCs) on the Standards Track, which establish its core functionality, encapsulation methods, and extensions. The foundational document, RFC 5880 published in June 2010, specifies the base BFD protocol, including session establishment mechanics, state management (such as Up, Down, and AdminDown), detection timers, and its generic applicability to detect faults in bidirectional paths between forwarding engines. This RFC serves as the prerequisite for all subsequent BFD specifications, providing the common framework for control packets, diagnostics, and interoperability. Complementing the base protocol, RFC 5881 (June 2010) details the use of BFD for single-hop sessions over and networks, mandating port 3784 for control packets and port 3785 for echo packets, with an IP time-to-live () value of 255 to ensure direct neighbor detection. For scenarios involving routed paths, RFC 5883 (June 2010) defines multi-hop BFD, adapting the protocol for longer distances by setting the IP to 254 and allowing sessions across multiple intermediate hops without assuming adjacency. These two encapsulation RFCs depend directly on RFC 5880 for protocol state handling and packet formats. Further extensions address specific applications and optimizations. RFC 5882 (June 2010) outlines the generic application of BFD to various client protocols, enabling uniform fault detection across diverse network elements. RFC 5884 (June 2010) integrates BFD with (MPLS) Label Switched Paths (LSPs), specifying label allocation and echo modes for fast failure detection in MPLS environments. To enhance , particularly in large-scale networks, RFC 7880 (July 2016) introduces Seamless BFD (S-BFD), which reduces overhead by using shorter discriminators and optional sub-protocols, building on RFC 5880 while allowing sessions without full control headers in every packet. An informational RFC 7492 (April 2015) analyzes the security of BFD according to the Keying and Authentication for Routing Protocols (KARP) design guidelines. More recently, RFC 9764 (April 2025) specifies the encapsulation of BFD in large packets to verify the ability to carry payloads of specific sizes, aiding . , RFC 9747 (March 2025) for unaffiliated BFD echo mechanisms, and RFC 9780 (May 2025) for multipoint networks. All listed RFCs are Internet Standards Track documents, promoting widespread adoption and interoperability. For network management, RFC 7331 (September 2014) defines the BFD Management Information Base (MIB) module for Simple Network Management Protocol (SNMP), allowing monitoring of session states, timers, and statistics. The cluster of core RFCs published in 2010 represented a key maturation point in BFD's standardization, solidifying its role in rapid network fault detection.

References

  1. [1]
  2. [2]
  3. [3]
  4. [4]
    Bidirectional Forwarding Detection - Cisco
    BFD is a detection protocol designed to provide fast forwarding path failure detection times for all media types, encapsulations, topologies, and routing ...
  5. [5]
    RFC 7492 - Analysis of Bidirectional Forwarding Detection (BFD ...
    This document analyzes the Bidirectional Forwarding Detection (BFD) protocol according to the guidelines set forth in Section 4.2 of RFC 6518.
  6. [6]
  7. [7]
  8. [8]
  9. [9]
  10. [10]
  11. [11]
  12. [12]
  13. [13]
  14. [14]
  15. [15]
  16. [16]
  17. [17]
    RFC 5882: Generic Application of Bidirectional Forwarding ...
    This document describes the generic application of the Bidirectional Forwarding Detection (BFD) protocol.
  18. [18]
  19. [19]
    RFC 6213 - IS-IS BFD-Enabled TLV - IETF Datatracker
    This document describes a type-length-value (TLV) for use in the IS-IS routing protocol that allows for the proper use of the Bidirectional Forwarding ...
  20. [20]
  21. [21]
    IP Routing BFD Configuration Guide, Cisco IOS Release 15E
    Sep 5, 2013 · The BFD-EIGRP Support feature configures Bidirectional Forwarding Detection (BFD) feature for Enhanced Interior Gateway Routing Protocol (EIGRP)
  22. [22]
    RFC 9186 - Fast Failover in Protocol Independent Multicast
    RFC 9186. Fast Failover in Protocol Independent Multicast - Sparse Mode (PIM-SM) Using Bidirectional Forwarding Detection (BFD) for Multipoint Networks.Table of Contents · Introduction · BFD Discriminator PIM Hello...Missing: integration | Show results with:integration
  23. [23]
  24. [24]
    Bidirectional Forwarding Detection - IETF Datatracker
    The BFD Working Group is chartered to standardize and support the bidirectional forwarding detection protocol (BFD) and its extensions. A
  25. [25]
    Bidirectional Forwarding Detection (bfd) - IETF Datatracker
    Group history ; 2024-10-25, Cindy Morgan, Added milestone "Provide a Meticulous Keyed mode for BFD authentication.", due 2025-06-30, from approved charter ; 2024- ...
  26. [26]
    RFC 5880 - Bidirectional Forwarding Detection (BFD)
    This document describes a protocol intended to detect faults in the bidirectional path between two forwarding engines.
  27. [27]
    Understanding How BFD Detects Network Failures | Junos OS
    This topic provides an overview of the Bidirectional Forwarding Detection (BFD) protocol and the different types of BFD sessions.
  28. [28]
  29. [29]
    [PDF] 5G Fronthaul Network Using Seamless MPLS Segment Routing ...
    Jun 5, 2025 · This document provides a Juniper Validated Design (JVD) for a 5G Fronthaul network using Seamless. Segment Routing Multiprotocol Label Switching ...Missing: adoption | Show results with:adoption