summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9108.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc9108.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc9108.txt')
-rw-r--r--doc/rfc/rfc9108.txt608
1 files changed, 608 insertions, 0 deletions
diff --git a/doc/rfc/rfc9108.txt b/doc/rfc/rfc9108.txt
new file mode 100644
index 0000000..0aa1e8f
--- /dev/null
+++ b/doc/rfc/rfc9108.txt
@@ -0,0 +1,608 @@
+
+
+
+
+Internet Engineering Task Force (IETF) L. Lhotka
+Request for Comments: 9108 CZ.NIC
+Category: Standards Track P. Špaček
+ISSN: 2070-1721 Internet Systems Consortium
+ September 2021
+
+
+ YANG Types for DNS Classes and Resource Record Types
+
+Abstract
+
+ This document introduces the YANG module "iana-dns-class-rr-type",
+ which contains derived types reflecting two IANA registries: DNS
+ CLASSes and Resource Record (RR) TYPEs. These YANG types are
+ intended as the minimum basis for future data modeling work.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9108.
+
+Copyright Notice
+
+ Copyright (c) 2021 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Terminology
+ 3. YANG Design Considerations
+ 4. IANA Considerations
+ 4.1. URI Registrations
+ 4.2. YANG Module Registrations
+ 5. Security Considerations
+ 6. References
+ 6.1. Normative References
+ 6.2. Informative References
+ Appendix A. XSLT Stylesheet
+ Authors' Addresses
+
+1. Introduction
+
+ YANG [RFC7950] has become a de facto standard as a language for
+ modeling configuration and state data, as well as specifying
+ management operations and asynchronous notifications. It is
+ reasonable to expect that the approach based on utilizing such data
+ models along with standard management protocols such as
+ NETCONF [RFC6241] and RESTCONF [RFC8040] can be effectively used in
+ DNS operations, too. In fact, several efforts are currently underway
+ that attempt to use NETCONF or RESTCONF for configuring and managing
+
+ * authoritative servers,
+
+ * resolvers, and
+
+ * zone data.
+
+ While it is possible to use the management protocols mentioned above
+ with ad hoc or proprietary data models, their real potential can be
+ realized only if there is a (completely or partly) unified data model
+ supported by multiple DNS software implementations. Operators can
+ then, for instance, run several DNS server implementations in
+ parallel, and use a common configuration and management interface and
+ data for all of them. Also, it becomes considerably easier to
+ migrate to another implementation.
+
+ Based on the previous experience from the IETF Routing Area, it is to
+ be expected that the development of unified data models for DNS will
+ be a lengthy and complicated process that will require active
+ cooperation and compromise from the vendors and developers of major
+ DNS server platforms. Nevertheless, it is likely that any DNS-
+ related data modeling effort will need to use various DNS parameters
+ and enumerations that are specified in several IANA registries. For
+ use with YANG, these parameters and enumerations have to be
+ translated into corresponding YANG types or other structures. Such
+ translations should be straightforward and relatively
+ uncontroversial.
+
+ This document provides a translation of two fundamental DNS-related
+ IANA registries to YANG. It contains the initial version of the YANG
+ module "iana-dns-class-rr-type", which defines derived types for the
+ common parameters of DNS resource records (RR): class and type.
+ These YANG types, "dns-class" and "rr-type", reflect the IANA
+ registries "DNS CLASSes" and "Resource Record (RR) TYPEs"
+ [IANA-DNS-PARAMETERS].
+
+ Appendix A contains an XSLT 1.0 stylesheet that is intended to be
+ used by IANA for generating the initial version of the "iana-dns-
+ class-rr-type" YANG module. Subsequently, whenever a new class or RR
+ type is added to the above registries, IANA will also update the
+ "iana-dns-class-rr-type" YANG module, following the instructions in
+ Section 4 below.
+
+2. Terminology
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+ The terminology for describing YANG data models can be found in
+ [RFC7950]. DNS terminology used in this document can be found in
+ [RFC1035] and [RFC8499].
+
+3. YANG Design Considerations
+
+ At the time of writing, the "Domain Name System (DNS) Parameters"
+ [IANA-DNS-PARAMETERS] contains altogether thirteen registries. The
+ YANG module "iana-dns-class-rr-type" defines derived types
+ corresponding to only two of the registries that are essential for
+ data models involving zone data, namely "DNS CLASSes" and "Resource
+ Record (RR) TYPEs". It is expected that the remaining registries in
+ [IANA-DNS-PARAMETERS], as well as other DNS-related IANA registries,
+ will be analogously reflected in future YANG modules as necessary.
+ This way, an appropriate combination of YANG modules can be chosen
+ depending on which YANG types are needed for a given data modeling
+ purpose.
+
+ The registries "DNS CLASSes" and "Resource Record (RR) TYPEs" are
+ transformed into YANG enumeration types "dns-class-name" and "rr-
+ type-name", respectively. This is the initial fragment of the
+ former:
+
+ typedef dns-class-name {
+ type enumeration {
+ enum IN {
+ value 1;
+ description
+ "Internet (IN)";
+ reference
+ "RFC 1035";
+ }
+ ...
+ }
+ ...
+ }
+
+ The other derived type, "rr-type-name", is defined similarly.
+
+ [RFC3597] introduced the option of specifying a class or RR type via
+ its assigned decimal number as an alternative to the mnemonic name.
+ For example, the "IN" class can be equivalently written as "CLASS1",
+ and "AAAA" type can be written as "TYPE28".
+
+ Accordingly, the derived types "dns-class" and "rr-type" are defined
+ in the YANG module as a union of two member types:
+
+ * 16-bit decimal integer ("uint16")
+
+ * mnemonic name belonging to the enumerations "dns-class-name" and
+ "rr-type-name", respectively.
+
+ For instance, the "rr-type" type is defined as follows:
+
+ typedef rr-type {
+ type union {
+ type uint16;
+ type rr-type-name;
+ }
+ description
+ "This type allows reference to a DNS resource record type
+ using either the assigned mnemonic name or numeric value.";
+ }
+
+ As unassigned and reserved class and RR type values are not included
+ in the mnemonic name enumerations, they can only be specified using
+ their decimal values.
+
+4. IANA Considerations
+
+ This section deals with actions and processes necessary for IANA to
+ undertake to maintain the "iana-dns-class-rr-type" YANG module. This
+ YANG module is intended to reflect the "DNS CLASSes" and "Resource
+ Record (RR) TYPEs" registries in [IANA-DNS-PARAMETERS]. The most
+ recent version of the YANG module is available from the "YANG
+ Parameters" registry [IANA-YANG-PARAMETERS].
+
+ With the publication of this document, IANA has created and posted
+ the initial version of the "iana-dns-class-rr-type" YANG module by
+ applying the XSLT stylesheet from Appendix A to the XML version of
+ [IANA-DNS-PARAMETERS].
+
+ IANA has added this note to the "iana-dns-class-rr-type" item of the
+ "YANG Module Names" registry [IANA-YANG-PARAMETERS]:
+
+ | Classes and types of DNS resource records must not be directly
+ | added to the "iana-dns-class-rr-type" YANG module. They must
+ | instead be added to the "DNS CLASSes" and "Resource Record (RR)
+ | TYPEs" registries, respectively.
+
+ When a new DNS class or RR type is added to the "DNS CLASSes" or
+ "Resource Record (RR) TYPEs" registry, a new "enum" statement SHALL
+ be added to the "dns-class-name" or "rr-type-name" type,
+ respectively. The assigned name defined by the "enum" statement
+ SHALL be the same as the mnemonic name of the new class or type. The
+ following substatements to the "enum" statement SHALL be defined:
+
+ "value": Use the decimal value from the registry.
+
+ "status": Include only if a class or type registration has been
+ deprecated or obsoleted. IANA "deprecated" maps to
+ YANG status "deprecated", and IANA "obsolete" maps to
+ YANG status "obsolete".
+
+ "description": Replicate the corresponding information from the
+ registry, namely the full name of the new DNS class,
+ or the meaning of the new RR type, if any.
+
+ "reference": Replicate the reference(s) from the registry.
+
+ Unassigned or reserved values SHALL NOT be included in the "dns-
+ class-name" and "rr-type-name" enumeration types.
+
+ Each time the "iana-dns-class-rr-type" YANG module is updated, a new
+ "revision" statement SHALL be added before the existing "revision"
+ statements.
+
+ IANA has added this note to the "DNS CLASSes" and "Resource Record
+ (RR) TYPEs" registries:
+
+ | When this registry is modified, the YANG module "iana-dns-class-
+ | rr-type" must be updated as defined in [RFC9108].
+
+ The "Reference" text in the "DNS CLASSes" registry has been updated
+ as follows:
+
+ OLD:
+
+ | [RFC6895]
+
+ NEW:
+
+ | [RFC6895][RFC9108]
+
+ The "Reference" text in the "Resource Record (RR) TYPEs" registry has
+ been updated as follows:
+
+ OLD:
+
+ | [RFC6895][RFC1035]
+
+ NEW:
+
+ | [RFC6895][RFC1035][RFC9108]
+
+4.1. URI Registrations
+
+ This document registers a URI in the "IETF XML Registry" [RFC3688].
+ The following registration has been made:
+
+ URI: urn:ietf:params:xml:ns:yang:iana-dns-class-rr-type
+ Registrant Contact: The IESG.
+ XML: N/A; the requested URI is an XML namespace.
+
+4.2. YANG Module Registrations
+
+ This document registers a YANG module in the "YANG Module Names"
+ registry [RFC6020]. The following registration has been made:
+
+ Name: iana-dns-class-rr-type
+ Namespace: urn:ietf:params:xml:ns:yang:iana-dns-class-rr-type
+ Prefix: dnsct
+ Reference: RFC 9108
+
+5. Security Considerations
+
+ This document translates two IANA registries into YANG data types and
+ otherwise introduces no technology or protocol. The definitions
+ themselves have no security impact on the Internet, but their use in
+ concrete YANG modules might have. The security considerations
+ spelled out in the YANG specification [RFC7950] apply to this
+ document as well.
+
+6. References
+
+6.1. Normative References
+
+ [IANA-DNS-PARAMETERS]
+ IANA, "Domain Name System (DNS) Parameters",
+ <https://www.iana.org/assignments/dns-parameters>.
+
+ [IANA-YANG-PARAMETERS]
+ IANA, "YANG Parameters",
+ <https://www.iana.org/assignments/yang-parameters>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
+ the Network Configuration Protocol (NETCONF)", RFC 6020,
+ DOI 10.17487/RFC6020, October 2010,
+ <https://www.rfc-editor.org/info/rfc6020>.
+
+ [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
+ RFC 7950, DOI 10.17487/RFC7950, August 2016,
+ <https://www.rfc-editor.org/info/rfc7950>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [W3C.REC-xslt-19991116]
+ Clark, J., "XSL Transformations (XSLT) Version 1.0", W3C
+ Recommendation REC-xslt-19991116, November 1999,
+ <https://www.w3.org/TR/1999/REC-xslt-19991116>.
+
+6.2. Informative References
+
+ [RFC1035] Mockapetris, P., "Domain names - implementation and
+ specification", STD 13, RFC 1035, DOI 10.17487/RFC1035,
+ November 1987, <https://www.rfc-editor.org/info/rfc1035>.
+
+ [RFC3597] Gustafsson, A., "Handling of Unknown DNS Resource Record
+ (RR) Types", RFC 3597, DOI 10.17487/RFC3597, September
+ 2003, <https://www.rfc-editor.org/info/rfc3597>.
+
+ [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
+ and A. Bierman, Ed., "Network Configuration Protocol
+ (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
+ <https://www.rfc-editor.org/info/rfc6241>.
+
+ [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
+ Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
+ <https://www.rfc-editor.org/info/rfc8040>.
+
+ [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS
+ Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499,
+ January 2019, <https://www.rfc-editor.org/info/rfc8499>.
+
+Appendix A. XSLT Stylesheet
+
+ This appendix contains an XSLT 1.0 stylesheet [W3C.REC-xslt-19991116]
+ that is to be used to generate the initial revision of the "iana-dns-
+ class-rr-type" YANG module. This is achieved by applying the
+ stylesheet to the XML version of the IANA registry "Domain Name
+ System (DNS) Parameters" [IANA-DNS-PARAMETERS] that was current at
+ the time this document was published.
+
+ Using the ubiquitous xsltproc tool, the YANG module text can be
+ generated with this command:
+
+ $ xsltproc iana-dns-class-rr-type.xsl dns-parameters.xml
+
+ <CODE BEGINS> file "iana-dns-class-rr-type.xsl"
+ <?xml version="1.0" standalone="yes"?>
+ <stylesheet xmlns="http://www.w3.org/1999/XSL/Transform"
+ xmlns:iana="http://www.iana.org/assignments"
+ version="1.0">
+ <output method="text"/>
+ <strip-space elements="*"/>
+
+ <variable name="dq">"</variable>
+ <variable name="sq">'</variable>
+
+ <variable name="module-intro">
+ <text>module iana-dns-class-rr-type {
+ yang-version 1.1;
+ namespace
+ "urn:ietf:params:xml:ns:yang:iana-dns-class-rr-type";
+ prefix dnsct;
+
+ organization
+ "Internet Assigned Numbers Authority (IANA)";
+
+ contact
+ " Internet Assigned Numbers Authority
+
+ Postal: ICANN
+ 12025 Waterfront Drive, Suite 300
+ Los Angeles, CA 90094
+
+ Tel: +1 424 254 5300
+
+ &lt;mailto:iana@iana.org&gt;";
+
+ description
+ "This YANG module translates IANA registries 'DNS CLASSes' and
+ 'Resource Record (RR) TYPEs' to YANG-derived types.
+
+ Copyright (c) 2021 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Simplified BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module was generated from
+ the corresponding IANA registries using an XSLT stylesheet
+ from Appendix A of RFC 9108
+ (https://www.rfc-editor.org/info/rfc9108); see the RFC itself
+ for full legal notices.";
+
+ reference
+ "IANA 'Domain Name System (DNS) Parameters' registry
+ https://www.iana.org/assignments/dns-parameters";</text>
+ <text>&#xA;&#xA;</text>
+ </variable>
+
+ <template name="enum">
+ <param name="id"/>
+ <value-of select="concat(' enum ', $id)"/>
+ <text> {&#xA; value </text>
+ <value-of select="concat(iana:value, ';&#xA;')"/>
+ <if test="contains(iana:description, 'OBSOLETE')">
+ <text> status obsolete;&#xA;</text>
+ </if>
+ <apply-templates select="iana:description"/>
+ <variable name="xrefs" select="iana:xref[@type!='note']"/>
+ <if test="$xrefs">
+ <text> reference&#xA; "</text>
+ <if test="count($xrefs)&gt;1">- </if>
+ <apply-templates select="iana:xref[@type!='note']"/>
+ </if>
+ <text> }&#xA;</text>
+ </template>
+
+ <template match="/">
+ <value-of select="$module-intro"/>
+ <apply-templates select="iana:registry[@id='dns-parameters']"/>
+ <text>}&#xA;</text>
+ </template>
+
+ <template match="iana:registry[@id='dns-parameters']">
+ <apply-templates select="iana:updated"/>
+ <apply-templates
+ select="iana:registry[@id='dns-parameters-2']"/>
+ <apply-templates
+ select="iana:registry[@id='dns-parameters-4']"/>
+ </template>
+
+ <template match="iana:updated">
+ <value-of select="concat(' revision ', ., ' {')"/>
+ <text>
+ description
+ "Initial revision.";
+ reference
+ "RFC 9108: YANG Types for DNS Classes and Resource Record
+ Types";
+ }
+
+ /* Typedefs */&#xA;&#xA;</text>
+ </template>
+
+ <template match="iana:registry[@id='dns-parameters-2']">
+ <text> typedef dns-class-name {&#xA;</text>
+ <text> type enumeration {&#xA;</text>
+ <apply-templates
+ select="iana:record[not(iana:description='Unassigned' or
+ starts-with(iana:description,'Reserved'))]"
+ mode="class"/>
+ <text> }
+ description
+ "This enumeration type defines mnemonic names and corresponding
+ numeric values of DNS classes.";
+ reference
+ "RFC 6895: Domain Name System (DNS) IANA Considerations";
+ }
+
+ typedef dns-class {
+ type union {
+ type uint16;
+ type dns-class-name;
+ }
+ description
+ "This type allows reference to a DNS class using either the
+ assigned mnemonic name or numeric value.";
+ }&#xA;&#xA;</text>
+ </template>
+
+ <template match="iana:registry[@id='dns-parameters-4']">
+ <text> typedef rr-type-name {&#xA;</text>
+ <text> type enumeration {&#xA;</text>
+ <apply-templates
+ select="iana:record[iana:type!='Unassigned' and
+ iana:type!='Private use' and iana:type!='Reserved']"
+ mode="rr-type"/>
+ <text> }
+ description
+ "This enumeration type defines mnemonic names and corresponding
+ numeric values of DNS resource record types.";
+ reference
+ "- RFC 6895: Domain Name System (DNS) IANA Considerations
+
+ - RFC 1035: Domain names - implementation and specification";
+ }
+
+ typedef rr-type {
+ type union {
+ type uint16;
+ type rr-type-name;
+ }
+ description
+ "This type allows reference to a DNS resource record type
+ using either the assigned mnemonic name or numeric value.";
+ }&#xA;</text>
+ </template>
+
+ <template match="iana:record" mode="class">
+ <call-template name="enum">
+ <with-param name="id">
+ <choose>
+ <when test="contains(iana:description,'(')">
+ <value-of select="substring-before(substring-after(
+ iana:description, '('), ')')"/>
+ </when>
+ <otherwise>
+ <value-of
+ select="substring-after(iana:description, ' ')"/>
+ </otherwise>
+ </choose>
+ </with-param>
+ </call-template>
+ </template>
+
+ <template match="iana:record" mode="rr-type">
+ <call-template name="enum">
+ <with-param name="id" select="iana:type"/>
+ </call-template>
+ </template>
+
+ <template match="iana:description">
+ <text> description&#xA; </text>
+ <value-of select="concat($dq, ., $dq, ';&#xA;')"/>
+ </template>
+
+ <template match="iana:xref">
+ <choose>
+ <when test="@type='rfc'">
+ <value-of
+ select="concat('RFC ', substring-after(@data, 'rfc'))"/>
+ </when>
+ <when test="@type='person'">
+ <apply-templates
+ select="/iana:registry/iana:people/iana:person[
+ @id=current()/@data]"/>
+ </when>
+ <when test="@type='text'">
+ <value-of select="translate(., $dq, $sq)"/>
+ </when>
+ <otherwise>
+ <value-of select="@data"/>
+ </otherwise>
+ </choose>
+ <choose>
+ <when test="position()=last()">
+ <text>";&#xA;</text>
+ </when>
+ <otherwise>
+ <text>&#xA; - </text>
+ </otherwise>
+ </choose>
+ </template>
+
+ <template match="iana:person">
+ <value-of select="concat(iana:name, ' &lt;', iana:uri, '&gt;')"/>
+ </template>
+
+ </stylesheet>
+ <CODE ENDS>
+
+Authors' Addresses
+
+ Ladislav Lhotka
+ CZ.NIC
+ Czech Republic
+
+ Email: ladislav.lhotka@nic.cz
+
+
+ Petr Špaček
+ Internet Systems Consortium
+ Czech Republic
+
+ Email: pspacek@isc.org