+module ietf-yang-types {
+
+ namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+ prefix "yang";
+
+ organization
+ "IETF Network Modeling (NETMOD) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+
+ Editor: Juergen Schoenwaelder
+ <mailto:jschoenwaelder@constructor.university>";
+
+ description
+ "This module contains a collection of generally useful derived
+ YANG data types.
+
+ 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 (RFC 2119) (RFC 8174) when, and only when,
+ they appear in all capitals, as shown here.
+
+ Copyright (c) 2022 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 Revised 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 is part of RFC XXXX;
+ see the RFC itself for full legal notices.";
+
+ revision 2023-01-23 {
+ description
+ "This revision adds the following new data types:
+ - yang:date-with-zone-offset
+ - yang:date-no-zone
+ - yang:time-with-zone-offset
+ - yang:time-no-zone
+ - yang:hours32
+ - yang:minutes32
+ - yang:seconds32
+ - yang:centiseconds32
+ - yang:milliseconds32
+ - yang:microseconds32
+ - yang:microseconds64
+ - yang:nanoseconds32
+ - yang:nanoseconds64
+ - yang:language-tag
+ The yang-identifier definition has been aligned with YANG 1.1.
+ Several pattern statements have been improved.";
+ reference
+ "RFC XXXX: Common YANG Data Types";
+ }
+
+ revision 2013-07-15 {
+ description
+ "This revision adds the following new data types:
+ - yang:yang-identifier
+ - yang:hex-string
+ - yang:uuid
+ - yang:dotted-quad";
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ revision 2010-09-24 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 6021: Common YANG Data Types";
+ }
+
+ /*** collection of counter and gauge types ***/
+
+ typedef counter32 {
+ type uint32;
+ description
+ "The counter32 type represents a non-negative integer
+ that monotonically increases until it reaches a
+ maximum value of 2^32-1 (4294967295 decimal), when it
+ wraps around and starts increasing again from zero.
+
+ Counters have no defined 'initial' value, and thus, a
+ single value of a counter has (in general) no information
+ content. Discontinuities in the monotonically increasing
+ value normally occur at re-initialization of the
+ management system, and at other times as specified in the
+ description of a schema node using this type. If such
+ other times can occur, for example, the instantiation of
+ a schema node of type counter32 at times other than
+ re-initialization, then a corresponding schema node
+ should be defined, with an appropriate type, to indicate
+ the last discontinuity.
+
+ The counter32 type should not be used for configuration
+ schema nodes. A default statement SHOULD NOT be used in
+ combination with the type counter32.
+
+ In the value set and its semantics, this type is equivalent
+ to the Counter32 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef zero-based-counter32 {
+ type yang:counter32;
+ default "0";
+ description
+ "The zero-based-counter32 type represents a counter32
+ that has the defined 'initial' value zero.
+ A schema node instance of this type will be set to zero (0)
+ on creation and will thereafter increase monotonically until
+ it reaches a maximum value of 2^32-1 (4294967295 decimal),
+ when it wraps around and starts increasing again from zero.
+
+ Provided that an application discovers a new schema node
+ instance of this type within the minimum time to wrap, it
+ can use the 'initial' value as a delta. It is important for
+ a management station to be aware of this minimum time and the
+ actual time between polls, and to discard data if the actual
+ time is too long or there is no defined minimum time.
+
+ In the value set and its semantics, this type is equivalent
+ to the ZeroBasedCounter32 textual convention of the SMIv2.";
+ reference
+ "RFC 4502: Remote Network Monitoring Management Information
+ Base Version 2";
+ }
+
+ typedef counter64 {
+ type uint64;
+ description
+ "The counter64 type represents a non-negative integer
+ that monotonically increases until it reaches a
+ maximum value of 2^64-1 (18446744073709551615 decimal),
+ when it wraps around and starts increasing again from zero.
+
+ Counters have no defined 'initial' value, and thus, a
+ single value of a counter has (in general) no information
+ content. Discontinuities in the monotonically increasing
+ value normally occur at re-initialization of the
+ management system, and at other times as specified in the
+ description of a schema node using this type. If such
+ other times can occur, for example, the instantiation of
+ a schema node of type counter64 at times other than
+ re-initialization, then a corresponding schema node
+ should be defined, with an appropriate type, to indicate
+ the last discontinuity.
+
+ The counter64 type should not be used for configuration
+ schema nodes. A default statement SHOULD NOT be used in
+ combination with the type counter64.
+
+ In the value set and its semantics, this type is equivalent
+ to the Counter64 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef zero-based-counter64 {
+ type yang:counter64;
+ default "0";
+ description
+ "The zero-based-counter64 type represents a counter64 that
+ has the defined 'initial' value zero.
+
+ A schema node instance of this type will be set to zero (0)
+ on creation and will thereafter increase monotonically until
+ it reaches a maximum value of 2^64-1 (18446744073709551615
+ decimal), when it wraps around and starts increasing again
+ from zero.
+
+ Provided that an application discovers a new schema node
+ instance of this type within the minimum time to wrap, it
+ can use the 'initial' value as a delta. It is important for
+ a management station to be aware of this minimum time and the
+ actual time between polls, and to discard data if the actual
+ time is too long or there is no defined minimum time.
+
+ In the value set and its semantics, this type is equivalent
+ to the ZeroBasedCounter64 textual convention of the SMIv2.";
+ reference
+ "RFC 2856: Textual Conventions for Additional High Capacity
+ Data Types";
+ }
+
+ typedef gauge32 {
+ type uint32;
+ description
+ "The gauge32 type represents a non-negative integer, which
+ may increase or decrease, but shall never exceed a maximum
+ value, nor fall below a minimum value. The maximum value
+ cannot be greater than 2^32-1 (4294967295 decimal), and
+ the minimum value cannot be smaller than 0. The value of
+ a gauge32 has its maximum value whenever the information
+ being modeled is greater than or equal to its maximum
+ value, and has its minimum value whenever the information
+ being modeled is smaller than or equal to its minimum value.
+ If the information being modeled subsequently decreases
+ below (increases above) the maximum (minimum) value, the
+ gauge32 also decreases (increases).
+
+ In the value set and its semantics, this type is equivalent
+ to the Gauge32 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef gauge64 {
+ type uint64;
+ description
+ "The gauge64 type represents a non-negative integer, which
+ may increase or decrease, but shall never exceed a maximum
+ value, nor fall below a minimum value. The maximum value
+ cannot be greater than 2^64-1 (18446744073709551615), and
+ the minimum value cannot be smaller than 0. The value of
+ a gauge64 has its maximum value whenever the information
+ being modeled is greater than or equal to its maximum
+ value, and has its minimum value whenever the information
+ being modeled is smaller than or equal to its minimum value.
+ If the information being modeled subsequently decreases
+ below (increases above) the maximum (minimum) value, the
+ gauge64 also decreases (increases).
+
+ In the value set and its semantics, this type is equivalent
+ to the CounterBasedGauge64 SMIv2 textual convention defined
+ in RFC 2856";
+ reference
+ "RFC 2856: Textual Conventions for Additional High Capacity
+ Data Types";
+ }
+
+ /*** collection of identifier-related types ***/
+
+ typedef object-identifier {
+ type string {
+ pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9][0-9]*))))'
+ + '(\.(0|([1-9][0-9]*)))*';
+ }
+ description
+ "The object-identifier type represents administratively
+ assigned names in a registration-hierarchical-name tree.
+
+ Values of this type are denoted as a sequence of numerical
+ non-negative sub-identifier values. Each sub-identifier
+ value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers
+ are separated by single dots and without any intermediate
+ whitespace.
+
+ The ASN.1 standard restricts the value space of the first
+ sub-identifier to 0, 1, or 2. Furthermore, the value space
+ of the second sub-identifier is restricted to the range
+ 0 to 39 if the first sub-identifier is 0 or 1. Finally,
+ the ASN.1 standard requires that an object identifier
+ has always at least two sub-identifiers. The pattern
+ captures these restrictions.
+
+ Although the number of sub-identifiers is not limited,
+ module designers should realize that there may be
+ implementations that stick with the SMIv2 limit of 128
+ sub-identifiers.
+
+ This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+ since it is not restricted to 128 sub-identifiers. Hence,
+ this type SHOULD NOT be used to represent the SMIv2 OBJECT
+ IDENTIFIER type; the object-identifier-128 type SHOULD be
+ used instead.";
+ reference
+ "ISO9834-1: Information technology -- Open Systems
+ Interconnection -- Procedures for the operation of OSI
+ Registration Authorities: General procedures and top
+ arcs of the ASN.1 Object Identifier tree";
+ }
+
+ typedef object-identifier-128 {
+ type object-identifier {
+ pattern '[0-9]*(\.[0-9]*){1,127}';
+ }
+ description
+ "This type represents object-identifiers restricted to 128
+ sub-identifiers.
+
+ In the value set and its semantics, this type is equivalent
+ to the OBJECT IDENTIFIER type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ /*** collection of types related to date and time ***/
+
+ typedef date-and-time {
+ type string {
+ pattern '[0-9]{4}-(1[0-2]|0[1-9])-(0[1-9]|[1-2][0-9]|3[0-1])'
+ + 'T(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]+)?'
+ + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?';
+ }
+ description
+ "The date-and-time type is a profile of the ISO 8601
+ standard for representation of dates and times using the
+ Gregorian calendar. The profile is defined by the
+ date-time production in Section 5.6 of RFC 3339.
+
+ The date-and-time type is compatible with the dateTime XML
+ schema dateTime type with the following notable exceptions:
+
+ (a) The date-and-time type does not allow negative years.
+
+ (b) The time-offset -00:00 indicates that the date-and-time
+ value is reported in UTC and that the local time zone
+ reference point is unknown. The time-offsets +00:00 and Z
+ both indicate that the date-and-time value is reported in
+ UTC and that the local time reference point is UTC (see RFC
+ 3339 section 4.3).
+
+ This type is not equivalent to the DateAndTime textual
+ convention of the SMIv2 since RFC 3339 uses a different
+ separator between full-date and full-time and provides
+ higher resolution of time-secfrac.
+
+ The canonical format for date-and-time values with a known time
+ zone uses a numeric time zone offset that is calculated using
+ the device's configured known offset to UTC time. A change of
+ the device's offset to UTC time will cause date-and-time values
+ to change accordingly. Such changes might happen periodically
+ in case a server follows automatically daylight saving time
+ (DST) time zone offset changes. The canonical format for
+ date-and-time values with an unknown time zone (usually
+ referring to the notion of local time) uses the time-offset
+ -00:00, i.e., date-and-time values must be reported in UTC.";
+ reference
+ "RFC 3339: Date and Time on the Internet: Timestamps
+ RFC 2579: Textual Conventions for SMIv2
+ XSD-TYPES: XML Schema Definition Language (XSD) 1.1
+ Part 2: Datatypes";
+ }
+
+ typedef date-with-zone-offset {
+ type string {
+ pattern '[0-9]{4}-(1[0-2]|0[1-9])-(0[1-9]|[1-2][0-9]|3[0-1])'
+ + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?';
+ }
+ description
+ "The date type represents a time-interval of the length
+ of a day, i.e., 24 hours.
+
+ The date type is compatible with the XML schema date
+ type with the following notable exceptions:
+ (a) The date type does not allow negative years.
+
+ (b) The time-offset -00:00 indicates that the date value is
+ reported in UTC and that the local time zone reference point
+ is unknown. The time-offsets +00:00 and Z both indicate that
+ the date value is reported in UTC and that the local time
+ reference point is UTC (see RFC 3339 section 4.3).
+
+ The canonical format for date values with a known time
+ zone uses a numeric time zone offset that is calculated using
+ the device's configured known offset to UTC time. A change of
+ the device's offset to UTC time will cause date values
+ to change accordingly. Such changes might happen periodically
+ in case a server follows automatically daylight saving time
+ (DST) time zone offset changes. The canonical format for
+ date values with an unknown time zone (usually referring
+ to the notion of local time) uses the time-offset -00:00,
+ i.e., date values must be reported in UTC.";
+ reference
+ "RFC 3339: Date and Time on the Internet: Timestamps
+ XSD-TYPES: XML Schema Definition Language (XSD) 1.1
+ Part 2: Datatypes";
+ }
+
+ typedef date-no-zone {
+ type date-with-zone-offset {
+ pattern '[0-9]{4}-(1[0-2]|0[1-9])-(0[1-9]|[1-2][0-9]|3[0-1])';
+ }
+ description
+ "The date-no-zone type represents a date without the optional
+ time zone offset information.";
+ }
+
+ typedef time-with-zone-offset {
+ type string {
+ pattern '(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]+)?'
+ + '(Z|[\+\-]((1[0-3]|0[0-9]):([0-5][0-9])|14:00))?';
+ }
+ description
+ "The time type represents an instance of time of zero-duration
+ that recurs every day.
+
+ The time type is compatible with the XML schema time
+ type with the following notable exception:
+
+ (a) The time-offset -00:00 indicates that the time value is
+ reported in UTC and that the local time zone reference point
+ is unknown. The time-offsets +00:00 and Z both indicate that
+ the time value is reported in UTC and that the local time
+ reference point is UTC (see RFC 3339 section 4.3).
+
+ The canonical format for time values with a known time
+ zone uses a numeric time zone offset that is calculated using
+ the device's configured known offset to UTC time. A change of
+ the device's offset to UTC time will cause time values
+ to change accordingly. Such changes might happen periodically
+ in case a server follows automatically daylight saving time
+ (DST) time zone offset changes. The canonical format for
+ time values with an unknown time zone (usually referring
+ to the notion of local time) uses the time-offset -00:00,
+ i.e., time values must be reported in UTC.";
+ reference
+ "RFC 3339: Date and Time on the Internet: Timestamps
+ XSD-TYPES: XML Schema Definition Language (XSD) 1.1
+ Part 2: Datatypes";
+ }
+
+ typedef time-no-zone {
+ type time-with-zone-offset {
+ pattern '(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]+)?';
+ }
+ description
+ "The time-no-zone type represents a time without the optional
+ time zone offset information.";
+ }
+
+ typedef hours32 {
+ type int32;
+ units "hours";
+ description
+ "A period of time, measured in units of hours.
+
+ The maximum time period that can be expressed is in the
+ range [-89478485 days 08:00:00 to 89478485 days 07:00:00].
+
+ This type should be range restricted in situations
+ where only non-negative time periods are desirable,
+ (i.e., range '0..max').";
+ }
+
+ typedef minutes32 {
+ type int32;
+ units "minutes";
+ description
+ "A period of time, measured in units of minutes.
+
+ The maximum time period that can be expressed is in the
+ range [-1491308 days 2:08:00 to 1491308 days 2:07:00].
+
+ This type should be range restricted in situations
+ where only non-negative time periods are desirable,
+ (i.e., range '0..max').";
+ }
+
+ typedef seconds32 {
+ type int32;
+ units "seconds";
+ description
+ "A period of time, measured in units of seconds.
+
+ The maximum time period that can be expressed is in the
+ range [-24855 days 03:14:08 to 24855 days 03:14:07].
+
+ This type should be range restricted in situations
+ where only non-negative time periods are desirable,
+ (i.e., range '0..max').";
+ }
+
+ typedef centiseconds32 {
+ type int32;
+ units "centiseconds";
+ description
+ "A period of time, measured in units of 10^-2 seconds.
+
+ The maximum time period that can be expressed is in the
+ range [-248 days 13:13:56 to 248 days 13:13:56].
+
+ This type should be range restricted in situations
+ where only non-negative time periods are desirable,
+ (i.e., range '0..max').";
+ }
+
+ typedef milliseconds32 {
+ type int32;
+ units "milliseconds";
+ description
+ "A period of time, measured in units of 10^-3 seconds.
+
+ The maximum time period that can be expressed is in the
+ range [-24 days 20:31:23 to 24 days 20:31:23].
+
+ This type should be range restricted in situations
+ where only non-negative time periods are desirable,
+ (i.e., range '0..max').";
+ }
+
+ typedef microseconds32 {
+ type int32;
+ units "microseconds";
+ description
+ "A period of time, measured in units of 10^-6 seconds.
+
+ The maximum time period that can be expressed is in the
+ range [-00:35:47 to 00:35:47].
+
+ This type should be range restricted in situations
+ where only non-negative time periods are desirable,
+ (i.e., range '0..max').";
+ }
+
+ typedef microseconds64 {
+ type int64;
+ units "microseconds";
+ description
+ "A period of time, measured in units of 10^-6 seconds.
+
+ The maximum time period that can be expressed is in the
+ range [-106751991 days 04:00:54 to 106751991 days 04:00:54].
+
+ This type should be range restricted in situations
+ where only non-negative time periods are desirable,
+ (i.e., range '0..max').";
+ }
+
+ typedef nanoseconds32 {
+ type int32;
+ units "nanoseconds";
+ description
+ "A period of time, measured in units of 10^-9 seconds.
+
+ The maximum time period that can be expressed is in the
+ range [-00:00:02 to 00:00:02].
+
+ This type should be range restricted in situations
+ where only non-negative time periods are desirable,
+ (i.e., range '0..max').";
+ }
+
+ typedef nanoseconds64 {
+ type int64;
+ units "nanoseconds";
+ description
+ "A period of time, measured in units of 10^-9 seconds.
+
+ The maximum time period that can be expressed is in the
+ range [-106753 days 23:12:44 to 106752 days 0:47:16].
+
+ This type should be range restricted in situations
+ where only non-negative time periods are desirable,
+ (i.e., range '0..max').";
+ }
+
+ typedef timeticks {
+ type uint32;
+ description
+ "The timeticks type represents a non-negative integer that
+ represents the time, modulo 2^32 (4294967296 decimal), in
+ hundredths of a second between two epochs. When a schema
+ node is defined that uses this type, the description of
+ the schema node identifies both of the reference epochs.
+
+ In the value set and its semantics, this type is equivalent
+ to the TimeTicks type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef timestamp {
+ type yang:timeticks;
+ description
+ "The timestamp type represents the value of an associated
+ timeticks schema node instance at which a specific occurrence
+ happened. The specific occurrence must be defined in the
+ description of any schema node defined using this type. When
+ the specific occurrence occurred prior to the last time the
+ associated timeticks schema node instance was zero, then the
+ timestamp value is zero.
+
+ Note that this requires all timestamp values to be reset to
+ zero when the value of the associated timeticks schema node
+ instance reaches 497+ days and wraps around to zero.
+
+ The associated timeticks schema node must be specified
+ in the description of any schema node using this type.
+
+ In the value set and its semantics, this type is equivalent
+ to the TimeStamp textual convention of the SMIv2.";
+ reference
+ "RFC 2579: Textual Conventions for SMIv2";
+ }
+
+ /*** collection of generic address types ***/
+
+ typedef phys-address {
+ type string {
+ pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+ }
+ description
+ "Represents media- or physical-level addresses represented
+ as a sequence octets, each octet represented by two hexadecimal
+ numbers. Octets are separated by colons. The canonical
+ representation uses lowercase characters.
+
+ In the value set and its semantics, this type is equivalent
+ to the PhysAddress textual convention of the SMIv2.";
+ reference
+ "RFC 2579: Textual Conventions for SMIv2";
+ }
+
+ typedef mac-address {
+ type string {
+ pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+ }
+ description
+ "The mac-address type represents an IEEE 802 MAC address.
+ The canonical representation uses lowercase characters.
+
+ In the value set and its semantics, this type is equivalent
+ to the MacAddress textual convention of the SMIv2.";
+ reference
+ "IEEE 802: IEEE Standard for Local and Metropolitan Area
+ Networks: Overview and Architecture
+ RFC 2579: Textual Conventions for SMIv2";
+ }
+
+ /*** collection of XML-specific types ***/
+
+ typedef xpath1.0 {
+ type string;
+ description
+ "This type represents an XPATH 1.0 expression.
+
+ When a schema node is defined that uses this type, the
+ description of the schema node MUST specify the XPath
+ context in which the XPath expression is evaluated.";
+ reference
+ "XPATH: XML Path Language (XPath) Version 1.0";
+ }
+
+ /*** collection of string types ***/
+
+ typedef hex-string {
+ type string {
+ pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+ }
+ description
+ "A hexadecimal string with octets represented as hex digits
+ separated by colons. The canonical representation uses
+ lowercase characters.";
+ }
+
+ typedef uuid {
+ type string {
+ pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+ + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+ }
+ description
+ "A Universally Unique IDentifier in the string representation
+ defined in RFC 4122. The canonical representation uses
+ lowercase characters.
+
+ The following is an example of a UUID in string representation:
+ f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+ ";
+ reference
+ "RFC 4122: A Universally Unique IDentifier (UUID) URN
+ Namespace";
+ }
+
+ typedef dotted-quad {
+ type string {
+ pattern
+ '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+ }
+ description
+ "An unsigned 32-bit number expressed in the dotted-quad
+ notation, i.e., four octets written as decimal numbers
+ and separated with the '.' (full stop) character.";
+ }
+
+ typedef language-tag {
+ type string;
+ description
+ "A language tag according to RFC 5646 (BCP 47). The
+ canonical representation uses lowercase characters.
+
+ Values of this type must be well-formed language tags,
+ in conformance with the definition of well-formed tags
+ in BCP 47. Implementations MAY further limit the values
+ they accept to those permitted by a 'validating'
+ processor, as defined in BCP 47.
+
+ The canonical representation of values of this type is
+ aligned with the SMIv2 LangTag textual convention for
+ language tags fitting the length constraints imposed
+ by the LangTag textual convention.";
+ reference
+ "RFC 5646: Tags for Identifying Languages
+ RFC 5131: A MIB Textual Convention for Language Tags";
+ }
+
+ /*** collection of YANG specific types ***/
+
+ typedef yang-identifier {
+ type string {
+ length "1..max";
+ pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+ }
+ description
+ "A YANG identifier string as defined by the 'identifier'
+ rule in Section 14 of RFC 7950. An identifier must
+ start with an alphabetic character or an underscore
+ followed by an arbitrary sequence of alphabetic or
+ numeric characters, underscores, hyphens, or dots.
+
+ This definition conforms to YANG 1.1 defined in RFC
+ 7950. An earlier version of this definition did exclude
+ all identifiers starting with any possible combination
+ of the lowercase or uppercase character sequence 'xml',
+ as required by YANG 1 defined in RFC 6020. If this type
+ is used in a YANG 1 context, then this restriction still
+ applies.";
+ reference
+ "RFC 7950: The YANG 1.1 Data Modeling Language
+ RFC 6020: YANG - A Data Modeling Language for the
+ Network Configuration Protocol (NETCONF)";
+ }
+
+}