Bidirectional Forwarding Detection (BFD) Multipoint Active Tails
Extracted elements (26)
Scaling is a primary concern in multipoint BFD active tails, so the head must be in control of all timing aspects and BFD packets from tails to the head must not be synchronized. This prevents state explosion toward the head.
The Required Min RX Interval value received in a unicast BFD Control packet from the head always takes precedence over the value received in multipoint BFD Control packets, allowing per-tail packet rate control and eliminating the random transmission delay for faster failure reporting.
Three operational scenarios are defined — no head notification (m-poll), head notification with multipoint polling, and composite polling (combining multipoint and unicast polling) — providing a spectrum of tradeoffs between complexity, reliability, and scaling.
Since the normal BFD three-way handshake is not used in this application, a tail transitioning from Up to Down and back to Up again may not be reliably detected at the head.
A multipoint Poll MUST NOT be sent more often than the regular multipoint BFD Control packet. The Detection Time MUST be greater than the round-trip time of BFD Control packets from the head to the tail and back.
A system MUST NOT periodically transmit BFD Control packets if bfd.SessionType is MultipointClient and a Poll Sequence is not being transmitted.
A system MUST NOT set the Demand (D) bit if bfd.SessionType is MultipointClient unless bfd.DemandMode is 1, bfd.SessionState is Up, and bfd.RemoteSessionState is Up.
bfd.DemandMode MUST be initialized to 1 for session type MultipointClient.
bfd.SilentTail MUST be initialized based on configuration with a default value of 1, and SHOULD NOT be modified after the MultipointTail session has been created.
For session type MultipointClient, bfd.DetectMult MUST always match the value of bfd.DetectMult in the associated MultipointHead session.
For session type MultipointClient, bfd.LocalDiscr MUST always match the value of bfd.LocalDiscr in the associated MultipointHead session.
If a BFD Control packet is received with the Poll (P) bit set to 1 and the Multipoint (M) bit is also set, the responding packet transmission MUST be delayed by a random amount of time between zero and (0.9 * bfd.RemoteMinRxInterval); otherwise it MUST be transmitted as soon as practicable.
Implementations that create MultipointClient sessions dynamically upon receipt of BFD Control packets from tails MUST implement protective measures to prevent unbounded session creation.
In head-notification mode (Section 5.2), if bfd.SessionType is MultipointTail, bfd.SilentTail MUST be set to zero; if bfd.SessionType is MultipointHead or MultipointClient, bfd.ReportTailDown MUST be set to 1; and the head MUST set bfd.RequiredMinRxInterval to nonzero.
In no-head-notification mode (Section 5.1), bfd.SilentTail MUST be set to 1 on MultipointTail sessions, and bfd.ReportTailDown MUST be set to zero on MultipointHead or MultipointClient sessions.
MultipointClient sessions MUST NOT transmit periodic BFD Control packets other than Poll Sequences, since periodic transmission is always done by the MultipointHead session.
The head MUST demultiplex incoming BFD Control packets from tails based on the source address and the value of Your Discriminator together, since the same Your Discriminator value is received from all tails on the multicast tree.
The interval between transmitted packets in a unicast Poll Sequence MUST be calculated as specified in RFC 5880 — the greater of bfd.DesiredMinTxInterval and bfd.RemoteMinRxInterval.
When bfd.SessionType is MultipointTail and periodic BFD Control packet transmission is just starting, the first packet MUST be delayed by a random amount of time between zero and (0.9 * bfd.RemoteMinRxInterval) to avoid synchronization of tail responses.
When the head sends unicast BFD Control packets to a tail from a MultipointClient session, the tail MUST demultiplex the packet based solely on Your Discriminator.
bfd.ReportTailDown is a new state variable on the head. When set to 1, tails will notify the head via periodic BFD Control packets when they detect session failure. Default value MUST be zero. Only pertinent when bfd.SessionType is MultipointHead or MultipointClient.
bfd.SilentTail is a new state variable that, when set to 1, prevents a tail from sending any BFD Control packets to the head even when the head is soliciting traffic. Default value MUST be 1. Only pertinent when bfd.SessionType is MultipointTail.
bfd.UnicastRcvd is a new state variable on a tail, set to 1 when the tail has received a unicast BFD Control packet from the head while in Up state. MUST be reset to zero when transitioning out of Up state, and MUST be initialized to zero.
MultipointClient is a new session type on the head that tracks the state of an individual tail when desirable. All MultipointClient sessions for tails on a particular multipoint path are associated with the corresponding MultipointHead session.
Dynamic creation of MultipointClient sessions on receipt of BFD packets from tails creates a resource exhaustion attack surface. Implementations should alarm when session count exceeds the expected number of tails and enforce a reasonable upper bound on the number of sessions, potentially computed from the expected number of multicast streams.
The MultipointClient session state machine is the same as for MultipointHead (administratively driven transitions only). MultipointClient sessions SHOULD be destroyed when the MultipointHead session enters Down/AdminDown state. Sessions MAY be destroyed or maintained with a Poll Sequence upon receipt of unsolicited Down/AdminDown from a tail.