Packages
An Erlang DNS message library that supports most common record types, TSIG authenticated messages, EDNS0 and DNSSEC.
Current section
Files
Jump to
Current section
Files
src/JSON_FORMAT.md
# JSON format
This document describes the JSON encoding format for all DNS record types.
## Format Structure
### Resource Records (RR)
Resource records (`dns_rr`) are encoded as follows:
```json
{
"name": "example.com.",
"type": "A",
"class": "in",
"ttl": 3600,
"data": {
"ip": "192.168.1.1"
}
}
```
The format includes:
- `name`: Domain name (binary)
- `type`: DNS type name as uppercase string (e.g., "A", "AAAA", "MX")
- `ttl`: Time to live (integer)
- `data`: Map containing the record-specific fields
- `class`: Optional, only included if not IN (default)
### Other Records
Non-RR records (message, query, OPT records) use a two-level nested map format:
- Outer key: Record type identifier (descriptive name)
- Inner map: Record fields with binary keys
## Field Encoding Rules
- **IP addresses**: String format (`"192.168.1.1"`, `"2001:db8::1"`)
- **Base64**: Certificates, keys, signatures, MACs
- **Base16 (hex)**: Digests, hashes, fingerprints, addresses
- **Base32**: NSEC3 hash
- **Domain names**: Binary (dname format)
- **Lists**: Arrays of converted values
## Record Types
### MESSAGE (dns_message) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**JSON Key:** `message`
**Fields:**
- `id` (`t:dns:message_id/0`): Direct value
- `qr` (`t:boolean/0`): Direct value
- `oc` (`t:dns:opcode/0`): Direct value
- `aa` (`t:boolean/0`): Direct value
- `tc` (`t:boolean/0`): Direct value
- `rd` (`t:boolean/0`): Direct value
- `ra` (`t:boolean/0`): Direct value
- `ad` (`t:boolean/0`): Direct value
- `cd` (`t:boolean/0`): Direct value
- `rc` (`t:dns:rcode/0`): Direct value
- `qc` (`t:dns:uint16/0`): Direct value
- `anc` (`t:dns:uint16/0`): Direct value
- `auc` (`t:dns:uint16/0`): Direct value
- `adc` (`t:dns:uint16/0`): Direct value
- `questions` (`t:dns:questions/0`): Direct value
- `answers` (`t:dns:answers/0`): Direct value
- `authority` (`t:dns:authority/0`): Direct value
- `additional` (`t:dns:additional/0`): Direct value
**Example:**
```json
{
"message": {
"id": 0,
"qr": false,
"oc": false,
"aa": false,
"tc": false,
"rd": false,
"ra": false,
"ad": false,
"cd": false,
"rc": "value",
"qc": 0,
"anc": 0,
"auc": 0,
"adc": 0,
"questions": [],
"answers": [],
"authority": [],
"additional": []
}
}
```
### QUERY (dns_query) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**JSON Key:** `query`
**Fields:**
- `name` (`t:dns:dname/0`): Binary data (dname format)
- `class` (`t:dns:class/0`): Direct value
- `type` (`t:dns:type/0`): Direct value
**Example:**
```json
{
"query": {
"name": "example.com.",
"class": 0,
"type": 0
}
}
```
### A (dns_rrdata_a) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `ip` (`t:inet:ip4_address/0`): IP address as string
**Example:**
```json
{
"ip": "192.168.1.1"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### AAAA (dns_rrdata_aaaa) [RFC3596](https://datatracker.ietf.org/doc/html/rfc3596)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `ip` (`t:inet:ip6_address/0`): IP address as string
**Example:**
```json
{
"ip": "192.168.1.1"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### AFSDB (dns_rrdata_afsdb) [RFC1183](https://datatracker.ietf.org/doc/html/rfc1183)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `subtype` (`t:dns:uint16/0`): Direct value
- `hostname` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"subtype": 0,
"hostname": "example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### CAA (dns_rrdata_caa) [RFC6844](https://datatracker.ietf.org/doc/html/rfc6844)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `flags` (`t:dns:uint8/0`): Direct value
- `tag` (`t:binary/0`): Binary data (dname format)
- `value` (`t:binary/0`): Binary data (dname format)
**Example:**
```json
{
"flags": 0,
"tag": "base64-encoded-data",
"value": "base64-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### CDNSKEY (dns_rrdata_cdnskey) [RFC7344](https://datatracker.ietf.org/doc/html/rfc7344)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `flags` (`t:dns:uint16/0`): Direct value
- `protocol` (`t:dns:uint8/0`): Direct value
- `alg` (`t:dns:uint8/0`): Direct value
- `public_key` (`t:iodata/0`): Base64-encoded public key
- `keytag` (`t:integer/0`): Direct value
**Example:**
```json
{
"flags": 0,
"protocol": 0,
"alg": 0,
"public_key": "base64-encoded-data",
"keytag": 0
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### CDS (dns_rrdata_cds) [RFC7344](https://datatracker.ietf.org/doc/html/rfc7344)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `keytag` (`t:dns:uint16/0`): Direct value
- `alg` (`t:dns:uint8/0`): Direct value
- `digest_type` (`t:dns:uint8/0`): Direct value
- `digest` (`t:binary/0`): Base16 (hex)-encoded digest
**Example:**
```json
{
"keytag": 0,
"alg": 0,
"digest_type": 0,
"digest": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### CERT (dns_rrdata_cert) [RFC4398](https://datatracker.ietf.org/doc/html/rfc4398)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `type` (`t:dns:uint16/0`): Direct value
- `keytag` (`t:dns:uint16/0`): Direct value
- `alg` (`t:dns:uint8/0`): Direct value
- `cert` (`t:binary/0`): Base64-encoded certificate
**Example:**
```json
{
"type": 0,
"keytag": 0,
"alg": 0,
"cert": "base64-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### CNAME (dns_rrdata_cname) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `dname` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"dname": "example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### CSYNC (dns_rrdata_csync) [RFC7477](https://datatracker.ietf.org/doc/html/rfc7477)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `soa_serial` (`t:dns:uint32/0`): Direct value
- `flags` (`t:dns:uint16/0`): Direct value
- `types` ([`t:non_neg_integer/0`]): Direct value
**Example:**
```json
{
"soa_serial": "value",
"flags": 0,
"types": []
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### DHCID (dns_rrdata_dhcid) [RFC4701](https://datatracker.ietf.org/doc/html/rfc4701)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `data` (`t:binary/0`): Base64-encoded data
**Example:**
```json
{
"data": "base64-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### DLV (dns_rrdata_dlv) [RFC4431](https://datatracker.ietf.org/doc/html/rfc4431)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `keytag` (`t:dns:uint16/0`): Direct value
- `alg` (`t:dns:uint8/0`): Direct value
- `digest_type` (`t:dns:uint8/0`): Direct value
- `digest` (`t:binary/0`): Base16 (hex)-encoded digest
**Example:**
```json
{
"keytag": 0,
"alg": 0,
"digest_type": 0,
"digest": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### DNAME (dns_rrdata_dname) [RFC6672](https://datatracker.ietf.org/doc/html/rfc6672)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `dname` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"dname": "example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### DNSKEY (dns_rrdata_dnskey) [RFC4034](https://datatracker.ietf.org/doc/html/rfc4034)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `flags` (`t:dns:uint16/0`): Direct value
- `protocol` (`t:dns:uint8/0`): Direct value
- `alg` (`t:dns:uint8/0`): Direct value
- `public_key` (`t:iodata/0`): Base64-encoded public key
- `keytag` (`t:integer/0`): Direct value
**Example:**
```json
{
"flags": 0,
"protocol": 0,
"alg": 0,
"public_key": "base64-encoded-data",
"keytag": 0
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### DS (dns_rrdata_ds) [RFC4034](https://datatracker.ietf.org/doc/html/rfc4034)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `keytag` (`t:dns:uint16/0`): Direct value
- `alg` (`t:dns:uint8/0`): Direct value
- `digest_type` (`t:dns:uint8/0`): Direct value
- `digest` (`t:binary/0`): Base16 (hex)-encoded digest
**Example:**
```json
{
"keytag": 0,
"alg": 0,
"digest_type": 0,
"digest": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### DSYNC (dns_rrdata_dsync) [RFC9859](https://datatracker.ietf.org/doc/html/rfc9859)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `rrtype` (`t:dns:uint16/0`): Direct value
- `scheme` (`t:dns:uint8/0`): Direct value
- `port` (`t:dns:uint16/0`): Direct value
- `target` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"rrtype": "value",
"scheme": 0,
"port": 0,
"target": "target.example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### EUI48 (dns_rrdata_eui48) [RFC7043](https://datatracker.ietf.org/doc/html/rfc7043)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `address` (`<<_:48>>`): Base16 (hex)-encoded address
**Example:**
```json
{
"address": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### EUI64 (dns_rrdata_eui64) [RFC7043](https://datatracker.ietf.org/doc/html/rfc7043)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `address` (`<<_:64>>`): Base16 (hex)-encoded address
**Example:**
```json
{
"address": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### HINFO (dns_rrdata_hinfo) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `cpu` (`t:binary/0`): Binary data (dname format)
- `os` (`t:binary/0`): Binary data (dname format)
**Example:**
```json
{
"cpu": "value",
"os": "value"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### HTTPS (dns_rrdata_https)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `svc_priority` (`t:dns:uint16/0`): Direct value
- `target_name` (`t:dns:dname/0`): Binary data (dname format)
- `svc_params` (`t:dns:svcb_svc_params/0`): Map of SVCB service parameters (see [SVCB Service Parameters below](#svcb-service-parameters))
**Example:**
```json
{
"svc_priority": 0,
"target_name": "target.example.com.",
"svc_params": {"alpn": ["h2", "h3"], "port": 443}
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### IPSECKEY (dns_rrdata_ipseckey) [RFC4025](https://datatracker.ietf.org/doc/html/rfc4025)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `precedence` (`t:dns:uint8/0`): Direct value
- `alg` (`t:dns:uint8/0`): Direct value
- `gateway` (`t:dns:dname/0` | `t:inet:ip_address/0`): Binary data (dname format)
- `public_key` (`t:binary/0`): Base64-encoded public key
**Example:**
```json
{
"precedence": 0,
"alg": 0,
"gateway": "value",
"public_key": "base64-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### KEY (dns_rrdata_key) [RFC2535](https://datatracker.ietf.org/doc/html/rfc2535)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `type` (`t:dns:uint2/0`): Direct value
- `xt` (`0..1`): Direct value
- `name_type` (`t:dns:uint2/0`): Direct value
- `sig` (`t:dns:uint4/0`): Direct value
- `protocol` (`t:dns:uint8/0`): Direct value
- `alg` (`t:dns:uint8/0`): Direct value
- `public_key` (`t:binary/0`): Base64-encoded public key
**Example:**
```json
{
"type": 0,
"xt": 0,
"name_type": 0,
"sig": "value",
"protocol": 0,
"alg": 0,
"public_key": "base64-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### KX (dns_rrdata_kx) [RFC2230](https://datatracker.ietf.org/doc/html/rfc2230)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `preference` (`t:dns:uint16/0`): Direct value
- `exchange` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"preference": 0,
"exchange": "mail.example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### LOC (dns_rrdata_loc) [RFC1876](https://datatracker.ietf.org/doc/html/rfc1876)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `size` (`t:integer/0`): Direct value
- `horiz` (`t:integer/0`): Direct value
- `vert` (`t:integer/0`): Direct value
- `lat` (`t:dns:uint32/0`): Direct value
- `lon` (`t:dns:uint32/0`): Direct value
- `alt` (`t:dns:uint32/0`): Direct value
**Example:**
```json
{
"size": "value",
"horiz": "value",
"vert": "value",
"lat": "value",
"lon": "value",
"alt": "value"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### MB (dns_rrdata_mb) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `madname` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"madname": "value"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### MG (dns_rrdata_mg) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `madname` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"madname": "value"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### MINFO (dns_rrdata_minfo) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `rmailbx` (`t:dns:dname/0`): Binary data (dname format)
- `emailbx` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"rmailbx": "value",
"emailbx": "value"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### MR (dns_rrdata_mr) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `newname` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"newname": "value"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### MX (dns_rrdata_mx) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `preference` (`t:dns:uint16/0`): Direct value
- `exchange` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"preference": 0,
"exchange": "mail.example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### NAPTR (dns_rrdata_naptr) [RFC3403](https://datatracker.ietf.org/doc/html/rfc3403)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `order` (`t:dns:uint16/0`): Direct value
- `preference` (`t:dns:uint16/0`): Direct value
- `flags` (`t:binary/0`): Binary data (dname format)
- `services` (`t:binary/0`): Binary data (dname format)
- `regexp` (`t:binary/0`): Binary data (dname format)
- `replacement` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"order": "value",
"preference": 0,
"flags": 0,
"services": "value",
"regexp": "value",
"replacement": "value"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### NS (dns_rrdata_ns) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `dname` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"dname": "example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### NSEC (dns_rrdata_nsec) [RFC4034](https://datatracker.ietf.org/doc/html/rfc4034)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `next_dname` (`t:dns:dname/0`): Binary data (dname format)
- `types` ([`t:non_neg_integer/0`]): Direct value
**Example:**
```json
{
"next_dname": "value",
"types": []
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### NSEC3 (dns_rrdata_nsec3) [RFC5155](https://datatracker.ietf.org/doc/html/rfc5155)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `hash_alg` (`t:dns:uint8/0`): Direct value
- `opt_out` (`t:boolean/0`): Direct value
- `iterations` (`t:dns:uint16/0`): Direct value
- `salt` (`t:binary/0`): Base16 (hex)-encoded salt (or "-" for empty)
- `hash` (`t:binary/0`): Base32-encoded binary (NSEC3 hash)
- `types` ([`t:non_neg_integer/0`]): Direct value
**Example:**
```json
{
"hash_alg": 0,
"opt_out": false,
"iterations": 0,
"salt": "base16-encoded-data",
"hash": "base32-encoded-data",
"types": []
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### NSEC3PARAM (dns_rrdata_nsec3param) [RFC5155](https://datatracker.ietf.org/doc/html/rfc5155)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `hash_alg` (`t:dns:uint8/0`): Direct value
- `flags` (`t:dns:uint8/0`): Direct value
- `iterations` (`t:dns:uint16/0`): Direct value
- `salt` (`t:binary/0`): Base16 (hex)-encoded salt (or "-" for empty)
**Example:**
```json
{
"hash_alg": 0,
"flags": 0,
"iterations": 0,
"salt": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### NXT (dns_rrdata_nxt) [RFC2535](https://datatracker.ietf.org/doc/html/rfc2535)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `dname` (`t:dns:dname/0`): Binary data (dname format)
- `types` ([`t:non_neg_integer/0`]): Direct value
**Example:**
```json
{
"dname": "example.com.",
"types": []
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### OPENPGPKEY (dns_rrdata_openpgpkey) [RFC7929](https://datatracker.ietf.org/doc/html/rfc7929)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `data` (`t:binary/0`): Base64-encoded data
**Example:**
```json
{
"data": "base64-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### PTR (dns_rrdata_ptr) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `dname` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"dname": "example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### RESINFO (dns_rrdata_resinfo) [RFC9606](https://datatracker.ietf.org/doc/html/rfc9606)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `data` ([`t:binary/0`]): Binary data (dname format)
**Example:**
```json
{
"data": []
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### RP (dns_rrdata_rp) [RFC1183](https://datatracker.ietf.org/doc/html/rfc1183)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `mbox` (`t:dns:dname/0`): Binary data (dname format)
- `txt` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"mbox": "value",
"txt": []
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### RRSIG (dns_rrdata_rrsig) [RFC4034](https://datatracker.ietf.org/doc/html/rfc4034)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `type_covered` (`t:dns:uint16/0`): Direct value
- `alg` (`3` | `5` | `6` | `7` | `8` | `10` | `13` | `14` | `15` | `16`): Direct value
- `labels` (`t:dns:uint8/0`): Direct value
- `original_ttl` (`t:dns:uint32/0`): Direct value
- `expiration` (`t:dns:uint32/0`): Direct value
- `inception` (`t:dns:uint32/0`): Direct value
- `keytag` (`t:dns:uint16/0`): Direct value
- `signers_name` (`t:dns:dname/0`): Binary data (dname format)
- `signature` (`t:binary/0`): Base64-encoded signature
**Example:**
```json
{
"type_covered": "value",
"alg": 0,
"labels": "value",
"original_ttl": "value",
"expiration": "value",
"inception": "value",
"keytag": 0,
"signers_name": "value",
"signature": "base64-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### RT (dns_rrdata_rt) [RFC1183](https://datatracker.ietf.org/doc/html/rfc1183)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `preference` (`t:dns:uint16/0`): Direct value
- `host` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"preference": 0,
"host": "value"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### SMIMEA (dns_rrdata_smimea) [RFC8162](https://datatracker.ietf.org/doc/html/rfc8162)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `usage` (`t:dns:uint8/0`): Direct value
- `selector` (`t:dns:uint8/0`): Direct value
- `matching_type` (`t:dns:uint8/0`): Direct value
- `certificate` (`t:binary/0`): Base16 (hex)-encoded binary
**Example:**
```json
{
"usage": "value",
"selector": "value",
"matching_type": "value",
"certificate": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### SOA (dns_rrdata_soa) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `mname` (`t:dns:dname/0`): Binary data (dname format)
- `rname` (`t:dns:dname/0`): Binary data (dname format)
- `serial` (`t:dns:uint32/0`): Direct value
- `refresh` (`t:dns:uint32/0`): Direct value
- `retry` (`t:dns:uint32/0`): Direct value
- `expire` (`t:dns:uint32/0`): Direct value
- `minimum` (`t:dns:uint32/0`): Direct value
**Example:**
```json
{
"mname": "ns1.example.com.",
"rname": "admin.example.com.",
"serial": 0,
"refresh": 0,
"retry": 0,
"expire": 0,
"minimum": 0
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### SPF (dns_rrdata_spf) [RFC4408](https://datatracker.ietf.org/doc/html/rfc4408)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `spf` ([`t:binary/0`]): Binary data (dname format)
**Example:**
```json
{
"spf": "value"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### SRV (dns_rrdata_srv) [RFC2782](https://datatracker.ietf.org/doc/html/rfc2782)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `priority` (`t:dns:uint16/0`): Direct value
- `weight` (`t:dns:uint16/0`): Direct value
- `port` (`t:dns:uint16/0`): Direct value
- `target` (`t:dns:dname/0`): Binary data (dname format)
**Example:**
```json
{
"priority": 0,
"weight": 0,
"port": 0,
"target": "target.example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### SSHFP (dns_rrdata_sshfp) [RFC4255](https://datatracker.ietf.org/doc/html/rfc4255)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `alg` (`t:dns:uint8/0`): Direct value
- `fp_type` (`t:dns:uint8/0`): Direct value
- `fp` (`t:binary/0`): Base16 (hex)-encoded fingerprint
**Example:**
```json
{
"alg": 0,
"fptype": "value",
"fp": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### SVCB (dns_rrdata_svcb) [RFC9460](https://datatracker.ietf.org/doc/html/rfc9460)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `svc_priority` (`t:dns:uint16/0`): Direct value
- `target_name` (`t:dns:dname/0`): Binary data (dname format)
- `svc_params` (`t:dns:svcb_svc_params/0`): Map of SVCB service parameters (see [SVCB Service Parameters below](#svcb-service-parameters))
**Example:**
```json
{
"svc_priority": 0,
"target_name": "target.example.com.",
"svc_params": {"alpn": ["h2", "h3"], "port": 443}
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### TLSA (dns_rrdata_tlsa) [RFC6698](https://datatracker.ietf.org/doc/html/rfc6698)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `usage` (`t:dns:uint8/0`): Direct value
- `selector` (`t:dns:uint8/0`): Direct value
- `matching_type` (`t:dns:uint8/0`): Direct value
- `certificate` (`t:binary/0`): Base16 (hex)-encoded binary
**Example:**
```json
{
"usage": "value",
"selector": "value",
"matching_type": "value",
"certificate": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### TSIG (dns_rrdata_tsig) [RFC2845](https://datatracker.ietf.org/doc/html/rfc2845)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `alg` (`t:dns:tsig_alg/0`): Direct value
- `time` (`t:dns:uint48/0`): Direct value
- `fudge` (`t:dns:uint16/0`): Direct value
- `mac` (`t:binary/0`): Base64-encoded MAC
- `msgid` (`t:dns:uint16/0`): Direct value
- `err` (`t:dns:uint16/0`): Direct value
- `other` (`t:binary/0`): Base16 (hex)-encoded data
**Example:**
```json
{
"alg": 0,
"time": "value",
"fudge": "value",
"mac": "base64-encoded-data",
"msgid": "value",
"err": "value",
"other": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### TXT (dns_rrdata_txt) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `txt` ([`t:binary/0`]): Binary data (dname format)
**Example:**
```json
{
"txts": []
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### URI (dns_rrdata_uri) [RFC7553](https://datatracker.ietf.org/doc/html/rfc7553)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `priority` (`t:dns:uint16/0`): Direct value
- `weight` (`t:dns:uint16/0`): Direct value
- `target` (`t:binary/0`): Binary data (dname format)
**Example:**
```json
{
"priority": 0,
"weight": 0,
"target": "target.example.com."
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### WALLET (dns_rrdata_wallet)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `data` (`t:binary/0`): Base64-encoded data
**Example:**
```json
{
"data": "base64-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### ZONEMD (dns_rrdata_zonemd) [RFC8976](https://datatracker.ietf.org/doc/html/rfc8976)
**Format:** RRDATA fields (used within `dns_rr.data`)
**Fields:**
- `serial` (`t:dns:uint32/0`): Direct value
- `scheme` (`t:dns:uint8/0`): Direct value
- `algorithm` (`t:dns:uint8/0`): Direct value
- `hash` (`t:binary/0`): Base16 (hex)-encoded hash
**Example:**
```json
{
"serial": 0,
"scheme": 0,
"algorithm": 0,
"hash": "base16-encoded-data"
}
```
**Note:** This format is used within the `data` field of `dns_rr` records.
### OPTCOOKIE (dns_opt_cookie) [RFC7873](https://datatracker.ietf.org/doc/html/rfc7873)
**JSON Key:** `unknown`
**Fields:**
- `client` (`<<_:64>>`): Direct value
- `server` (`<<_:64, _:_*8>>`): Direct value
**Example:**
```json
{
"unknown": {
"client": "value",
"server": "value"
}
}
```
### OPTECS (dns_opt_ecs) [RFC7871](https://datatracker.ietf.org/doc/html/rfc7871)
**JSON Key:** `unknown`
**Fields:**
- `family` (`t:dns:uint16/0`): Base16 (hex)-encoded binary
- `source_prefix_length` (`t:dns:uint8/0`): Base16 (hex)-encoded binary
- `scope_prefix_length` (`t:dns:uint8/0`): Base16 (hex)-encoded binary
- `address` (`t:binary/0`): Base16 (hex)-encoded address
**Example:**
```json
{
"unknown": {
"family": "base16-encoded-data",
"source_prefix_length": "base16-encoded-data",
"scope_prefix_length": "base16-encoded-data",
"address": "base16-encoded-data"
}
}
```
### OPTEDE (dns_opt_ede) [RFC8914](https://datatracker.ietf.org/doc/html/rfc8914)
**JSON Key:** `unknown`
**Fields:**
- `info_code` (`t:dns:uint16/0`): Direct value
- `extra_text` (`t:binary/0`): Binary data (dname format)
**Example:**
```json
{
"unknown": {
"info_code": "value",
"extra_text": "value"
}
}
```
### OPTLLQ (dns_opt_llq) [RFC8764](https://datatracker.ietf.org/doc/html/rfc8764)
**JSON Key:** `unknown`
**Fields:**
- `opcode` (`t:dns:uint16/0`): Direct value
- `errorcode` (`t:dns:uint16/0`): Direct value
- `id` (`t:dns:uint64/0`): Direct value
- `leaselife` (`t:dns:uint32/0`): Direct value
**Example:**
```json
{
"unknown": {
"opcode": "value",
"errorcode": "value",
"id": 0,
"leaselife": "value"
}
}
```
### OPTNSID (dns_opt_nsid) [RFC5001](https://datatracker.ietf.org/doc/html/rfc5001)
**JSON Key:** `unknown`
**Fields:**
- `data` (`t:binary/0`): Base16 (hex)-encoded data
**Example:**
```json
{
"unknown": {
"data": "base16-encoded-data"
}
}
```
### OPTOWNER (dns_opt_owner)
**JSON Key:** `unknown`
**Fields:**
- `seq` (`t:dns:uint8/0`): Base16 (hex)-encoded binary
- `primary_mac` (`<<_:48>>`): Base16 (hex)-encoded binary
- `wakeup_mac` (`<<>>` | `<<_:48>>`): Base16 (hex)-encoded binary
- `password` (`<<>>` | `<<_:48>>`): Base16 (hex)-encoded binary
**Example:**
```json
{
"unknown": {
"seq": "base16-encoded-data",
"primary_mac": "base16-encoded-data",
"wakeup_mac": "base16-encoded-data",
"password": "base16-encoded-data"
}
}
```
### OPTUL (dns_opt_ul)
**JSON Key:** `unknown`
**Fields:**
- `lease` (`t:dns:uint32/0`): Direct value
**Example:**
```json
{
"unknown": {
"lease": "value"
}
}
```
### OPTUNKNOWN (dns_opt_unknown)
**JSON Key:** `OPT_UNKNOWN`
**Fields:**
- `id` (`t:integer/0`): Direct value
- `bin` (`t:binary/0`): Base16 (hex)-encoded binary
**Example:**
```json
{
"OPT_UNKNOWN": {
"id": 0,
"bin": "base16-encoded-data"
}
}
```
### OPTRR (dns_optrr) [RFC6891](https://datatracker.ietf.org/doc/html/rfc6891)
**JSON Key:** `OPT`
**Fields:**
- `udp_payload_size` (`t:dns:uint16/0`): Direct value
- `ext_rcode` (`t:dns:uint8/0`): Direct value
- `version` (`t:dns:uint8/0`): Direct value
- `dnssec` (`t:boolean/0`): Direct value
- `data` ([`t:dns:optrr_elem/0`]): Direct value
**Example:**
```json
{
"OPT": {
"udp_payload_size": "value",
"ext_rcode": "value",
"version": "value",
"dnssec": "value",
"data": []
}
}
```
### RR (dns_rr) [RFC1035](https://datatracker.ietf.org/doc/html/rfc1035)
**Fields:**
- `name` (`t:dns:dname/0`): Domain name (binary, dname format)
- `type` (`t:dns:type/0`): DNS type name as uppercase binary string (e.g., "A", "AAAA", "MX")
- `class` (`t:dns:class/0`): DNS class name as uppercase binary string (e.g., "IN", "CH", "HS") - optional, defaults to "IN" if omitted
- `ttl` (`t:dns:ttl/0`): Time to live (integer)
- `data` (`t:dns:rrdata/0`): Map containing the RRDATA-specific fields (see individual RRDATA record types below)
**Example:**
```json
{
"name": "example.com.",
"type": "A",
"class": "IN",
"ttl": 3600,
"data": {
"ip": "192.168.1.1"
}
}
```
**Note:** The `data` field contains the RRDATA-specific fields. The `class` field is optional and defaults to `"IN"` if omitted. See individual RRDATA record types below for complete field documentation.
### SVCB Service Parameters
The `svc_params` field in SVCB and HTTPS records is a map containing service binding parameters
as defined in [RFC 9460](https://datatracker.ietf.org/doc/html/rfc9460).
> #### NOTE {: .note}
>
> The keys `keyN` when `N` ranges from `0` to `6` are equivalent to their named counterparts and will be validated accordingly.
**Parameters:**
- `mandatory` (`[string()]`): List of parameter names that must be present (e.g., `["alpn", "port"]`).
- `alpn` (`[binary()]`): List of ALPN protocol identifiers as decoded binaries (e.g., `["h2", "h3"]`)
- `no-default-alpn` (`null`): Indicates that no default ALPN should be used.
- `port` (`integer()`): Port number (0-65535)
- `ipv4hint` (`[string()]`): List of IPv4 addresses as strings (e.g., `["192.168.1.1", "192.168.1.2"]`)
- `ipv6hint` (`[string()]`): List of IPv6 addresses as strings (e.g., `["2001:db8::1"]`)
- `ech` (`binary()`): Encrypted ClientHello (ECH) configuration as decoded binary
- `keyNNNN` (`binary()` | `null`): Unknown parameters where `NNNN` is the parameter key number (0-65535). In JSON the key is the string `"key"` followed by the decimal number (e.g. `"key65001"`). The value is either a binary (as string) or `null` for no-value parameters.
**Example:**
```json
{
"svc_priority": 1,
"target_name": "target.example.com.",
"svc_params": {
"mandatory": ["alpn", "port"],
"alpn": ["h2", "h3"],
"port": 443,
"ipv4hint": ["192.168.1.1", "192.168.1.2"],
"ipv6hint": ["2001:db8::1"],
"ech": "ech-config-data",
"key65001": "custom-param-value",
"key65002": null
}
}
```
**Note:** All parameter values are in their decoded/native format (not base64-encoded).
Binary values like ALPN identifiers and ECH config are provided as raw binaries, not base64 strings.