| module openconfig-inet-types { |
| |
| yang-version "1"; |
| namespace "http://openconfig.net/yang/types/inet"; |
| prefix "oc-inet"; |
| |
| import openconfig-extensions { prefix "oc-ext"; } |
| |
| organization |
| "OpenConfig working group"; |
| |
| contact |
| "OpenConfig working group |
| www.openconfig.net"; |
| |
| description |
| "This module contains a set of Internet address related |
| types for use in OpenConfig modules. |
| |
| Portions of this code were derived from IETF RFC 6021. |
| Please reproduce this note if possible. |
| |
| IETF code is subject to the following copyright and license: |
| Copyright (c) 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 (http://trustee.ietf.org/license-info)."; |
| |
| oc-ext:openconfig-version "0.3.0"; |
| |
| revision 2017-07-06 { |
| description |
| "Add domain-name and host typedefs"; |
| reference "0.3.0"; |
| } |
| |
| revision 2017-04-03 { |
| description |
| "Add ip-version typedef."; |
| reference "0.2.0"; |
| } |
| |
| revision 2017-04-03 { |
| description |
| "Update copyright notice."; |
| reference "0.1.1"; |
| } |
| |
| revision 2017-01-26 { |
| description |
| "Initial module for inet types"; |
| reference "0.1.0"; |
| } |
| |
| // IPv4 and IPv6 types. |
| |
| typedef ipv4-address { |
| 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 IPv4 address in dotted quad notation using the default |
| zone."; |
| } |
| |
| typedef ipv4-address-zoned { |
| 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])(%[a-zA-Z0-9_]+)$'; |
| } |
| description |
| "An IPv4 address in dotted quad notation. This type allows |
| specification of a zone index to disambiguate identical |
| address values. For link-local addresses, the index is |
| typically the interface index or interface name."; |
| } |
| |
| typedef ipv6-address { |
| type string { |
| pattern |
| // Must support compression through different lengths |
| // therefore this regexp is complex. |
| '^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|' + |
| '([0-9a-fA-F]{1,4}:){1,7}:|' + |
| '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|' + |
| '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' + |
| '([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' + |
| '([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' + |
| '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' + |
| '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|' + |
| ':((:[0-9a-fA-F]{1,4}){1,7}|:)' + |
| ')$'; |
| } |
| description |
| "An IPv6 address represented as either a full address; shortened |
| or mixed-shortened formats, using the default zone."; |
| } |
| |
| typedef ipv6-address-zoned { |
| type string { |
| pattern |
| // Must support compression through different lengths |
| // therefore this regexp is complex. |
| '^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|' + |
| '([0-9a-fA-F]{1,4}:){1,7}:|' + |
| '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|' + |
| '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' + |
| '([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' + |
| '([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' + |
| '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' + |
| '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|' + |
| ':((:[0-9a-fA-F]{1,4}){1,7}|:)' + |
| ')(%[a-zA-Z0-9_]+)$'; |
| } |
| description |
| "An IPv6 address represented as either a full address; shortened |
| or mixed-shortened formats. This type allows specification of |
| a zone index to disambiguate identical address values. For |
| link-local addresses, the index is typically the interface |
| index or interface name."; |
| } |
| |
| typedef ipv4-prefix { |
| 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])/(([0-9])|([1-2][0-9])|(3[0-2]))$'; |
| } |
| description |
| "An IPv4 prefix represented in dotted quad notation followed by |
| a slash and a CIDR mask (0 <= mask <= 32)."; |
| } |
| |
| typedef ipv6-prefix { |
| type string { |
| pattern |
| '^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|' + |
| '([0-9a-fA-F]{1,4}:){1,7}:|' + |
| '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}' + |
| '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' + |
| '([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' + |
| '([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' + |
| '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' + |
| '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|' + |
| ':((:[0-9a-fA-F]{1,4}){1,7}|:)' + |
| ')/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9])$'; |
| } |
| description |
| "An IPv6 prefix represented in full, shortened, or mixed |
| shortened format followed by a slash and CIDR mask |
| (0 <= mask <= 128)."; |
| } |
| |
| typedef ip-address { |
| type union { |
| type ipv4-address; |
| type ipv6-address; |
| } |
| description |
| "An IPv4 or IPv6 address with no prefix specified."; |
| } |
| |
| typedef ip-prefix { |
| type union { |
| type ipv4-prefix; |
| type ipv6-prefix; |
| } |
| description |
| "An IPv4 or IPv6 prefix."; |
| } |
| |
| typedef ip-version { |
| type enumeration { |
| enum UNKNOWN { |
| value 0; |
| description |
| "An unknown or unspecified version of the Internet |
| protocol."; |
| } |
| enum IPV4 { |
| value 4; |
| description |
| "The IPv4 protocol as defined in RFC 791."; |
| } |
| enum IPV6 { |
| value 6; |
| description |
| "The IPv6 protocol as defined in RFC 2460."; |
| } |
| } |
| description |
| "This value represents the version of the IP protocol. |
| Note that integer representation of the enumerated values |
| are not specified, and are not required to follow the |
| InetVersion textual convention in SMIv2."; |
| reference |
| "RFC 791: Internet Protocol |
| RFC 2460: Internet Protocol, Version 6 (IPv6) Specification |
| RFC 4001: Textual Conventions for Internet Network Addresses"; |
| } |
| |
| typedef domain-name { |
| type string { |
| length "1..253"; |
| pattern |
| '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*' + |
| '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)' + |
| '|\.'; |
| } |
| description |
| "The domain-name type represents a DNS domain name. |
| Fully quallified left to the models which utilize this type. |
| |
| Internet domain names are only loosely specified. Section |
| 3.5 of RFC 1034 recommends a syntax (modified in Section |
| 2.1 of RFC 1123). The pattern above is intended to allow |
| for current practice in domain name use, and some possible |
| future expansion. It is designed to hold various types of |
| domain names, including names used for A or AAAA records |
| (host names) and other records, such as SRV records. Note |
| that Internet host names have a stricter syntax (described |
| in RFC 952) than the DNS recommendations in RFCs 1034 and |
| 1123, and that systems that want to store host names in |
| schema nodes using the domain-name type are recommended to |
| adhere to this stricter standard to ensure interoperability. |
| |
| The encoding of DNS names in the DNS protocol is limited |
| to 255 characters. Since the encoding consists of labels |
| prefixed by a length bytes and there is a trailing NULL |
| byte, only 253 characters can appear in the textual dotted |
| notation. |
| |
| Domain-name values use the US-ASCII encoding. Their canonical |
| format uses lowercase US-ASCII characters. Internationalized |
| domain names MUST be encoded in punycode as described in RFC |
| 3492"; |
| } |
| |
| typedef host { |
| type union { |
| type ip-address; |
| type domain-name; |
| } |
| description |
| "The host type represents either an unzoned IP address or a DNS |
| domain name."; |
| } |
| |
| typedef as-number { |
| type uint32; |
| description |
| "A numeric identifier for an autonomous system (AS). An AS is a |
| single domain, under common administrative control, which forms |
| a unit of routing policy. Autonomous systems can be assigned a |
| 2-byte identifier, or a 4-byte identifier which may have public |
| or private scope. Private ASNs are assigned from dedicated |
| ranges. Public ASNs are assigned from ranges allocated by IANA |
| to the regional internet registries (RIRs)."; |
| reference |
| "RFC 1930 Guidelines for creation, selection, and registration |
| of an Autonomous System (AS) |
| RFC 4271 A Border Gateway Protocol 4 (BGP-4)"; |
| } |
| |
| typedef dscp { |
| type uint8 { |
| range "0..63"; |
| } |
| description |
| "A differentiated services code point (DSCP) marking within the |
| IP header."; |
| reference |
| "RFC 2474 Definition of the Differentiated Services Field |
| (DS Field) in the IPv4 and IPv6 Headers"; |
| } |
| |
| typedef ipv6-flow-label { |
| type uint32 { |
| range "0..1048575"; |
| } |
| description |
| "The IPv6 flow-label is a 20-bit value within the IPv6 header |
| which is optionally used by the source of the IPv6 packet to |
| label sets of packets for which special handling may be |
| required."; |
| reference |
| "RFC 2460 Internet Protocol, Version 6 (IPv6) Specification"; |
| } |
| |
| typedef port-number { |
| type uint16; |
| description |
| "A 16-bit port number used by a transport protocol such as TCP |
| or UDP."; |
| reference |
| "RFC 768 User Datagram Protocol |
| RFC 793 Transmission Control Protocol"; |
| } |
| |
| typedef uri { |
| type string; |
| description |
| "An ASCII-encoded Uniform Resource Identifier (URI) as defined |
| in RFC 3986."; |
| reference |
| "RFC 3986 Uniform Resource Identifier (URI): Generic Syntax"; |
| } |
| } |