idnits 2.17.1 draft-ietf-dhc-dhcpv6-yang-05.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 113 instances of weird spacing in the document. Is it really formatted ragged-right, rather than justified? ** There are 112 instances of too long lines in the document, the longest one being 22 characters in excess of 72. ** The abstract seems to contain references ([RFC6020]), which it shouldn't. Please replace those with straight textual mentions of the documents in question. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 150 has weird spacing: '...service boo...' == Line 154 has weird spacing: '...ent-num uin...' == Line 163 has weird spacing: '...in-name str...' == Line 167 has weird spacing: '...rv-addr ine...' == Line 171 has weird spacing: '...rv-addr ine...' == (108 more instances...) -- The document date (December 23, 2017) is 2315 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Unused Reference: 'RFC6087' is defined on line 4713, but no explicit reference was found in the text ** Obsolete normative reference: RFC 3315 (Obsoleted by RFC 8415) ** Obsolete normative reference: RFC 3633 (Obsoleted by RFC 8415) ** Obsolete normative reference: RFC 6087 (Obsoleted by RFC 8407) == Outdated reference: A later version (-06) exists of draft-ietf-netmod-yang-tree-diagrams-04 -- Obsolete informational reference (is this intentional?): RFC 4242 (Obsoleted by RFC 8415) -- Obsolete informational reference (is this intentional?): RFC 7083 (Obsoleted by RFC 8415) Summary: 6 errors (**), 0 flaws (~~), 9 warnings (==), 3 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 DHC Working Group Y. Cui 3 Internet-Draft L. Sun 4 Intended status: Standards Track Tsinghua University 5 Expires: June 26, 2018 I. Farrer 6 S. Zechlin 7 Deutsche Telekom AG 8 Z. He 9 Tsinghua University 10 December 23, 2017 12 YANG Data Model for DHCPv6 Configuration 13 draft-ietf-dhc-dhcpv6-yang-05 15 Abstract 17 This document describes a YANG data model [RFC6020] for the 18 configuration and management of DHCPv6 servers, relays, and clients. 20 Requirements Language 22 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 23 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 24 document are to be interpreted as described in [RFC2119]. 26 Status of This Memo 28 This Internet-Draft is submitted in full conformance with the 29 provisions of BCP 78 and BCP 79. 31 Internet-Drafts are working documents of the Internet Engineering 32 Task Force (IETF). Note that other groups may also distribute 33 working documents as Internet-Drafts. The list of current Internet- 34 Drafts is at https://datatracker.ietf.org/drafts/current/. 36 Internet-Drafts are draft documents valid for a maximum of six months 37 and may be updated, replaced, or obsoleted by other documents at any 38 time. It is inappropriate to use Internet-Drafts as reference 39 material or to cite them other than as "work in progress." 41 This Internet-Draft will expire on June 26, 2018. 43 Copyright Notice 45 Copyright (c) 2017 IETF Trust and the persons identified as the 46 document authors. All rights reserved. 48 This document is subject to BCP 78 and the IETF Trust's Legal 49 Provisions Relating to IETF Documents 50 (https://trustee.ietf.org/license-info) in effect on the date of 51 publication of this document. Please review these documents 52 carefully, as they describe your rights and restrictions with respect 53 to this document. Code Components extracted from this document must 54 include Simplified BSD License text as described in Section 4.e of 55 the Trust Legal Provisions and are provided without warranty as 56 described in the Simplified BSD License. 58 Table of Contents 60 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 61 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 62 2. DHCPv6 Tree Diagram . . . . . . . . . . . . . . . . . . . . . 3 63 2.1. DHCPv6 Server Tree Diagrams . . . . . . . . . . . . . . . 3 64 2.2. DHCPv6 Relay Tree Diagrams . . . . . . . . . . . . . . . 16 65 2.3. DHCPv6 Client Tree Diagrams . . . . . . . . . . . . . . . 20 66 3. DHCPv6 YANG Model . . . . . . . . . . . . . . . . . . . . . . 27 67 3.1. DHCPv6 Server YANG Model . . . . . . . . . . . . . . . . 27 68 3.2. DHCPv6 Relay YANG Model . . . . . . . . . . . . . . . . . 48 69 3.3. DHCPv6 Client YANG Model . . . . . . . . . . . . . . . . 58 70 3.4. DHCPv6 Options YANG Model . . . . . . . . . . . . . . . . 67 71 4. Security Considerations (TBD) . . . . . . . . . . . . . . . . 98 72 5. IANA Considerations (TBD) . . . . . . . . . . . . . . . . . . 98 73 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 98 74 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 98 75 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 98 76 8.1. Normative References . . . . . . . . . . . . . . . . . . 98 77 8.2. Informative References . . . . . . . . . . . . . . . . . 99 78 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 101 80 1. Introduction 82 DHCPv6 [RFC3315] is widely used for supplying configuration and other 83 relevant parameters to clients in IPv6 networks. This document 84 defines a DHCPv6 YANG data model, containing sub-modules for the 85 configuration and management of DHCPv6 servers, relays and clients. 86 A single YANG model covering all of these elements provides an 87 operator with a common interface for the management of the entire 88 DHCPv6 deployment in their network. 90 Since the publication of the original DHCPv6 specification, there 91 have been a large number of addional documents that update the 92 protocol's operation, add new functions and define new options. The 93 YANG model described in this document incorporates all relevent 94 changes. A full list of the documents which have been considedered 95 in the development of this model is included in Appendix A. 97 IF - Commment - Does anyone have this list? 99 It is worth noting that as DHCPv6 is itself a device configuration 100 protocol, it is not the intention of this document to replace the 101 configuration of DHCPv6 options and parameters using the DHCPv6 102 protocol with the configuration of DHCPv6 options using NETCONF/YANG. 103 The DHCPv6 client model is intended for the configuration of the 104 DHCPv6 client function and also for obtaining read-only state data 105 from the client which has been learnt via the normal DHCPv6 message 106 flow. This gives an operator a better method for managing DHCPv6 107 clients and simplifies troubleshooting. 109 1.1. Terminology 111 The reader should be familiar with the terms defined in DHCPv6 112 [RFC3315] and other relevant documents. 114 The DHCPv6 tree diagrams provide a concise representation of a YANG 115 module to help the reader understand the module structure. 117 A simplified graphical representation of the data model is provided 118 in this d cument. For a description of the symbols in these 119 diagrams, please refer to [I-D.ietf-netmod-yang-tree-diagrams]. 121 2. DHCPv6 Tree Diagram 123 2.1. DHCPv6 Server Tree Diagrams 125 module: ietf-dhcpv6-server 126 +--rw server! 127 +--rw server-config 128 | +--rw serv-attributes 129 | | +--rw name? string 130 | | +--rw duid 131 | | | +--rw type-code? uint16 132 | | | +--rw (duid-type)? 133 | | | +--:(duid-llt) 134 | | | | +--rw duid-llt-hardware-type? uint16 135 | | | | +--rw duid-llt-time? yang:timeticks 136 | | | | +--rw duid-llt-link-layer-addr? yang:mac-address 137 | | | +--:(duid-en) 138 | | | | +--rw duid-en-enterprise-number? uint32 139 | | | | +--rw duid-en-identifier? string 140 | | | +--:(duid-ll) 141 | | | | +--rw duid-ll-hardware-type? uint16 142 | | | | +--rw duid-ll-link-layer-addr? yang:mac-address 143 | | | +--:(duid-uuid) 144 | | | | +--rw uuid? yang:uuid 145 | | | +--:(duid-invalid) 146 | | | +--rw data? binary 147 | | +--rw ipv6-address* inet:ipv6-address 148 | | +--rw description? string 149 | | +--rw pd-function boolean 150 | | +--rw stateless-service boolean 151 | | +--rw rapid-commit boolean 152 | | +--rw interfaces-config* string 153 | | +--rw vendor-info 154 | | +--rw ent-num uint32 155 | | +--rw data* string 156 | +--rw option-sets 157 | | +--rw option-set* [id] 158 | | +--rw id uint32 159 | | +--rw server-unicast-option! {server-unicast-op}? 160 | | | +--rw server-address? inet:ipv6-address 161 | | +--rw sip-server-domain-name-list-option! 162 {sip-server-domain-name-list-op}? 163 | | | +--rw sip-serv-domain-name string 164 | | +--rw sip-server-address-list-option! {sip-server-address-list-op}? 165 | | | +--rw sip-server* [sip-serv-id] 166 | | | +--rw sip-serv-id uint8 167 | | | +--rw sip-serv-addr inet:ipv6-address 168 | | +--rw dns-config-option! {dns-config-op}? 169 | | | +--rw dns-server* [dns-serv-id] 170 | | | +--rw dns-serv-id uint8 171 | | | +--rw dns-serv-addr inet:ipv6-address 172 | | +--rw domain-searchlist-option! {domain-searchlist-op}? 173 | | | +--rw domain-searchlist* [domain-searchlist-id] 174 | | | +--rw domain-searchlist-id uint8 175 | | | +--rw domain-search-list-entry string 176 | | +--rw nis-config-option! {nis-config-op}? 177 | | | +--rw nis-server* [nis-serv-id] 178 | | | +--rw nis-serv-id uint8 179 | | | +--rw nis-serv-addr inet:ipv6-address 180 | | +--rw nis-plus-config-option! {nis-plus-config-op}? 181 | | | +--rw nis-plus-server* [nis-plus-serv-id] 182 | | | +--rw nis-plus-serv-id uint8 183 | | | +--rw nis-plus-serv-addr inet:ipv6-address 184 | | +--rw nis-domain-name-option! {nis-domain-name-op}? 185 | | | +--rw nis-domain-name? string 186 | | +--rw nis-plus-domain-name-option!{nis-plus-domain-name-op}? 187 | | | +--rw nis-plus-domain-name? string 188 | | +--rw sntp-server-option! {sntp-server-op}? 189 | | | +--rw sntp-server* [sntp-serv-id] 190 | | | +--rw sntp-serv-id uint8 191 | | | +--rw sntp-serv-addr inet:ipv6-address 192 | | +--rw info-refresh-time-option! {info-refresh-time-op}? 193 | | | +--rw info-refresh-time yang:timeticks 194 | | +--rw client-fqdn-option! {client-fqdn-op}? 195 | | | +--rw server-initiate-update boolean 196 | | | +--rw client-initiate-update boolean 197 | | | +--rw modify-name-from-cli boolean 198 | | +--rw posix-timezone-option! {posix-timezone-op}? 199 | | | +--rw tz-posix string 200 | | +--rw tzdb-timezone-option! {tzdb-timezone-op}? 201 | | | +--rw tz-database string 202 | | +--rw ntp-server-option! {ntp-server-op}? 203 | | | +--rw ntp-server* [ntp-serv-id] 204 | | | +--rw ntp-serv-id uint8 205 | | | +--rw (ntp-time-source-suboption)? 206 | | | +--:(server-address) 207 | | | | +--rw ntp-serv-addr-suboption* inet:ipv6-address 208 | | | +--:(server-multicast-address) 209 | | | | +--rw ntp-serv-mul-addr-suboption* inet:ipv6-address 210 | | | +--:(server-fqdn) 211 | | | +--rw ntp-serv-fqdn-suboption* string 212 | | +--rw boot-file-url-option! {boot-file-url-op}? 213 | | | +--rw boot-file* [boot-file-id] 214 | | | +--rw boot-file-id uint8 215 | | | +--rw suitable-arch-type* uint16 216 | | | +--rw suitable-net-if* uint32 217 | | | +--rw boot-file-url string 218 | | +--rw boot-file-param-option! {boot-file-param-op}? 219 | | | +--rw boot-file-paras* [para-id] 220 | | | +--rw para-id uint8 221 | | | +--rw parameter string 222 | | +--rw aftr-name-option! {aftr-name-op}? 223 | | | +--rw tunnel-endpoint-name string 224 | | +--rw kbr-default-name-option! {kbr-default-name-op}? 225 | | | +--rw default-realm-name string 226 | | +--rw kbr-kdc-option! {kbr-kdc-op}? 227 | | | +--rw kdc-info* [kdc-id] 228 | | | +--rw kdc-id uint8 229 | | | +--rw priority uint16 230 | | | +--rw weight uint16 231 | | | +--rw transport-type uint8 232 | | | +--rw port-number uint16 233 | | | +--rw kdc-ipv6-addr inet:ipv6-address 234 | | | +--rw realm-name string 235 | | +--rw sol-max-rt-option! {sol-max-rt-op}? 236 | | | +--rw sol-max-rt-value yang:timeticks 237 | | +--rw inf-max-rt-option! {inf-max-rt-op}? 238 | | | +--rw inf-max-rt-value yang:timeticks 239 | | +--rw addr-selection-option! {addr-selection-op}? 240 | | | +--rw a-bit-set boolean 241 | | | +--rw p-bit-set boolean 242 | | | +--rw policy-table* [policy-id] 243 | | | +--rw policy-id uint8 244 | | | +--rw label uint8 245 | | | +--rw precedence uint8 246 | | | +--rw prefix-len uint8 247 | | | +--rw prefix inet:ipv6-prefix 248 | | +--rw pcp-server-option! {pcp-server-op}? 249 | | | +--rw pcp-server* [pcp-serv-id] 250 | | | +--rw pcp-serv-id uint8 251 | | | +--rw pcp-serv-addr inet:ipv6-address 252 | | +--rw s46-rule-option! {s46-rule-op}? 253 | | | +--rw s46-rule* [rule-id] 254 | | | +--rw rule-id uint8 255 | | | +--rw rule-type enumeration 256 | | | +--rw prefix4-len uint8 257 | | | +--rw ipv4-prefix inet:ipv4-prefix 258 | | | +--rw prefix6-len uint8 259 | | | +--rw ipv6-prefix inet:ipv6-prefix 260 | | | +--rw port-parameter 261 | | | +--rw offset uint8 262 | | | +--rw psid-len uint8 263 | | | +--rw psid uint16 264 | | +--rw s46-br-option! {s46-br-op}? 265 | | | +--rw br* [br-id] 266 | | | +--rw br-id uint8 267 | | | +--rw br-ipv6-addr inet:ipv6-address 268 | | +--rw s46-dmr-option! {s46-dmr-op}? 269 | | | +--rw dmr* [dmr-id] 270 | | | +--rw dmr-id uint8 271 | | | +--rw dmr-prefix-len uint8 272 | | | +--rw dmr-ipv6-prefix inet:ipv6-prefix 273 | | +--rw s46-v4-v6-binding-option! {s46-v4-v6-binding-op}? 274 | | | +--rw ce* [ce-id] 275 | | | +--rw ce-id uint8 276 | | | +--rw ipv4-addr inet:ipv4-address 277 | | | +--rw bind-prefix6-len uint8 278 | | | +--rw bind-ipv6-prefix inet:ipv6-prefix 279 | | | +--rw port-parameter 280 | | | +--rw offset uint8 281 | | | +--rw psid-len uint8 282 | | | +--rw psid uint16 283 | | +--rw operator-option-ipv6-address!{operator-op-ipv6-address}? 284 | | | +--rw operator-ipv6-addr* [operator-ipv6-addr-id] 285 | | | +--rw operator-ipv6-addr-id uint8 286 | | | +--rw operator-ipv6-addr inet:ipv6-address 287 | | +--rw operator-option-single-flag!{operator-op-single-flag}? 288 | | | +--rw flag* [flag-id] 289 | | | +--rw flag-id uint8 290 | | | +--rw flag-value boolean 291 | | +--rw operator-option-ipv6-prefix!{operator-op-ipv6-prefix}? 292 | | | +--rw operator-ipv6-prefix* [operator-ipv6-prefix-id] 293 | | | +--rw operator-ipv6-prefix-id uint8 294 | | | +--rw operator-ipv6-prefix6-len uint8 295 | | | +--rw operator-ipv6-prefix inet:ipv6-prefix 296 | | +--rw operator-option-int32! {operator-op-int32}? 297 | | | +--rw int32val* [int32val-id] 298 | | | +--rw int32val-id uint8 299 | | | +--rw int32val uint32 300 | | +--rw operator-option-int16! {operator-op-int16}? 301 | | | +--rw int16val* [int16val-id] 302 | | | +--rw int16val-id uint8 303 | | | +--rw int16val uint16 304 | | +--rw operator-option-int8! {operator-op-int8}? 305 | | | +--rw int8val* [int8val-id] 306 | | | +--rw int8val-id uint8 307 | | | +--rw int8val uint8 308 | | +--rw operator-option-uri! {operator-op-uri}? 309 | | | +--rw uri* [uri-id] 310 | | | +--rw uri-id uint8 311 | | | +--rw uri string 312 | | +--rw operator-option-textstring! {operator-op-textstring}? 313 | | | +--rw textstring* [textstring-id] 314 | | | +--rw textstring-id uint8 315 | | | +--rw textstring string 316 | | +--rw operator-option-var-data! {operator-op-var-data}? 317 | | | +--rw int32val* [var-data-id] 318 | | | +--rw var-data-id uint8 319 | | | +--rw var-data binary 320 | | +--rw operator-option-dns-wire! {operator-op-dns-wire}? 321 | | +--rw operator-option-dns-wire* [operator-option-dns-wire-id] 322 | | +--rw operator-option-dns-wire-id uint8 323 | | +--rw operator-option-dns-wire binary 324 | +--rw network-ranges 325 | | +--rw network-range* [network-range-id] 326 | | +--rw network-range-id uint32 327 | | +--rw network-description string 328 | | +--rw network-prefix inet:ipv6-prefix 329 | | +--rw inherit-option-set boolean 330 | | +--rw option-set-id? 331 -> /server/server-config/option-sets/option-set/id 332 | | +--rw reserved-addresses 333 | | | +--rw static-binding* [cli-id] 334 | | | | +--rw cli-id uint32 335 | | | | +--rw duid 336 | | | | | +--rw type-code? uint16 337 | | | | | +--rw (duid-type)? 338 | | | | | +--:(duid-llt) 339 | | | | | | +--rw duid-llt-hardware-type? uint16 340 | | | | | | +--rw duid-llt-time? yang:timeticks 341 | | | | | | +--rw duid-llt-link-layer-addr? yang:mac-address 342 | | | | | +--:(duid-en) 343 | | | | | | +--rw duid-en-enterprise-number? uint32 344 | | | | | | +--rw duid-en-identifier? string 345 | | | | | +--:(duid-ll) 346 | | | | | | +--rw duid-ll-hardware-type? uint16 347 | | | | | | +--rw duid-ll-link-layer-addr? yang:mac-address 348 | | | | | +--:(duid-uuid) 349 | | | | | | +--rw uuid? yang:uuid 350 | | | | | +--:(duid-invalid) 351 | | | | | +--rw data? binary 352 | | | | +--rw reserv-addr* inet:ipv6-address 353 | | | +--rw other-reserv-addr* inet:ipv6-address 354 | | +--rw reserved-prefixes 355 | | | +--rw static-binding* [cli-id] 356 | | | | +--rw cli-id uint32 357 | | | | +--rw duid 358 | | | | | +--rw type-code? uint16 359 | | | | | +--rw (duid-type)? 360 | | | | | +--:(duid-llt) 361 | | | | | | +--rw duid-llt-hardware-type? uint16 362 | | | | | | +--rw duid-llt-time? yang:timeticks 363 | | | | | | +--rw duid-llt-link-layer-addr? yang:mac-address 364 | | | | | +--:(duid-en) 365 | | | | | | +--rw duid-en-enterprise-number? uint32 366 | | | | | | +--rw duid-en-identifier? string 367 | | | | | +--:(duid-ll) 368 | | | | | | +--rw duid-ll-hardware-type? uint16 369 | | | | | | +--rw duid-ll-link-layer-addr? yang:mac-address 370 | | | | | +--:(duid-uuid) 371 | | | | | | +--rw uuid? yang:uuid 372 | | | | | +--:(duid-invalid) 373 | | | | | +--rw data? binary 374 | | | | +--rw reserv-prefix-len uint8 375 | | | | +--rw reserv-prefix inet:ipv6-prefix 376 | | | +--rw exclude-prefix-len uint8 377 | | | +--rw exclude-prefix inet:ipv6-prefix 378 | | | +--rw other-reserv-prefix* [reserv-id] 379 | | | +--rw reserv-id uint32 380 | | | +--rw prefix-len uint8 381 | | | +--rw prefix inet:ipv6-prefix 382 | | +--rw address-pools 383 | | | +--rw address-pool* [pool-id] 384 | | | +--rw pool-id uint32 385 | | | +--rw pool-prefi inet:ipv6-prefix 386 | | | +--rw start-address inet:ipv6-address-no-zone 387 | | | +--rw end-address inet:ipv6-address-no-zone 388 | | | +--rw renew-time yang:timeticks 389 | | | +--rw rebind-time yang:timeticks 390 | | | +--rw preferred-lifetime yang:timeticks 391 | | | +--rw valid-lifetime yang:timeticks 392 | | | +--rw max-address-utilization-ratio threshold 393 | | | +--rw inherit-option-set boolean 394 | | | +--rw option-set-id 395 -> /server/server-config/option-sets/option-set/id 396 | | +--rw prefix-pools 397 | | | +--rw prefix-pool* [pool-id] 398 | | | +--rw pool-id uint32 399 | | | +--rw prefix inet:ipv6-prefix 400 | | | +--rw prefix-length uint8 401 | | | +--rw renew-time yang:timeticks 402 | | | +--rw rebind-time yang:timeticks 403 | | | +--rw preferred-lifetime yang:timeticks 404 | | | +--rw valid-lifetime yang:timeticks 405 | | | +--rw max-prefix-utilization-ratio threshold 406 | | | +--rw inherit-option-set boolean 407 | | | +--rw option-set-id? 408 -> /server/server-config/option-sets/option-set/id 409 | | +--rw hosts 410 | | +--rw host* [cli-id] 411 | | +--rw cli-id uint32 412 | | +--rw duid 413 | | | +--rw type-code? uint16 414 | | | +--rw (duid-type)? 415 | | | +--:(duid-llt) 416 | | | | +--rw duid-llt-hardware-type? uint16 417 | | | | +--rw duid-llt-time? yang:timeticks 418 | | | | +--rw duid-llt-link-layer-addr? yang:mac-address 419 | | | +--:(duid-en) 420 | | | | +--rw duid-en-enterprise-number? uint32 421 | | | | +--rw duid-en-identifier? string 422 | | | +--:(duid-ll) 423 | | | | +--rw duid-ll-hardware-type? uint16 424 | | | | +--rw duid-ll-link-layer-addr? yang:mac-address 425 | | | +--:(duid-uuid) 426 | | | | +--rw uuid? yang:uuid 427 | | | +--:(duid-invalid) 428 | | | +--rw data? binary 429 | | +--rw inherit-option-set boolean 430 | | +--rw option-set-id? 431 -> /server/server-config/option-sets/option-set/id 432 | | +--rw nis-domain-name? string 433 | | +--rw nis-plus-domain-name? string 434 | +--rw relay-opaque-paras 435 | | +--rw relays* [relay-name] 436 | | +--rw relay-name string 437 | | +--rw interface-info* [if-name] 438 | | | +--rw if-name string 439 | | | +--rw interface-id string 440 | | +--rw subscribers* [subscriber] 441 | | | +--rw subscriber uint32 442 | | | +--rw subscriber-id string 443 | | +--rw remote-host* [ent-num] 444 | | +--rw ent-num uint32 445 | | +--rw remote-id string 446 | +--rw rsoo-enabled-options 447 | +--rw rsoo-enabled-option* [option-code] 448 | +--rw option-code uint16 449 | +--rw description string 450 +--ro server-state 451 +--ro network-ranges 452 | +--ro network-range* [network-range-id] 453 | +--ro network-range-id uint32 454 | +--ro address-pools 455 | | +--ro address-pool* [pool-id] 456 | | | +--ro pool-id uint32 457 | | | +--ro total-ipv6-count uint64 458 | | | +--ro used-ipv6-count uint64 459 | | | +--ro address-utilization-ratio uint16 460 | | +--ro binding-info* [cli-id] 461 | | +--ro cli-id uint32 462 | | +--ro duid 463 | | | +--ro type-code? uint16 464 | | | +--ro (duid-type)? 465 | | | +--:(duid-llt) 466 | | | | +--ro duid-llt-hardware-type? uint16 467 | | | | +--ro duid-llt-time? yang:timeticks 468 | | | | +--ro duid-llt-link-layer-addr? yang:mac-address 469 | | | +--:(duid-en) 470 | | | | +--ro duid-en-enterprise-number? uint32 471 | | | | +--ro duid-en-identifier? string 472 | | | +--:(duid-ll) 473 | | | | +--ro duid-ll-hardware-type? uint16 474 | | | | +--ro duid-ll-link-layer-addr? yang:mac-address 475 | | | +--:(duid-uuid) 476 | | | | +--ro uuid? yang:uuid 477 | | | +--:(duid-invalid) 478 | | | +--ro data? binary 479 | | +--ro cli-ia* [iaid] 480 | | +--ro ia-type string 481 | | +--ro iaid uint32 482 | | +--ro cli-addr* inet:ipv6-address 483 | | +--ro pool-id uint32 484 | +--ro prefix-pools 485 | | +--ro prefix-pool* [pool-id] 486 | | | +--ro pool-id uint32 487 | | | +--ro prefix-utilization-ratio uint16 488 | | +--ro binding-info* [cli-id] 489 | | +--ro cli-id uint32 490 | | +--ro duid 491 | | | +--ro type-code? uint16 492 | | | +--ro (duid-type)? 493 | | | +--:(duid-llt) 494 | | | | +--ro duid-llt-hardware-type? uint16 495 | | | | +--ro duid-llt-time? yang:timeticks 496 | | | | +--ro duid-llt-link-layer-addr? yang:mac-address 497 | | | +--:(duid-en) 498 | | | | +--ro duid-en-enterprise-number? uint32 499 | | | | +--ro duid-en-identifier? string 500 | | | +--:(duid-ll) 501 | | | | +--ro duid-ll-hardware-type? uint16 502 | | | | +--ro duid-ll-link-layer-addr? yang:mac-address 503 | | | +--:(duid-uuid) 504 | | | | +--ro uuid? yang:uuid 505 | | | +--:(duid-invalid) 506 | | | +--ro data? binary 507 | | +--ro cli-iapd* [iaid] 508 | | +--ro iaid uint32 509 | | +--ro cli-prefix* inet:ipv6-prefix 510 | | +--ro cli-prefix-len* uint8 511 | | +--ro pool-id uint32 512 | +--ro address-prefix-assign-param* [cli-id] 513 | +--ro cli-id uint32 514 | +--ro source-ipv6-addr? inet:ipv6-address 515 | +--ro duid 516 | | +--ro type-code? uint16 517 | | +--ro (duid-type)? 518 | | +--:(duid-llt) 519 | | | +--ro duid-llt-hardware-type? uint16 520 | | | +--ro duid-llt-time? yang:timeticks 521 | | | +--ro duid-llt-link-layer-addr? yang:mac-address 522 | | +--:(duid-en) 523 | | | +--ro duid-en-enterprise-number? uint32 524 | | | +--ro duid-en-identifier? string 525 | | +--:(duid-ll) 526 | | | +--ro duid-ll-hardware-type? uint16 527 | | | +--ro duid-ll-link-layer-addr? yang:mac-address 528 | | +--:(duid-uuid) 529 | | | +--ro uuid? yang:uuid 530 | | +--:(duid-invalid) 531 | | +--ro data? binary 532 | +--ro iaid* uint32 533 | +--ro preferred-addr* inet:ipv6-address 534 | +--ro preferred-prefix-len* uint8 535 | +--ro client-fqdn? string 536 | +--ro client-link-layer-addr? uint16 537 | +--ro client-enterprise-number? uint32 538 | +--ro client-sys-archi-type* uint16 539 +--ro packet-stats 540 +--ro solicit-count uint32 541 +--ro request-count uint32 542 +--ro renew-count uint32 543 +--ro rebind-count uint32 544 +--ro decline-count uint32 545 +--ro release-count uint32 546 +--ro info-req-count uint32 547 +--ro advertise-count uint32 548 +--ro confirm-count uint32 549 +--ro reply-count uint32 550 +--ro reconfigure-count uint32 551 +--ro relay-forward-count uint32 552 +--ro relay-reply-count uint32 554 notifications: 555 +---n notifications 556 +--ro dhcpv6-server-event 557 +--ro pool-running-out 558 | +--ro max-address-utilization-ratio uint16 559 | +--ro address-utilization-ratio uint16 560 | +--ro max-prefix-utilization-ratio uint16 561 | +--ro prefix-utilization-ratio uint16 562 | +--ro duid 563 | | +--ro type-code? uint16 564 | | +--ro (duid-type)? 565 | | +--:(duid-llt) 566 | | | +--ro duid-llt-hardware-type? uint16 567 | | | +--ro duid-llt-time? yang:timeticks 568 | | | +--ro duid-llt-link-layer-addr? yang:mac-address 569 | | +--:(duid-en) 570 | | | +--ro duid-en-enterprise-number? uint32 571 | | | +--ro duid-en-identifier? string 572 | | +--:(duid-ll) 573 | | | +--ro duid-ll-hardware-type? uint16 574 | | | +--ro duid-ll-link-layer-addr? yang:mac-address 575 | | +--:(duid-uuid) 576 | | | +--ro uuid? yang:uuid 577 | | +--:(duid-invalid) 578 | | +--ro data? binary 579 | +--ro serv-name? string 580 | +--ro pool-name string 581 +--ro invalid-client-detected 582 +--ro duid 583 | +--ro type-code? uint16 584 | +--ro (duid-type)? 585 | +--:(duid-llt) 586 | | +--ro duid-llt-hardware-type? uint16 587 | | +--ro duid-llt-time? yang:timeticks 588 | | +--ro duid-llt-link-layer-addr? yang:mac-address 589 | +--:(duid-en) 590 | | +--ro duid-en-enterprise-number? uint32 591 | | +--ro duid-en-identifier? string 592 | +--:(duid-ll) 593 | | +--ro duid-ll-hardware-type? uint16 594 | | +--ro duid-ll-link-layer-addr? yang:mac-address 595 | +--:(duid-uuid) 596 | | +--ro uuid? yang:uuid 597 | +--:(duid-invalid) 598 | +--ro data? binary 599 +--ro description? string 601 Figure 1: DHCPv6 Data Model Structure 603 Introduction of important nodes: 605 o server-config: This container contains the configuration data of a 606 server. 608 o serv-attributes: This container contains basic attributes of a 609 DHCPv6 server such as DUID, server name and so on. Some optional 610 functions that can be provided by the server is also included. 612 o duid: Each server and client has only one DUID (DHCP Unique 613 Identifier). The DUID here identifies a unique DHCPv6 server for 614 clients. DUID consists of a two-octet type field and an arbitrary 615 length (no more than 128 bytes) content field. Currently there 616 are four defined types of DUIDs in [RFC3315] and [RFC6355] - DUID- 617 LLT, DUID-EN, DUID-LL and DUID-UUID. DUID-INVALID represents 618 those unconventional DUIDs. 620 o pd-function: Whether the server can act as a delegating router to 621 perform prefix delegation [RFC3633]. 623 o operator-option-ipv6-address, operator-option-single-flag, 624 operator-option-ipv6-prefix, operator-option-int32, operator- 625 option-int16, operator-option-int8, operator-option-uri, operator- 626 option-textstring, operator-option-var-data, operator-option-dns- 627 wire: are generic option formats described in [RFC7227]. 629 o stateless-service: A boolean value specifies whether the server 630 support client-server exchanges involving two messages defined in 631 [RFC3315]. 633 o rapid-commit: Setting the value to '1' represents the server 634 support the Solicit-Reply message exchange. '0' means the server 635 will simply ignore the Rapid Commit option in Solicit message. 637 o interfaces-config: A leaf list to denote which one or more 638 interfaces the server should listen on. The default value is to 639 listen on all the interfaces. This node is also used to set a 640 unicast address for the server to listen with a specific 641 interface. For example, if the server is being configured to 642 listen on a unicast address assigned to a specific interface, the 643 format "eth1/2001:db8::1" can be used. 645 o option-sets: DHCPv6 employs various options to carry additional 646 information and parameters in DHCP messages. This container 647 defines all the possible options that need to be configured at the 648 server side. The relevant RFCs that define those options include: 649 [RFC3315], [RFC3319], [RFC3646], [RFC3898], [RFC4242], [RFC4704], 650 [RFC4833], [RFC5908], [RFC5970], [RFC4075], [RFC6334], [RFC6784], 651 [RFC7078], [RFC7083], [RFC7291], [RFC7598]. 653 o option-set: A server may allow different option sets to be 654 configured for different conditions (i.e. different networks, 655 clients and etc). This "option-set" list enables various sets of 656 options being defined and configured in a single server. 657 Different sets are distinguished by the key called "option-set- 658 id". All the possible options discussed above are defined in the 659 list and each option is corresponding to a container. Since all 660 the options in the list are optional, each container in this list 661 has a 'presence' statement to indicate whether this option 662 (container) will be included in the current option set or not. In 663 addition, each container also has a 'if-feature' statement to 664 indicate whether the server supports this option (container). 666 o network-ranges: This model supports a hierarchy to achieve dynamic 667 configuration. That is to say we could configure the server at 668 different levels through this model. The top level is a global 669 level which is defined as the container "network-ranges". The 670 following levels are defined as sub-containers under it. The 671 "network-ranges" contains the parameters (e.g. option-sets) that 672 would be allocated to all the clients served by this server 674 o network-range: Under the "network-ranges" container, a "network- 675 range" list is defined to configure the server at a network level 676 which is also considered as the second level. Different network 677 are identified by the key "network-range-id". This is because a 678 server may have different configuration parameters (e.g. option 679 sets) for different networks. 681 o address-pools: Under the "network-range" list, a container 682 describes the DHCPv6 server's address pools for a specific network 683 is defined. This container supports the server to be configured 684 at a pool level. 686 o address-pool: A DHCPv6 server can be configured with several 687 address pools for a specific network. This list defines such 688 address pools which are distinguish by the key called "pool-id". 690 o max-address-utilization-ratio: The threshold of address pool 691 utiliztion, the value of which is settable. 693 o binding-info: A list records a binding information for each DHCPv6 694 client that has already been allocated IPv6 addresses. 696 o prefix-pools: If a server supports prefix delegation function, 697 this container under the "network-range" list will be valid to 698 define the delegating router's prefix pools for a specific 699 network. This container also supports the server to be configured 700 at a pool level. 702 o prefix-pool: Similar to server's address pools, a delegating 703 router can also be configured with multiple prefix pools specified 704 by a list called "prefix-pool". 706 o max-prefix-utilization-ratio: The threshold of prefix pool 707 utiliztion, the value of which is settable. 709 o binding-info: A list records a binding information for each DHCPv6 710 requesting router that has already been configured IPv6 prefixes. 712 o hosts: A server may also desire to be configured at a host level 713 under some circumstances. This container include a list called 714 "host" to allow the server carrying different parameters (e.g. 715 option sets) for different hosts. 717 o relay-opaque-paras: This container contains some opaque values in 718 Relay Agent options that need to be configured on the server side 719 only for value match. Such Relay Agent options include Interface- 720 Id option, Remote-Id option and Subscriber-Id option. 722 o rsoo-enabled-options: [RFC6422] requires that the server SHOULD 723 have an administrator-configurable list of RSOO-enabled options. 724 This container include a list called "rsoo-enabled-option" to 725 allow new RSOO-enabled options to be defined at the server side. 727 o server-state: This container includes the state data of a server. 729 o address-prefix-assign-param: This list includes some parameters/ 730 identifiers that the server obtains from DHCPv6 options in this 731 network-range. The server may take these parameters/identifiers 732 into account when assigning a(n) address/prefix. 734 o packet-stats: A container presents the packet statistics related 735 to the DHCPv6 server. 737 Information about notifications: 739 o pool-running-out: raised when the address/prefix pool is going to 740 run out. A threshold for utilization ratio of the pool has been 741 defined in the server feature so that it will notify the 742 administrator when the utilization ratio reaches the threshold, 743 and such threshold is a settable parameter. 745 o invalid-client-detected: raised when the server has found a client 746 which can be regarded as a potential attacker. Some description 747 could also be included. 749 2.2. DHCPv6 Relay Tree Diagrams 751 module: ietf-dhcpv6-relay 752 +--rw relay! 753 +--rw relay-config 754 | +--rw relay-attributes 755 | | +--rw name? string 756 | | +--rw description? string 757 | | +--rw dest-addrs* inet:ipv6-address 758 | | +--rw subscribers* [subscriber] 759 | | | +--rw subscriber uint8 760 | | | +--rw subscriber-id string 761 | | +--rw remote-host* [ent-num] 762 | | | +--rw ent-num uint32 763 | | | +--rw remote-id string 764 | | +--rw vendor-info 765 | | +--rw ent-num uint32 766 | | +--rw data* string 767 | +--rw rsoo-option-sets 768 | | +--rw option-set* [id] 769 | | +--rw id uint32 770 | | +--rw erp-local-domain-name-option! 771 {erp-local-domain-name-op}? 772 | | +--rw erp-for-client* [cli-id] 773 | | +--rw cli-id uint32 774 | | +--rw duid 775 | | | +--rw type-code? uint16 776 | | | +--rw (duid-type)? 777 | | | +--:(duid-llt) 778 | | | | +--rw duid-llt-hardware-type? uint16 779 | | | | +--rw duid-llt-time? 780 yang:timeticks 781 | | | | +--rw duid-llt-link-layer-addr? 782 yang:mac-address 783 | | | +--:(duid-en) 784 | | | | +--rw duid-en-enterprise-number? uint32 785 | | | | +--rw duid-en-identifier? string 786 | | | +--:(duid-ll) 787 | | | | +--rw duid-ll-hardware-type? uint16 788 | | | | +--rw duid-ll-link-layer-addr? 789 yang:mac-address 790 | | | +--:(duid-uuid) 791 | | | | +--rw uuid? yang:uuid 792 | | | +--:(duid-invalid) 793 | | | +--rw data? binary 794 | | +--rw erp-name string 795 | +--rw relay-if* [if-name] 796 | +--rw if-name string 797 | +--rw enable boolean 798 | +--rw ipv6-address? inet:ipv6-address 799 | +--rw interface-id? string 800 | +--rw rsoo-option-set-id? 801 -> /relay/relay-config/rsoo-option-sets/option-set/id 802 | +--rw next-entity* [dest-addr] 803 | +--rw dest-addr inet:ipv6-address 804 | +--rw available boolean 805 | +--rw multicast boolean 806 | +--rw server boolean 807 +--ro relay-state 808 +--ro relay-if* [if-name] 809 | +--ro if-name string 810 | +--ro pd-route* [pd-route-id] 811 | | +--ro pd-route-id uint8 812 | | +--ro requesting-router-id uint32 813 | | +--ro delegating-router-id uint32 814 | | +--ro next-router inet:ipv6-address 815 | | +--ro last-router inet:ipv6-address 816 | +--ro next-entity* [dest-addr] 817 | +--ro dest-addr inet:ipv6-address 818 | +--ro packet-stats 819 | +--ro solicit-rvd-count uint32 820 | +--ro request-rvd-count uint32 821 | +--ro renew-rvd-count uint32 822 | +--ro rebind-rvd-count uint32 823 | +--ro decline-rvd-count uint32 824 | +--ro release-rvd-count uint32 825 | +--ro info-req-rvd-count uint32 826 | +--ro relay-for-rvd-count uint32 827 | +--ro relay-rep-rvd-count uint32 828 | +--ro packet-to-cli-count uint32 829 | +--ro adver-sent-count uint32 830 | +--ro confirm-sent-count uint32 831 | +--ro reply-sent-count uint32 832 | +--ro reconfig-sent-count uint32 833 | +--ro relay-for-sent-count uint32 834 | +--ro relay-rep-sent-count uint32 835 +--ro relay-stats 836 +--ro cli-packet-rvd-count uint32 837 +--ro relay-for-rvd-count uint32 838 +--ro relay-rep-rvd-count uint32 839 +--ro packet-to-cli-count uint32 840 +--ro relay-for-sent-count uint32 841 +--ro relay-rep-sent-count uint32 842 +--ro discarded-packet-count uint32 844 notifications: 845 +---n notifications 846 +--ro dhcpv6-relay-event 847 +--ro topo-changed 848 +--ro relay-if-name string 849 +--ro first-hop boolean 850 +--ro last-entity-addr inet:ipv6-address 852 Introduction of important nodes: 854 o relay-config: This container contains the configuration data of 855 the relay. 857 o relay-attributes: A container describes some basic attributes of 858 the relay agent including some relay agent specific options data 859 that need to be configured previously. Such options include 860 Remote-Id option and Subscriber-Id option. 862 o dest-addrs: Each DHCPv6 relay agent may be configured with a list 863 of destination addresses. This node defines such a list of IPv6 864 addresses that may include unicast addresses, multicast addresses 865 or other addresses. 867 o rsoo-options-sets: DHCPv6 relay agent could provide some 868 information that would be useful to DHCPv6 client. Since relay 869 agent cannot provide options directly to the client, [RFC6422] 870 defines RSOO-enabled options to propose options for the server to 871 send to the client. This container models such RSOO-enabled 872 options. 874 o option-set: This list under the "rsoo-option-sets" container is 875 similar to the that defined in server module. It allows the relay 876 to implement several sets of RSOO-enabled options for different 877 interfaces. The list only include the EAP Re-authentication 878 Protocol (ERP) Local Domain Name DHCPv6 Option defined in 879 [RFC6440], since it is the only one RSOO-enabled options accepted 880 by IANA so far. 882 o relay-if: A relay agent may have several interfaces, we should 883 provide a way to configure and manage parameters on the interface- 884 level. A list that describes specific interfaces and their 885 corresponding parameters is employed to fulfil the configfuration. 886 Here we use a string called "if-name" as the key of list. 888 o relay-state: This container contains the configuration data of the 889 relay. 891 o pd-route: A sub-container of "relay-if" which describes the route 892 for delegated prefixes into the provider edge router. 894 o next-entity: This node defines a list that is used to describe the 895 next hop entity of this relay agent. Different entities are 896 distinguished by their addresses. 898 o packet-stats: A container shows packet state information of a 899 specific data communication. 901 o relay-stats: The "relay-stats" container records and presents the 902 overall packet statistics of the relay agent. 904 Information about notifications: 906 o topo-changed: raised when the topology of the relay agent is 907 changed. 909 2.3. DHCPv6 Client Tree Diagrams 911 module: ietf-dhcpv6-client 912 +--rw client! 913 +--rw client-config 914 | +--rw duid 915 | | +--rw type-code? uint16 916 | | +--rw (duid-type)? 917 | | +--:(duid-llt) 918 | | | +--rw duid-llt-hardware-type? uint16 919 | | | +--rw duid-llt-time? yang:timeticks 920 | | | +--rw duid-llt-link-layer-addr? yang:mac-address 921 | | +--:(duid-en) 922 | | | +--rw duid-en-enterprise-number? uint32 923 | | | +--rw duid-en-identifier? string 924 | | +--:(duid-ll) 925 | | | +--rw duid-ll-hardware-type? uint16 926 | | | +--rw duid-ll-link-layer-addr? yang:mac-address 927 | | +--:(duid-uuid) 928 | | | +--rw uuid? yang:uuid 929 | | +--:(duid-invalid) 930 | | +--rw data? binary 931 | +--rw client-if* [if-name] 932 | +--rw if-name string 933 | +--rw cli-id uint32 934 | +--rw description? string 935 | +--rw pd-function boolean 936 | +--rw rapid-commit boolean 937 | +--rw mo-tab 938 | | +--rw m-tab boolean 939 | | +--rw o-tab boolean 940 | +--rw client-configured-options 941 | +--rw new-or-standard-cli-option* [option-code] 942 | | +--rw option-code uint16 943 | | +--rw option-name string 944 | | +--rw option-description string 945 | | +--rw option-reference? string 946 | | +--rw option-value string 947 | +--rw option-request-option! {option-request-op}? 948 | | +--rw oro-option* [option-code] 949 | | +--rw option-code uint16 950 | | +--rw description string 951 | +--rw user-class-option! {user-class-op}? 952 | | +--rw user-class* [user-class-id] 953 | | +--rw user-class-id uint8 954 | | +--rw user-class-data string 955 | +--rw vendor-class-option! {vendor-class-op}? 956 | | +--rw enterprise-number uint32 957 | | +--rw vendor-class* [vendor-class-id] 958 | | +--rw vendor-class-id uint8 959 | | +--rw vendor-class-data string 960 | +--rw client-fqdn-option! {client-fqdn-op}? 961 | | +--rw fqdn string 962 | | +--rw server-initiate-update boolean 963 | | +--rw client-initiate-update boolean 964 | +--rw client-arch-type-option! {client-arch-type-op}? 965 | | +--rw architecture-types* [type-id] 966 | | +--rw type-id uint16 967 | | +--rw most-preferred boolean 968 | +--rw client-network-interface-identifier-option! 969 {client-network-interface-identifier-op}? 970 | | +--rw type uint8 971 | | +--rw major uint8 972 | | +--rw minor uint8 973 | +--rw kbr-principal-name-option! {kbr-principal-name-op}? 974 | | +--rw principle-name* [principle-name-id] 975 | | +--rw principle-name-id uint8 976 | | +--rw name-type int32 977 | | +--rw name-string string 978 | +--rw kbr-realm-name-option! {kbr-realm-name-op}? 979 | | +--rw realm-name string 980 | +--rw client-link-layer-addr-option! 981 {client-link-layer-addr-op}? 982 | +--rw link-layer-type uint16 983 | +--rw link-layer-addr string 984 +--ro client-state 985 +--ro if-other-paras 986 +--ro server-unicast-option! {server-unicast-op}? 987 | +--ro server-address? inet:ipv6-address 988 +--ro sip-server-domain-name-list-option! 989 {sip-server-domain-name-list-op}? 990 | +--ro sip-serv-domain-name string 991 +--ro sip-server-address-list-option! 992 {sip-server-address-list-op}? 993 | +--ro sip-server* [sip-serv-id] 994 | +--ro sip-serv-id uint8 995 | +--ro sip-serv-addr inet:ipv6-address 996 +--ro dns-config-option! {dns-config-op}? 997 | +--ro dns-server* [dns-serv-id] 998 | +--ro dns-serv-id uint8 999 | +--ro dns-serv-addr inet:ipv6-address 1000 +--ro domain-searchlist-option! {domain-searchlist-op}? 1001 | +--ro domain-searchlist* [domain-searchlist-id] 1002 | +--ro domain-searchlist-id uint8 1003 | +--ro domain-search-list-entry string 1004 +--ro nis-config-option! {nis-config-op}? 1005 | +--ro nis-server* [nis-serv-id] 1006 | +--ro nis-serv-id uint8 1007 | +--ro nis-serv-addr inet:ipv6-address 1008 +--ro nis-plus-config-option! {nis-plus-config-op}? 1009 | +--ro nis-plus-server* [nis-plus-serv-id] 1010 | +--ro nis-plus-serv-id uint8 1011 | +--ro nis-plus-serv-addr inet:ipv6-address 1012 +--ro nis-domain-name-option! {nis-domain-name-op}? 1013 | +--ro nis-domain-name? string 1014 +--ro nis-plus-domain-name-option! {nis-plus-domain-name-op}? 1015 | +--ro nis-plus-domain-name? string 1016 +--ro sntp-server-option! {sntp-server-op}? 1017 | +--ro sntp-server* [sntp-serv-id] 1018 | +--ro sntp-serv-id uint8 1019 | +--ro sntp-serv-addr inet:ipv6-address 1020 +--ro info-refresh-time-option! {info-refresh-time-op}? 1021 | +--ro info-refresh-time yang:timeticks 1022 +--ro client-fqdn-option! {client-fqdn-op}? 1023 | +--ro server-initiate-update boolean 1024 | +--ro client-initiate-update boolean 1025 | +--ro modify-name-from-cli boolean 1026 +--ro posix-timezone-option! {posix-timezone-op}? 1027 | +--ro tz-posix string 1028 +--ro tzdb-timezone-option! {tzdb-timezone-op}? 1029 | +--ro tz-database string 1030 +--ro ntp-server-option! {ntp-server-op}? 1031 | +--ro ntp-server* [ntp-serv-id] 1032 | +--ro ntp-serv-id uint8 1033 | +--ro (ntp-time-source-suboption)? 1034 | +--:(server-address) 1035 | | +--ro ntp-serv-addr-suboption* inet:ipv6-address 1036 | +--:(server-multicast-address) 1037 | | +--ro ntp-serv-mul-addr-suboption* 1038 inet:ipv6-address 1039 | +--:(server-fqdn) 1040 | +--ro ntp-serv-fqdn-suboption* string 1041 +--ro boot-file-url-option! {boot-file-url-op}? 1042 | +--ro boot-file* [boot-file-id] 1043 | +--ro boot-file-id uint8 1044 | +--ro suitable-arch-type* uint16 1045 | +--ro suitable-net-if* uint32 1046 | +--ro boot-file-url string 1047 +--ro boot-file-param-option! {boot-file-param-op}? 1048 | +--ro boot-file-paras* [para-id] 1049 | +--ro para-id uint8 1050 | +--ro parameter string 1051 +--ro aftr-name-option! {aftr-name-op}? 1052 | +--ro tunnel-endpoint-name string 1053 +--ro kbr-default-name-option! {kbr-default-name-op}? 1054 | +--ro default-realm-name string 1055 +--ro kbr-kdc-option! {kbr-kdc-op}? 1056 | +--ro kdc-info* [kdc-id] 1057 | +--ro kdc-id uint8 1058 | +--ro priority uint16 1059 | +--ro weight uint16 1060 | +--ro transport-type uint8 1061 | +--ro port-number uint16 1062 | +--ro kdc-ipv6-addr inet:ipv6-address 1063 | +--ro realm-name string 1064 +--ro sol-max-rt-option! {sol-max-rt-op}? 1065 | +--ro sol-max-rt-value yang:timeticks 1066 +--ro inf-max-rt-option! {inf-max-rt-op}? 1067 | +--ro inf-max-rt-value yang:timeticks 1068 +--ro addr-selection-option! {addr-selection-op}? 1069 | +--ro a-bit-set boolean 1070 | +--ro p-bit-set boolean 1071 | +--ro policy-table* [policy-id] 1072 | +--ro policy-id uint8 1073 | +--ro label uint8 1074 | +--ro precedence uint8 1075 | +--ro prefix-len uint8 1076 | +--ro prefix inet:ipv6-prefix 1077 +--ro pcp-server-option! {pcp-server-op}? 1078 | +--ro pcp-server* [pcp-serv-id] 1079 | +--ro pcp-serv-id uint8 1080 | +--ro pcp-serv-addr inet:ipv6-address 1081 +--ro s46-rule-option! {s46-rule-op}? 1082 | +--ro s46-rule* [rule-id] 1083 | +--ro rule-id uint8 1084 | +--ro rule-type enumeration 1085 | +--ro prefix4-len uint8 1086 | +--ro ipv4-prefix inet:ipv4-prefix 1087 | +--ro prefix6-len uint8 1088 | +--ro ipv6-prefix inet:ipv6-prefix 1089 | +--ro port-parameter 1090 | +--ro offset uint8 1091 | +--ro psid-len uint8 1092 | +--ro psid uint16 1093 +--ro s46-br-option! {s46-br-op}? 1094 | +--ro br* [br-id] 1095 | +--ro br-id uint8 1096 | +--ro br-ipv6-addr inet:ipv6-address 1097 +--ro s46-dmr-option! {s46-dmr-op}? 1098 | +--ro dmr* [dmr-id] 1099 | +--ro dmr-id uint8 1100 | +--ro dmr-prefix-len uint8 1101 | +--ro dmr-ipv6-prefix inet:ipv6-prefix 1102 +--ro s46-v4-v6-binding-option! {s46-v4-v6-binding-op}? 1103 +--ro ce* [ce-id] 1104 +--ro ce-id uint8 1105 +--ro ipv4-addr inet:ipv4-address 1106 +--ro bind-prefix6-len uint8 1107 +--ro bind-ipv6-prefix inet:ipv6-prefix 1108 +--ro port-parameter 1109 +--ro offset uint8 1110 +--ro psid-len uint8 1111 +--ro psid uint16 1113 notifications: 1114 +---n notifications 1115 +--ro dhcpv6-client-event 1116 +--ro ia-lease-event 1117 | +--ro event-type enumeration 1118 | +--ro duid 1119 | | +--ro type-code? uint16 1120 | | +--ro (duid-type)? 1121 | | +--:(duid-llt) 1122 | | | +--ro duid-llt-hardware-type? uint16 1123 | | | +--ro duid-llt-time? yang:timeticks 1124 | | | +--ro duid-llt-link-layer-addr? yang:mac-address 1125 | | +--:(duid-en) 1126 | | | +--ro duid-en-enterprise-number? uint32 1127 | | | +--ro duid-en-identifier? string 1128 | | +--:(duid-ll) 1129 | | | +--ro duid-ll-hardware-type? uint16 1130 | | | +--ro duid-ll-link-layer-addr? yang:mac-address 1131 | | +--:(duid-uuid) 1132 | | | +--ro uuid? yang:uuid 1133 | | +--:(duid-invalid) 1134 | | +--ro data? binary 1135 | +--ro iaid uint32 1136 | +--ro serv-name? string 1137 | +--ro description? string 1138 +--ro invalid-ia-detected 1139 | +--ro duid 1140 | | +--ro type-code? uint16 1141 | | +--ro (duid-type)? 1142 | | +--:(duid-llt) 1143 | | | +--ro duid-llt-hardware-type? uint16 1144 | | | +--ro duid-llt-time? yang:timeticks 1145 | | | +--ro duid-llt-link-layer-addr? yang:mac-address 1146 | | +--:(duid-en) 1147 | | | +--ro duid-en-enterprise-number? uint32 1148 | | | +--ro duid-en-identifier? string 1149 | | +--:(duid-ll) 1150 | | | +--ro duid-ll-hardware-type? uint16 1151 | | | +--ro duid-ll-link-layer-addr? yang:mac-address 1152 | | +--:(duid-uuid) 1153 | | | +--ro uuid? yang:uuid 1154 | | +--:(duid-invalid) 1155 | | +--ro data? binary 1156 | +--ro cli-duid uint32 1157 | +--ro iaid uint32 1158 | +--ro serv-name? string 1159 | +--ro description? string 1160 +--ro retransmission-failed 1161 | +--ro duid 1162 | | +--ro type-code? uint16 1163 | | +--ro (duid-type)? 1164 | | +--:(duid-llt) 1165 | | | +--ro duid-llt-hardware-type? uint16 1166 | | | +--ro duid-llt-time? yang:timeticks 1167 | | | +--ro duid-llt-link-layer-addr? yang:mac-address 1168 | | +--:(duid-en) 1169 | | | +--ro duid-en-enterprise-number? uint32 1170 | | | +--ro duid-en-identifier? string 1171 | | +--:(duid-ll) 1172 | | | +--ro duid-ll-hardware-type? uint16 1173 | | | +--ro duid-ll-link-layer-addr? yang:mac-address 1174 | | +--:(duid-uuid) 1175 | | | +--ro uuid? yang:uuid 1176 | | +--:(duid-invalid) 1177 | | +--ro data? binary 1178 | +--ro description enumeration 1179 +--ro failed-status-turn-up 1180 +--ro duid 1181 | +--ro type-code? uint16 1182 | +--ro (duid-type)? 1183 | +--:(duid-llt) 1184 | | +--ro duid-llt-hardware-type? uint16 1185 | | +--ro duid-llt-time? yang:timeticks 1186 | | +--ro duid-llt-link-layer-addr? yang:mac-address 1187 | +--:(duid-en) 1188 | | +--ro duid-en-enterprise-number? uint32 1189 | | +--ro duid-en-identifier? string 1190 | +--:(duid-ll) 1191 | | +--ro duid-ll-hardware-type? uint16 1192 | | +--ro duid-ll-link-layer-addr? yang:mac-address 1193 | +--:(duid-uuid) 1194 | | +--ro uuid? yang:uuid 1195 | +--:(duid-invalid) 1196 | +--ro data? binary 1197 +--ro status-code enumeration 1199 Introduction of important nodes: 1201 o client-config: This container includes the configuration data of 1202 the client. 1204 o client-if: A client may have several interfaces, it is more 1205 reasonable to configure and manage parameters on the interface- 1206 level. The list defines a specific client interface and its data. 1207 Different interfaces are distinguished by the "ifName" key which 1208 is a configurable string value. 1210 o duid: Each server and client has only one DUID (DHCP Unique 1211 Identifier). The DUID here will be carried in the Client ID 1212 option to identify a specific DHCPv6 client. This leaf are same 1213 as the "duid" leaf in "dhcpv6-server" feature. 1215 o pd-function: Whether the client can act as a requesting router to 1216 request prefixes using prefix delegation ([RFC3633]). 1218 o rapid-commit: '1' indicates a client can initiate a Solicit-Reply 1219 message exchange by adding a Rapid Commit option in Solicit 1220 message. '0' means the client is not allowed to add a Rapid 1221 Commit option to request addresses in a two-message exchange 1222 pattern. 1224 o mo-tab: The management tab label indicates the operation mode of 1225 the DHCPv6 client. 'm'=1 and 'o'=1 indicate the client will use 1226 DHCPv6 to obtain all the configuration data. 'm'=1 and 'o'=0 are a 1227 meaningless combination. 'm'=0 and 'o'=1 indicate the client will 1228 use stateless DHCPv6 to obtain configuration data apart from 1229 addresses/prefixes data. 'm'=0 and 'o'=0 represent the client will 1230 not use DHCPv6 but use SLAAC to achieve configuration. 1232 o client-configured-options: Similar to the server, the client also 1233 need to configure some options to fulfil some desired functions. 1234 This container include all the potential options that need to be 1235 configured at the client side. The relevant RFCs that define 1236 those options include: [RFC3315], [RFC4704], [RFC5970], [RFC6784], 1237 [RFC6939]. 1239 o option-request-option: This container provide a way to configure 1240 the list of options that the client will request in its ORO 1241 option. 1243 o client-state: This container includes the state data of the 1244 client. 1246 o if-other-paras: A client can obtain extra configuration data other 1247 than address and prefix information through DHCPv6 options. This 1248 container describes such data the client was configured through 1249 DHCPv6. The potential configuration data may include DNS server 1250 parameters, SIP server parameters and etc. 1252 o packet-stats: A container records all the packet status 1253 information of a specific interface. 1255 Information about notifications: 1257 o ia-lease-event: raised when the client was allocated a new IA from 1258 the server or it renew/rebind/release its current IA. 1260 o invalid-ia-detected: raised when the identity association of the 1261 client can be proved to be invalid. Possible condition includes 1262 duplicated address, illegal address, etc. 1264 o retransmission-failed: raised when the retransmission mechanism 1265 defined in [RFC3315] is failed. 1267 o failed-status-turn-up: raised when the client receives a message 1268 includes an unsuccessful Status Code option. 1270 3. DHCPv6 YANG Model 1272 3.1. DHCPv6 Server YANG Model 1274 This module imports typedefs from [RFC6991]. 1276 file "ietf-dhcpv6-server@2017-12-22.yang" 1277 module ietf-dhcpv6-server { 1278 yang-version 1.1; 1279 namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"; 1280 prefix "dhcpv6-server"; 1282 import ietf-inet-types { 1283 prefix inet; 1284 revision-date "2013-07-15"; 1285 } 1286 import ietf-yang-types { 1287 prefix yang; 1288 revision-date "2013-07-15"; 1289 } 1290 import ietf-dhcpv6-options { 1291 prefix dhcpv6-options; 1292 revision-date "2017-12-22"; 1293 } 1295 organization "DHC WG"; 1296 contact "yong@csnet1.cs.tsinghua.edu.cn 1297 lh.sunlinh@gmail.com 1298 ian.farrer@telekom.de 1299 sladjana.zechlin@telekom.de 1300 hezihao9512@gmail.com"; 1302 description "This model defines a YANG data model that can be 1303 used to configure and manage a DHCPv6 server."; 1305 revision 2017-12-22 { 1306 description "Resolve most issues on Ian's github."; 1307 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 1308 } 1310 revision 2017-11-24 { 1311 description "First version of the separated server specific 1312 YANG model."; 1313 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 1314 } 1316 /* 1317 * Typedef 1318 */ 1320 typedef threshold { 1321 type union { 1322 type uint16 { 1323 range 0..100; 1324 } 1325 type enumeration { 1326 enum "disabled" { 1327 description "No threshold"; 1328 } 1329 } 1330 } 1331 description "Threshold value in percent"; 1332 } 1334 /* 1335 * Grouping 1336 */ 1338 grouping vendor-infor { 1339 description "Vendor information."; 1340 container vendor-info { 1341 description ""; 1342 leaf ent-num { 1343 type uint32; 1344 mandatory true; 1345 description "enterprise number"; 1346 } 1347 leaf-list data { 1348 type string; 1349 description "specific vendor info"; 1350 } 1351 } 1352 } 1354 grouping duid { 1355 description "DHCP Unique Identifier"; 1356 reference "RFC3315: Section 9 and RFC6355: Section 4"; 1357 leaf type-code { 1358 type uint16; 1359 default 65535; 1360 description "Type code of this DUID"; 1361 } 1362 choice duid-type { 1363 default duid-invalid; 1364 description "Selects the format for the DUID."; 1365 case duid-llt { 1366 description "DUID Based on Link-layer Address Plus Time (Type 1 - DUID-LLT)"; 1367 reference "RFC3315 Section 9.2"; 1368 leaf duid-llt-hardware-type { 1369 type uint16; 1370 description "Hardware type as assigned by IANA (RFC826)."; 1371 } 1372 leaf duid-llt-time { 1373 type yang:timeticks; 1374 description "The time value is the time that the DUID is generated 1375 represented in seconds since midnight (UTC), January 1, 2000, 1376 modulo 2^32."; 1377 } 1378 leaf duid-llt-link-layer-addr { 1379 type yang:mac-address; 1380 description "Link-layer address as described in RFC2464"; 1381 } 1382 } 1383 case duid-en { 1384 description "DUID Assigned by Vendor Based on Enterprise Number (Type 2 - DUID-EN)"; 1385 reference "RFC3315 Section 9.3"; 1386 leaf duid-en-enterprise-number { 1387 type uint32; 1388 description "Vendor's registered Private Enterprise Number as 1389 maintained by IANA"; 1390 } 1391 leaf duid-en-identifier { 1392 type string; 1393 description "Indentifier, unique to the device that is using it"; 1394 } 1395 } 1396 case duid-ll { 1397 description "DUID Based on Link-layer Address (Type 3 - DUID-LL)"; 1398 reference "RFC3315 Section 9.4"; 1399 leaf duid-ll-hardware-type { 1400 type uint16; 1401 description "Hardware type as assigned by IANA (RFC826)."; 1402 } 1403 leaf duid-ll-link-layer-addr { 1404 type yang:mac-address; 1405 description "Link-layer address as described in RFC2464"; 1406 } 1407 } 1408 case duid-uuid { 1409 description "DUID Based on Universally Unique Identifier (Type 4 - DUID-UUID)"; 1410 reference "RFC6335 Defination of the UUID-Based Unique Identifier"; 1411 leaf uuid { 1412 type yang:uuid; 1413 description "A Universally Unique IDentifier in the string representation 1414 defined in RFC 4122. The canonical representation uses 1415 lowercase characters"; 1416 } 1417 } 1418 case duid-invalid { 1419 description "DUID based on free raw bytes"; 1420 leaf data { 1421 type binary; 1422 description "The bits to be used as the identifier"; 1423 } 1424 } 1425 } 1426 } 1428 /* 1429 * Data Nodes 1430 */ 1432 container server { 1433 presence "Enables the server"; 1434 description "DHCPv6 server portion"; 1435 /* 1436 * Configuration data 1437 */ 1438 container server-config { 1439 description "configuration tree of server"; 1440 container serv-attributes { 1441 description "This container contains basic attributes 1442 of a DHCPv6 server such as IPv6 address, server name 1443 and so on. Some optional functions that can be provided 1444 by 0the server is also included."; 1445 leaf name { 1446 type string; 1447 description "server's name"; 1448 } 1449 container duid { 1450 description "Sets the DUID"; 1451 uses duid; 1452 } 1453 leaf-list ipv6-address { 1454 type inet:ipv6-address; 1455 description "Server's IPv6 address."; 1456 } 1457 leaf description { 1458 type string; 1459 description "Description of the server."; 1460 } 1461 leaf pd-function { 1462 type boolean; 1463 mandatory true; 1464 description "Whether the server can act as a 1465 delegating router to perform prefix delegation 1466 ([RFC3633])."; 1467 } 1468 leaf stateless-service { 1469 type boolean; 1470 mandatory true; 1471 description "A boolean value specifies whether 1472 the server support client-server exchanges 1473 involving two messages defined in ([RFC3315])."; 1474 } 1475 leaf rapid-commit { 1476 type boolean; 1477 mandatory true; 1478 description "A boolean value specifies whether 1479 the server support client-server exchanges 1480 involving two messages defined in ([RFC3315])."; 1481 } 1482 leaf-list interfaces-config { 1483 // Note - this should probably be references to 1484 // entries in the ietf-interfaces model 1485 type string; 1486 description "A leaf list to denote which one or 1487 more interfaces the server should listen on. The 1488 default value is to listen on all the interfaces. 1489 This node is also used to set a unicast address 1490 for the server to listen with a specific interface. 1491 For example, if people want the server to listen 1492 on a unicast address with a specific interface, he 1493 can use the format like 'eth1/2001:db8::1'."; 1494 } 1495 uses vendor-infor; 1496 } 1498 container option-sets { 1499 description "DHCPv6 employs various options to carry additional 1500 information and parameters in DHCP messages. This container defines 1501 all the possible options that need to be configured at the server 1502 side. "; 1503 list option-set { 1504 key id; 1505 description "A server may allow different option sets to be 1506 configured for different conditions (i.e. different networks, 1507 clients and etc). This 'option-set' list enables various sets of 1508 options being defined and configured in a single server. Different 1509 sets are distinguished by the key called 'option-set-id'. All the 1510 possible options discussed above are defined in the list and each 1511 option is corresponding to a container. Since all the options in 1512 the list are optional, each container in this list has a 'presence' 1513 statement to indicate whether this option (container) will be 1514 included in the current option set or not. In addition, each container 1515 also has a 'if-feature' statement to indicate whether the server 1516 supports this option (container)."; 1517 leaf id { 1518 type uint32; 1519 description "option set id"; 1520 } 1521 uses dhcpv6-options:server-option-definitions; 1522 uses dhcpv6-options:custom-option-definitions; 1523 } 1524 } 1526 container network-ranges { 1527 description "This model supports a hierarchy 1528 to achieve dynamic configuration. That is to 1529 say we could configure the server at different 1530 levels through this model. The top level is a 1531 global level which is defined as the container 1532 'network-ranges'. The following levels are 1533 defined as sub-containers under it. The 1534 'network-ranges' contains the parameters 1535 (e.g. option-sets) that would be allocated to 1536 all the clients served by this server."; 1537 list network-range { 1538 key network-range-id; 1539 description "Under the 'network-ranges' 1540 container, a 'network-range' list is 1541 defined to configure the server at a 1542 network level which is also considered 1543 as the second level. Different network 1544 are identified by the key 'network-range-id'. 1545 This is because a server may have different 1546 configuration parameters (e.g. option sets) 1547 for different networks."; 1548 leaf network-range-id { 1549 type uint32; 1550 mandatory true; 1551 description "equivalent to subnet id"; 1552 } 1553 leaf network-description { 1554 type string; 1555 mandatory true; 1556 description "description of the subnet"; 1557 } 1558 leaf network-prefix { 1559 type inet:ipv6-prefix; 1560 mandatory true; 1561 description "subnet prefix"; 1562 } 1563 leaf inherit-option-set { 1564 type boolean; 1565 mandatory true; 1566 description "indicate whether to inherit 1567 the configuration from higher level"; 1568 } 1569 leaf option-set-id { 1570 type leafref { 1571 path "/server/server-config/option-sets/option-set/id"; 1573 } 1574 description "The ID field of relevant option-set to be 1575 provisioned to clients of this network-range."; 1576 } 1578 container reserved-addresses { 1579 description "reserved addresses"; 1580 list static-binding { 1581 key cli-id; 1582 description "static binding of 1583 reserved addresses"; 1584 leaf cli-id { 1585 type uint32; 1586 mandatory true; 1587 description "client id"; 1588 } 1589 container duid { 1590 description "Sets the DUID"; 1591 uses duid; 1592 } 1593 leaf-list reserv-addr { 1594 type inet:ipv6-address; 1595 description "reserved addr"; 1596 } 1597 } 1598 leaf-list other-reserv-addr { 1599 type inet:ipv6-address; 1600 description "other reserved 1601 addr"; 1602 } 1603 } 1605 container reserved-prefixes { 1606 description "reserved prefixes"; 1607 list static-binding { 1608 key cli-id; 1609 description "static binding"; 1610 leaf cli-id { 1611 type uint32; 1612 mandatory true; 1613 description "client id"; 1614 } 1615 container duid { 1616 description "Sets the DUID"; 1617 uses duid; 1618 } 1619 leaf reserv-prefix-len { 1620 type uint8; 1621 mandatory true; 1622 description "reserved 1623 prefix length"; 1624 } 1625 leaf reserv-prefix { 1626 type inet:ipv6-prefix; 1627 mandatory true; 1628 description 1629 "reserved prefix"; 1630 } 1631 } 1632 leaf exclude-prefix-len { 1633 type uint8; 1634 mandatory true; 1635 description "exclude prefix 1636 length"; 1637 } 1638 leaf exclude-prefix { 1639 type inet:ipv6-prefix; 1640 mandatory true; 1641 description "exclude prefix"; 1642 } 1643 list other-reserv-prefix { 1644 key reserv-id; 1645 description 1646 "other reserved prefix"; 1647 leaf reserv-id { 1648 type uint32; 1649 mandatory true; 1650 description 1651 "reserved prefix id"; 1652 } 1653 leaf prefix-len { 1654 type uint8; 1655 mandatory true; 1656 description "prefix length"; 1657 } 1658 leaf prefix { 1659 type inet:ipv6-prefix; 1660 mandatory true; 1661 description 1662 "reserved prefix"; 1663 } 1664 } 1665 } 1667 container address-pools { 1668 description "A container that describes 1669 the DHCPv6 server's address pools."; 1670 list address-pool { 1671 key pool-id; 1672 description "A DHCPv6 server can 1673 be configured with several address 1674 pools. This list defines such 1675 address pools which are distinguished 1676 by the key called 'pool-name'."; 1677 leaf pool-id { 1678 type uint32; 1679 mandatory true; 1680 description "pool id"; 1681 } 1682 leaf pool-prefix { 1683 type inet:ipv6-prefix; 1684 mandatory true; 1685 description "pool prefix"; 1686 } 1687 leaf start-address { 1688 type inet:ipv6-address-no-zone; 1689 mandatory true; 1690 description "start address"; 1691 } 1692 leaf end-address { 1693 type inet:ipv6-address-no-zone; 1694 mandatory true; 1695 description "end address"; 1696 } 1697 leaf renew-time { 1698 type yang:timeticks; 1699 mandatory true; 1700 description "renew time"; 1701 } 1702 leaf rebind-time { 1703 type yang:timeticks; 1704 mandatory true; 1705 description "rebind time"; 1706 } 1707 leaf preferred-lifetime { 1708 type yang:timeticks; 1709 mandatory true; 1710 description "preferred lifetime 1711 for IA"; 1712 } 1713 leaf valid-lifetime { 1714 type yang:timeticks; 1715 mandatory true; 1716 description "valid liftime for IA"; 1717 } 1718 leaf max-address-utilization-ratio { 1719 type threshold; 1720 mandatory true; 1721 description "address pool utilization ratio threshold"; 1722 } 1723 leaf inherit-option-set { 1724 type boolean; 1725 mandatory true; 1726 description "indicate whether to 1727 inherit the configuration from 1728 higher level"; 1729 } 1730 leaf option-set-id { 1731 type leafref { 1732 path "/server/server-config/option-sets/option-set/id"; 1733 } 1734 mandatory true; 1735 description "The ID field of relevant option-set to be 1736 provisioned to clients of this address-pool."; 1737 } 1738 } 1739 } 1741 container prefix-pools { 1742 description "If a server supports prefix 1743 delegation function, this container will 1744 be used to define the delegating router's 1745 refix pools."; 1746 list prefix-pool { 1747 key pool-id; 1748 description "Similar to server's 1749 address pools, a delegating router 1750 can also be configured with multiple 1751 prefix pools specified by a list 1752 called 'prefix-pool'."; 1753 leaf pool-id { 1754 type uint32; 1755 mandatory true; 1756 description "pool id"; 1757 } 1758 leaf prefix { 1759 type inet:ipv6-prefix; 1760 mandatory true; 1761 description "ipv6 prefix"; 1762 } 1763 leaf prefix-length { 1764 type uint8; 1765 mandatory true; 1766 description "prefix length"; 1767 } 1768 leaf renew-time { 1769 type yang:timeticks; 1770 mandatory true; 1771 description "renew time"; 1772 } 1773 leaf rebind-time { 1774 type yang:timeticks; 1775 mandatory true; 1776 description "rebind time"; 1777 } 1778 leaf preferred-lifetime { 1779 type yang:timeticks; 1780 mandatory true; 1781 description "preferred lifetime for 1782 IA"; 1783 } 1784 leaf valid-lifetime { 1785 type yang:timeticks; 1786 mandatory true; 1787 description "valid lifetime for IA"; 1788 } 1789 leaf max-prefix-utilization-ratio { 1790 type threshold; 1791 mandatory true; 1792 description "prefix pool utilization ratio threshold"; 1793 } 1794 leaf inherit-option-set { 1795 type boolean; 1796 mandatory true; 1797 description "whether to inherit 1798 configuration from higher level"; 1799 } 1800 leaf option-set-id { 1801 type leafref { 1802 path "/server/server-config/option-sets/option-set/id"; 1803 } 1804 description "The ID field of relevant option-set to be 1805 provisioned to clients of this prefix-pool."; 1806 } 1807 } 1808 } 1809 container hosts { 1810 description "hosts level"; 1811 list host { 1812 key cli-id; 1813 description "specific host"; 1814 leaf cli-id { 1815 type uint32; 1816 mandatory true; 1817 description "client id"; 1818 } 1819 container duid { 1820 description "Sets the DUID"; 1821 uses duid; 1822 } 1823 leaf inherit-option-set { 1824 type boolean; 1825 mandatory true; 1826 description "whether to inherit 1827 configuration 1828 from higher level"; 1829 } 1830 leaf option-set-id { 1831 type leafref { 1832 path "/server/server-config/option-sets/option-set/id"; 1833 } 1834 description "The ID field of relevant option-set to be 1835 provisioned to clients of this prefix-pool."; 1836 } 1837 leaf nis-domain-name { 1838 type string; 1839 description "nis domain name"; 1840 } 1841 leaf nis-plus-domain-name { 1842 type string; 1843 description "nisp domain name"; 1844 } 1845 } 1846 } 1847 } 1849 } 1850 container relay-opaque-paras { 1851 description "This container contains some 1852 opaque values in Relay Agent options that 1853 need to be configured on the server side 1854 only for value match. Such Relay Agent 1855 options include Interface-Id option, 1856 Remote-Id option and Subscriber-Id option."; 1857 list relays { 1858 key relay-name; 1859 description "relay agents"; 1860 leaf relay-name { 1861 type string; 1862 mandatory true; 1863 description "relay agent name"; 1864 } 1865 list interface-info { 1866 key if-name; 1867 description "interface info"; 1868 leaf if-name { 1869 type string; 1870 mandatory true; 1871 description "interface name"; 1872 } 1873 leaf interface-id { 1874 type string; 1875 mandatory true; 1876 description "interface id"; 1877 } 1878 } 1879 list subscribers { 1880 key subscriber; 1881 description "subscribers"; 1882 leaf subscriber { 1883 type uint32; 1884 mandatory true; 1885 description "subscriber"; 1886 } 1887 leaf subscriber-id { 1888 type string; 1889 mandatory true; 1890 description "subscriber id"; 1891 } 1892 } 1893 list remote-host { 1894 key ent-num; 1895 description "remote host"; 1896 leaf ent-num { 1897 type uint32; 1898 mandatory true; 1899 description "enterprise number"; 1900 } 1901 leaf remote-id { 1902 type string; 1903 mandatory true; 1904 description "remote id"; 1905 } 1906 } 1907 } 1908 } 1909 container rsoo-enabled-options { 1910 description "rsoo enabled options"; 1911 list rsoo-enabled-option{ 1912 key option-code; 1913 description "rsoo enabled option"; 1914 leaf option-code { 1915 type uint16; 1916 mandatory true; 1917 description "option code"; 1918 } 1919 leaf description { 1920 type string; 1921 mandatory true; 1922 description "description of the option"; 1923 } 1924 } 1925 } 1927 } 1929 /* 1930 * State data 1931 */ 1932 container server-state{ 1933 config "false"; 1934 description "states of server"; 1935 container network-ranges{ 1936 description "This model supports a hierarchy 1937 to achieve dynamic configuration. That is to 1938 say we could configure the server at different 1939 levels through this model. The top level is a 1940 global level which is defined as the container 1941 'network-ranges'. The following levels are 1942 defined as sub-containers under it. The 1943 'network-ranges' contains the parameters 1944 (e.g. option-sets) that would be allocated to 1945 all the clients served by this server."; 1946 list network-range{ 1947 key network-range-id; 1948 description "The ID field of relevant option-set to be 1949 provisioned to clients of this network-range."; 1950 leaf network-range-id { 1951 type uint32; 1952 mandatory true; 1953 description "equivalent to subnet id"; 1954 } 1955 container address-pools{ 1956 description "A container that describes 1957 the DHCPv6 server's address pools"; 1958 list address-pool{ 1959 key pool-id; 1960 leaf pool-id { 1961 type uint32; 1962 mandatory true; 1963 description "pool id"; 1964 } 1965 description "..."; 1966 leaf total-ipv6-count { 1967 type uint64; 1968 mandatory true; 1969 description "how many ipv6 addresses 1970 are in the pool"; 1971 } 1972 leaf used-ipv6-count { 1973 type uint64; 1974 mandatory true; 1975 description "how many are allocated"; 1976 } 1977 leaf address-utilization-ratio { 1978 type uint16; 1979 mandatory true; 1980 description "current address pool utilization ratio"; 1981 } 1982 } 1983 list binding-info { 1984 key cli-id; 1985 description "A list that records a binding 1986 information for each DHCPv6 client 1987 that has already been allocated 1988 IPv6 addresses."; 1989 leaf cli-id { 1990 type uint32; 1991 mandatory true; 1992 description "client id"; 1993 } 1994 container duid { 1995 description "Read the DUID"; 1996 uses duid; 1997 } 1998 list cli-ia{ 1999 key iaid; 2000 description "client IA"; 2001 leaf ia-type { 2002 type string; 2003 mandatory true; 2004 description "IA type"; 2005 } 2006 leaf iaid { 2007 type uint32; 2008 mandatory true; 2009 description "IAID"; 2010 } 2011 leaf-list cli-addr { 2012 type inet:ipv6-address; 2013 description "client addr"; 2014 } 2015 leaf pool-id { 2016 type uint32; 2017 mandatory true; 2018 description "pool id"; 2019 } 2020 } 2021 } 2022 } 2023 container prefix-pools{ 2024 description "If a server supports prefix 2025 delegation function, this container will 2026 be used to define the delegating router's 2027 prefix pools."; 2028 list prefix-pool { 2029 key pool-id; 2030 description "Similar to server's address pools, 2031 a delegating router can also be configured with 2032 multiple prefix pools specified by a list 2033 called 'prefix-pool'."; 2034 leaf pool-id { 2035 type uint32; 2036 mandatory true; 2037 description "pool id"; 2038 } 2039 leaf prefix-utilization-ratio { 2040 type uint16; 2041 mandatory true; 2042 description "current prefix pool utilization ratio"; 2043 } 2044 } 2045 list binding-info { 2046 key cli-id; 2047 description "A list records a binding information 2048 for each DHCPv6 client that has already been 2049 alloated IPv6 addresses."; 2050 leaf cli-id { 2051 type uint32; 2052 mandatory true; 2053 description "client id"; 2054 } 2055 container duid { 2056 description "Reads the DUID"; 2057 uses duid; 2058 } 2059 list cli-iapd { 2060 key iaid; 2061 description "client IAPD"; 2062 leaf iaid { 2063 type uint32; 2064 mandatory true; 2065 description "IAID"; 2066 } 2067 leaf-list cli-prefix { 2068 type inet:ipv6-prefix; 2069 description "client ipv6 prefix"; 2070 } 2071 leaf-list cli-prefix-len { 2072 type uint8; 2073 description "client prefix length"; 2074 } 2075 leaf pool-id { 2076 type uint32; 2077 mandatory true; 2078 description "pool id"; 2079 } 2081 } 2082 } 2083 } 2085 list address-prefix-assign-param { 2086 // Zihao - This probably needs further updated. 2087 // But is it a way to represent the address/prefix assignment 2088 // logic? 2089 key cli-id; 2090 description "This list includes some parameters/identifiers 2091 that the server obtains from DHCPv6 options in this network-range. 2092 These identifiers may be helpful for the server to assign 2093 addresses/prefixes."; 2094 reference "Section 3.12 of RFC7824"; 2095 leaf cli-id { 2096 type uint32; 2097 mandatory true; 2098 description "client id"; 2099 } 2100 leaf source-ipv6-addr { 2101 type inet:ipv6-address; 2102 description "The adrress of the link to which the client 2103 is attached."; 2104 } 2105 container duid { 2106 description "The DUID supplied by the client."; 2107 uses duid; 2108 } 2109 leaf-list iaid { 2110 type uint32; 2111 description "IAID"; 2112 } 2113 leaf-list preferred-addr { 2114 type inet:ipv6-address; 2115 description "The IPv6 address preferred by the client."; 2116 } 2117 leaf-list preferred-prefix-len { 2118 type uint8; 2119 description "The prefix length preferred by the client."; 2120 } 2121 leaf client-fqdn { 2122 type string; 2123 description "Fully Qualified Domain Name supplied by the client."; 2124 } 2125 leaf client-link-layer-addr { 2126 type uint16; 2127 description "Link-layer address supplied by the client."; 2128 } 2129 leaf client-enterprise-number { 2130 type uint32; 2131 description "Enterprise number supplied by the client."; 2132 } 2133 leaf-list client-sys-archi-type { 2134 type uint16; 2135 description "Supported system architecture type supplied by 2136 the client"; 2137 } 2138 } 2140 } 2142 } 2144 container packet-stats { 2145 description "A container presents 2146 the packet statistics related to 2147 the DHCPv6 server."; 2148 leaf solicit-count { 2149 type uint32; 2150 mandatory true; 2151 description "solicit counter"; 2152 } 2153 leaf request-count { 2154 type uint32; 2155 mandatory true; 2156 description "request counter"; 2157 } 2158 leaf renew-count { 2159 type uint32; 2160 mandatory true; 2161 description "renew counter"; 2162 } 2163 leaf rebind-count { 2164 type uint32; 2165 mandatory true; 2166 description "rebind counter"; 2167 } 2168 leaf decline-count { 2169 type uint32; 2170 mandatory true; 2171 description "decline count"; 2172 } 2173 leaf release-count { 2174 type uint32; 2175 mandatory true; 2176 description "release counter"; 2177 } 2178 leaf info-req-count { 2179 type uint32; 2180 mandatory true; 2181 description "information request 2182 counter"; 2183 } 2184 leaf advertise-count { 2185 type uint32; 2186 mandatory true; 2187 description "advertise counter"; 2188 } 2189 leaf confirm-count { 2190 type uint32; 2191 mandatory true; 2192 description "confirm counter"; 2193 } 2194 leaf reply-count { 2195 type uint32; 2196 mandatory true; 2197 description "reply counter"; 2198 } 2199 leaf reconfigure-count { 2200 type uint32; 2201 mandatory true; 2202 description "reconfigure counter"; 2204 } 2205 leaf relay-forward-count { 2206 type uint32; 2207 mandatory true; 2208 description "relay forward counter"; 2209 } 2210 leaf relay-reply-count { 2211 type uint32; 2212 mandatory true; 2213 description "relay reply counter"; 2214 } 2215 } 2216 } 2217 } 2219 /* 2220 * Notifications 2221 */ 2223 notification notifications { 2224 description "dhcpv6 server notification module"; 2225 container dhcpv6-server-event { 2226 description "dhcpv6 server event"; 2227 container pool-running-out { 2228 description "raised when the address/prefix pool is going to 2229 run out. A threshold for utilization ratio of the pool has 2230 been defined in the server feature so that it will notify the 2231 administrator when the utilization ratio reaches the 2232 threshold, and such threshold is a settable parameter"; 2233 leaf max-address-utilization-ratio { 2234 type uint16; 2235 mandatory true; 2236 description "address pool utilization ratio threshold"; 2237 } 2238 leaf address-utilization-ratio { 2239 type uint16; 2240 mandatory true; 2241 description "current address pool utilization ratio"; 2242 } 2243 leaf max-prefix-utilization-ratio { 2244 type uint16; 2245 mandatory true; 2246 description "prefix pool utilization ratio threshold"; 2247 } 2248 leaf prefix-utilization-ratio { 2249 type uint16; 2250 mandatory true; 2251 description "current prefix pool utilization ratio"; 2252 } 2253 container duid { 2254 description "Sets the DUID"; 2255 uses duid; 2256 } 2257 leaf serv-name { 2258 type string; 2259 description "server name"; 2260 } 2261 leaf pool-name { 2262 type string; 2263 mandatory true; 2264 description "pool name"; 2265 } 2266 } 2267 container invalid-client-detected { 2268 description "raised when the server has found a client which 2269 can be regarded as a potential attacker. Some description 2270 could also be included."; 2271 container duid { 2272 description "Sets the DUID"; 2273 uses duid; 2274 } 2275 leaf description { 2276 type string; 2277 description "description of the event"; 2278 } 2279 } 2280 } 2281 } 2282 } 2284 2286 3.2. DHCPv6 Relay YANG Model 2288 This module imports typedefs from [RFC6991]. 2290 file "ietf-dhcpv6-relay@2017-12-22.yang" 2291 module ietf-dhcpv6-relay { 2292 yang-version 1.1; 2293 namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay"; 2294 prefix "dhcpv6-client"; 2296 import ietf-inet-types { 2297 prefix inet; 2298 revision-date "2013-07-15"; 2300 } 2302 import ietf-dhcpv6-options { 2303 prefix dhcpv6-options; 2304 revision-date "2017-12-22"; 2305 } 2307 organization "DHC WG"; 2308 contact "yong@csnet1.cs.tsinghua.edu.cn 2309 lh.sunlinh@gmail.com 2310 ian.farrer@telekom.de 2311 sladjana.zechlin@telekom.de 2312 hezihao9512@gmail.com"; 2314 description "This model defines a YANG data model that can be 2315 used to configure and manage a DHCPv6 relay."; 2317 revision 2017-12-22 { 2318 description "Resolve most issues on Ian's github."; 2319 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2320 } 2322 revision 2017-11-24 { 2323 description "First version of the separated relay specific 2324 YANG model."; 2326 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2327 } 2329 /* 2330 * Grouping 2331 */ 2333 grouping vendor-infor { 2334 description "Vendor information."; 2335 container vendor-info { 2336 description ""; 2337 leaf ent-num { 2338 type uint32; 2339 mandatory true; 2340 description "enterprise number"; 2341 } 2342 leaf-list data { 2343 type string; 2344 description "specific vendor info"; 2345 } 2346 } 2347 } 2348 /* 2349 * Data Nodes 2350 */ 2352 container relay { 2353 presence "Enables the relay"; 2354 description "dhcpv6 relay portion"; 2355 container relay-config{ 2356 description "configuration tree of relay"; 2357 container relay-attributes { 2358 description "A container describes 2359 some basic attributes of the relay 2360 agent including some relay agent 2361 specific options data that need to 2362 be configured previously. Such options 2363 include Remote-Id option and 2364 Subscriber-Id option."; 2365 leaf name { 2366 type string; 2367 description "relay agent name"; 2368 } 2369 leaf description { 2370 type string; 2371 description "description of the relay agent"; 2372 } 2373 leaf-list dest-addrs { 2374 type inet:ipv6-address; 2375 description "Each DHCPv6 relay agent may 2376 be configured with a list of destination 2377 addresses. This node defines such a list 2378 of IPv6 addresses that may include 2379 unicast addresses, multicast addresses 2380 or other addresses."; 2381 } 2382 list subscribers { 2383 key subscriber; 2384 description "subscribers"; 2385 leaf subscriber { 2386 type uint8; 2387 mandatory true; 2388 description "subscriber"; 2389 } 2390 leaf subscriber-id { 2391 type string; 2392 mandatory true; 2393 description "subscriber id"; 2394 } 2395 } 2396 list remote-host { 2397 key ent-num; 2398 description "remote host"; 2399 leaf ent-num { 2400 type uint32; 2401 mandatory true; 2402 description "enterprise number"; 2403 } 2404 leaf remote-id { 2405 type string; 2406 mandatory true; 2407 description "remote id"; 2408 } 2409 } 2410 uses vendor-infor; 2411 } 2413 container rsoo-option-sets { 2414 description "DHCPv6 relay agent could provide 2415 some information that would be useful to DHCPv6 client. 2416 Since relay agent cannot provide options directly to 2417 the client, RSOO-enabled options are defined to 2418 propose options for the server to send to the client. 2419 This container models such RSOO-enabled options."; 2420 reference "RFC6422"; 2421 list option-set { 2422 key id; 2423 description "This list under the 'rsoo-option-sets' container 2424 is similar to the that defined in server module. It allows 2425 the relay to implement several sets of RSOO-enabled options 2426 for different interfaces. The list only include the EAP 2427 Re-authentication Protocol (ERP) Local Domain Name DHCPv6 Option 2428 defined in RFC6440, since it is the only one 2429 RSOO-enabled options accepted by IANA so far."; 2430 leaf id { 2431 type uint32; 2432 description "option sed id"; 2433 } 2434 uses dhcpv6-options:relay-supplied-option-definitions; 2435 } 2436 } 2438 list relay-if { 2439 // if - This should reference an entry in ietf-interfaces 2440 key if-name; 2441 description "A relay agent may have several 2442 interfaces, we should provide a way to configure 2443 and manage parameters on the interface-level. A 2444 list that describes specific interfaces and 2445 their corresponding parameters is employed to 2446 fulfil the configfuration. Here we use a string 2447 called 'if-name; as the key of list."; 2448 leaf if-name { 2449 type string; 2450 mandatory true; 2451 description "interface name"; 2452 } 2453 leaf enable { 2454 type boolean; 2455 mandatory true; 2456 description 2457 "whether this interface is enabled"; 2458 } 2459 leaf ipv6-address { 2460 type inet:ipv6-address; 2461 description 2462 "ipv6 address for this interface"; 2463 } 2464 leaf interface-id { 2465 type string; 2466 description "interface id"; 2467 } 2468 leaf rsoo-option-set-id { 2469 type leafref { 2470 path "/relay/relay-config/rsoo-option-sets/option-set/id"; 2471 } 2472 description "Configured Relay Supplied Option set"; 2473 } 2474 list next-entity { 2475 key dest-addr; 2476 description "This node defines 2477 a list that is used to describe 2478 the next hop entity of this 2479 relay distinguished by their 2480 addresses."; 2481 leaf dest-addr { 2482 type inet:ipv6-address; 2483 mandatory true; 2484 description "destination addr"; 2485 } 2486 leaf available { 2487 type boolean; 2488 mandatory true; 2489 description "whether the next entity 2490 is available or not"; 2491 } 2492 leaf multicast { 2493 type boolean; 2494 mandatory true; 2495 description "whether the address is 2496 multicast or not"; 2497 } 2498 leaf server { 2499 type boolean; 2500 mandatory true; 2501 description "whether the next entity 2502 is a server"; 2503 } 2504 } 2505 } 2507 } 2509 container relay-state{ 2510 config "false"; 2511 description "state tree of relay"; 2512 list relay-if{ 2513 key if-name; 2514 description "..."; 2515 leaf if-name{ 2516 type string; 2517 mandatory true; 2518 description "interface name"; 2519 } 2520 list pd-route { 2521 // if - need to look at if/how we model these. If they are 2522 // going to be modelled, then they should be ro state 2523 // entries (we're not trying to configure routes here) 2524 key pd-route-id; 2525 description "pd route"; 2526 leaf pd-route-id { 2527 type uint8; 2528 mandatory true; 2529 description "pd route id"; 2530 } 2531 leaf requesting-router-id { 2532 type uint32; 2533 mandatory true; 2534 description "requesting router id"; 2535 } 2536 leaf delegating-router-id { 2537 type uint32; 2538 mandatory true; 2539 description "delegating router id"; 2540 } 2541 leaf next-router { 2542 type inet:ipv6-address; 2543 mandatory true; 2544 description "next router"; 2545 } 2546 leaf last-router { 2547 type inet:ipv6-address; 2548 mandatory true; 2549 description "previous router"; 2550 } 2551 } 2552 list next-entity{ 2553 key dest-addr; 2554 description "This node defines a list that is used to 2555 describe the next hop entity of this relay agent. 2556 Different entities are distinguished by their 2557 addresses."; 2558 leaf dest-addr{ 2559 type inet:ipv6-address; 2560 mandatory true; 2561 description "destination addr"; 2562 } 2563 container packet-stats { 2564 description "packet statistics"; 2565 leaf solicit-rvd-count { 2566 type uint32; 2567 mandatory true; 2568 description 2569 "solicit received counter"; 2570 } 2571 leaf request-rvd-count { 2572 type uint32; 2573 mandatory true; 2574 description 2575 "request received counter"; 2576 } 2577 leaf renew-rvd-count { 2578 type uint32; 2579 mandatory true; 2580 description 2581 "renew received counter"; 2582 } 2583 leaf rebind-rvd-count { 2584 type uint32; 2585 mandatory true; 2586 description 2587 "rebind recevied counter"; 2588 } 2589 leaf decline-rvd-count { 2590 type uint32; 2591 mandatory true; 2592 description 2593 "decline received counter"; 2594 } 2595 leaf release-rvd-count { 2596 type uint32; 2597 mandatory true; 2598 description 2599 "release received counter"; 2600 } 2601 leaf info-req-rvd-count { 2602 type uint32; 2603 mandatory true; 2604 description 2605 "information request counter"; 2606 } 2607 leaf relay-for-rvd-count { 2608 type uint32; 2609 mandatory true; 2610 description 2611 "relay forward received counter"; 2612 } 2613 leaf relay-rep-rvd-count { 2614 type uint32; 2615 mandatory true; 2616 description 2617 "relay reply received counter"; 2618 } 2619 leaf packet-to-cli-count { 2620 type uint32; 2621 mandatory true; 2622 description 2623 "packet to client counter"; 2624 } 2625 leaf adver-sent-count { 2626 type uint32; 2627 mandatory true; 2628 description 2629 "advertisement sent counter"; 2630 } 2631 leaf confirm-sent-count { 2632 type uint32; 2633 mandatory true; 2634 description 2635 "confirm sent counter"; 2636 } 2637 leaf reply-sent-count { 2638 type uint32; 2639 mandatory true; 2640 description 2641 "reply sent counter"; 2642 } 2643 leaf reconfig-sent-count { 2644 type uint32; 2645 mandatory true; 2646 description 2647 "reconfigure sent counter"; 2648 } 2649 leaf relay-for-sent-count { 2650 type uint32; 2651 mandatory true; 2652 description 2653 "relay forward sent counter"; 2654 } 2655 leaf relay-rep-sent-count { 2656 type uint32; 2657 mandatory true; 2658 description 2659 "relay reply sent counter"; 2660 } 2661 } 2663 } 2664 } 2666 container relay-stats { 2667 config "false"; 2668 description "relay statistics"; 2669 leaf cli-packet-rvd-count { 2670 type uint32; 2671 mandatory true; 2672 description "client packet received counter"; 2673 } 2674 leaf relay-for-rvd-count { 2675 type uint32; 2676 mandatory true; 2677 description "relay forward received counter"; 2678 } 2679 leaf relay-rep-rvd-count { 2680 type uint32; 2681 mandatory true; 2682 description "relay reply recevied counter"; 2683 } 2684 leaf packet-to-cli-count { 2685 type uint32; 2686 mandatory true; 2687 description "packet to client counter"; 2688 } 2689 leaf relay-for-sent-count { 2690 type uint32; 2691 mandatory true; 2692 description "relay forward sent counter"; 2693 } 2694 leaf relay-rep-sent-count { 2695 type uint32; 2696 mandatory true; 2697 description "relay reply sent counter"; 2698 } 2699 leaf discarded-packet-count { 2700 type uint32; 2701 mandatory true; 2702 description "discarded packet counter"; 2703 } 2704 } 2706 } 2708 } 2710 /* 2711 * Notifications 2712 */ 2714 notification notifications { 2715 description "dhcpv6 relay notification module"; 2716 container dhcpv6-relay-event { 2717 description "dhcpv6 relay event"; 2718 container topo-changed { 2719 description "raised when the topology 2720 of the relay agent is changed."; 2721 leaf relay-if-name { 2722 type string; 2723 mandatory true; 2724 description "relay interface name"; 2725 } 2726 leaf first-hop { 2727 type boolean; 2728 mandatory true; 2729 description "first hop"; 2730 } 2731 leaf last-entity-addr { 2732 type inet:ipv6-address; 2733 mandatory true; 2734 description "last entity address"; 2735 } 2736 } 2737 } 2738 } 2739 } 2741 2743 3.3. DHCPv6 Client YANG Model 2745 This module imports typedefs from [RFC6991]. 2747 file "ietf-dhcpv6-client@2017-12-22.yang" 2748 module ietf-dhcpv6-client { 2749 yang-version 1.1; 2750 namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; 2751 prefix "dhcpv6-client"; 2753 import ietf-inet-types { 2754 prefix inet; 2755 revision-date "2013-07-15"; 2756 } 2757 import ietf-yang-types { 2758 prefix yang; 2759 revision-date "2013-07-15"; 2760 } 2761 import ietf-dhcpv6-options { 2762 prefix dhcpv6-options; 2763 revision-date "2017-12-22"; 2764 } 2766 organization "DHC WG"; 2767 contact "yong@csnet1.cs.tsinghua.edu.cn 2768 wangh13@mails.tsinghua.edu.cn 2769 lh.sunlinh@gmail.com 2770 ian.farrer@telekom.de 2771 sladjana.zechlin@telekom.de 2772 hezihao9512@gmail.com "; 2774 description "This model defines a YANG data model that can be 2775 used to configure and manage a DHCPv6 client."; 2777 revision 2017-12-22 { 2778 description "Resolve most issues on Ian's github."; 2779 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2780 } 2782 revision 2017-11-24 { 2783 description "First version of the separated client specific 2784 YANG model."; 2785 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2786 } 2788 /* 2789 * Grouping 2790 */ 2792 grouping vendor-infor { 2793 description "Vendor information."; 2794 container vendor-info { 2795 description ""; 2796 leaf ent-num { 2797 type uint32; 2798 mandatory true; 2799 description "enterprise number"; 2800 } 2801 leaf-list data { 2802 type string; 2803 description "specific vendor info"; 2804 } 2805 } 2806 } 2808 grouping duid { 2809 description "DHCP Unique Identifier"; 2810 reference "RFC3315: Section 9"; 2811 leaf type-code { 2812 type uint16; 2813 default 65535; 2814 description "Type code of this DUID"; 2815 } 2816 choice duid-type { 2817 default duid-invalid; 2818 description "Selects the format for the DUID."; 2819 case duid-llt { 2820 description "DUID Based on Link-layer Address Plus Time (Type 1 - DUID-LLT)"; 2821 reference "RFC3315 Section 9.2"; 2822 leaf duid-llt-hardware-type { 2823 type uint16; 2824 description "Hardware type as assigned by IANA (RFC826)."; 2825 } 2826 leaf duid-llt-time { 2827 type yang:timeticks; 2828 description "The time value is the time that the DUID is generated 2829 represented in seconds since midnight (UTC), January 1, 2000, 2830 modulo 2^32."; 2831 } 2832 leaf duid-llt-link-layer-addr { 2833 type yang:mac-address; 2834 description "Link-layer address as described in RFC2464"; 2835 } 2836 } 2837 case duid-en { 2838 description "DUID Assigned by Vendor Based on Enterprise Number (Type 2 - DUID-EN)"; 2839 reference "RFC3315 Section 9.3"; 2840 leaf duid-en-enterprise-number { 2841 type uint32; 2842 description "Vendor's registered Private Enterprise Number as 2843 maintained by IANA"; 2844 } 2845 leaf duid-en-identifier { 2846 type string; 2847 description "Indentifier, unique to the device that is using it"; 2848 } 2849 } 2850 case duid-ll { 2851 description "DUID Based on Link-layer Address (Type 3 - DUID-LL)"; 2852 reference "RFC3315 Section 9.4"; 2853 leaf duid-ll-hardware-type { 2854 type uint16; 2855 description "Hardware type as assigned by IANA (RFC826)."; 2856 } 2857 leaf duid-ll-link-layer-addr { 2858 type yang:mac-address; 2859 description "Link-layer address as described in RFC2464"; 2860 } 2861 } 2862 case duid-uuid { 2863 description "DUID Based on Universally Unique Identifier (Type 4 - DUID-UUID)"; 2864 reference "RFC6335 Defination of the UUID-Based Unique Identifier"; 2865 leaf uuid { 2866 type yang:uuid; 2867 description "A Universally Unique IDentifier in the string representation 2868 defined in RFC 4122. The canonical representation uses 2869 lowercase characters"; 2871 } 2872 } 2873 case duid-invalid { 2874 description "DUID based on free raw bytes"; 2875 leaf data { 2876 type binary; 2877 description "The bits to be used as the identifier"; 2878 } 2879 } 2880 } 2881 } 2882 grouping portset-para { 2883 description "portset parameters"; 2884 container port-parameter { 2885 description "port parameter"; 2886 leaf offset { 2887 type uint8; 2888 mandatory true; 2889 description "offset in a port set"; 2890 } 2891 leaf psid-len { 2892 type uint8; 2893 mandatory true; 2894 description "length of a psid"; 2895 } 2896 leaf psid { 2897 type uint16; 2898 mandatory true; 2899 description "psid value"; 2900 } 2901 } 2902 } 2904 grouping iaid { 2905 description "IA is a construct through which a server and a 2906 client can identify, group, and manage a set of related IPv6 2907 addresses. The key of the list is a 4-byte number IAID defined 2908 in [RFC3315]."; 2909 list identity-association { 2910 config "false"; 2911 key iaid; 2912 description "IA"; 2913 leaf iaid { 2914 type uint32; 2915 mandatory true; 2916 description "IAID"; 2917 } 2918 leaf ia-type { 2919 type string; 2920 mandatory true; 2921 description "IA type"; 2922 } 2923 leaf-list ipv6-addr { 2924 type inet:ipv6-address; 2925 description "ipv6 address"; 2926 } 2927 leaf-list ipv6-prefix { 2928 type inet:ipv6-prefix; 2929 description "ipv6 prefix"; 2930 } 2931 leaf-list prefix-length { 2932 type uint8; 2933 description "ipv6 prefix length"; 2934 } 2935 leaf t1-time { 2936 type yang:timeticks; 2937 mandatory true; 2938 description "t1 time"; 2939 } 2940 leaf t2-time { 2941 type yang:timeticks; 2942 mandatory true; 2943 description "t2 time"; 2944 } 2945 leaf preferred-lifetime { 2946 type yang:timeticks; 2947 mandatory true; 2948 description "preferred lifetime"; 2949 } 2950 leaf valid-lifetime { 2951 type yang:timeticks; 2952 mandatory true; 2953 description "valid lifetime"; 2954 } 2955 } 2957 } 2959 /* 2960 * Data Nodes 2961 */ 2963 container client { 2964 presence "Enables the client"; 2965 description "dhcpv6 client portion"; 2966 container client-config{ 2967 description "configuration tree of client"; 2968 container duid { 2969 description "Sets the DUID"; 2970 uses duid; 2971 } 2972 list client-if { 2973 key if-name; 2974 description "A client may have several 2975 interfaces, it is more reasonable to 2976 configure and manage parameters on 2977 the interface-level. The list defines 2978 specific client interfaces and their 2979 data. Different interfaces are distinguished 2980 by the key which is a configurable string 2981 value."; 2982 leaf if-name { 2983 type string; 2984 mandatory true; 2985 description "interface name"; 2986 } 2987 leaf cli-id { 2988 type uint32; 2989 mandatory true; 2990 description "client id"; 2991 } 2992 leaf description { 2993 type string; 2994 description 2995 "description of the client interface"; 2996 } 2997 leaf pd-function { 2998 type boolean; 2999 mandatory true; 3000 description "Whether the client 3001 can act as a requesting router 3002 to request prefixes using prefix 3003 delegation ([RFC3633])."; 3004 } 3005 leaf rapid-commit { 3006 type boolean; 3007 mandatory true; 3008 description "'1' indicates a client can initiate a Solicit-Reply 3009 message exchange by adding a Rapid Commit option in Solicit 3010 message. '0' means the client is not allowed to add a Rapid 3011 Commit option to request addresses in a two-message exchange 3012 pattern."; 3013 } 3014 container mo-tab { 3015 description "The management tab label indicates the operation 3016 mode of the DHCPv6 client. 'm'=1 and 'o'=1 indicate the 3017 client will use DHCPv6 to obtain all the configuration data. 3018 'm'=1 and 'o'=0 are a meaningless combination. 'm'=0 and 'o'=1 3019 indicate the client will use stateless DHCPv6 to obtain 3020 configuration data apart from addresses/prefixes data. 3021 'm'=0 and 'o'=0 represent the client will not use DHCPv6 3022 but use SLAAC to achieve configuration."; 3023 // if - not sure about the intended use here as it seems 3024 // to be redfining what will be received in the PIO. Is 3025 // the intention to be whether they PIO options will be 3026 // obeyed as received or overridden? 3027 leaf m-tab { 3028 type boolean; 3029 mandatory true; 3030 description "m tab"; 3031 } 3032 leaf o-tab { 3033 type boolean; 3034 mandatory true; 3035 description "o tab"; 3036 } 3037 } 3038 container client-configured-options { 3039 description "client configured options"; 3040 uses dhcpv6-options:client-option-definitions; 3041 } 3042 } 3044 } 3046 container client-state{ 3047 config "false"; 3048 description "state tree of client"; 3049 container if-other-paras { 3050 description "A client can obtain 3051 extra configuration data other than 3052 address and prefix information through 3053 DHCPv6. This container describes such 3054 data the client was configured. The 3055 potential configuration data may 3056 include DNS server addresses, SIP 3057 server domain names, etc."; 3058 uses dhcpv6-options:server-option-definitions; 3059 } 3060 } 3061 } 3062 /* 3063 * Notifications 3064 */ 3066 notification notifications { 3067 description "dhcpv6 client notification module"; 3068 container dhcpv6-client-event { 3069 description "dhcpv6 client event"; 3070 container ia-lease-event { 3071 description "raised when the 3072 client was allocated a new IA from 3073 the server or it renew/rebind/release 3074 its current IA"; 3075 leaf event-type { 3076 type enumeration{ 3077 enum "allocation" { 3078 description "allocate"; 3079 } 3080 enum "rebind" { 3081 description "rebind"; 3082 } 3083 enum "renew" { 3084 description "renew"; 3085 } 3086 enum "release" { 3087 description "release"; 3088 } 3089 } 3090 mandatory true; 3091 description "event type"; 3092 } 3093 container duid { 3094 description "Sets the DUID"; 3095 uses duid; 3096 } 3097 leaf iaid { 3098 type uint32; 3099 mandatory true; 3100 description "IAID"; 3101 } 3102 leaf serv-name { 3103 type string; 3104 description "server name"; 3105 } 3106 leaf description { 3107 type string; 3108 description "description of event"; 3109 } 3111 } 3112 container invalid-ia-detected { 3113 description "raised when the identity 3114 association of the client can be proved 3115 to be invalid. Possible condition includes 3116 duplicated address, illegal address, etc."; 3117 container duid { 3118 description "Sets the DUID"; 3119 uses duid; 3120 } 3121 leaf cli-duid { 3122 type uint32; 3123 mandatory true; 3124 description "duid of client"; 3125 } 3126 leaf iaid { 3127 type uint32; 3128 mandatory true; 3129 description "IAID"; 3130 } 3131 leaf serv-name { 3132 type string; 3133 description "server name"; 3134 } 3135 leaf description { 3136 type string; 3137 description "description of the event"; 3138 } 3139 } 3140 container retransmission-failed { 3141 description "raised when the retransmission 3142 mechanism defined in [RFC3315] is failed."; 3143 container duid { 3144 description "Sets the DUID"; 3145 uses duid; 3146 } 3147 leaf description { 3148 type enumeration { 3149 enum "MRC failed" { 3150 description "MRC failed"; 3151 } 3152 enum "MRD failed" { 3153 description "MRD failed"; 3154 } 3155 } 3156 mandatory true; 3157 description "description of failure"; 3158 } 3160 } 3161 container failed-status-turn-up { 3162 description "raised when the client receives 3163 a message includes an unsuccessful Status Code 3164 option."; 3165 container duid { 3166 description "Sets the DUID"; 3167 uses duid; 3168 } 3169 leaf status-code { 3170 type enumeration { 3171 enum "1" { 3172 description "UnspecFail"; 3173 } 3174 enum "2" { 3175 description "NoAddrAvail"; 3176 } 3177 enum "3" { 3178 description "NoBinding"; 3179 } 3180 enum "4" { 3181 description "NotOnLink"; 3182 } 3183 enum "5" { 3184 description "UseMulticast"; 3185 } 3186 } 3187 mandatory true; 3188 description "employed status code"; 3189 } 3190 } 3191 } 3192 } 3193 } 3195 3197 3.4. DHCPv6 Options YANG Model 3199 This module imports typedefs from [RFC6991]. 3201 file "ietf-dhcpv6-options@2017-12-22.yang" 3202 module ietf-dhcpv6-options { 3203 yang-version 1.1; 3204 namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options"; 3205 prefix "dhcpv6-options"; 3207 import ietf-inet-types { 3208 prefix inet; 3209 revision-date "2013-07-15"; 3210 } 3211 import ietf-yang-types { 3212 prefix yang; 3213 revision-date "2013-07-15"; 3214 } 3216 organization "DHC WG"; 3217 contact "yong@csnet1.cs.tsinghua.edu.cn 3218 wangh13@mails.tsinghua.edu.cn 3219 lh.sunlinh@gmail.com 3220 ian.farrer@telekom.de 3221 sladjana.zechlin@telekom.de 3222 hezihao9512@gmail.com"; 3224 description "This model defines a YANG data model that can be 3225 used to configure and manage a DHCPv6 server."; 3227 revision 2017-12-22 { 3228 description "Resolve most issues on Ian's github."; 3229 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 3230 } 3232 revision 2017-11-24 { 3233 description "First version of the separated DHCPv6 options 3234 YANG model."; 3236 reference "I-D:draft-ietf-dhc-dhcpv6-yang"; 3237 } 3239 /* 3240 * Features 3241 */ 3243 // features for server options 3244 feature server-unicast-op { 3245 description "Support for Server Unicast option"; 3246 } 3247 feature sip-server-domain-name-list-op { 3248 description "Support for SIP Server Domain Name List option"; 3249 } 3250 feature sip-server-address-list-op { 3251 description "Support for SIP Server Address List option"; 3252 } 3253 feature dns-config-op { 3254 description "Support for DNS Recursive Name Server option"; 3256 } 3257 feature domain-searchlist-op { 3258 description "Support for Domain Search List Option"; 3259 } 3260 feature nis-config-op { 3261 description "Support for Network Information Service (NIS) 3262 Servers option"; 3263 } 3264 feature nis-plus-config-op { 3265 description "Support for Network Information Service V2 (NIS+) 3266 Servers option"; 3267 } 3268 feature nis-domain-name-op { 3269 description "Support for Network Information Service (NIS) 3270 Domain Name option"; 3271 } 3272 feature nis-plus-domain-name-op { 3273 description "Support for Network Information Service V2 (NIS+) 3274 Server option"; 3275 } 3276 feature sntp-server-op { 3277 description "Support for Simple Network Protocol Configuration 3278 (SNTP) Servers option"; 3279 } 3280 feature info-refresh-time-op { 3281 description "Support for Information Refresh Time option"; 3282 } 3283 feature client-fqdn-op { 3284 description "Support for Client FQDN option"; 3285 } 3286 feature posix-timezone-op { 3287 description "Support for New POIX Timezone option"; 3288 } 3289 feature tzdb-timezone-op { 3290 description "Support for New TZDB Timezone option"; 3291 } 3292 feature ntp-server-op { 3293 description "Support for Network Time Protocol (NTP) 3294 Server option"; 3295 } 3296 feature boot-file-url-op { 3297 description "Support for Boot File URL option"; 3298 } 3299 feature boot-file-param-op { 3300 description "Support for Boot File Parameters option"; 3301 } 3302 feature aftr-name-op { 3303 description "Support for Address Family Transition 3304 Router (AFTR) option"; 3305 } 3306 feature kbr-default-name-op { 3307 description "Support for Kerberos Default Name 3308 Option"; 3309 } 3310 feature kbr-kdc-op { 3311 description "Support for Kerberos KDC option"; 3312 } 3313 feature sol-max-rt-op { 3314 description "Support for SOL_MAX_RT option"; 3315 } 3316 feature inf-max-rt-op { 3317 description "Support for INF_MAX_RT option"; 3318 } 3319 feature addr-selection-op { 3320 description "Support for Address Selection opiton"; 3321 } 3322 feature pcp-server-op { 3323 description "Support for Port Control Protocol (PCP) 3324 option"; 3325 } 3326 feature s46-rule-op { 3327 description "Support for S46 Rule option"; 3328 } 3329 feature s46-br-op { 3330 description "Support for S46 Border Relay (BR) option"; 3331 } 3332 feature s46-dmr-op { 3333 description "Support for S46 Default Mapping Rule 3334 (DMR) option"; 3335 } 3336 feature s46-v4-v6-binding-op { 3337 description "Support for S46 IPv4/IPv6 Address 3338 Bind option"; 3339 } 3341 // features for relay-supplied options 3342 feature erp-local-domain-name-op { 3343 description "Support for ERP Local Domain 3344 Name option"; 3345 } 3347 // features for client options 3348 feature option-request-op { 3349 description "Support for Option Request option"; 3350 } 3351 feature rapid-commit-op { 3352 description "Support for Rapid Commit option"; 3353 } 3354 feature user-class-op { 3355 description "Support for User Class option"; 3356 } 3357 feature vendor-class-op { 3358 description "Support for Vendor Class option"; 3359 } 3360 feature client-arch-type-op { 3361 description "Support for Client System Architecture 3362 Type option"; 3363 } 3364 feature client-network-interface-identifier-op { 3365 description "Support for Client Network Interface 3366 Identifier option"; 3367 } 3368 feature kbr-principal-name-op { 3369 description "Support for Kerberos Principal 3370 Name option"; 3371 } 3372 feature kbr-realm-name-op { 3373 description "Support Kerberos Realm Name option"; 3374 } 3375 feature client-link-layer-addr-op { 3376 description "Support for Client Link-Layer Address 3377 Option"; 3378 } 3380 // features for custom options 3381 feature operator-op-ipv6-address { 3382 description "Support for Option with IPv6 Addresses"; 3383 } 3384 feature operator-op-single-flag { 3385 description "Support for Option with Single Flag"; 3386 } 3387 feature operator-op-ipv6-prefix { 3388 description "Support for Option with IPv6 Prefix"; 3389 } 3390 feature operator-op-int32 { 3391 description "Support for Opion with 32-bit 3392 Integer Value"; 3393 } 3394 feature operator-op-int16 { 3395 description "Support for Opion with 16-bit 3396 Integer Value"; 3397 } 3398 feature operator-op-int8 { 3399 description "Support for Opion with 8-bit 3400 Integer Value"; 3401 } 3402 feature operator-op-uri { 3403 description "Support for Opion with URI"; 3404 } 3405 feature operator-op-textstring { 3406 description "Support for Opion with Text 3407 String"; 3408 } 3409 feature operator-op-var-data { 3410 description "Support for Opion with 3411 Variable-Length Data"; 3412 } 3413 feature operator-op-dns-wire { 3414 description "Support for Opion with DNS Wire 3415 Format Domain Name List"; 3416 } 3418 /* 3419 * Groupings 3420 */ 3422 grouping portset-para { 3423 description "portset parameters"; 3424 container port-parameter { 3425 description "port parameter"; 3426 leaf offset { 3427 type uint8; 3428 mandatory true; 3429 description "offset in a port set"; 3430 } 3431 leaf psid-len { 3432 type uint8; 3433 mandatory true; 3434 description "length of a psid"; 3435 } 3436 leaf psid { 3437 type uint16; 3438 mandatory true; 3439 description "psid value"; 3440 } 3441 } 3442 } 3444 grouping duid { 3445 description "DHCP Unique Identifier"; 3446 reference "RFC3315: Section 9"; 3447 leaf type-code { 3448 type uint16; 3449 default 65535; 3450 description "Type code of this DUID"; 3451 } 3452 choice duid-type { 3453 default duid-invalid; 3454 description "Selects the format for the DUID."; 3455 case duid-llt { 3456 description "DUID Based on Link-layer Address Plus Time (Type 1 - DUID-LLT)"; 3457 reference "RFC3315 Section 9.2"; 3459 leaf duid-llt-hardware-type { 3460 type uint16; 3461 description "Hardware type as assigned by IANA (RFC826)."; 3462 } 3463 leaf duid-llt-time { 3464 type yang:timeticks; 3465 description "The time value is the time that the DUID is generated 3466 represented in seconds since midnight (UTC), January 1, 2000, 3467 modulo 2^32."; 3468 } 3469 leaf duid-llt-link-layer-addr { 3470 type yang:mac-address; 3471 description "Link-layer address as described in RFC2464"; 3472 } 3473 } 3474 case duid-en { 3475 description "DUID Assigned by Vendor Based on Enterprise Number (Type 2 - DUID-EN)"; 3476 reference "RFC3315 Section 9.3"; 3477 leaf duid-en-enterprise-number { 3478 type uint32; 3479 description "Vendor's registered Private Enterprise Number as 3480 maintained by IANA"; 3481 } 3482 leaf duid-en-identifier { 3483 type string; 3484 description "Indentifier, unique to the device that is using it"; 3485 } 3486 } 3487 case duid-ll { 3488 description "DUID Based on Link-layer Address (Type 3 - DUID-LL)"; 3489 reference "RFC3315 Section 9.4"; 3490 leaf duid-ll-hardware-type { 3491 type uint16; 3492 description "Hardware type as assigned by IANA (RFC826)."; 3493 } 3494 leaf duid-ll-link-layer-addr { 3495 type yang:mac-address; 3496 description "Link-layer address as described in RFC2464"; 3497 } 3498 } 3499 case duid-uuid { 3500 description "DUID Based on Universally Unique Identifier (Type 4 - DUID-UUID)"; 3501 reference "RFC6335 Defination of the UUID-Based Unique Identifier"; 3502 leaf uuid { 3503 type yang:uuid; 3504 description "A Universally Unique IDentifier in the string representation 3505 defined in RFC 4122. The canonical representation uses 3506 lowercase characters"; 3507 } 3508 } 3509 case duid-invalid { 3510 description "DUID based on free raw bytes"; 3511 leaf data { 3512 type binary; 3513 description "The bits to be used as the identifier"; 3514 } 3515 } 3516 } 3517 } 3519 grouping server-option-definitions { 3520 description "Contains definitions for options configured on the 3521 DHCPv6 server which will be supplied to clients."; 3522 container server-unicast-option { 3523 if-feature server-unicast-op; 3524 presence "Enable this option"; 3525 description "OPTION_UNICAST (12) Server Unicast Option"; 3526 reference "RFC3315: Dynamic Host Configuration Protocol 3527 for IPv6 (DHCPv6)"; 3528 leaf server-address { 3529 type inet:ipv6-address; 3530 description "server ipv6 address"; 3531 } 3532 } 3533 container sip-server-domain-name-list-option { 3534 if-feature sip-server-domain-name-list-op; 3535 presence "Enable this option"; 3536 description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List"; 3537 reference "RFC3319: Dynamic Host Configuration Protocol 3538 (DHCPv6) Options for Session Initiation Protocol (SIP) 3539 Servers"; 3540 leaf sip-serv-domain-name { 3541 type string; 3542 mandatory true; 3543 description "sip server domain 3544 name"; 3545 } 3546 } 3547 container sip-server-address-list-option { 3548 if-feature sip-server-address-list-op; 3549 presence "Enable this option"; 3550 description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List"; 3551 reference "RFC3319: Dynamic Host Configuration Protocol 3552 (DHCPv6) Options for Session Initiation Protocol (SIP) 3553 Servers"; 3554 list sip-server { 3555 key sip-serv-id; 3556 description "sip server info"; 3557 leaf sip-serv-id { 3558 type uint8; 3559 mandatory true; 3560 description "sip server id"; 3561 } 3562 leaf sip-serv-addr { 3563 type inet:ipv6-address; 3564 mandatory true; 3565 description "sip server addr"; 3566 } 3567 } 3568 } 3569 container dns-config-option { 3570 if-feature dns-config-op; 3571 presence "Enable this option"; 3572 description "OPTION_DNS_SERVERS (23) DNS recursive Name 3573 Server option"; 3574 reference "RFC3646: DNS Configuration options for Dynamic 3575 Host Configuration Protocol for IPv6 (DHCPv6)"; 3576 list dns-server { 3577 key dns-serv-id; 3578 description "dns server info"; 3579 leaf dns-serv-id { 3580 type uint8; 3581 mandatory true; 3582 description "DNS server list entry ID."; 3583 } 3584 leaf dns-serv-addr { 3585 type inet:ipv6-address; 3586 mandatory true; 3587 description "DNS server address."; 3588 } 3589 } 3590 } 3591 container domain-searchlist-option { 3592 if-feature domain-searchlist-op; 3593 presence "Enable this option"; 3594 description "OPTION_DOMAIN_LIST (24) Domain Search List Option"; 3595 reference "RFC3646: DNS Configuration options for Dynamic 3596 Host Configuration Protocol for IPv6 (DHCPv6)"; 3597 list domain-searchlist { 3598 key domain-searchlist-id; 3599 description "dns server info"; 3600 leaf domain-searchlist-id { 3601 type uint8; 3602 mandatory true; 3603 description "Domain seachlist entry ID."; 3604 } 3605 leaf domain-search-list-entry { 3606 type string; 3607 mandatory true; 3608 description "Domain search list entry."; 3609 } 3610 } 3611 } 3612 container nis-config-option { 3613 if-feature nis-config-op; 3614 presence "Enable this option"; 3615 description "OPTION_NIS_SERVERS (27) Network Information Service (NIS) 3616 Servers Option."; 3617 reference "RFC3898: Network Information Service (NIS) Configuration 3618 Options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; 3619 list nis-server { 3620 key nis-serv-id; 3621 description "nis server info"; 3622 leaf nis-serv-id { 3623 type uint8; 3624 mandatory true; 3625 description "nis server id"; 3626 } 3627 leaf nis-serv-addr { 3628 type inet:ipv6-address; 3629 mandatory true; 3630 description "nis server addr"; 3631 } 3632 } 3633 } 3634 container nis-plus-config-option { 3635 if-feature nis-plus-config-op; 3636 presence "Enable this option"; 3637 description "OPTION_NISP_SERVERS (28): Network Information Service V2 3638 (NIS+) Servers Option."; 3639 reference "RFC3989: Network Information Service (NIS) Configuration 3640 Options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"; 3641 list nis-plus-server { 3642 key nis-plus-serv-id; 3643 description "NIS+ server information."; 3644 leaf nis-plus-serv-id { 3645 type uint8; 3646 mandatory true; 3647 description "nisp server id"; 3648 } 3649 leaf nis-plus-serv-addr { 3650 type inet:ipv6-address; 3651 mandatory true; 3652 description "nisp server addr"; 3653 } 3654 } 3655 } 3656 container nis-domain-name-option { 3657 if-feature nis-domain-name-op; 3658 presence "Enable this option"; 3659 description "OPTION_NIS_DOMAIN_NAME (29) Network Information 3660 Service (NIS) Domain Name Option"; 3661 reference "RFC3989: Network Information Service (NIS) 3662 Configuration Options for Dynamic Host Configuration Protocol 3663 for IPv6 (DHCPv6)"; 3664 leaf nis-domain-name { 3665 type string; 3666 description "The Network Information Service (NIS) Domain Name 3667 option is used by the server to convey client's NIS Domain Name 3668 info to the client."; 3669 } 3670 } 3671 container nis-plus-domain-name-option { 3672 if-feature nis-plus-domain-name-op; 3673 presence "Enable this option"; 3674 description "OPTION_NISP_DOMAIN_NAME (30) Network Information 3675 Service V2 (NIS+) Domain Name Option"; 3676 reference "RFC3989: Network Information Service (NIS) 3677 Configuration Options for Dynamic Host Configuration Protocol 3678 for IPv6 (DHCPv6)"; 3679 leaf nis-plus-domain-name { 3680 type string; 3681 description "The Network Information Service V2 (NIS+) Domain Name 3682 option is used by the server to convey client's NIS+ Domain Name 3683 info to the client."; 3684 } 3685 } 3686 container sntp-server-option { 3687 if-feature sntp-server-op; 3688 presence "Enable this option"; 3689 description "OPTION_SNTP_SERVERS (31) Simple Network Time Protocol 3690 (SNTP) Servers Option"; 3691 reference "RFC4075: Simple Network Time Protocol (SNTP) Configuration 3692 Option for DHCPv6"; 3693 list sntp-server { 3694 key sntp-serv-id; 3695 description "sntp server info"; 3696 leaf sntp-serv-id { 3697 type uint8; 3698 mandatory true; 3699 description "sntp server id"; 3700 } 3701 leaf sntp-serv-addr { 3702 type inet:ipv6-address; 3703 mandatory true; 3704 description "sntp server addr"; 3705 } 3706 } 3707 } 3708 container info-refresh-time-option { 3709 if-feature info-refresh-time-op; 3710 presence "Enable this option"; 3711 description "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh 3712 Time option."; 3713 reference "RFC4242: Information Refresh Time Option for Dynamic Host 3714 Configuration Protocol for IPv6 (DHCPv6"; 3715 leaf info-refresh-time { 3716 type yang:timeticks; 3717 mandatory true; 3718 description "The refresh time."; 3719 } 3720 } 3721 container client-fqdn-option { 3722 if-feature client-fqdn-op; 3723 presence "Enable this option"; 3724 description "OPTION_CLIENT_FQDN (39) DHCPv6 Client FQDN Option"; 3725 reference "RFC4704: The Dynamic Host Configuration Protocol for IPv6 3726 (DHCPv6) Client Fully Qualified Domain Name (FQDN) Option"; 3727 leaf server-initiate-update { 3728 type boolean; 3729 mandatory true; 3730 description "server initiate"; 3731 } 3732 leaf client-initiate-update { 3733 type boolean; 3734 mandatory true; 3735 description "client initiate"; 3737 } 3738 leaf modify-name-from-cli { 3739 type boolean; 3740 mandatory true; 3741 description "modify by client"; 3742 } 3743 } 3744 container posix-timezone-option { 3745 if-feature posix-timezone-op; 3746 presence "Enable this option"; 3747 description "OPTION_NEW_POSIX_TIMEZONE (41) Posix Timezone option"; 3748 reference "RFC4833: Timezone Options for DHCP"; 3749 leaf tz-posix { 3750 type string; 3751 mandatory true; 3752 description "TZ Posix IEEE 1003.1 String"; 3753 } 3754 } 3755 container tzdb-timezone-option { 3756 if-feature tzdb-timezone-op; 3757 presence "Enable this option"; 3758 description "OPTION_NEW_TZDB_TIMEZONE (42) Timezone Database option"; 3759 reference "RFC4822: Timezone Options for DHCP"; 3760 leaf tz-database { 3761 type string; 3762 mandatory true; 3763 description "Reference to the TZ Database"; 3764 } 3765 } 3766 container ntp-server-option { 3767 //This option looks like it needs work to correctly model the 3768 //option as defined in the RFC. 3770 // Zihao - Re-modelled so it only contains one 3771 // time source suboption 3773 if-feature ntp-server-op; 3774 presence "Enable this option"; 3775 description "OPTION_NTP_SERVER (56) NTP Server Option for DHCPv6"; 3776 reference "RFC5908: Network Time Protocol (NTP) Server Option for 3777 DHCPv6"; 3778 list ntp-server { 3779 key ntp-serv-id; 3780 description "ntp server info"; 3781 leaf ntp-serv-id { 3782 type uint8; 3783 mandatory true; 3784 description "ntp server id"; 3786 } 3787 choice ntp-time-source-suboption { 3788 description "Select a NTP time source suboption."; 3789 case server-address { 3790 leaf-list ntp-serv-addr-suboption { 3791 type inet:ipv6-address; 3792 description "ntp server addr"; 3793 } 3794 } 3795 case server-multicast-address { 3796 leaf-list ntp-serv-mul-addr-suboption { 3797 type inet:ipv6-address; 3798 description "ntp server multicast addr"; 3799 } 3800 } 3801 case server-fqdn { 3802 leaf-list ntp-serv-fqdn-suboption { 3803 type string; 3804 description "ntp server fqdn"; 3805 } 3806 } 3807 } 3808 } 3809 } 3810 container boot-file-url-option { 3811 if-feature boot-file-url-op; 3812 presence "Enable this option"; 3813 description "OPT_BOOTFILE_URL (59) Boot File URL option"; 3814 reference "RFC5970: DHCPv6 Options for Network Boot"; 3815 list boot-file { 3816 key boot-file-id; 3817 description "boot file info"; 3818 leaf boot-file-id { 3819 type uint8; 3820 mandatory true; 3821 description "boot file id"; 3822 } 3823 leaf-list suitable-arch-type { 3824 type uint16; 3825 description "architecture type"; 3826 } 3827 leaf-list suitable-net-if { 3828 type uint32; 3829 description "network interface"; 3830 } 3831 leaf boot-file-url { 3832 type string; 3833 mandatory true; 3834 description "url for boot file"; 3835 } 3836 } 3837 } 3838 container boot-file-param-option { 3839 if-feature boot-file-param-op; 3840 presence "Enable this option"; 3841 description "OPT_BOOTFiLE_PARAM (60) Boot File Parameters Option"; 3842 reference "RFC5970: DHCPv6 Options for Network Boot"; 3843 list boot-file-paras { 3844 key para-id; 3845 description "boot file parameters"; 3846 leaf para-id { 3847 type uint8; 3848 mandatory true; 3849 description "parameter id"; 3850 } 3851 leaf parameter { 3852 type string; 3853 mandatory true; 3854 description "parameter 3855 value"; 3856 } 3858 } 3859 } 3860 container aftr-name-option { 3861 if-feature aftr-name-op; 3862 presence "Enable this option"; 3863 description "OPTION_AFTR_NAME (64) AFTR-Name DHCPv6 Option"; 3864 reference "RFC6334: Dynamic Host Configuration Protocol for IPv6 3865 (DHCPv6) Option for Dual-Stack Lite"; 3866 leaf tunnel-endpoint-name { 3867 type string; 3868 mandatory true; 3869 description "aftr name"; 3870 } 3871 } 3872 container kbr-default-name-option { 3873 if-feature kbr-default-name-op; 3874 presence "Enable this option"; 3875 description "OPTION_KRB_DEFAULT_REALM_NAME (77) Kerberos Default Realm Name Option"; 3876 reference "RFC6784: Kerberos Options for DHCPv6"; 3877 leaf default-realm-name { 3878 type string; 3879 mandatory true; 3880 description "default realm name"; 3881 } 3883 } 3884 container kbr-kdc-option { 3885 if-feature kbr-kdc-op; 3886 presence "Enable this option"; 3887 description "OPTION_KRB_KDC (78) Kerberos KDB Option"; 3888 reference "RFC6784: Kerberos Options for DHCPv6"; 3889 list kdc-info { 3890 key kdc-id; 3891 description "kdc info"; 3892 leaf kdc-id { 3893 type uint8; 3894 mandatory true; 3895 description "kdc id"; 3896 } 3897 leaf priority { 3898 type uint16; 3899 mandatory true; 3900 description "priority"; 3901 } 3902 leaf weight { 3903 type uint16; 3904 mandatory true; 3905 description "weight"; 3906 } 3907 leaf transport-type { 3908 type uint8; 3909 mandatory true; 3910 description "transport type"; 3911 } 3912 leaf port-number { 3913 type uint16; 3914 mandatory true; 3915 description "port number"; 3916 } 3917 leaf kdc-ipv6-addr { 3918 type inet:ipv6-address; 3919 mandatory true; 3920 description "kdc ipv6 addr"; 3921 } 3922 leaf realm-name { 3923 type string; 3924 mandatory true; 3925 description "realm name"; 3926 } 3927 } 3928 } 3929 container sol-max-rt-option { 3930 if-feature sol-max-rt-op; 3931 presence "Enable this option"; 3932 description "OPTION_SOL_MAX_RT (82) sol max rt option"; 3933 reference "RFC7083: Modification to Default Values of 3934 SOL_MAX_RT and INF_MAX_RT"; 3935 leaf sol-max-rt-value { 3936 type yang:timeticks; 3937 mandatory true; 3938 description "sol max rt value"; 3939 } 3940 } 3941 container inf-max-rt-option { 3942 if-feature inf-max-rt-op; 3943 presence "Enable this option"; 3944 description "OPTION_INF_MAX_RT (83) inf max rt option"; 3945 reference "RFC7083: Modification to Default Values of 3946 SOL_MAX_RT and INF_MAX_RT"; 3947 leaf inf-max-rt-value { 3948 type yang:timeticks; 3949 mandatory true; 3950 description "inf max rt value"; 3951 } 3952 } 3953 container addr-selection-option { 3954 if-feature addr-selection-op; 3955 presence "Enable this option"; 3956 description "OPTION_ADDRSEL (84) and OPTION_ADDRSEL_TABLE (85)"; 3957 reference "RFC7078: Distributing Address Selection Policy Using 3958 DHCPv6"; 3959 // if - Needs checking to see if this matches the RFC - there 3960 // are two options here. 3961 // Zihao - I think this matches RFC7078 3962 leaf a-bit-set { 3963 type boolean; 3964 mandatory true; 3965 description "a bit"; 3966 } 3967 leaf p-bit-set { 3968 type boolean; 3969 mandatory true; 3970 description "p bit"; 3971 } 3972 list policy-table { 3973 key policy-id; 3974 description "policy table"; 3975 leaf policy-id { 3976 type uint8; 3977 mandatory true; 3978 description "policy id"; 3980 } 3981 leaf label { 3982 type uint8; 3983 mandatory true; 3984 description "label"; 3985 } 3986 leaf precedence { 3987 type uint8; 3988 mandatory true; 3989 description "precedence"; 3990 } 3991 leaf prefix-len { 3992 type uint8; 3993 mandatory true; 3994 description "prefix length"; 3995 } 3996 leaf prefix { 3997 type inet:ipv6-prefix; 3998 mandatory true; 3999 description "prefix"; 4000 } 4001 } 4002 } 4003 container pcp-server-option { 4004 if-feature pcp-server-op; 4005 presence "Enable this option"; 4006 description "OPTION_V6_PCP_SERVER (86) 4007 pcp server option"; 4008 reference "RFC7291: DHCP Options for the Port Control 4009 Protocol (PCP)"; 4010 list pcp-server { 4011 key pcp-serv-id; 4012 description "pcp server info"; 4013 leaf pcp-serv-id { 4014 type uint8; 4015 mandatory true; 4016 description "pcp server id"; 4017 } 4018 leaf pcp-serv-addr { 4019 type inet:ipv6-address; 4020 mandatory true; 4021 description "pcp server addr"; 4022 } 4023 } 4024 } 4025 container s46-rule-option { 4026 if-feature s46-rule-op; 4027 presence "Enable this option"; 4028 description "OPTION_S46_RULE (89) S46 rule option"; 4029 reference "RFC7598: DHCPv6 Options for Configuration of 4030 Softwire Address and Port-Mapped Clients"; 4031 list s46-rule { 4032 key rule-id; 4033 description "s46 rule"; 4034 leaf rule-id { 4035 type uint8; 4036 mandatory true; 4037 description "rule id"; 4038 } 4039 leaf rule-type { 4040 type enumeration { 4041 enum "BMR" { 4042 description "BMR"; 4043 } 4044 enum "FMR" { 4045 description "FMR"; 4046 } 4047 } 4048 mandatory true; 4049 description "rule type"; 4050 } 4051 leaf prefix4-len { 4052 type uint8; 4053 mandatory true; 4054 description "ipv4 prefix length"; 4055 } 4056 leaf ipv4-prefix { 4057 type inet:ipv4-prefix; 4058 mandatory true; 4059 description "ipv4 prefix"; 4060 } 4061 leaf prefix6-len { 4062 type uint8; 4063 mandatory true; 4064 description "ipv6 prefix length"; 4065 } 4066 leaf ipv6-prefix { 4067 type inet:ipv6-prefix; 4068 mandatory true; 4069 description "ipv6 prefix"; 4070 } 4071 uses portset-para; 4072 } 4073 } 4074 container s46-br-option { 4075 if-feature s46-br-op; 4076 presence "Enable this option"; 4077 description "OPTION_S46_BR (90) S46 BR Option"; 4078 reference "RFC7598: DHCPv6 Options for Configuration of 4079 Softwire Address and Port-Mapped Clients"; 4080 list br { 4081 key br-id; 4082 description "br info"; 4083 leaf br-id { 4084 type uint8; 4085 mandatory true; 4086 description "br id"; 4087 } 4088 leaf br-ipv6-addr { 4089 type inet:ipv6-address; 4090 mandatory true; 4091 description "br ipv6 addr"; 4092 } 4093 } 4094 } 4095 container s46-dmr-option { 4096 if-feature s46-dmr-op; 4097 presence "Enable this option"; 4098 description "OPTION_S46_DMR (91) S46 DMR Option"; 4099 reference "RFC7598: DHCPv6 Options for Configuration of 4100 Softwire Address and Port-Mapped Clients"; 4101 list dmr { 4102 key dmr-id; 4103 description "dmr info"; 4104 leaf dmr-id { 4105 type uint8; 4106 mandatory true; 4107 description "dmr id"; 4108 } 4109 leaf dmr-prefix-len { 4110 type uint8; 4111 mandatory true; 4112 description "dmr prefix length"; 4113 } 4114 leaf dmr-ipv6-prefix { 4115 type inet:ipv6-prefix; 4116 mandatory true; 4117 description "dmr ipv6 prefix"; 4118 } 4119 } 4120 } 4121 container s46-v4-v6-binding-option { 4122 if-feature s46-v4-v6-binding-op; 4123 presence "Enable this option"; 4124 description "OPTION_S46_V4V6BIND (92) S46 IPv4/IPv6 Address 4125 Binding option"; 4126 reference "RFC7598: DHCPv6 Options for Configuration of 4127 Softwire Address and Port-Mapped Clients"; 4128 list ce { 4129 key ce-id; 4130 description "ce info"; 4131 leaf ce-id { 4132 type uint8; 4133 mandatory true; 4134 description "ce id"; 4135 } 4136 leaf ipv4-addr { 4137 type inet:ipv4-address; 4138 mandatory true; 4139 description "ce ipv4 addr"; 4140 } 4141 leaf bind-prefix6-len { 4142 type uint8; 4143 mandatory true; 4144 description "bind ipv6 prefix 4145 length"; 4146 } 4147 leaf bind-ipv6-prefix { 4148 type inet:ipv6-prefix; 4149 mandatory true; 4150 description "bind ipv6 prefix"; 4151 } 4152 uses portset-para; 4153 } 4154 } 4155 } 4156 //if - NB - The list of options needs to be updated. 4158 grouping relay-supplied-option-definitions { 4159 // if - The structure here needs to be checked and probably reworked. 4160 description "OPTION_RSOO (66) Relay-Supplied Options option"; 4161 reference "RFC6422: Relay-Supplied DHCP Options"; 4162 container erp-local-domain-name-option { 4163 if-feature erp-local-domain-name-op; 4164 presence "Enable this option"; 4165 description "OPTION_ERP_LOCAL_DOMAIN_NAME (65) DHCPv6 ERP Local 4166 Domain Name Option"; 4167 reference "RFC6440: The EAP Re-authentication Protocol (ERP) 4168 Local Domain Name DHCPv6 Option"; 4169 list erp-for-client { 4170 key cli-id; 4171 description "erp for client"; 4172 leaf cli-id { 4173 type uint32; 4174 mandatory true; 4175 description "client id"; 4176 } 4177 container duid { 4178 description "Sets the DUID"; 4179 // uses duid; 4180 // if - Maybe DUID definition needs to be moved to this module. 4181 uses duid; 4182 } 4183 leaf erp-name { 4184 type string; 4185 mandatory true; 4186 description "erp name"; 4187 } 4188 } 4189 } 4190 } 4192 grouping client-option-definitions { 4193 description "Contains definitions for options configured on the 4194 DHCPv6 client which will be sent to the server."; 4195 list new-or-standard-cli-option { 4196 key option-code; 4197 description "new or standard client option"; 4198 leaf option-code { 4199 type uint16; 4200 mandatory true; 4201 description "option code"; 4202 } 4203 leaf option-name { 4204 type string; 4205 mandatory true; 4206 description "option name"; 4207 } 4208 leaf option-description { 4209 type string; 4210 mandatory true; 4211 description "description of client 4212 option"; 4213 } 4214 leaf option-reference { 4215 type string; 4216 description "the reference of option"; 4217 } 4218 leaf option-value { 4219 type string; 4220 mandatory true; 4221 description "the option value"; 4222 } 4223 } 4224 container option-request-option { 4225 if-feature option-request-op; 4226 presence "Enable this option"; 4227 description "OPTION_ORO (6) Option Request Option"; 4228 reference "RFC3315: Dynamic Host Configuration Protocol 4229 for IPv6 (DHCPv6)"; 4230 list oro-option { 4231 key option-code; 4232 description "oro option"; 4233 leaf option-code { 4234 type uint16; 4235 mandatory true; 4236 description "option code"; 4237 } 4238 leaf description { 4239 type string; 4240 mandatory true; 4241 description "description of oro 4242 options"; 4243 } 4244 } 4245 } 4247 container user-class-option { 4248 if-feature user-class-op; 4249 presence "Enable this option"; 4250 description "OPTION_USER_CLASS (15) User Class Option"; 4251 reference "RFC3315: Dynamic Host Configuration Protocol 4252 for IPv6 (DHCPv6)"; 4253 list user-class { 4254 key user-class-id; 4255 description "user class"; 4256 leaf user-class-id { 4257 type uint8; 4258 mandatory true; 4259 description "user class id"; 4260 } 4261 leaf user-class-data { 4262 type string; 4263 mandatory true; 4264 description "The information contained in the data area 4265 of this option is contained in one or more opaque 4266 fields that represent the user class or classes of 4267 which the client is a member. "; 4269 } 4270 } 4271 } 4272 container vendor-class-option { 4273 if-feature vendor-class-op; 4274 presence "Enable this option"; 4275 description "OPTION_VENDOR_CLASS (16) Vendor Class Option"; 4276 reference "RFC3315: Dynamic Host Configuration Protocol 4277 for IPv6 (DHCPv6)"; 4278 leaf enterprise-number { 4279 type uint32; 4280 mandatory true; 4281 description "enterprise number"; 4282 } 4283 list vendor-class { 4284 key vendor-class-id; 4285 description "vendor class"; 4286 leaf vendor-class-id { 4287 type uint8; 4288 mandatory true; 4289 description "vendor class id"; 4290 } 4291 leaf vendor-class-data { 4292 type string; 4293 mandatory true; 4294 description "The vendor-class-data is composed of a series 4295 of separate items, each of which describes some 4296 characteristic of the client's hardware configuration. 4297 Examples of vendor-class-data instances might include the 4298 version of the operating system the client is running or 4299 the amount of memory installed on the client."; 4300 } 4301 } 4302 } 4303 container client-fqdn-option { 4304 if-feature client-fqdn-op; 4305 presence "Enable this option"; 4306 description "OPTION_CLIENT_FQDN (39) The Dynamic Host 4307 Configuration Protocol for IPv6 (DHCPv6) Client Fully 4308 Qualified Domain Name (FQDN) Option"; 4309 reference "RFC4704: The Dynamic Host Configuration Protocol 4310 for IPv6 (DHCPv6) Client Fully Qualified Domain Name (FQDN) 4311 Option"; 4312 leaf fqdn { 4313 type string; 4314 mandatory true; 4315 description "fqdn"; 4316 } 4317 leaf server-initiate-update { 4318 type boolean; 4319 mandatory true; 4320 description "whether server initiate"; 4321 } 4322 leaf client-initiate-update { 4323 type boolean; 4324 mandatory true; 4325 description "whether client initiate"; 4326 } 4327 } 4328 container client-arch-type-option { 4329 if-feature client-arch-type-op; 4330 presence "Enable this option"; 4331 description "OPTION_CLIENT_ARCH_TYPE (61) Client System 4332 Architecture Type Option"; 4333 reference "RFC5970: DHCPv6 Options for Network Boot"; 4334 list architecture-types { 4335 key type-id; 4336 description "architecture types"; 4337 leaf type-id { 4338 type uint16; 4339 mandatory true; 4340 description "type id"; 4341 } 4342 leaf most-preferred { 4343 type boolean; 4344 mandatory true; 4345 description "most preferred flag"; 4346 } 4347 } 4348 } 4349 container client-network-interface-identifier-option { 4350 if-feature client-network-interface-identifier-op; 4351 presence "Enable this option"; 4352 description "OPTION_NII (62) Client Network Interface 4353 Identifier Option"; 4354 reference "RFC5970: DHCPv6 Options for Network Boot"; 4355 leaf type { 4356 type uint8; 4357 mandatory true; 4358 description "type"; 4359 } 4360 leaf major { 4361 type uint8; 4362 mandatory true; 4363 description "major"; 4364 } 4365 leaf minor { 4366 type uint8; 4367 mandatory true; 4368 description "minor"; 4369 } 4370 } 4371 container kbr-principal-name-option { 4372 if-feature kbr-principal-name-op; 4373 presence "Enable this option"; 4374 description "OPTION_KRB_PRINCIPAL_NAME (75) Kerberos 4375 Principal Name Option"; 4376 reference "RFC6784: Kerberos Options for DHCPv6"; 4377 list principle-name { 4378 key principle-name-id; 4379 description "principle name"; 4380 leaf principle-name-id { 4381 type uint8; 4382 mandatory true; 4383 description "principle name id"; 4384 } 4385 leaf name-type { 4386 type int32; 4387 mandatory true; 4388 description "This field specifies the type of name that follows."; 4389 } 4390 leaf name-string { 4391 type string; 4392 mandatory true; 4393 description "This field encodes a sequence of components that form 4394 a name, each component encoded as a KerberoString"; 4395 } 4396 } 4397 } 4398 container kbr-realm-name-option { 4399 if-feature kbr-realm-name-op; 4400 presence "Enable this option"; 4401 description "OPTION_KRB_REALM_NAME (76) Kerberos Realm Name Option"; 4402 reference "RFC6784: Kerberos Options for DHCPv6"; 4403 leaf realm-name { 4404 type string; 4405 mandatory true; 4406 description "realm name"; 4407 } 4408 } 4409 container client-link-layer-addr-option { 4410 if-feature client-link-layer-addr-op; 4411 presence "Enable this option"; 4412 description "OPTION_CLIENT_LINKLAYER_ADDR (79) DHCPv6 Client 4413 Link-Layer Address Option"; 4414 reference "RFC6939: Client Link-Layer Address Option in 4415 DHCPv6"; 4416 leaf link-layer-type { 4417 type uint16; 4418 mandatory true; 4419 description "Client link-layer address type. The link-layer 4420 type MUST be a valid hardware type assigned by the IANA, 4421 as described in [RFC0826]"; 4422 } 4423 leaf link-layer-addr { 4424 type string; 4425 mandatory true; 4426 description "Client link-layer address"; 4427 } 4428 } 4429 } 4431 grouping custom-option-definitions { 4432 description "operator customized options"; 4433 container operator-option-ipv6-address { 4434 if-feature operator-op-ipv6-address; 4435 presence "Enable this option"; 4436 description "operator ipv6 address option"; 4437 reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; 4438 list operator-ipv6-addr { 4439 key operator-ipv6-addr-id; 4440 description "operator ipv6 address info"; 4441 leaf operator-ipv6-addr-id { 4442 type uint8; 4443 mandatory true; 4444 description "operator ipv6 address id"; 4445 } 4446 leaf operator-ipv6-addr { 4447 type inet:ipv6-address; 4448 mandatory true; 4449 description "operator ipv6 address id"; 4450 } 4451 } 4452 } 4453 container operator-option-single-flag { 4454 if-feature operator-op-single-flag; 4455 presence "Enable this option"; 4456 description "operator single flag"; 4457 reference "RFC7227: Guidelines for Creating New DHCPv6 4458 Options"; 4460 list flag { 4461 key flag-id; 4462 description "operator single flag info"; 4463 leaf flag-id { 4464 type uint8; 4465 mandatory true; 4466 description "operator single flag id"; 4467 } 4468 leaf flag-value{ 4469 type boolean; 4470 mandatory true; 4471 description "operator single flag value"; 4472 } 4473 } 4474 } 4475 container operator-option-ipv6-prefix { 4476 if-feature operator-op-ipv6-prefix; 4477 presence "Enable this option"; 4478 description "operator ipv6 prefix option"; 4479 reference "RFC7227: Guidelines for Creating New DHCPv6 4480 Options"; 4481 list operator-ipv6-prefix{ 4482 key operator-ipv6-prefix-id; 4483 description "operator ipv6 prefix info"; 4484 leaf operator-ipv6-prefix-id { 4485 type uint8; 4486 mandatory true; 4487 description "operator ipv6 prefix id"; 4488 } 4489 leaf operator-ipv6-prefix6-len{ 4490 type uint8; 4491 mandatory true; 4492 description "operator ipv6 prefix length"; 4493 } 4494 leaf operator-ipv6-prefix { 4495 type inet:ipv6-prefix; 4496 mandatory true; 4497 description "operator ipv6 prefix"; 4498 } 4499 } 4500 } 4501 container operator-option-int32 { 4502 if-feature operator-op-int32; 4503 presence "Enable this option"; 4504 description "operator integer 32 option"; 4505 reference "RFC7227: Guidelines for Creating New DHCPv6 4506 Options"; 4507 list int32val{ 4508 key int32val-id; 4509 description "operator integer 32 info"; 4510 leaf int32val-id { 4511 type uint8; 4512 mandatory true; 4513 description "operator integer 32 id"; 4514 } 4515 leaf int32val{ 4516 type uint32; 4517 mandatory true; 4518 description "operator integer 32 value"; 4519 } 4520 } 4521 } 4522 container operator-option-int16 { 4523 if-feature operator-op-int16; 4524 presence "Enable this option"; 4525 description "operator integer 16 option"; 4526 reference "RFC7227: Guidelines for Creating New DHCPv6 4527 Options"; 4528 list int16val{ 4529 key int16val-id; 4530 description "operator integer 16 info"; 4531 leaf int16val-id { 4532 type uint8; 4533 mandatory true; 4534 description "operator integer 16 id"; 4535 } 4536 leaf int16val{ 4537 type uint16; 4538 mandatory true; 4539 description "operator integer 16 value"; 4540 } 4541 } 4542 } 4543 container operator-option-int8 { 4544 if-feature operator-op-int8; 4545 presence "Enable this option"; 4546 description "operator integer 8 option"; 4547 reference "RFC7227: Guidelines for Creating New DHCPv6 4548 Options"; 4549 list int8val{ 4550 key int8val-id; 4551 description "operator integer 8 info"; 4552 leaf int8val-id { 4553 type uint8; 4554 mandatory true; 4555 description "operator integer 8 id"; 4557 } 4558 leaf int8val{ 4559 type uint8; 4560 mandatory true; 4561 description "operator integer 8 value"; 4562 } 4563 } 4564 } 4565 container operator-option-uri { 4566 if-feature operator-op-uri; 4567 presence "Enable this option"; 4568 description "operator uri option"; 4569 reference "RFC7227: Guidelines for Creating New DHCPv6 4570 Options"; 4571 list uri{ 4572 key uri-id; 4573 description "operator uri info"; 4574 leaf uri-id { 4575 type uint8; 4576 mandatory true; 4577 description "operator uri id"; 4578 } 4579 leaf uri{ 4580 type string; 4581 mandatory true; 4582 description "operator uri value"; 4583 } 4584 } 4585 } 4586 container operator-option-textstring { 4587 if-feature operator-op-textstring; 4588 presence "Enable this option"; 4589 description "operator itext string option"; 4590 reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; 4591 list textstring{ 4592 key textstring-id; 4593 description "operator text string info"; 4594 leaf textstring-id { 4595 type uint8; 4596 mandatory true; 4597 description "operator text string id"; 4598 } 4599 leaf textstring{ 4600 type string; 4601 mandatory true; 4602 description "operator text string value"; 4603 } 4604 } 4606 } 4607 container operator-option-var-data { 4608 if-feature operator-op-var-data; 4609 presence "Enable this option"; 4610 description "operator variable length data option"; 4611 reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; 4612 list int32val{ 4613 key var-data-id; 4614 description "operator ivariable length data info"; 4615 leaf var-data-id { 4616 type uint8; 4617 mandatory true; 4618 description "operator variable length id"; 4619 } 4620 leaf var-data{ 4621 type binary; 4622 mandatory true; 4623 description "operator variable length value"; 4624 } 4625 } 4626 } 4627 container operator-option-dns-wire { 4628 if-feature operator-op-dns-wire; 4629 presence "Enable this option"; 4630 description "operator dns wire format domain name list option"; 4631 reference "RFC7227: Guidelines for Creating New DHCPv6 4632 Options"; 4633 list operator-option-dns-wire{ 4634 key operator-option-dns-wire-id; 4635 description "operator dns wire format info"; 4636 leaf operator-option-dns-wire-id { 4637 type uint8; 4638 mandatory true; 4639 description "operator dns wire format id"; 4640 } 4641 leaf operator-option-dns-wire{ 4642 type binary; 4643 mandatory true; 4644 description "operator dns wire format value"; 4645 } 4646 } 4647 } 4648 } 4649 } 4651 4652 4. Security Considerations (TBD) 4654 TBD 4656 5. IANA Considerations (TBD) 4658 This document registers the following YANG modules in the "YANG 4659 Module Names" registry [RFC6020]. 4661 name: ietf-dhcpv6 4662 namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6 4663 prefix: dhcpv6 4664 reference: TBD 4666 6. Acknowledgements 4668 The authors would like to thank Qi Sun, Lishan Li, Sladjana Zoric, 4669 Tomek Mrugalski, Marcin Siodelski, Bernie Volz and Bing Liu for their 4670 valuable comments and contributions to this work. 4672 7. Contributors 4674 The following individuals contributed to this effort: 4675 Hao Wang 4676 Tsinghua University 4677 Beijing 100084 4678 P.R.China 4679 Phone: +86-10-6278-5822 4680 Email: wangh13@mails.tsinghua.edu.cn 4682 Ted Lemon 4683 Nomium, Inc 4684 950 Charter St. 4685 Redwood City, CA 94043 4686 USA 4687 Email: Ted.Lemon@nomium.com 4689 8. References 4691 8.1. Normative References 4693 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 4694 Requirement Levels", BCP 14, RFC 2119, 4695 DOI 10.17487/RFC2119, March 1997, 4696 . 4698 [RFC3315] Droms, R., Ed., Bound, J., Volz, B., Lemon, T., Perkins, 4699 C., and M. Carney, "Dynamic Host Configuration Protocol 4700 for IPv6 (DHCPv6)", RFC 3315, DOI 10.17487/RFC3315, July 4701 2003, . 4703 [RFC3633] Troan, O. and R. Droms, "IPv6 Prefix Options for Dynamic 4704 Host Configuration Protocol (DHCP) version 6", RFC 3633, 4705 DOI 10.17487/RFC3633, December 2003, 4706 . 4708 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 4709 the Network Configuration Protocol (NETCONF)", RFC 6020, 4710 DOI 10.17487/RFC6020, October 2010, 4711 . 4713 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 4714 Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, 4715 January 2011, . 4717 [RFC6355] Narten, T. and J. Johnson, "Definition of the UUID-Based 4718 DHCPv6 Unique Identifier (DUID-UUID)", RFC 6355, 4719 DOI 10.17487/RFC6355, August 2011, 4720 . 4722 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 4723 RFC 6991, DOI 10.17487/RFC6991, July 2013, 4724 . 4726 8.2. Informative References 4728 [I-D.ietf-netmod-yang-tree-diagrams] 4729 Bjorklund, M. and L. Berger, "YANG Tree Diagrams", draft- 4730 ietf-netmod-yang-tree-diagrams-04 (work in progress), 4731 December 2017. 4733 [RFC3319] Schulzrinne, H. and B. Volz, "Dynamic Host Configuration 4734 Protocol (DHCPv6) Options for Session Initiation Protocol 4735 (SIP) Servers", RFC 3319, DOI 10.17487/RFC3319, July 2003, 4736 . 4738 [RFC3646] Droms, R., Ed., "DNS Configuration options for Dynamic 4739 Host Configuration Protocol for IPv6 (DHCPv6)", RFC 3646, 4740 DOI 10.17487/RFC3646, December 2003, 4741 . 4743 [RFC3898] Kalusivalingam, V., "Network Information Service (NIS) 4744 Configuration Options for Dynamic Host Configuration 4745 Protocol for IPv6 (DHCPv6)", RFC 3898, 4746 DOI 10.17487/RFC3898, October 2004, 4747 . 4749 [RFC4075] Kalusivalingam, V., "Simple Network Time Protocol (SNTP) 4750 Configuration Option for DHCPv6", RFC 4075, 4751 DOI 10.17487/RFC4075, May 2005, 4752 . 4754 [RFC4242] Venaas, S., Chown, T., and B. Volz, "Information Refresh 4755 Time Option for Dynamic Host Configuration Protocol for 4756 IPv6 (DHCPv6)", RFC 4242, DOI 10.17487/RFC4242, November 4757 2005, . 4759 [RFC4704] Volz, B., "The Dynamic Host Configuration Protocol for 4760 IPv6 (DHCPv6) Client Fully Qualified Domain Name (FQDN) 4761 Option", RFC 4704, DOI 10.17487/RFC4704, October 2006, 4762 . 4764 [RFC4833] Lear, E. and P. Eggert, "Timezone Options for DHCP", 4765 RFC 4833, DOI 10.17487/RFC4833, April 2007, 4766 . 4768 [RFC5908] Gayraud, R. and B. Lourdelet, "Network Time Protocol (NTP) 4769 Server Option for DHCPv6", RFC 5908, DOI 10.17487/RFC5908, 4770 June 2010, . 4772 [RFC5970] Huth, T., Freimann, J., Zimmer, V., and D. Thaler, "DHCPv6 4773 Options for Network Boot", RFC 5970, DOI 10.17487/RFC5970, 4774 September 2010, . 4776 [RFC6334] Hankins, D. and T. Mrugalski, "Dynamic Host Configuration 4777 Protocol for IPv6 (DHCPv6) Option for Dual-Stack Lite", 4778 RFC 6334, DOI 10.17487/RFC6334, August 2011, 4779 . 4781 [RFC6422] Lemon, T. and Q. Wu, "Relay-Supplied DHCP Options", 4782 RFC 6422, DOI 10.17487/RFC6422, December 2011, 4783 . 4785 [RFC6440] Zorn, G., Wu, Q., and Y. Wang, "The EAP Re-authentication 4786 Protocol (ERP) Local Domain Name DHCPv6 Option", RFC 6440, 4787 DOI 10.17487/RFC6440, December 2011, 4788 . 4790 [RFC6784] Sakane, S. and M. Ishiyama, "Kerberos Options for DHCPv6", 4791 RFC 6784, DOI 10.17487/RFC6784, November 2012, 4792 . 4794 [RFC6939] Halwasia, G., Bhandari, S., and W. Dec, "Client Link-Layer 4795 Address Option in DHCPv6", RFC 6939, DOI 10.17487/RFC6939, 4796 May 2013, . 4798 [RFC7078] Matsumoto, A., Fujisaki, T., and T. Chown, "Distributing 4799 Address Selection Policy Using DHCPv6", RFC 7078, 4800 DOI 10.17487/RFC7078, January 2014, 4801 . 4803 [RFC7083] Droms, R., "Modification to Default Values of SOL_MAX_RT 4804 and INF_MAX_RT", RFC 7083, DOI 10.17487/RFC7083, November 4805 2013, . 4807 [RFC7227] Hankins, D., Mrugalski, T., Siodelski, M., Jiang, S., and 4808 S. Krishnan, "Guidelines for Creating New DHCPv6 Options", 4809 BCP 187, RFC 7227, DOI 10.17487/RFC7227, May 2014, 4810 . 4812 [RFC7291] Boucadair, M., Penno, R., and D. Wing, "DHCP Options for 4813 the Port Control Protocol (PCP)", RFC 7291, 4814 DOI 10.17487/RFC7291, July 2014, 4815 . 4817 [RFC7598] Mrugalski, T., Troan, O., Farrer, I., Perreault, S., Dec, 4818 W., Bao, C., Yeh, L., and X. Deng, "DHCPv6 Options for 4819 Configuration of Softwire Address and Port-Mapped 4820 Clients", RFC 7598, DOI 10.17487/RFC7598, July 2015, 4821 . 4823 Authors' Addresses 4825 Yong Cui 4826 Tsinghua University 4827 Beijing 100084 4828 P.R.China 4830 Phone: +86-10-6260-3059 4831 Email: yong@csnet1.cs.tsinghua.edu.cn 4832 Linhui Sun 4833 Tsinghua University 4834 Beijing 100084 4835 P.R.China 4837 Phone: +86-10-6278-5822 4838 Email: lh.sunlinh@gmail.com 4840 Ian Farrer 4841 Deutsche Telekom AG 4842 CTO-ATI, Landgrabenweg 151 4843 Bonn, NRW 53227 4844 Germany 4846 Email: ian.farrer@telekom.de 4848 Sladjana Zechlin 4849 Deutsche Telekom AG 4850 CTO-IPT, Landgrabenweg 151 4851 Bonn, NRW 53227 4852 Germany 4854 Email: sladjana.zechlin@telekom.de 4856 Zihao He 4857 Tsinghua University 4858 Beijing 100084 4859 P.R.China 4861 Phone: +86-10-6278-5822 4862 Email: hezihao9512@gmail.com