From a07fb80b4597b7c6b8a6bb151fe3a943bf0846d3 Mon Sep 17 00:00:00 2001 From: ddidderr Date: Sun, 3 Apr 2022 18:22:47 +0200 Subject: [PATCH] (chore) Change DNS OpCode and DNS RCode enum names to CamelCase (#13) and use the same names as the RFC. Also added some RFC documentation as doc comments in the code. Co-authored-by: ddidderr Reviewed-on: https://git.comff.net/rustics/dns/pulls/13 --- src/proto.rs | 115 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 82 insertions(+), 33 deletions(-) diff --git a/src/proto.rs b/src/proto.rs index 838c0c9..8eb962a 100644 --- a/src/proto.rs +++ b/src/proto.rs @@ -1,57 +1,106 @@ use std::convert::TryInto; +/// Taken from RFC 6895, 2.2. OpCode Assignment +/// Currently, DNS OpCodes are assigned as follows: +/// OpCode Name Reference +/// +/// 0 Query [RFC1035] +/// 1 IQuery (Inverse Query, OBSOLETE) [RFC3425] +/// 2 Status [RFC1035] +/// 3 Unassigned +/// 4 Notify [RFC1996] +/// 5 Update [RFC2136] +/// 6-15 Unassigned #[derive(Debug)] pub enum DNSOpCode { - QUERY = 0, - IQUERY = 1, // obsolete - STATUS = 2, - NOTIFY = 4, - UPDATE = 5, + Query = 0, + IQuery = 1, // obsolete + Status = 2, + Notify = 4, + Update = 5, } impl From for DNSOpCode { fn from(val: u16) -> Self { match val { - 0 => DNSOpCode::QUERY, - 1 => DNSOpCode::IQUERY, - 2 => DNSOpCode::STATUS, - 4 => DNSOpCode::NOTIFY, - 5 => DNSOpCode::UPDATE, + 0 => DNSOpCode::Query, + 1 => DNSOpCode::IQuery, + 2 => DNSOpCode::Status, + 4 => DNSOpCode::Notify, + 5 => DNSOpCode::Update, _ => panic!("KACKE"), } } } -// TODO: FIXME: TECHNISCHE SCHULD (alle pubs weg und gucken wie es richtig geht) +/// Taken from RFC 6895, 2.3. RCODE Assignment +/// +/// RCODE Name Description Reference +/// +/// 0 NoError No Error [RFC1035] +/// 1 FormErr Format Error [RFC1035] +/// 2 ServFail Server Failure [RFC1035] +/// 3 NXDomain Non-Existent Domain [RFC1035] +/// 4 NotImp Not Implemented [RFC1035] +/// 5 Refused Query Refused [RFC1035] +/// 6 YXDomain Name Exists when it should not [RFC2136] +/// 7 YXRRSet RR Set Exists when it should not [RFC2136] +/// 8 NXRRSet RR Set that should exist does not [RFC2136] +/// 9 NotAuth Server Not Authoritative for zone [RFC2136] +/// 9 NotAuth Not Authorized [RFC2845] +/// 10 NotZone Name not contained in zone [RFC2136] +/// +/// 11 - 15 Unassigned +/// +/// 16 BADVERS Bad OPT Version [RFC6891] +/// 16 BADSIG TSIG Signature Failure [RFC2845] +/// 17 BADKEY Key not recognized [RFC2845] +/// 18 BADTIME Signature out of time window [RFC2845] +/// 19 BADMODE Bad TKEY Mode [RFC2930] +/// 20 BADNAME Duplicate key name [RFC2930] +/// 21 BADALG Algorithm not supported [RFC2930] +/// 22 BADTRUNC Bad Truncation [RFC4635] +/// +/// 23 - 3,840 +/// 0x0017 - 0x0F00 Unassigned +/// +/// 3,841 - 4,095 +/// 0x0F01 - 0x0FFF Reserved for Private Use +/// +/// 4,096 - 65,534 +/// 0x1000 - 0xFFFE Unassigned +/// +/// 65,535 +/// 0xFFFF Reserved; can only be allocated by Standards Action. #[derive(Debug)] pub enum DNSRCode { - NOERROR = 0, - FORMERR = 1, - SERVFAIL = 2, - NXDOMAIN = 3, - NOTIMP = 4, - REFUSED = 5, - XYDOMAIN = 6, - XYRRSET = 7, - NXRRSET = 8, - NOTAUTH = 9, - NOTINZONE = 10, + NoError = 0, + FormErr = 1, + ServFail = 2, + NXDomain = 3, + NotImp = 4, + Refused = 5, + YXDomain = 6, + YXRRSet = 7, + NXRRSet = 8, + NotAuth = 9, + NotZone = 10, } impl From for DNSRCode { fn from(val: u16) -> Self { match val { - 0 => DNSRCode::NOERROR, - 1 => DNSRCode::FORMERR, - 2 => DNSRCode::SERVFAIL, - 3 => DNSRCode::NXDOMAIN, - 4 => DNSRCode::NOTIMP, - 5 => DNSRCode::REFUSED, - 6 => DNSRCode::XYDOMAIN, - 7 => DNSRCode::XYRRSET, - 8 => DNSRCode::NXRRSET, - 9 => DNSRCode::NOTAUTH, - 10 => DNSRCode::NOTINZONE, + 0 => DNSRCode::NoError, + 1 => DNSRCode::FormErr, + 2 => DNSRCode::ServFail, + 3 => DNSRCode::NXDomain, + 4 => DNSRCode::NotImp, + 5 => DNSRCode::Refused, + 6 => DNSRCode::YXDomain, + 7 => DNSRCode::YXRRSet, + 8 => DNSRCode::NXRRSet, + 9 => DNSRCode::NotAuth, + 10 => DNSRCode::NotZone, _ => panic!("KACKE"), } }