Software Version Capability for BGP
Internet-Draft draft-abraitis-bgp-version-capability-15
Donatas Abraitis
Hostinger
donatas.abraitis@hostinger.com
2024
Routing
Inter-Domain Routing
template
In this document, we introduce a new BGP capability that allows the advertisement of a BGP speaker's routing daemon version.
This BGP capability is an optional advertisement. Implementations are not required to advertise the version nor to process received advertisements.
Introduction
In modern data center designs, we tend to have conventional routers participating in the routing process. And the fleet of routers has different versions of routing daemon. This means that knowing which versions of the routing daemons are running the various routers in the network can be a crucial factor in quickly identifying the root cause of any protocol or network problems.
This BGP capability is an optional advertisement. Implementations are not required to advertise the version nor to process received advertisements.
Information about the version of the routing daemon could also be exchanged in protocols such as LLDP and CDP. However, in containerized environments, it is very hard and not recommended to exchange this information between background processes. Therefore, and to help minimize operational costs, it is helpful to exchange the routing daemon information between BGP peers directly.
Specification of Requirements
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.
Software Version Capability
Although this document is not an IETF Standards Track document, it makes use of the terminology from BCP 14 in order to clearly state the implementation behaviors.
Capabilities advertisements with BGP are defined in [RFC5492]. They utilize the BGP Capabilities Optional Parameter that contains one or more triples <Capability Code, Capability Length, Capability Value>. This document defines a new BGP capability, the Software Version Capability, with Capability Code 75 and Capability Length and Capability Value as described below.
The inclusion of the Software Version Capability is OPTIONAL. If an implementation supports the inclusion of the capability, the implementation MUST include a configuration switch to enable or disable its use, and that switch MUST be off by default.
The Software Version Capability is intended for environments where more visibility is needed for troubleshooting purposes. It is NOT RECOMMENDED for use outside a single Autonomous System, or a set of Autonomous Systems under a common administration.
An implementation that does not recognize or support the Software Version Capability but receives one must ignore it, as described in [RFC5492].
The triple for the Software Version Capability is as follows:
Capability Code
- 75
Capability Length
- The Capability Length for the Software Version Capability MUST be greater than zero. A value of zero SHALL be treated as an encoding error and the Capability MUST be ignored.
- The Capability Length SHOULD be no greater than 64. This is the limit to allow other capabilities as much space as they require.
- Capability Length is a one-octet unsigned binary integer that contains the length of the Capability Value field in octets.
Capability Value
- The Capability Value field is encoded in UTF-8 [RFC3629]. It is unstructured data and can be formatted in any way that the implementor decides. The string is not null-terminated.
Version:
- The Version field MUST be encoded using UTF-8. A receiving BGP speaker MUST NOT interpret invalid UTF-8 sequences.
- The value of consists of one identifier, which identifies the software and its significant version. Software version identifier consists of a product and optional product version.
- identifier = product ["/" product-version]
- A sender SHOULD limit generated product identifiers to what is necessary to identify the product; a sender MUST NOT generate advertising or other nonessential information within the product identifier. A sender SHOULD NOT generate information in product-version that is not a version identifier (i.e., successive versions of the same product name ought to differ only in the product-version portion of the product identifier).
- Example:
- frrouting/8.4.2, ios/12.5.1, junos/12.1
Capabilities Length Overflow
As defined in [RFC5492] the total length of capabilities that can be carried by the BGP Capabilities Optional Parameter is 255 bytes. If an implementation is constructing a BGP Capabilities Optional Parameter and its length exceeds 255 bytes, there is not enough space for other more important capabilities. An implementation is REQUIRED Extended Optional Parameters Length for BGP OPEN Message support as defined in [RFC9072].
A rogue node can prevent the proper operation of a BGP session, or the advertisement of other Capabilities, by not excluding the Software Version Capability as required in Section 3.1. This risk is equivalent to a rogue node simply not advertising a specific Capability and is not new to BGP.
Operation
The Software Version Capability MUST only be used for displaying the version of a BGP speaker's router daemon to make troubleshooting easier.
Consider a group of routers each with a number of upstream nodes, and suppose that each router has a different operating system and different routing daemon at a different version installed. Assuming that a specific feature is not working or that there is a bug which has not been fixed in a particular version of the code, knowledge of the routing daemon versions would allow an operator to quickly identify the pattern of which versions are affected.
Enabling (i.e., turning on) this capability requires bouncing all existing BGP sessions and the feature MUST be explicitly configured before an implementation advertizes the Software Version Capability.
IANA Considerations
IANA has assigned capability number 75 for the Software Version Capability described in this document. This registration is in the BGP Capability Codes registry.
Software Version Capability
Value | Description
75 | Software Version Capability
Security Considerations
The Software Version Capability should be treated as sensitive information: it could be easier for an attacker to exploit the system if they know the specific software version and manufacturer of a BGP speaker. This information could be gathered by inspecting BGP OPEN messages that carry the Software Version Capability defined in this document. Furthermore, this knowledge may facilitate a number of social-engineering attacks.
Modifying the information advertised by a router might lead to attacks including bogus software upgrades and also might mask the causes of faults in the network.
Users of this mechanism should be aware that unless a transport that provides integrity is used for the BGP session in question, the Software Version Capability can be forged. Unless a transport that provides confidentiality is used, the Version Capability could be snooped by an attacker. These issues are common to any BGP message but may be of greater interest in the context of this extension as explained above. Refer to the related considerations in [RFC4271] and [RFC4272].
Users of this mechanism should consider applying data minimization practices as outlined in Section 6.1 of [RFC6973], as appropriate within the deployment context.
Sensitive information leaks can be minimized by using the [RFC5082] mechanism or firewalls to filter out TCP 179 port from untrusted networks. This capability can be disabled per neighbor, thus the sensitive information can't be disclosed to untrusted neighbors.
Acknowledgements
Thanks to Alvaro Retana, Jakob Heitz, Robert Raszuk, Adrian Farrel, John Scudder, Jeffrey Haas, Enke Chen for the review, discussions and input to the draft.
References

Normative References
[RFC2119]
[RFC8174]
[RFC3629]
[RFC9072]
[RFC4271]
[RFC4272]
[RFC6973]
[RFC5082]

Implementation Report
According to RFC 7942, "This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature".
FRRouting implementation.
GoBGP implementation.
freeRouter implementation.
Below is an example from the FRRouting and GoBGP implementations showing both the received and advertised Software Version Capability:

  :~# vtysh -c 'show ip bgp summary failed'
  ...
  Neighbor EstdCnt DropCnt ResetTime Reason
  ens192         3       3  00:00:35 Waiting for peer OPEN (n/a)
  ens224         3       3  00:01:12 Waiting for NHT (frrouting/7.2)
  eth0           3       3  00:00:14 Neighbor deleted (frrouting/7.3)
  ...

        software-version:   advertised and received
          Local:
             GoBGP/3.10.0
          Remote:
             FRRouting/8.5-dev-MyOwnFRRVersion-gdc92f44a4

  :~# vtysh -c 'show ip bgp neighbors 198.51.100.1 json' \
  > | jq '."198.51.100.1".neighborCapabilities.versions'
  {
    "advertisedVersion": "frrouting/7.2",
    "receivedVersion": "frrouting/7.3"
  }