2017-12-16 20:58:18 +00:00
|
|
|
use common_types::*;
|
|
|
|
use std::net::{Ipv4Addr, Ipv6Addr};
|
|
|
|
|
|
|
|
// unless otherwise documented, class should probably be IN (0x0001)
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
// deriving RRData will add a unit test to make sure the type is
|
|
|
|
// registered; there must be a records::types::$name `Type` constant
|
|
|
|
// with the same name as the struct.
|
|
|
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(IN)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct A {
|
2017-12-29 21:25:43 +00:00
|
|
|
pub addr: Ipv4Addr,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct NS {
|
|
|
|
nsdname: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct MD {
|
|
|
|
madname: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct MF {
|
|
|
|
madname: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct CNAME {
|
|
|
|
cname: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct SOA {
|
|
|
|
mname: DnsCompressedName,
|
|
|
|
rname: DnsCompressedName,
|
|
|
|
serial: u32,
|
|
|
|
refresh: u32,
|
|
|
|
retry: u32,
|
|
|
|
expire: u32,
|
|
|
|
minimum: u32,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct MB {
|
|
|
|
madname: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct MG {
|
|
|
|
mgmname: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct MR {
|
|
|
|
newname: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
// not allowed in zone files anyway, i.e. no text representation.
|
2017-12-26 16:30:08 +00:00
|
|
|
// content not restricted either, just some bytes. no need to parse it,
|
|
|
|
// generic representation should be just fine.
|
2017-12-21 12:32:14 +00:00
|
|
|
//
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[RRClass(ANY)]
|
|
|
|
// pub struct NULL;
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
// text representation like: `WKS 127.0.0.1 TCP smtp http 110`. would
|
|
|
|
// have to parse protocol and service names.
|
|
|
|
//
|
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[RRClass(IN)]
|
2017-12-21 12:32:14 +00:00
|
|
|
// pub struct WKS {
|
|
|
|
// address: Ipv4Addr,
|
|
|
|
// protocol: u8,
|
|
|
|
// bitmap: ..., // remaining bytes
|
|
|
|
// }
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct PTR {
|
|
|
|
ptrdname: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct HINFO {
|
|
|
|
cpu: ShortText,
|
|
|
|
os: ShortText,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct MINFO {
|
|
|
|
rmailbx: DnsCompressedName,
|
|
|
|
emailbx: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct MX {
|
|
|
|
preference: u16,
|
|
|
|
mxname: DnsCompressedName,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct TXT {
|
|
|
|
text: LongText,
|
|
|
|
}
|
|
|
|
|
|
|
|
// end of RFC 1035: no DnsCompressedName below!
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct RP {
|
2017-12-21 12:32:14 +00:00
|
|
|
mbox: DnsCanonicalName,
|
|
|
|
txt: DnsCanonicalName,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct AFSDB {
|
|
|
|
subtype: u16,
|
2017-12-21 12:32:14 +00:00
|
|
|
hostname: DnsCanonicalName,
|
|
|
|
}
|
|
|
|
|
|
|
|
// https://tools.ietf.org/html/rfc1183#section-3.1 says "its format in
|
|
|
|
// master files is a <character-string>" which say nothing about the
|
|
|
|
// binary encoding; later it says "<PSDN-address> is a string of decimal
|
|
|
|
// digits", so it would seem that there is no length encoding or
|
|
|
|
// restriction.
|
|
|
|
//
|
|
|
|
// wireshark and bind use <character-string> though (bind also wants at
|
|
|
|
// least 4 bytes in the field: probably due to "beginning with the 4
|
|
|
|
// digit DNIC").
|
|
|
|
//
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[RRClass(ANY)]
|
2017-12-21 12:32:14 +00:00
|
|
|
// pub struct X25 {
|
|
|
|
// psdn_address: ShortText,
|
|
|
|
// }
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[RRClass(ANY)]
|
2017-12-21 12:32:14 +00:00
|
|
|
// pub struct ISDN {
|
|
|
|
// isdn_address: ShortText,
|
|
|
|
// subaddress: Option<ShortText>,
|
|
|
|
// }
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-21 12:32:14 +00:00
|
|
|
pub struct RT {
|
|
|
|
preference: u16,
|
|
|
|
intermediate: DnsCanonicalName,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct NSAP;
|
2017-12-21 12:32:14 +00:00
|
|
|
|
|
|
|
#[allow(non_camel_case_types)]
|
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRTypeName = "NSAP-PTR"]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-21 12:32:14 +00:00
|
|
|
pub struct NSAP_PTR {
|
|
|
|
owner: DnsCanonicalName,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-21 12:32:14 +00:00
|
|
|
pub struct SIG {
|
|
|
|
rr_type: Type,
|
|
|
|
algorithm: u8,
|
|
|
|
labels: u8,
|
|
|
|
// RFC says this can be omitted in text form if it is the same as
|
|
|
|
// the TTL on the SIG record. not supported to be omitted here
|
|
|
|
// (TODO?).
|
|
|
|
original_ttl: u32,
|
2017-12-28 18:12:23 +00:00
|
|
|
signature_expiration: u32,
|
|
|
|
signature_inception: u32,
|
2017-12-21 12:32:14 +00:00
|
|
|
key_tag: u16,
|
|
|
|
signers_name: DnsCanonicalName,
|
|
|
|
signature: Base64RemainingBlob,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct KEY {
|
|
|
|
flags: u16,
|
|
|
|
protocol: u8,
|
|
|
|
algorithm: u8,
|
2017-12-21 12:32:14 +00:00
|
|
|
public_key: Base64RemainingBlob,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(IN)]
|
2017-12-21 12:32:14 +00:00
|
|
|
pub struct PX {
|
|
|
|
preference: u16,
|
|
|
|
map822: DnsCanonicalName,
|
|
|
|
mapx400: DnsCanonicalName,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)] // not restricted in rfc 1712
|
|
|
|
pub struct GPOS {
|
|
|
|
longitude: ShortText,
|
|
|
|
latitude: ShortText,
|
|
|
|
altitude: ShortText,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(IN)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct AAAA {
|
|
|
|
addr: Ipv6Addr,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
pub use super::weird_structs::LOC;
|
|
|
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-21 12:32:14 +00:00
|
|
|
pub struct NXT {
|
|
|
|
next: DnsCanonicalName,
|
|
|
|
types: NxtTypeBitmap,
|
|
|
|
}
|
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct EID;
|
2017-12-26 16:30:08 +00:00
|
|
|
|
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct NIMLOC;
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(IN)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct SRV {
|
|
|
|
preference: u16,
|
|
|
|
weight: u16,
|
|
|
|
port: u16,
|
2017-12-21 12:32:14 +00:00
|
|
|
target: DnsCanonicalName,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct ATMA;
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct NAPTR {
|
|
|
|
order: u16,
|
|
|
|
preference: u16,
|
|
|
|
flags: ShortText,
|
|
|
|
service: ShortText,
|
|
|
|
regexp: ShortText,
|
2017-12-21 12:32:14 +00:00
|
|
|
replacement: DnsCanonicalName,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(IN)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct KX {
|
|
|
|
preference: u16,
|
2017-12-21 12:32:14 +00:00
|
|
|
exchanger: DnsCanonicalName,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct CERT {
|
|
|
|
cert_type: u16,
|
|
|
|
key_tag: u16,
|
|
|
|
algorithm: u8,
|
2017-12-21 12:32:14 +00:00
|
|
|
certificate: Base64RemainingBlob,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
pub use super::weird_structs::A6;
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct DNAME {
|
2017-12-21 12:32:14 +00:00
|
|
|
target: DnsCanonicalName,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct SINK;
|
|
|
|
|
|
|
|
// OPT should be decoded at "transport level", abuses ttl and class
|
|
|
|
// fields too.
|
|
|
|
// pub struct OPT;
|
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct APL;
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct DS {
|
|
|
|
key_tag: u16,
|
|
|
|
algorithm: u8,
|
|
|
|
digest_type: u8,
|
|
|
|
digest: HexRemainingBlob,
|
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct SSHFP {
|
|
|
|
algorithm: u8,
|
|
|
|
fingerprint_type: u8,
|
2017-12-21 12:32:14 +00:00
|
|
|
// RFC 4255 doesn't specify whether whitespace is allowed.
|
|
|
|
// `HexRemainingBlob` allows whitespace.
|
2017-12-16 20:58:18 +00:00
|
|
|
fingerprint: HexRemainingBlob,
|
|
|
|
}
|
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
pub use super::weird_structs::IPSECKEY;
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct RRSIG {
|
|
|
|
rr_type: Type,
|
|
|
|
algorithm: u8,
|
|
|
|
labels: u8,
|
|
|
|
original_ttl: u32,
|
2017-12-21 12:32:14 +00:00
|
|
|
signature_expiration: Time,
|
|
|
|
signature_inception: Time,
|
2017-12-16 20:58:18 +00:00
|
|
|
key_tag: u16,
|
2017-12-21 12:32:14 +00:00
|
|
|
signers_name: DnsCanonicalName,
|
|
|
|
signature: Base64RemainingBlob,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct NSEC {
|
2017-12-26 16:30:08 +00:00
|
|
|
next: DnsName, // RFC 6840 says not canonic (updates RFC 4034)
|
2017-12-21 12:32:14 +00:00
|
|
|
types: NsecTypeBitmap,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct DNSKEY {
|
|
|
|
flags: u16,
|
|
|
|
protocol: u8,
|
|
|
|
algorithm: u8,
|
2017-12-21 12:32:14 +00:00
|
|
|
public_key: Base64RemainingBlob,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(IN)]
|
|
|
|
pub struct DHCID {
|
|
|
|
content: Base64RemainingBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct NSEC3 {
|
|
|
|
hash_algorithm: u8,
|
|
|
|
flags: u8,
|
|
|
|
iterations: u16,
|
|
|
|
salt: HexShortBlob,
|
2017-12-21 12:32:14 +00:00
|
|
|
next_hashed: NextHashedOwnerName,
|
|
|
|
types: NsecTypeBitmap,
|
2017-12-16 20:58:18 +00:00
|
|
|
}
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct NSEC3PARAM {
|
|
|
|
hash_algorithm: u8,
|
|
|
|
flags: u8,
|
|
|
|
iterations: u16,
|
|
|
|
salt: HexShortBlob,
|
|
|
|
}
|
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct TLSA {
|
|
|
|
// TODO: support acronyms from https://tools.ietf.org/html/rfc7218
|
|
|
|
cert_usage: u8,
|
|
|
|
selector: u8,
|
|
|
|
matching_type: u8,
|
|
|
|
data: HexRemainingBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct SMIMEA {
|
|
|
|
// TODO: support acronyms from https://tools.ietf.org/html/rfc7218
|
|
|
|
cert_usage: u8,
|
|
|
|
selector: u8,
|
|
|
|
matching_type: u8,
|
|
|
|
data: HexRemainingBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct HIP;
|
2017-12-26 16:30:08 +00:00
|
|
|
|
2017-12-29 13:07:58 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct NINFO {
|
|
|
|
text: LongText,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-29 13:07:58 +00:00
|
|
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct RKEY {
|
|
|
|
flags: u16,
|
|
|
|
protocol: u8,
|
|
|
|
algorithm: u8,
|
|
|
|
public_key: Base64RemainingBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct TALINK;
|
|
|
|
|
2017-12-29 13:07:58 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct CDS {
|
|
|
|
key_tag: u16,
|
|
|
|
algorithm: u8,
|
|
|
|
digest_type: u8,
|
|
|
|
digest: HexRemainingBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-29 13:07:58 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct CDNSKEY {
|
|
|
|
flags: u16,
|
|
|
|
protocol: u8,
|
|
|
|
algorithm: u8,
|
|
|
|
public_key: Base64RemainingBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct OPENPGPKEY {
|
|
|
|
public_key: Base64RemainingBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct CSYNC;
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
pub struct SPF {
|
|
|
|
text: LongText,
|
|
|
|
}
|
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct UINFO;
|
2017-12-26 16:30:08 +00:00
|
|
|
|
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct UID;
|
2017-12-26 16:30:08 +00:00
|
|
|
|
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct GID;
|
2017-12-26 16:30:08 +00:00
|
|
|
|
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct UNSPEC;
|
2017-12-26 16:30:08 +00:00
|
|
|
|
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct NID;
|
2017-12-26 16:30:08 +00:00
|
|
|
|
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct L32;
|
2017-12-26 16:30:08 +00:00
|
|
|
|
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct L64;
|
2017-12-26 16:30:08 +00:00
|
|
|
|
|
|
|
// #[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
// #[RRClass(?)]
|
2017-12-16 20:58:18 +00:00
|
|
|
// pub struct LP;
|
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct EUI48 {
|
|
|
|
addr: EUI48Addr,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct EUI64 {
|
|
|
|
addr: EUI64Addr
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct TKEY {
|
|
|
|
algorithm: DnsName,
|
2017-12-28 18:12:23 +00:00
|
|
|
inception: u32,
|
|
|
|
expiration: u32,
|
2017-12-27 20:50:51 +00:00
|
|
|
mode: u16,
|
|
|
|
error: u16,
|
|
|
|
key: Base64LongBlob,
|
|
|
|
other: Base64LongBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct TSIG {
|
|
|
|
algorithm: DnsName,
|
|
|
|
signed: Time48,
|
|
|
|
fudge: u16,
|
|
|
|
mac: Base64LongBlob,
|
|
|
|
original_id: u16,
|
|
|
|
error: u16,
|
|
|
|
other: Base64LongBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// QTYPEs: IXFR, AXFR, MAILB, MAILA, ANY
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
#[RRClass(ANY)]
|
2017-12-21 12:32:14 +00:00
|
|
|
pub struct URI {
|
|
|
|
priority: u16,
|
|
|
|
weight: u16,
|
|
|
|
target: UriText,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
2017-12-26 16:30:08 +00:00
|
|
|
// #[RRClass(?)]
|
2017-12-21 12:32:14 +00:00
|
|
|
pub struct CAA {
|
|
|
|
flags: u8,
|
|
|
|
tag: UnquotedShortText,
|
|
|
|
value: RemainingText,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
|
|
|
// pub struct AVC;
|
|
|
|
// pub struct DOA;
|
|
|
|
|
2017-12-27 20:50:51 +00:00
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(ANY)]
|
|
|
|
pub struct DLV {
|
|
|
|
key_tag: u16,
|
|
|
|
algorithm: u8,
|
|
|
|
digest_type: u8,
|
|
|
|
digest: HexRemainingBlob,
|
|
|
|
}
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2017-12-26 16:30:08 +00:00
|
|
|
// powerdns
|
|
|
|
#[derive(Clone, PartialEq, Eq, Debug, DnsPacketData, DnsTextData, RRData)]
|
|
|
|
#[RRClass(IN)] // used to lookup A and AAAA - only useful in IN
|
|
|
|
pub struct ALIAS {
|
|
|
|
content: DnsName,
|
|
|
|
}
|