rust-dnsbox/lib/dnsbox-base/src/records/structs.rs

562 lines
14 KiB
Rust
Raw Normal View History

2019-07-01 15:43:34 +00:00
use crate::common_types::*;
2017-12-16 20:58:18 +00:00
use std::net::{Ipv4Addr, Ipv6Addr};
2019-07-01 15:43:34 +00:00
use crate::ser::{packet::DnsPacketData, text::DnsTextData, RRData};
2017-12-16 20:58:18 +00:00
// 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 {
2018-03-07 08:25:44 +00:00
pub nsdname: DnsCompressedName,
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 MD {
2018-03-07 08:25:44 +00:00
pub madname: DnsCompressedName,
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 MF {
2018-03-07 08:25:44 +00:00
pub madname: DnsCompressedName,
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 CNAME {
2018-03-07 08:25:44 +00:00
pub cname: DnsCompressedName,
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 SOA {
2018-03-07 08:25:44 +00:00
pub mname: DnsCompressedName,
pub rname: DnsCompressedName,
pub serial: u32,
pub refresh: u32,
pub retry: u32,
pub expire: u32,
pub minimum: u32,
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 MB {
2018-03-07 08:25:44 +00:00
pub madname: DnsCompressedName,
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 MG {
2018-03-07 08:25:44 +00:00
pub mgmname: DnsCompressedName,
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 MR {
2018-03-07 08:25:44 +00:00
pub newname: DnsCompressedName,
2017-12-16 20:58:18 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
// pub address: Ipv4Addr,
// pub protocol: u8,
// pub bitmap: ..., // remaining bytes
2017-12-21 12:32:14 +00:00
// }
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 {
2018-03-07 08:25:44 +00:00
pub ptrdname: DnsCompressedName,
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 HINFO {
2018-03-07 08:25:44 +00:00
pub cpu: ShortText,
pub os: 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-16 20:58:18 +00:00
pub struct MINFO {
2018-03-07 08:25:44 +00:00
pub rmailbx: DnsCompressedName,
pub emailbx: DnsCompressedName,
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 MX {
2018-03-07 08:25:44 +00:00
pub preference: u16,
pub mxname: DnsCompressedName,
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 TXT {
2018-03-07 08:25:44 +00:00
pub text: LongText,
2017-12-16 20:58:18 +00:00
}
// 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 {
2018-03-07 08:25:44 +00:00
pub mbox: DnsCanonicalName,
pub 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 {
2018-03-07 08:25:44 +00:00
pub subtype: u16,
pub hostname: DnsCanonicalName,
2017-12-21 12:32:14 +00:00
}
// 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 {
2018-03-07 08:25:44 +00:00
// pub psdn_address: ShortText,
2017-12-21 12:32:14 +00:00
// }
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 {
2018-03-07 08:25:44 +00:00
// pub isdn_address: ShortText,
// pub subaddress: Option<ShortText>,
2017-12-21 12:32:14 +00:00
// }
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 {
2018-03-07 08:25:44 +00:00
pub preference: u16,
pub intermediate: DnsCanonicalName,
2017-12-21 12:32:14 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub owner: DnsCanonicalName,
2017-12-21 12:32:14 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub rr_type: Type,
pub algorithm: u8,
pub labels: u8,
2017-12-21 12:32:14 +00:00
// 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?).
2018-03-07 08:25:44 +00:00
pub original_ttl: OptionalTTL,
pub signature_expiration: TimeStrict,
pub signature_inception: TimeStrict,
pub key_tag: u16,
pub signers_name: DnsCanonicalName,
pub signature: Base64RemainingBlob,
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 KEY {
2018-03-07 08:25:44 +00:00
pub flags: u16,
pub protocol: u8,
pub algorithm: u8,
pub public_key: Base64RemainingBlob,
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-21 12:32:14 +00:00
pub struct PX {
2018-03-07 08:25:44 +00:00
pub preference: u16,
pub map822: DnsCanonicalName,
pub 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 {
2018-03-07 08:25:44 +00:00
pub longitude: ShortText,
pub latitude: ShortText,
pub altitude: ShortText,
2017-12-26 16:30:08 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub addr: Ipv6Addr,
2017-12-16 20:58:18 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub next: DnsCanonicalName,
pub types: NxtTypeBitmap,
2017-12-21 12:32:14 +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 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 {
2018-03-07 08:25:44 +00:00
pub preference: u16,
pub weight: u16,
pub port: u16,
pub 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 {
2018-03-07 08:25:44 +00:00
pub order: u16,
pub preference: u16,
pub flags: ShortText,
pub service: ShortText,
pub regexp: ShortText,
pub 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 {
2018-03-07 08:25:44 +00:00
pub preference: u16,
pub 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 {
2018-03-07 08:25:44 +00:00
pub cert_type: u16,
pub key_tag: u16,
pub algorithm: u8,
pub 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 {
2018-03-07 08:25:44 +00:00
pub 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 {
2018-03-07 08:25:44 +00:00
pub key_tag: u16,
pub algorithm: u8,
pub digest_type: u8,
pub digest: HexRemainingBlob,
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 SSHFP {
2018-03-07 08:25:44 +00:00
pub algorithm: u8,
pub fingerprint_type: u8,
2017-12-21 12:32:14 +00:00
// RFC 4255 doesn't specify whether whitespace is allowed.
// `HexRemainingBlob` allows whitespace.
2018-03-07 08:25:44 +00:00
pub fingerprint: HexRemainingBlob,
2017-12-16 20:58:18 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub rr_type: Type,
pub algorithm: u8,
pub labels: u8,
pub original_ttl: u32,
pub signature_expiration: Time,
pub signature_inception: Time,
pub key_tag: u16,
pub signers_name: DnsCanonicalName,
pub 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 {
2018-03-07 08:25:44 +00:00
pub next: DnsName, // RFC 6840 says not canonic (updates RFC 4034)
pub 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 {
2018-03-07 08:25:44 +00:00
pub flags: u16,
pub protocol: u8,
pub algorithm: u8,
pub 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 {
2018-03-07 08:25:44 +00:00
pub content: Base64RemainingBlob,
2017-12-27 20:50:51 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub hash_algorithm: u8,
pub flags: u8,
pub iterations: u16,
pub salt: HexShortBlob,
pub next_hashed: NextHashedOwnerName,
pub 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 {
2018-03-07 08:25:44 +00:00
pub hash_algorithm: u8,
pub flags: u8,
pub iterations: u16,
pub salt: HexShortBlob,
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 TLSA {
// TODO: support acronyms from https://tools.ietf.org/html/rfc7218
2018-03-07 08:25:44 +00:00
pub cert_usage: u8,
pub selector: u8,
pub matching_type: u8,
pub data: HexRemainingBlob,
2017-12-27 20:50:51 +00:00
}
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
2018-03-07 08:25:44 +00:00
pub cert_usage: u8,
pub selector: u8,
pub matching_type: u8,
pub data: HexRemainingBlob,
2017-12-27 20:50:51 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub text: LongText,
2017-12-29 13:07:58 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub flags: u16,
pub protocol: u8,
pub algorithm: u8,
pub public_key: Base64RemainingBlob,
2017-12-29 13:07:58 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub key_tag: u16,
pub algorithm: u8,
pub digest_type: u8,
pub digest: HexRemainingBlob,
2017-12-29 13:07:58 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub flags: u16,
pub protocol: u8,
pub algorithm: u8,
pub public_key: Base64RemainingBlob,
2017-12-29 13:07:58 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub public_key: Base64RemainingBlob,
2017-12-27 20:50:51 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub text: LongText,
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 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 {
2018-03-07 08:25:44 +00:00
pub addr: EUI48Addr,
2017-12-27 20:50:51 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub addr: EUI64Addr
2017-12-27 20:50:51 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub algorithm: DnsName,
pub inception: u32,
pub expiration: u32,
pub mode: u16,
pub error: u16,
pub key: Base64LongBlob,
pub other: Base64LongBlob,
2017-12-27 20:50:51 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub algorithm: DnsName,
pub signed: Time48,
pub fudge: u16,
pub mac: Base64LongBlob,
pub original_id: u16,
pub error: u16,
pub other: Base64LongBlob,
2017-12-27 20:50:51 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub priority: u16,
pub weight: u16,
pub target: UriText,
2017-12-21 12:32:14 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub flags: u8,
pub tag: UnquotedShortText,
pub value: RemainingText,
2017-12-21 12:32:14 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub key_tag: u16,
pub algorithm: u8,
pub digest_type: u8,
pub digest: HexRemainingBlob,
2017-12-27 20:50:51 +00:00
}
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 {
2018-03-07 08:25:44 +00:00
pub content: DnsName,
2017-12-26 16:30:08 +00:00
}