Skip to main content

8. ServiceMode RR Compatibility and Mandatory Keys

In a ServiceMode RR, a SvcParamKey is considered "mandatory" if the RR will not function correctly for clients that ignore this SvcParamKey. Each SVCB protocol mapping SHOULD specify a set of keys that are "automatically mandatory", i.e., mandatory if they are present in an RR. The SvcParamKey "mandatory" is used to indicate any mandatory keys for this RR, in addition to any automatically mandatory keys that are present.

A ServiceMode RR is considered "compatible" by a client if the client recognizes all the mandatory keys and their values indicate that successful connection establishment is possible. Incompatible RRs are ignored (see step 5 of the procedure defined in Section 3).

The presentation value SHALL be a comma-separated list of one or more valid SvcParamKeys, either by their registered name or in the unknown-key format (Section 2.1). Keys MAY appear in any order but MUST NOT appear more than once. For self-consistency (Section 2.4.3), listed keys MUST also appear in the SvcParams.

To enable simpler parsing, this SvcParamValue MUST NOT contain escape sequences.

The wire format value is the concatenation of each key's numeric value in network byte order, without any internal padding.

For example, a ServiceMode RR with keys alpn, port, and a hypothetical new key foo (SvcParamKey=54321) would have a mandatory value of "mandatory=alpn,port,foo" in presentation format. In wire format, this would be represented as the following octets:

00 01 00 03 d4 31

(In the above, "00 01" represents the numeric value of "alpn", "00 03" represents the numeric value of "port", and "d4 31" represents the numeric value 54321 in network byte order.)