The format is simply xN.[seedname], where N is the required service flags, ORed together, encoded in hex.
From Bitcoin Core's src/protocol.h
:
NODE_NONE = 0,
// NODE_NETWORK means that the node is capable of serving the complete block chain. It is currently
// set by all Bitcoin Core non pruned nodes, and is unset by SPV clients or other light clients.
NODE_NETWORK = (1 << 0),
// NODE_BLOOM means the node is capable and willing to handle bloom-filtered connections.
// Bitcoin Core nodes used to support this by default, without advertising this bit,
// but no longer do as of protocol version 70011 (= NO_BLOOM_VERSION)
NODE_BLOOM = (1 << 2),
// NODE_WITNESS indicates that a node can be asked for blocks and transactions including
// witness data.
NODE_WITNESS = (1 << 3),
// NODE_COMPACT_FILTERS means the node will service basic block filter requests.
// See BIP157 and BIP158 for details on how this is implemented.
NODE_COMPACT_FILTERS = (1 << 6),
// NODE_NETWORK_LIMITED means the same as NODE_NETWORK with the limitation of only
// serving the last 288 (2 day) blocks
// See BIP159 for details on how this is implemented.
NODE_NETWORK_LIMITED = (1 << 10),
So as a hypothetical example, say you want NODE_WITNESS, NODE_COMPACT_FILTERS, and NODE_NETWORK_LIMITED, you'd need N = (1 << 3) + (1 << 6) + (1 << 10) = 1096, which is 448
in hexadecimal. Thus, you'd query x448.[seedname]
.
Note that not all combinations are supported, and which ones are may depend on the seed. My Bitcoin seeder software by default supports the following combinations currently:
NODE_NETWORK
NODE_NETWORK | NODE_BLOOM
NODE_NETWORK | NODE_WITNESS
NODE_NETWORK | NODE_WITNESS | NODE_COMPACT_FILTERS
NODE_NETWORK | NODE_WITNESS | NODE_BLOOM
NODE_NETWORK_LIMITED
NODE_NETWORK_LIMITED | NODE_BLOOM
NODE_NETWORK_LIMITED | NODE_WITNESS
NODE_NETWORK_LIMITED | NODE_WITNESS | NODE_COMPACT_FILTERS
NODE_NETWORK_LIMITED | NODE_WITNESS | NODE_BLOOM