Encapsulation for Bit Index Explicit Replication (BIER) in MPLS and Non-MPLS Networks
Extracted elements (27)
In MPLS networks the BIER-MPLS label performs the role of the BIFT-id; it is locally significant and may be swapped at each hop (as with normal MPLS). In non-MPLS networks the BIFT-id is domain-wide unique and does not change as the packet traverses the domain.
The BSL field in the BIER header is present solely for offline tools (e.g., LAN analyzers); BFRs MUST infer the BitString length from the BIFT-id, not from this field. This prevents misforwarding due to a mismatch between the header field and the label binding.
The non-MPLS BIER encapsulation uses a distinct Ethertype (0xAB37) rather than the MPLS Ethertype (0x8847) to allow non-MPLS BIER to coexist with non-BIER MPLS in the same deployment without BIFT-id values conflicting with MPLS label values.
If the BIER payload is an MPLS packet with an upstream-assigned label at the top, that label is interpreted in the context of <BFIR-id, sub-domain-id>; the sub-domain-id must be inferred from the BIFT-id since it is not carried explicitly in the BIER header.
A BFR MUST infer the BitString length from the BIFT-id and MUST NOT infer it from the BSL field value. The BSL field is present only to enable offline tools such as LAN analyzers to parse the header.
Any MPLS label stack entries immediately preceding the BIER encapsulation MUST have the S bit set to 0; the BIER encapsulation's initial four octets MUST have the S bit set to 1, indicating the bottom of the MPLS label stack.
If a BFIR encapsulates MPLS packets that have entropy labels, it MUST ensure that two packets with the same MPLS entropy label also have the same value in the BIER entropy field.
In non-MPLS networks, the BIFT-id MUST be assigned for every <SD, SI, BSL> combination and is domain-wide unique (unlike MPLS where it is locally significant and may change hop-by-hop).
Penultimate hop popping MUST NOT be applied to a BIER-MPLS label, since that label also serves as the first four octets of the BIER encapsulation header.
The BSL field MUST NOT be set to any value other than the seven defined values (1–7). A received packet with an unexpected BSL value SHOULD be discarded and an error logged.
The Ver field MUST be 0 (this document specifies version 0). If a BFR receives a BIER packet with an unsupported version, it MUST discard the packet and log an error. The value 0xF is reserved for experimental use and MUST NOT be assigned by IETF or IANA.
When a BIER packet is forwarded, the outgoing BIER-MPLS label MUST have a TTL value one less than the packet's incoming TTL. If the incoming TTL is 0, or if TTL is 1 and the BitString has bits set for BFRs other than the current one, the packet is expired and SHOULD be passed to an error-handling procedure.
When further encapsulating a BIER packet in MPLS networks, the outer encapsulation's next-protocol codepoint for MPLS MUST be used, specifically the codepoint for 'MPLS with downstream-assigned label' (e.g., Ethertype 0x8847 for Ethernet).
When further encapsulating a non-MPLS BIER packet, the outer encapsulation's next-protocol codepoint MUST be set to a value meaning 'non-MPLS BIER' and MUST NOT use an MPLS codepoint. For Ethernet, the Ethertype MUST NOT be 0x8847 or 0x8848; IEEE-assigned Ethertype 0xAB37 MUST be used.
At an intermediate BFR processing an MPLS BIER packet, when a BIER-MPLS label rises to the top of the stack, the BFR infers BSL, SI, and SD from the label, then follows RFC 8279 forwarding procedures, swapping the label to the neighbor's advertised BIER-MPLS label for the same <SD, SI, BSL> with TTL decremented by one.
BIER-MPLS labels are locally significant downstream-assigned MPLS labels, each binding to a specific <SD, SI, BSL> triple. A BFR advertises one label per SI per BSL per SD, potentially as a contiguous label range, via IGP or BGP extensions.
The BIER encapsulation procedure at a BFIR involves: determining the Proto field and destination BFERs from the multicast flow overlay, converting BFR-ids to SI:BitString format, making one copy per distinct SI, and prepending a BIER header with the appropriate BIFT-id or BIER-MPLS label.
The Nibble field (4 bits) in MPLS networks MUST be set to binary 0101 to prevent MPLS ECMP logic from confusing the remainder of the BIER header with an IP or pseudowire header. In non-MPLS networks it SHOULD be set to 0000 but MUST be ignored on reception.
IANA created the 'BIER Next Protocol Identifiers' registry with registration policy 'IETF Review'. Initial values: 0=Reserved, 1=MPLS downstream-assigned, 2=MPLS upstream-assigned, 3=Ethernet, 4=IPv4, 5=OAM, 6=IPv6, 63=Reserved.
BIER-encapsulated packets should not be accepted from untrusted interfaces or tunnels. When packets must be accepted from systems not controlled by the operator (e.g., VMs in a data center), the encapsulation provides no mechanism to verify that the source is legitimate, that the BFIR-id is authentic, or that the BitString is authorized.
The BIER encapsulation provides no cryptographic integrity protection; unauthorized modifications to the BIER header are likely to go undetected and may cause packets to be lost, stolen, or misdelivered. Layer 2 encryption can protect packets in transit between adjacent BFRs, but a compromised BFR cannot be prevented from making illegitimate modifications.
The BFIR-id field is 16 bits and encodes the BFR-id of the ingress router (BFIR) in the sub-domain to which the packet has been assigned, as an unsigned integer in the range [1, 65535].
The BIER header consists of four 32-bit rows: (1) BIFT-id (20 bits), TC (3 bits), S bit (1 bit), TTL (8 bits); (2) Nibble (4 bits), Ver (4 bits), BSL (4 bits), Entropy (20 bits); (3) OAM (2 bits), Rsv (2 bits), DSCP (6 bits), Proto (6 bits), BFIR-id (16 bits); followed by the BitString of variable length.
The BIFT-id field is 20 bits wide and identifies a particular Bit Index Forwarding Table (BIFT). In MPLS networks it carries a locally significant downstream-assigned MPLS label; in non-MPLS networks it is a domain-wide unique identifier for a specific <SD, SI, BSL> triple.
The BSL field is 4 bits and encodes the BitString length as log2(k)-5, where k is the length in bits. Valid values are 1 (64 bits) through 7 (4096 bits); the default BitStringLength is 256 bits.
The Entropy field is 20 bits and carries a value used for equal-cost load balancing. The BIER forwarding process MUST choose the same path for any two packets with the same entropy value and the same BitString.
The Proto (Next Protocol) field is 6 bits and identifies the type of payload immediately following the BIER header. Values are drawn from the IANA 'BIER Next Protocol Identifiers' registry.