Rift.IO OSM R1 Initial Submission
[osm/UI.git] / skyquake / plugins / composer / src / schemas / yang / ietf-inet-types.yang.json
1 {
2  "synth": "source",
3  "name": "ietf-inet-types",
4  "description": "This module contains a collection of generally useful derived\nYANG data types for Internet addresses and related things.\n\nCopyright (c) 2013 IETF Trust and the persons identified as\nauthors of the code.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or\nwithout modification, is permitted pursuant to, and subject\nto the license terms contained in, the Simplified BSD License\nset forth in Section 4.c of the IETF Trust's Legal Provisions\nRelating to IETF Documents\n(http://trustee.ietf.org/license-info).\n\nThis version of this YANG module is part of RFC 6991; see\nthe RFC itself for full legal notices.",
5  "schema": {
6   "module": {
7    "ietf-inet-types": {
8     "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types",
9     "prefix": "inet",
10     "organization": "IETF NETMOD (NETCONF Data Modeling Language) Working Group",
11     "contact": "WG Web:   <http://tools.ietf.org/wg/netmod/>\nWG List:  <mailto:netmod@ietf.org>\n\nWG Chair: David Kessens\n          <mailto:david.kessens@nsn.com>\n\nWG Chair: Juergen Schoenwaelder\n          <mailto:j.schoenwaelder@jacobs-university.de>\n\nEditor:   Juergen Schoenwaelder\n          <mailto:j.schoenwaelder@jacobs-university.de>",
12     "description": "This module contains a collection of generally useful derived\nYANG data types for Internet addresses and related things.\n\nCopyright (c) 2013 IETF Trust and the persons identified as\nauthors of the code.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or\nwithout modification, is permitted pursuant to, and subject\nto the license terms contained in, the Simplified BSD License\nset forth in Section 4.c of the IETF Trust's Legal Provisions\nRelating to IETF Documents\n(http://trustee.ietf.org/license-info).\n\nThis version of this YANG module is part of RFC 6991; see\nthe RFC itself for full legal notices.",
13     "revision": {
14      "2013-07-15": {
15       "description": "This revision adds the following new data types:\n- ip-address-no-zone\n- ipv4-address-no-zone\n- ipv6-address-no-zone",
16       "reference": "RFC 6991: Common YANG Data Types"
17      },
18      "2010-09-24": {
19       "description": "Initial revision.",
20       "reference": "RFC 6021: Common YANG Data Types"
21      }
22     },
23     "typedef": {
24      "ip-version": {
25       "type": {
26        "enumeration": {
27         "enum": {
28          "unknown": {
29           "value": 0,
30           "description": "An unknown or unspecified version of the Internet\nprotocol."
31          },
32          "ipv4": {
33           "value": 1,
34           "description": "The IPv4 protocol as defined in RFC 791."
35          },
36          "ipv6": {
37           "value": 2,
38           "description": "The IPv6 protocol as defined in RFC 2460."
39          }
40         }
41        }
42       },
43       "description": "This value represents the version of the IP protocol.\n\nIn the value set and its semantics, this type is equivalent\nto the InetVersion textual convention of the SMIv2.",
44       "reference": "RFC  791: Internet Protocol\nRFC 2460: Internet Protocol, Version 6 (IPv6) Specification\nRFC 4001: Textual Conventions for Internet Network Addresses"
45      },
46      "dscp": {
47       "type": {
48        "uint8": {
49         "range": "0..63"
50        }
51       },
52       "description": "The dscp type represents a Differentiated Services Code Point\nthat may be used for marking packets in a traffic stream.\nIn the value set and its semantics, this type is equivalent\nto the Dscp textual convention of the SMIv2.",
53       "reference": "RFC 3289: Management Information Base for the Differentiated\n          Services Architecture\nRFC 2474: Definition of the Differentiated Services Field\n          (DS Field) in the IPv4 and IPv6 Headers\nRFC 2780: IANA Allocation Guidelines For Values In\n          the Internet Protocol and Related Headers"
54      },
55      "ipv6-flow-label": {
56       "type": {
57        "uint32": {
58         "range": "0..1048575"
59        }
60       },
61       "description": "The ipv6-flow-label type represents the flow identifier or Flow\nLabel in an IPv6 packet header that may be used to\ndiscriminate traffic flows.\n\nIn the value set and its semantics, this type is equivalent\nto the IPv6FlowLabel textual convention of the SMIv2.",
62       "reference": "RFC 3595: Textual Conventions for IPv6 Flow Label\nRFC 2460: Internet Protocol, Version 6 (IPv6) Specification"
63      },
64      "port-number": {
65       "type": {
66        "uint16": {
67         "range": "0..65535"
68        }
69       },
70       "description": "The port-number type represents a 16-bit port number of an\nInternet transport-layer protocol such as UDP, TCP, DCCP, or\nSCTP.  Port numbers are assigned by IANA.  A current list of\nall assignments is available from <http://www.iana.org/>.\n\nNote that the port number value zero is reserved by IANA.  In\nsituations where the value zero does not make sense, it can\nbe excluded by subtyping the port-number type.\nIn the value set and its semantics, this type is equivalent\nto the InetPortNumber textual convention of the SMIv2.",
71       "reference": "RFC  768: User Datagram Protocol\nRFC  793: Transmission Control Protocol\nRFC 4960: Stream Control Transmission Protocol\nRFC 4340: Datagram Congestion Control Protocol (DCCP)\nRFC 4001: Textual Conventions for Internet Network Addresses"
72      },
73      "as-number": {
74       "type": "uint32",
75       "description": "The as-number type represents autonomous system numbers\nwhich identify an Autonomous System (AS).  An AS is a set\nof routers under a single technical administration, using\nan interior gateway protocol and common metrics to route\npackets within the AS, and using an exterior gateway\nprotocol to route packets to other ASes.  IANA maintains\nthe AS number space and has delegated large parts to the\nregional registries.\n\nAutonomous system numbers were originally limited to 16\nbits.  BGP extensions have enlarged the autonomous system\nnumber space to 32 bits.  This type therefore uses an uint32\nbase type without a range restriction in order to support\na larger autonomous system number space.\n\nIn the value set and its semantics, this type is equivalent\nto the InetAutonomousSystemNumber textual convention of\nthe SMIv2.",
76       "reference": "RFC 1930: Guidelines for creation, selection, and registration\n          of an Autonomous System (AS)\nRFC 4271: A Border Gateway Protocol 4 (BGP-4)\nRFC 4001: Textual Conventions for Internet Network Addresses\nRFC 6793: BGP Support for Four-Octet Autonomous System (AS)\n          Number Space"
77      },
78      "ip-address": {
79       "type": {
80        "union": {
81         "type": {
82          "inet:ipv4-address": null,
83          "inet:ipv6-address": null
84         }
85        }
86       },
87       "description": "The ip-address type represents an IP address and is IP\nversion neutral.  The format of the textual representation\nimplies the IP version.  This type supports scoped addresses\nby allowing zone identifiers in the address format.",
88       "reference": "RFC 4007: IPv6 Scoped Address Architecture"
89      },
90      "ipv4-address": {
91       "type": {
92        "string": {
93         "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])(%[\\p{N}\\p{L}]+)?"
94        }
95       },
96       "description": "The ipv4-address type represents an IPv4 address in\ndotted-quad notation.  The IPv4 address may include a zone\nindex, separated by a % sign.\n\nThe zone index is used to disambiguate identical address\nvalues.  For link-local addresses, the zone index will\ntypically be the interface index number or the name of an\ninterface.  If the zone index is not present, the default\nzone of the device will be used.\n\nThe canonical format for the zone index is the numerical\nformat"
97      },
98      "ipv6-address": {
99       "type": {
100        "string": {
101         "pattern": {
102          "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(%[\\p{N}\\p{L}]+)?": null,
103          "(([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(%.+)?": null
104         }
105        }
106       },
107       "description": "The ipv6-address type represents an IPv6 address in full,\nmixed, shortened, and shortened-mixed notation.  The IPv6\naddress may include a zone index, separated by a % sign.\n\nThe zone index is used to disambiguate identical address\nvalues.  For link-local addresses, the zone index will\ntypically be the interface index number or the name of an\ninterface.  If the zone index is not present, the default\nzone of the device will be used.\n\nThe canonical format of IPv6 addresses uses the textual\nrepresentation defined in Section 4 of RFC 5952.  The\ncanonical format for the zone index is the numerical\nformat as described in Section 11.2 of RFC 4007.",
108       "reference": "RFC 4291: IP Version 6 Addressing Architecture\nRFC 4007: IPv6 Scoped Address Architecture\nRFC 5952: A Recommendation for IPv6 Address Text\n          Representation"
109      },
110      "ip-address-no-zone": {
111       "type": {
112        "union": {
113         "type": {
114          "inet:ipv4-address-no-zone": null,
115          "inet:ipv6-address-no-zone": null
116         }
117        }
118       },
119       "description": "The ip-address-no-zone type represents an IP address and is\nIP version neutral.  The format of the textual representation\nimplies the IP version.  This type does not support scoped\naddresses since it does not allow zone identifiers in the\naddress format.",
120       "reference": "RFC 4007: IPv6 Scoped Address Architecture"
121      },
122      "ipv4-address-no-zone": {
123       "type": {
124        "inet:ipv4-address": {
125         "pattern": "[0-9\\.]*"
126        }
127       },
128       "description": "An IPv4 address without a zone index.  This type, derived from\nipv4-address, may be used in situations where the zone is\nknown from the context and hence no zone index is needed."
129      },
130      "ipv6-address-no-zone": {
131       "type": {
132        "inet:ipv6-address": {
133         "pattern": "[0-9a-fA-F:\\.]*"
134        }
135       },
136       "description": "An IPv6 address without a zone index.  This type, derived from\nipv6-address, may be used in situations where the zone is\nknown from the context and hence no zone index is needed.",
137       "reference": "RFC 4291: IP Version 6 Addressing Architecture\nRFC 4007: IPv6 Scoped Address Architecture\nRFC 5952: A Recommendation for IPv6 Address Text\n          Representation"
138      },
139      "ip-prefix": {
140       "type": {
141        "union": {
142         "type": {
143          "inet:ipv4-prefix": null,
144          "inet:ipv6-prefix": null
145         }
146        }
147       },
148       "description": "The ip-prefix type represents an IP prefix and is IP\nversion neutral.  The format of the textual representations\nimplies the IP version."
149      },
150      "ipv4-prefix": {
151       "type": {
152        "string": {
153         "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]))"
154        }
155       },
156       "description": "The ipv4-prefix type represents an IPv4 address prefix.\nThe prefix length is given by the number following the\nslash character and must be less than or equal to 32.\n\nA prefix length value of n corresponds to an IP address\nmask that has n contiguous 1-bits from the most\nsignificant bit (MSB) and all other bits set to 0.\n\nThe canonical format of an IPv4 prefix has all bits of\nthe IPv4 address set to zero that are not part of the\nIPv4 prefix."
157      },
158      "ipv6-prefix": {
159       "type": {
160        "string": {
161         "pattern": {
162          "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))": null,
163          "(([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(/.+)": null
164         }
165        }
166       },
167       "description": "The ipv6-prefix type represents an IPv6 address prefix.\nThe prefix length is given by the number following the\nslash character and must be less than or equal to 128.\n\nA prefix length value of n corresponds to an IP address\nmask that has n contiguous 1-bits from the most\nsignificant bit (MSB) and all other bits set to 0.\n\nThe IPv6 address should have all bits that do not belong\nto the prefix set to zero.\n\nThe canonical format of an IPv6 prefix has all bits of\nthe IPv6 address set to zero that are not part of the\nIPv6 prefix.  Furthermore, the IPv6 address is represented\nas defined in Section 4 of RFC 5952.",
168       "reference": "RFC 5952: A Recommendation for IPv6 Address Text\n          Representation"
169      },
170      "domain-name": {
171       "type": {
172        "string": {
173         "length": "1..253",
174         "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]\\.?)|\\."
175        }
176       },
177       "description": "The domain-name type represents a DNS domain name.  The\nname SHOULD be fully qualified whenever possible.\n\nInternet domain names are only loosely specified.  Section\n3.5 of RFC 1034 recommends a syntax (modified in Section\n2.1 of RFC 1123).  The pattern above is intended to allow\nfor current practice in domain name use, and some possible\nfuture expansion.  It is designed to hold various types of\ndomain names, including names used for A or AAAA records\n(host names) and other records, such as SRV records.  Note\nthat Internet host names have a stricter syntax (described\nin RFC 952) than the DNS recommendations in RFCs 1034 and\n1123, and that systems that want to store host names in\nschema nodes using the domain-name type are recommended to\nadhere to this stricter standard to ensure interoperability.\n\nThe encoding of DNS names in the DNS protocol is limited\nto 255 characters.  Since the encoding consists of labels\nprefixed by a length bytes and there is a trailing NULL\nbyte, only 253 characters can appear in the textual dotted\nnotation.\n\nThe description clause of schema nodes using the domain-name\ntype MUST describe when and how these names are resolved to\nIP addresses.  Note that the resolution of a domain-name value\nmay require to query multiple DNS records (e.g., A for IPv4\nand AAAA for IPv6).  The order of the resolution process and\nwhich DNS record takes precedence can either be defined\nexplicitly or may depend on the configuration of the\nresolver.\n\nDomain-name values use the US-ASCII encoding.  Their canonical\nformat uses lowercase US-ASCII characters.  Internationalized\ndomain names MUST be A-labels as per RFC 5890.",
178       "reference": "RFC  952: DoD Internet Host Table Specification\nRFC 1034: Domain Names - Concepts and Facilities\nRFC 1123: Requirements for Internet Hosts -- Application\n          and Support\nRFC 2782: A DNS RR for specifying the location of services\n          (DNS SRV)\nRFC 5890: Internationalized Domain Names in Applications\n          (IDNA): Definitions and Document Framework"
179      },
180      "host": {
181       "type": {
182        "union": {
183         "type": {
184          "inet:ip-address": null,
185          "inet:domain-name": null
186         }
187        }
188       },
189       "description": "The host type represents either an IP address or a DNS\ndomain name."
190      },
191      "uri": {
192       "type": "string",
193       "description": "The uri type represents a Uniform Resource Identifier\n(URI) as defined by STD 66.\n\nObjects using the uri type MUST be in US-ASCII encoding,\nand MUST be normalized as described by RFC 3986 Sections\n6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary\npercent-encoding is removed, and all case-insensitive\ncharacters are set to lowercase except for hexadecimal\ndigits, which are normalized to uppercase as described in\nSection 6.2.2.1.\n\nThe purpose of this normalization is to help provide\nunique URIs.  Note that this normalization is not\nsufficient to provide uniqueness.  Two URIs that are\ntextually distinct after this normalization may still be\nequivalent.\n\nObjects using the uri type may restrict the schemes that\nthey permit.  For example, 'data:' and 'urn:' schemes\nmight not be appropriate.\n\nA zero-length URI is not a valid URI.  This can be used to\nexpress 'URI absent' where required.\n\nIn the value set and its semantics, this type is equivalent\nto the Uri SMIv2 textual convention defined in RFC 5017.",
194       "reference": "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax\nRFC 3305: Report from the Joint W3C/IETF URI Planning Interest\n          Group: Uniform Resource Identifiers (URIs), URLs,\n          and Uniform Resource Names (URNs): Clarifications\n          and Recommendations\nRFC 5017: MIB Textual Conventions for Uniform Resource\n          Identifiers (URIs)"
195      }
196     }
197    }
198   }
199  },
200  "extension": {
201   "module": {
202    "argument": "name",
203    "include": "0..n",
204    "prefix": "0..1",
205    "anyxml": "0..n",
206    "augment": "0..n",
207    "choice": "0..n",
208    "contact": "0..1",
209    "container": "0..n",
210    "description": "0..1",
211    "deviation": "0..n",
212    "extension": "0..n",
213    "feature": "0..n",
214    "grouping": "0..n",
215    "identity": "0..n",
216    "import": "0..n",
217    "leaf": "0..n",
218    "leaf-list": "0..n",
219    "list": "0..n",
220    "namespace": "0..1",
221    "notification": "0..n",
222    "organization": "0..1",
223    "reference": "0..1",
224    "revision": "0..n",
225    "rpc": "0..n",
226    "typedef": "0..n",
227    "uses": "0..n",
228    "yang-version": "0..1",
229    "preprocess": {
230     "!js/function": "function (arg, params, ctx) {\n  var changes, match, ref, synth, target;\n  synth = this.require('data-synth');\n  ref = params.augment;\n  for (target in ref) {\n    changes = ref[target];\n    match = this.locate(ctx, target);\n    if (match == null) {\n      continue;\n    }\n    synth.copy(match, changes);\n  }\n  return delete this.source[params.prefix];\n}"
231    },
232    "construct": {
233     "!js/function": "function (arg, params, children) {\n  var k, m, modules, ref, synth, v;\n  synth = this.require('data-synth');\n  modules = {};\n  ref = params[\"import\"];\n  for (k in ref) {\n    v = ref[k];\n    modules[k] = children[k];\n    delete children[k];\n  }\n  m = (synth.Store(params, function() {\n    return this.set({\n      name: arg,\n      modules: modules\n    });\n  })).bind(children);\n  this.define('module', arg, m);\n  return m;\n}"
234    }
235   },
236   "prefix": {
237    "argument": "value",
238    "preprocess": {
239     "!js/function": "function (arg, params, ctx) {\n  return this.source[arg] = this.source;\n}"
240    }
241   },
242   "include": {
243    "argument": "module",
244    "preprocess": {
245     "!js/function": "function (arg, params, ctx) {\n  var k, m, ref, ref1, ref2, results, v;\n  m = this.preprocess(this.resolve('dependencies', arg));\n  ref = m.extension;\n  for (k in ref) {\n    v = ref[k];\n    this.define('extension', k, v);\n  }\n  ref1 = m.typedef;\n  for (k in ref1) {\n    v = ref1[k];\n    this.define('typedef', k, v);\n  }\n  ref2 = m.schema;\n  results = [];\n  for (k in ref2) {\n    v = ref2[k];\n    results.push(ctx[k] = v);\n  }\n  return results;\n}"
246    },
247    "revision-date": "0..1"
248   },
249   "augment": {
250    "anyxml": "0..n",
251    "case": "0..n",
252    "choice": "0..n",
253    "container": "0..n",
254    "description": "0..1",
255    "if-feature": "0..n",
256    "leaf": "0..n",
257    "leaf-list": "0..n",
258    "list": "0..n",
259    "reference": "0..1",
260    "status": "0..1",
261    "uses": "0..n",
262    "when": "0..1",
263    "argument": "target-node"
264   },
265   "belongs-to": {
266    "prefix": 1,
267    "preprocess": {
268     "!js/function": "function (arg, params, ctx) {\n  return this.source[params.prefix] = this.source;\n}"
269    },
270    "argument": "module"
271   },
272   "bit": {
273    "description": "0..1",
274    "reference": "0..1",
275    "status": "0..1",
276    "position": "0..1",
277    "argument": "name"
278   },
279   "case": {
280    "anyxml": "0..n",
281    "choice": "0..n",
282    "container": "0..n",
283    "description": "0..1",
284    "if-feature": "0..n",
285    "leaf": "0..n",
286    "leaf-list": "0..n",
287    "list": "0..n",
288    "reference": "0..1",
289    "status": "0..1",
290    "uses": "0..n",
291    "when": "0..1",
292    "argument": "name"
293   },
294   "choice": {
295    "anyxml": "0..n",
296    "case": "0..n",
297    "config": "0..1",
298    "container": "0..n",
299    "default": "0..1",
300    "description": "0..1",
301    "if-feature": "0..n",
302    "leaf": "0..n",
303    "leaf-list": "0..n",
304    "list": "0..n",
305    "mandatory": "0..1",
306    "reference": "0..1",
307    "status": "0..1",
308    "when": "0..1",
309    "argument": "condition"
310   },
311   "config": {
312    "preprocess": {
313     "!js/function": "function (arg, p, ctx) {\n  return ctx.config = arg === true || arg === 'true';\n}"
314    },
315    "argument": "value"
316   },
317   "container": {
318    "anyxml": "0..n",
319    "choice": "0..n",
320    "config": "0..1",
321    "container": "0..n",
322    "description": "0..1",
323    "grouping": "0..n",
324    "if-feature": "0..n",
325    "leaf": "0..n",
326    "leaf-list": "0..n",
327    "list": "0..n",
328    "must": "0..n",
329    "presence": "0..1",
330    "reference": "0..1",
331    "status": "0..1",
332    "typedef": "0..n",
333    "uses": "0..n",
334    "when": "0..1",
335    "construct": {
336     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return (synth.Object(params)).bind(children);\n}"
337    },
338    "argument": "name"
339   },
340   "deviate": {
341    "config": "0..1",
342    "default": "0..1",
343    "mandatory": "0..1",
344    "max-elements": "0..1",
345    "min-elements": "0..1",
346    "must": "0..n",
347    "type": "0..1",
348    "unique": "0..1",
349    "units": "0..1",
350    "argument": "value"
351   },
352   "deviation": {
353    "description": "0..1",
354    "deviate": "1..n",
355    "reference": "0..1",
356    "argument": "target-node"
357   },
358   "enum": {
359    "description": "0..1",
360    "reference": "0..1",
361    "status": "0..1",
362    "value": "0..1",
363    "preprocess": {
364     "!js/function": "function (arg, params, ctx) {\n  if (params.value == null) {\n    if (this.enumValue == null) {\n      this.enumValue = 0;\n    }\n    params.value = this.enumValue++;\n  } else {\n    params.value = Number(params.value);\n    this.enumValue = params.value + 1;\n  }\n  return ctx[\"enum\"][arg] = params;\n}"
365    },
366    "argument": "name"
367   },
368   "feature": {
369    "description": "0..1",
370    "if-feature": "0..n",
371    "reference": "0..1",
372    "status": "0..1",
373    "preprocess": {
374     "!js/function": "function (arg, params, ctx) {\n  if (params.status === 'unavailable') {\n    console.warn(\"feature \" + arg + \" is unavailable\");\n    if (typeof ctx.feature === 'object') {\n      return delete ctx.feature[arg];\n    } else {\n      return delete ctx.feature;\n    }\n  }\n}"
375    },
376    "construct": {
377     "!js/function": "function (arg, params, children) {\n  var feature;\n  feature = this.resolve('feature', arg);\n  return null;\n}"
378    },
379    "argument": "name"
380   },
381   "grouping": {
382    "anyxml": "0..n",
383    "choice": "0..n",
384    "container": "0..n",
385    "description": "0..1",
386    "grouping": "0..n",
387    "leaf": "0..n",
388    "leaf-list": "0..n",
389    "list": "0..n",
390    "reference": "0..1",
391    "status": "0..1",
392    "typedef": "0..n",
393    "uses": "0..n",
394    "preprocess": {
395     "!js/function": "function (arg, params) {\n  return this.define('grouping', arg, params);\n}"
396    },
397    "argument": "name"
398   },
399   "identity": {
400    "base": "0..1",
401    "description": "0..1",
402    "reference": "0..1",
403    "status": "0..1",
404    "preprocess": {
405     "!js/function": "function (arg, params) {\n  return this.define('identity', arg, params);\n}"
406    },
407    "argument": "name"
408   },
409   "if-feature": {
410    "preprocess": {
411     "!js/function": "function (arg, params, ctx) {\n  if ((this.resolve('feature', arg)) == null) {\n    return ctx.status = 'unavailable';\n  }\n}"
412    },
413    "argument": "name"
414   },
415   "import": {
416    "prefix": 1,
417    "revision-date": "0..1",
418    "preprocess": {
419     "!js/function": "function (arg, params, ctx) {\n  var copy, k, m, original, ref, ref1, rev, schema, source, synth, v;\n  synth = this.require('data-synth');\n  schema = this.resolve('dependencies', arg, false);\n  if (schema == null) {\n    console.warn(\"no explicit dependency for \" + arg + \" defined, searching local filesystem\");\n    schema = this.parse(\"!yang \" + arg + \".yang\", this.source);\n    if (schema != null) {\n      this.define('dependencies', arg, schema);\n      source = this.source.parent;\n      while ((source.parent != null) && source.parent.name !== 'yangforge') {\n        source = source.parent;\n      }\n      if (source.dependencies == null) {\n        source.dependencies = {};\n      }\n      source.dependencies[arg] = schema;\n    }\n  }\n  m = this.preprocess(schema);\n  if (m == null) {\n    throw this.error(\"unable to resolve '\" + arg + \"' in dependencies\", 'import');\n  }\n  rev = params['revision-date'];\n  if ((rev != null) && !(rev in m.revision)) {\n    throw this.error(\"requested \" + rev + \" not available in \" + arg, 'import');\n  }\n  ref = m.extension;\n  for (k in ref) {\n    v = ref[k];\n    if (!(v.override === true)) {\n      continue;\n    }\n    original = this.resolve('extension', k);\n    copy = synth.copy({}, v);\n    copy.origin = synth.copy({}, (ref1 = original.origin) != null ? ref1 : original);\n    delete copy.override;\n    this.define('extension', k, copy);\n  }\n  return this.source[params.prefix] = m;\n}"
420    },
421    "construct": {
422     "!js/function": "function (arg, params, children, ctx) {\n  return this.compile(this.source[params.prefix], this.source);\n}"
423    },
424    "argument": "module"
425   },
426   "input": {
427    "anyxml": "0..n",
428    "choice": "0..n",
429    "container": "0..n",
430    "grouping": "0..n",
431    "leaf": "0..n",
432    "leaf-list": "0..n",
433    "list": "0..n",
434    "typedef": "0..n",
435    "uses": "0..n",
436    "construct": {
437     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return (synth.Object(params)).bind(children);\n}"
438    }
439   },
440   "leaf": {
441    "config": "0..1",
442    "default": "0..1",
443    "description": "0..1",
444    "if-feature": "0..n",
445    "mandatory": "0..1",
446    "must": "0..n",
447    "reference": "0..1",
448    "status": "0..1",
449    "type": "0..1",
450    "units": "0..1",
451    "when": "0..1",
452    "construct": {
453     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return synth.Property(params, function() {\n    if (children.type != null) {\n      return this.set({\n        type: children.type\n      });\n    }\n  });\n}"
454    },
455    "argument": "name"
456   },
457   "leaf-list": {
458    "config": "0..1",
459    "description": "0..1",
460    "if-feature": "0..n",
461    "max-elements": "0..1",
462    "min-elements": "0..1",
463    "must": "0..n",
464    "ordered-by": "0..1",
465    "reference": "0..1",
466    "status": "0..1",
467    "type": "0..1",
468    "units": "0..1",
469    "when": "0..1",
470    "construct": {
471     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return synth.List(params, function() {\n    if (children.type != null) {\n      return this.set({\n        type: children.type\n      });\n    }\n  });\n}"
472    },
473    "argument": "name"
474   },
475   "list": {
476    "anyxml": "0..n",
477    "choice": "0..n",
478    "config": "0..1",
479    "container": "0..n",
480    "description": "0..1",
481    "grouping": "0..n",
482    "if-feature": "0..n",
483    "key": "0..1",
484    "leaf": "0..n",
485    "leaf-list": "0..n",
486    "list": "0..n",
487    "max-elements": "0..1",
488    "min-elements": "0..1",
489    "must": "0..n",
490    "ordered-by": "0..1",
491    "reference": "0..1",
492    "status": "0..1",
493    "typedef": "0..n",
494    "unique": "0..1",
495    "uses": "0..n",
496    "when": "0..1",
497    "construct": {
498     "!js/function": "function (arg, params, children) {\n  var item, synth;\n  synth = this.require('data-synth');\n  item = (synth.Object(null)).bind(children);\n  return (synth.List(params)).set({\n    type: item\n  });\n}"
499    },
500    "argument": "name"
501   },
502   "mandatory": {
503    "preprocess": {
504     "!js/function": "function (arg, p, ctx) {\n  return ctx.mandatory = arg === true || arg === 'true';\n}"
505    },
506    "argument": "value"
507   },
508   "max-elements": {
509    "preprocess": {
510     "!js/function": "function (arg, params, ctx) {\n  if (arg !== 'unbounded') {\n    return ctx['max-elements'] = Number(arg);\n  }\n}"
511    },
512    "argument": "value"
513   },
514   "min-elements": {
515    "preprocess": {
516     "!js/function": "function (arg, params, ctx) {\n  return ctx['min-elements'] = Number(arg);\n}"
517    },
518    "argument": "value"
519   },
520   "must": {
521    "description": "0..1",
522    "error-app-tag": "0..1",
523    "error-message": "0..1",
524    "reference": "0..1",
525    "argument": "condition"
526   },
527   "notification": {
528    "anyxml": "0..n",
529    "choice": "0..n",
530    "container": "0..n",
531    "description": "0..1",
532    "grouping": "0..n",
533    "if-feature": "0..n",
534    "leaf": "0..n",
535    "leaf-list": "0..n",
536    "list": "0..n",
537    "reference": "0..1",
538    "status": "0..1",
539    "typedef": "0..n",
540    "uses": "0..n",
541    "preprocess": {
542     "!js/function": "function (arg, params) {\n  return this.define('notification', arg, params);\n}"
543    },
544    "argument": "event"
545   },
546   "output": {
547    "anyxml": "0..n",
548    "choice": "0..n",
549    "container": "0..n",
550    "grouping": "0..n",
551    "leaf": "0..n",
552    "leaf-list": "0..n",
553    "list": "0..n",
554    "typedef": "0..n",
555    "uses": "0..n",
556    "construct": {
557     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return (synth.Object(params)).bind(children);\n}"
558    }
559   },
560   "path": {
561    "preprocess": {
562     "!js/function": "function (arg, params, ctx) {\n  return ctx.path = arg.replace(/[_]/g, '.');\n}"
563    },
564    "argument": "value"
565   },
566   "pattern": {
567    "construct": {
568     "!js/function": "function (arg, params, children, ctx) {\n  if (ctx.patterns == null) {\n    ctx.patterns = [];\n  }\n  return ctx.patterns.push(new RegExp(arg));\n}"
569    },
570    "argument": "value"
571   },
572   "refine": {
573    "default": "0..1",
574    "description": "0..1",
575    "reference": "0..1",
576    "config": "0..1",
577    "mandatory": "0..1",
578    "presence": "0..1",
579    "must": "0..n",
580    "min-elements": "0..1",
581    "max-elements": "0..1",
582    "units": "0..1",
583    "argument": "target-node"
584   },
585   "require-instance": {
586    "preprocess": {
587     "!js/function": "function (arg, params, ctx) {\n  return ctx['require-instance'] = arg === true || arg === 'true';\n}"
588    },
589    "argument": "value"
590   },
591   "revision": {
592    "description": "0..1",
593    "reference": "0..1",
594    "preprocess": {
595     "!js/function": "function (arg, params, ctx) {\n  return this.define('revision', arg, params);\n}"
596    },
597    "argument": "date"
598   },
599   "rpc": {
600    "description": "0..1",
601    "grouping": "0..n",
602    "if-feature": "0..n",
603    "input": "0..1",
604    "output": "0..1",
605    "reference": "0..1",
606    "status": "0..1",
607    "typedef": "0..n",
608    "construct": {
609     "!js/function": "function (arg, params, children) {\n  var func, method, ref, ref1, request, response, synth;\n  synth = this.require('data-synth');\n  func = this.resolve('rpc', arg, false);\n  if (func == null) {\n    func = function(input, output, done) {\n      return done(\"No control logic found for '\" + arg + \"' rpc operation\");\n    };\n  }\n  request = (ref = children.input) != null ? ref : synth.Meta;\n  response = (ref1 = children.output) != null ? ref1 : synth.Meta;\n  method = function(data, resolve, reject) {\n    var e, error, input, output;\n    if (typeof console.debug === \"function\") {\n      console.debug(\"executing rpc \" + arg + \"...\");\n    }\n    try {\n      input = new request(data, this);\n      output = new response(null, this);\n    } catch (error) {\n      e = error;\n      return reject(e);\n    }\n    return func.call(this, input, output, function(e) {\n      if (e == null) {\n        return resolve(output);\n      } else {\n        return reject(e);\n      }\n    });\n  };\n  method.params = params;\n  method.input = request;\n  method.output = response;\n  return method;\n}"
610    },
611    "argument": "name"
612   },
613   "submodule": {
614    "argument": "name",
615    "anyxml": "0..n",
616    "augment": "0..n",
617    "belongs-to": "0..1",
618    "choice": "0..n",
619    "contact": "0..1",
620    "container": "0..n",
621    "description": "0..1",
622    "deviation": "0..n",
623    "extension": "0..n",
624    "feature": "0..n",
625    "grouping": "0..n",
626    "identity": "0..n",
627    "import": "0..n",
628    "include": "0..n",
629    "leaf": "0..n",
630    "leaf-list": "0..n",
631    "list": "0..n",
632    "notification": "0..n",
633    "organization": "0..1",
634    "reference": "0..1",
635    "revision": "0..n",
636    "rpc": "0..n",
637    "typedef": "0..n",
638    "uses": "0..n",
639    "yang-version": "0..1",
640    "preprocess": {
641     "!js/function": "function (arg, params, ctx) {\n  var k, v;\n  for (k in params) {\n    v = params[k];\n    ctx[k] = v;\n  }\n  return delete ctx.submodule;\n}"
642    }
643   },
644   "status": {
645    "preprocess": {
646     "!js/function": "function (arg, params, ctx) {\n  return ctx.status != null ? ctx.status : ctx.status = arg;\n}"
647    },
648    "argument": "value"
649   },
650   "type": {
651    "base": "0..1",
652    "bit": "0..n",
653    "enum": "0..n",
654    "fraction-digits": "0..1",
655    "length": "0..1",
656    "path": "0..1",
657    "pattern": "0..n",
658    "range": "0..1",
659    "require-instance": "0..1",
660    "type": "0..n",
661    "preprocess": {
662     "!js/function": "function (arg, params, ctx) {\n  return delete this.enumValue;\n}"
663    },
664    "construct": {
665     "!js/function": "function (arg, params, children, ctx) {\n  var key, mparams, ref, ref1, synth, typedef, value;\n  synth = this.require('data-synth');\n  typedef = this.resolve('typedef', arg);\n  if (typedef == null) {\n    throw this.error(\"unable to resolve typedef for \" + arg);\n  }\n  switch (false) {\n    case typedef.construct == null:\n      ctx.type = typedef.construct(params, this, arguments.callee);\n      break;\n    case typeof typedef.type !== 'object':\n      ref = typedef.type;\n      for (key in ref) {\n        value = ref[key];\n        mparams = synth.copy({}, value);\n        synth.copy(mparams, params);\n        arguments.callee.call(this, key, mparams, children, ctx);\n      }\n      break;\n    case typeof typedef.type !== 'string':\n      arguments.callee.call(this, typedef.type, params, children, ctx);\n  }\n  if ((ref1 = ctx.type) != null) {\n    ref1.toString = function() {\n      return arg;\n    };\n  }\n  return null;\n}"
666    },
667    "argument": "name"
668   },
669   "typedef": {
670    "default": "0..1",
671    "description": "0..1",
672    "units": "0..1",
673    "type": "0..1",
674    "reference": "0..1",
675    "preprocess": {
676     "!js/function": "function (arg, params) {\n  return this.define('typedef', arg, params);\n}"
677    },
678    "argument": "name"
679   },
680   "uses": {
681    "augment": "0..n",
682    "description": "0..1",
683    "if-feature": "0..n",
684    "refine": "0..n",
685    "reference": "0..1",
686    "status": "0..1",
687    "when": "0..1",
688    "preprocess": {
689     "!js/function": "function (arg, params, ctx) {\n  var changes, grouping, k, match, ref, ref1, synth, target, v;\n  synth = this.require('data-synth');\n  grouping = synth.copy({}, this.resolve('grouping', arg));\n  delete grouping.description;\n  delete grouping.reference;\n  synth.copy(ctx, grouping);\n  ref = params.refine;\n  for (target in ref) {\n    changes = ref[target];\n    match = this.locate(ctx, target);\n    if (match == null) {\n      continue;\n    }\n    for (k in changes) {\n      v = changes[k];\n      match[k] = v;\n    }\n  }\n  ref1 = params.augment;\n  for (target in ref1) {\n    changes = ref1[target];\n    match = this.locate(ctx, target);\n    if (match == null) {\n      continue;\n    }\n    synth.copy(match, changes);\n  }\n  if (typeof ctx.uses === 'object') {\n    return delete ctx.uses[arg];\n  } else {\n    return delete ctx.uses;\n  }\n}"
690    },
691    "argument": "name"
692   },
693   "when": {
694    "description": "0..1",
695    "reference": "0..1",
696    "argument": "condition"
697   },
698   "anyxml": {},
699   "base": {
700    "argument": "name"
701   },
702   "contact": {
703    "argument": {
704     "text": {
705      "yin-element": "true"
706     }
707    }
708   },
709   "default": {
710    "argument": "value"
711   },
712   "description": {
713    "argument": {
714     "text": {
715      "yin-element": "true"
716     }
717    }
718   },
719   "error-app-tag": {
720    "argument": "value"
721   },
722   "error-message": {
723    "argument": {
724     "value": {
725      "yin-element": "true"
726     }
727    }
728   },
729   "fraction-digits": {
730    "argument": "value"
731   },
732   "key": {
733    "argument": "value"
734   },
735   "length": {
736    "argument": "value"
737   },
738   "namespace": {
739    "argument": "uri"
740   },
741   "ordered-by": {
742    "argument": "value"
743   },
744   "organization": {
745    "argument": {
746     "text": {
747      "yin-element": "true"
748     }
749    }
750   },
751   "position": {
752    "argument": "value"
753   },
754   "presence": {
755    "argument": "value"
756   },
757   "range": {
758    "argument": "value"
759   },
760   "reference": {
761    "argument": {
762     "text": {
763      "yin-element": "true"
764     }
765    }
766   },
767   "revision-date": {
768    "argument": "date"
769   },
770   "unique": {
771    "argument": "tag"
772   },
773   "units": {
774    "argument": "value"
775   },
776   "value": {
777    "argument": "value"
778   },
779   "yang-version": {
780    "argument": "value"
781   },
782   "yin-element": {
783    "argument": "value"
784   }
785  },
786  "typedef": {
787   "ip-version": {
788    "type": {
789     "enumeration": {
790      "enum": {
791       "unknown": {
792        "value": 0,
793        "description": "An unknown or unspecified version of the Internet\nprotocol."
794       },
795       "ipv4": {
796        "value": 1,
797        "description": "The IPv4 protocol as defined in RFC 791."
798       },
799       "ipv6": {
800        "value": 2,
801        "description": "The IPv6 protocol as defined in RFC 2460."
802       }
803      }
804     }
805    },
806    "description": "This value represents the version of the IP protocol.\n\nIn the value set and its semantics, this type is equivalent\nto the InetVersion textual convention of the SMIv2.",
807    "reference": "RFC  791: Internet Protocol\nRFC 2460: Internet Protocol, Version 6 (IPv6) Specification\nRFC 4001: Textual Conventions for Internet Network Addresses"
808   },
809   "dscp": {
810    "type": {
811     "uint8": {
812      "range": "0..63"
813     }
814    },
815    "description": "The dscp type represents a Differentiated Services Code Point\nthat may be used for marking packets in a traffic stream.\nIn the value set and its semantics, this type is equivalent\nto the Dscp textual convention of the SMIv2.",
816    "reference": "RFC 3289: Management Information Base for the Differentiated\n          Services Architecture\nRFC 2474: Definition of the Differentiated Services Field\n          (DS Field) in the IPv4 and IPv6 Headers\nRFC 2780: IANA Allocation Guidelines For Values In\n          the Internet Protocol and Related Headers"
817   },
818   "ipv6-flow-label": {
819    "type": {
820     "uint32": {
821      "range": "0..1048575"
822     }
823    },
824    "description": "The ipv6-flow-label type represents the flow identifier or Flow\nLabel in an IPv6 packet header that may be used to\ndiscriminate traffic flows.\n\nIn the value set and its semantics, this type is equivalent\nto the IPv6FlowLabel textual convention of the SMIv2.",
825    "reference": "RFC 3595: Textual Conventions for IPv6 Flow Label\nRFC 2460: Internet Protocol, Version 6 (IPv6) Specification"
826   },
827   "port-number": {
828    "type": {
829     "uint16": {
830      "range": "0..65535"
831     }
832    },
833    "description": "The port-number type represents a 16-bit port number of an\nInternet transport-layer protocol such as UDP, TCP, DCCP, or\nSCTP.  Port numbers are assigned by IANA.  A current list of\nall assignments is available from <http://www.iana.org/>.\n\nNote that the port number value zero is reserved by IANA.  In\nsituations where the value zero does not make sense, it can\nbe excluded by subtyping the port-number type.\nIn the value set and its semantics, this type is equivalent\nto the InetPortNumber textual convention of the SMIv2.",
834    "reference": "RFC  768: User Datagram Protocol\nRFC  793: Transmission Control Protocol\nRFC 4960: Stream Control Transmission Protocol\nRFC 4340: Datagram Congestion Control Protocol (DCCP)\nRFC 4001: Textual Conventions for Internet Network Addresses"
835   },
836   "as-number": {
837    "type": "uint32",
838    "description": "The as-number type represents autonomous system numbers\nwhich identify an Autonomous System (AS).  An AS is a set\nof routers under a single technical administration, using\nan interior gateway protocol and common metrics to route\npackets within the AS, and using an exterior gateway\nprotocol to route packets to other ASes.  IANA maintains\nthe AS number space and has delegated large parts to the\nregional registries.\n\nAutonomous system numbers were originally limited to 16\nbits.  BGP extensions have enlarged the autonomous system\nnumber space to 32 bits.  This type therefore uses an uint32\nbase type without a range restriction in order to support\na larger autonomous system number space.\n\nIn the value set and its semantics, this type is equivalent\nto the InetAutonomousSystemNumber textual convention of\nthe SMIv2.",
839    "reference": "RFC 1930: Guidelines for creation, selection, and registration\n          of an Autonomous System (AS)\nRFC 4271: A Border Gateway Protocol 4 (BGP-4)\nRFC 4001: Textual Conventions for Internet Network Addresses\nRFC 6793: BGP Support for Four-Octet Autonomous System (AS)\n          Number Space"
840   },
841   "ip-address": {
842    "type": {
843     "union": {
844      "type": {
845       "inet:ipv4-address": null,
846       "inet:ipv6-address": null
847      }
848     }
849    },
850    "description": "The ip-address type represents an IP address and is IP\nversion neutral.  The format of the textual representation\nimplies the IP version.  This type supports scoped addresses\nby allowing zone identifiers in the address format.",
851    "reference": "RFC 4007: IPv6 Scoped Address Architecture"
852   },
853   "ipv4-address": {
854    "type": {
855     "string": {
856      "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])(%[\\p{N}\\p{L}]+)?"
857     }
858    },
859    "description": "The ipv4-address type represents an IPv4 address in\ndotted-quad notation.  The IPv4 address may include a zone\nindex, separated by a % sign.\n\nThe zone index is used to disambiguate identical address\nvalues.  For link-local addresses, the zone index will\ntypically be the interface index number or the name of an\ninterface.  If the zone index is not present, the default\nzone of the device will be used.\n\nThe canonical format for the zone index is the numerical\nformat"
860   },
861   "ipv6-address": {
862    "type": {
863     "string": {
864      "pattern": {
865       "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(%[\\p{N}\\p{L}]+)?": null,
866       "(([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(%.+)?": null
867      }
868     }
869    },
870    "description": "The ipv6-address type represents an IPv6 address in full,\nmixed, shortened, and shortened-mixed notation.  The IPv6\naddress may include a zone index, separated by a % sign.\n\nThe zone index is used to disambiguate identical address\nvalues.  For link-local addresses, the zone index will\ntypically be the interface index number or the name of an\ninterface.  If the zone index is not present, the default\nzone of the device will be used.\n\nThe canonical format of IPv6 addresses uses the textual\nrepresentation defined in Section 4 of RFC 5952.  The\ncanonical format for the zone index is the numerical\nformat as described in Section 11.2 of RFC 4007.",
871    "reference": "RFC 4291: IP Version 6 Addressing Architecture\nRFC 4007: IPv6 Scoped Address Architecture\nRFC 5952: A Recommendation for IPv6 Address Text\n          Representation"
872   },
873   "ip-address-no-zone": {
874    "type": {
875     "union": {
876      "type": {
877       "inet:ipv4-address-no-zone": null,
878       "inet:ipv6-address-no-zone": null
879      }
880     }
881    },
882    "description": "The ip-address-no-zone type represents an IP address and is\nIP version neutral.  The format of the textual representation\nimplies the IP version.  This type does not support scoped\naddresses since it does not allow zone identifiers in the\naddress format.",
883    "reference": "RFC 4007: IPv6 Scoped Address Architecture"
884   },
885   "ipv4-address-no-zone": {
886    "type": {
887     "inet:ipv4-address": {
888      "pattern": "[0-9\\.]*"
889     }
890    },
891    "description": "An IPv4 address without a zone index.  This type, derived from\nipv4-address, may be used in situations where the zone is\nknown from the context and hence no zone index is needed."
892   },
893   "ipv6-address-no-zone": {
894    "type": {
895     "inet:ipv6-address": {
896      "pattern": "[0-9a-fA-F:\\.]*"
897     }
898    },
899    "description": "An IPv6 address without a zone index.  This type, derived from\nipv6-address, may be used in situations where the zone is\nknown from the context and hence no zone index is needed.",
900    "reference": "RFC 4291: IP Version 6 Addressing Architecture\nRFC 4007: IPv6 Scoped Address Architecture\nRFC 5952: A Recommendation for IPv6 Address Text\n          Representation"
901   },
902   "ip-prefix": {
903    "type": {
904     "union": {
905      "type": {
906       "inet:ipv4-prefix": null,
907       "inet:ipv6-prefix": null
908      }
909     }
910    },
911    "description": "The ip-prefix type represents an IP prefix and is IP\nversion neutral.  The format of the textual representations\nimplies the IP version."
912   },
913   "ipv4-prefix": {
914    "type": {
915     "string": {
916      "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]))"
917     }
918    },
919    "description": "The ipv4-prefix type represents an IPv4 address prefix.\nThe prefix length is given by the number following the\nslash character and must be less than or equal to 32.\n\nA prefix length value of n corresponds to an IP address\nmask that has n contiguous 1-bits from the most\nsignificant bit (MSB) and all other bits set to 0.\n\nThe canonical format of an IPv4 prefix has all bits of\nthe IPv4 address set to zero that are not part of the\nIPv4 prefix."
920   },
921   "ipv6-prefix": {
922    "type": {
923     "string": {
924      "pattern": {
925       "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))": null,
926       "(([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(/.+)": null
927      }
928     }
929    },
930    "description": "The ipv6-prefix type represents an IPv6 address prefix.\nThe prefix length is given by the number following the\nslash character and must be less than or equal to 128.\n\nA prefix length value of n corresponds to an IP address\nmask that has n contiguous 1-bits from the most\nsignificant bit (MSB) and all other bits set to 0.\n\nThe IPv6 address should have all bits that do not belong\nto the prefix set to zero.\n\nThe canonical format of an IPv6 prefix has all bits of\nthe IPv6 address set to zero that are not part of the\nIPv6 prefix.  Furthermore, the IPv6 address is represented\nas defined in Section 4 of RFC 5952.",
931    "reference": "RFC 5952: A Recommendation for IPv6 Address Text\n          Representation"
932   },
933   "domain-name": {
934    "type": {
935     "string": {
936      "length": "1..253",
937      "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]\\.?)|\\."
938     }
939    },
940    "description": "The domain-name type represents a DNS domain name.  The\nname SHOULD be fully qualified whenever possible.\n\nInternet domain names are only loosely specified.  Section\n3.5 of RFC 1034 recommends a syntax (modified in Section\n2.1 of RFC 1123).  The pattern above is intended to allow\nfor current practice in domain name use, and some possible\nfuture expansion.  It is designed to hold various types of\ndomain names, including names used for A or AAAA records\n(host names) and other records, such as SRV records.  Note\nthat Internet host names have a stricter syntax (described\nin RFC 952) than the DNS recommendations in RFCs 1034 and\n1123, and that systems that want to store host names in\nschema nodes using the domain-name type are recommended to\nadhere to this stricter standard to ensure interoperability.\n\nThe encoding of DNS names in the DNS protocol is limited\nto 255 characters.  Since the encoding consists of labels\nprefixed by a length bytes and there is a trailing NULL\nbyte, only 253 characters can appear in the textual dotted\nnotation.\n\nThe description clause of schema nodes using the domain-name\ntype MUST describe when and how these names are resolved to\nIP addresses.  Note that the resolution of a domain-name value\nmay require to query multiple DNS records (e.g., A for IPv4\nand AAAA for IPv6).  The order of the resolution process and\nwhich DNS record takes precedence can either be defined\nexplicitly or may depend on the configuration of the\nresolver.\n\nDomain-name values use the US-ASCII encoding.  Their canonical\nformat uses lowercase US-ASCII characters.  Internationalized\ndomain names MUST be A-labels as per RFC 5890.",
941    "reference": "RFC  952: DoD Internet Host Table Specification\nRFC 1034: Domain Names - Concepts and Facilities\nRFC 1123: Requirements for Internet Hosts -- Application\n          and Support\nRFC 2782: A DNS RR for specifying the location of services\n          (DNS SRV)\nRFC 5890: Internationalized Domain Names in Applications\n          (IDNA): Definitions and Document Framework"
942   },
943   "host": {
944    "type": {
945     "union": {
946      "type": {
947       "inet:ip-address": null,
948       "inet:domain-name": null
949      }
950     }
951    },
952    "description": "The host type represents either an IP address or a DNS\ndomain name."
953   },
954   "uri": {
955    "type": "string",
956    "description": "The uri type represents a Uniform Resource Identifier\n(URI) as defined by STD 66.\n\nObjects using the uri type MUST be in US-ASCII encoding,\nand MUST be normalized as described by RFC 3986 Sections\n6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary\npercent-encoding is removed, and all case-insensitive\ncharacters are set to lowercase except for hexadecimal\ndigits, which are normalized to uppercase as described in\nSection 6.2.2.1.\n\nThe purpose of this normalization is to help provide\nunique URIs.  Note that this normalization is not\nsufficient to provide uniqueness.  Two URIs that are\ntextually distinct after this normalization may still be\nequivalent.\n\nObjects using the uri type may restrict the schemes that\nthey permit.  For example, 'data:' and 'urn:' schemes\nmight not be appropriate.\n\nA zero-length URI is not a valid URI.  This can be used to\nexpress 'URI absent' where required.\n\nIn the value set and its semantics, this type is equivalent\nto the Uri SMIv2 textual convention defined in RFC 5017.",
957    "reference": "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax\nRFC 3305: Report from the Joint W3C/IETF URI Planning Interest\n          Group: Uniform Resource Identifiers (URIs), URLs,\n          and Uniform Resource Names (URNs): Clarifications\n          and Recommendations\nRFC 5017: MIB Textual Conventions for Uniform Resource\n          Identifiers (URIs)"
958   }
959  },
960  "pkgdir": "/Users/onvelocity/rift-composer/webapp/schemas/yang",
961  "module": {}
962 }