idnits 2.17.1 draft-ietf-dhc-dhcpv6-yang-11.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 : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 239 has weird spacing: '...on-code uin...' == Line 267 has weird spacing: '...ription str...' == Line 316 has weird spacing: '...d-count uin...' == Line 370 has weird spacing: '...d-count uin...' == Line 405 has weird spacing: '...s-count uin...' == (10 more instances...) -- The document date (17 June 2020) is 1401 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) No issues found here. Summary: 0 errors (**), 0 flaws (~~), 7 warnings (==), 1 comment (--). 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: 19 December 2020 I.F. Farrer 6 S.Z. Zechlin 7 Deutsche Telekom AG 8 Z. He 9 Tsinghua University 10 M.N. Nowikowski 11 Internet Systems Consortium 12 17 June 2020 14 YANG Data Model for DHCPv6 Configuration 15 draft-ietf-dhc-dhcpv6-yang-11 17 Abstract 19 This document describes several YANG data modules for the 20 configuration and management of DHCPv6 servers, relays, and clients. 22 Requirements Language 24 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 25 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 26 "OPTIONAL" in this document are to be interpreted as described in BCP 27 14 [RFC2119] [RFC8174] when, and only when, they appear in all 28 capitals, as shown here. 30 Status of This Memo 32 This Internet-Draft is submitted in full conformance with the 33 provisions of BCP 78 and BCP 79. 35 Internet-Drafts are working documents of the Internet Engineering 36 Task Force (IETF). Note that other groups may also distribute 37 working documents as Internet-Drafts. The list of current Internet- 38 Drafts is at https://datatracker.ietf.org/drafts/current/. 40 Internet-Drafts are draft documents valid for a maximum of six months 41 and may be updated, replaced, or obsoleted by other documents at any 42 time. It is inappropriate to use Internet-Drafts as reference 43 material or to cite them other than as "work in progress." 45 This Internet-Draft will expire on 19 December 2020. 47 Copyright Notice 49 Copyright (c) 2020 IETF Trust and the persons identified as the 50 document authors. All rights reserved. 52 This document is subject to BCP 78 and the IETF Trust's Legal 53 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 54 license-info) in effect on the date of publication of this document. 55 Please review these documents carefully, as they describe your rights 56 and restrictions with respect to this document. Code Components 57 extracted from this document must include Simplified BSD License text 58 as described in Section 4.e of the Trust Legal Provisions and are 59 provided without warranty as described in the Simplified BSD License. 61 Table of Contents 63 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 64 1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3 65 1.2. Extensibility of the DHCPv6 Server YANG Module . . . . . 3 66 1.2.1. DHCPv6 Option Definitions . . . . . . . . . . . . . . 4 67 1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 68 2. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 4 69 2.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 5 70 2.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 11 71 2.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 13 72 3. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 17 73 3.1. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 17 74 3.2. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 29 75 3.3. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 36 76 3.4. DHCPv6 RFC8415 Options YANG Module . . . . . . . . . . . 46 77 3.5. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 55 78 4. Security Considerations . . . . . . . . . . . . . . . . . . . 59 79 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 60 80 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 61 81 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 61 82 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 61 83 8.1. Normative References . . . . . . . . . . . . . . . . . . 61 84 8.2. Informative References . . . . . . . . . . . . . . . . . 63 85 Appendix A. Example of Augmenting Additional DHCPv6 Option 86 Definitions . . . . . . . . . . . . . . . . . . . . . . . 63 87 Appendix B. Example Vendor Specific Server Configuration 88 Module . . . . . . . . . . . . . . . . . . . . . . . . . 66 89 Appendix C. Example definition of class selector 90 configuration . . . . . . . . . . . . . . . . . . . . . . 71 91 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 77 93 1. Introduction 95 DHCPv6 [RFC8415] is widely used for supplying configuration and other 96 relevant parameters to clients in IPv6 networks. This document 97 defines DHCPv6 YANG modules for the configuration and management of 98 DHCPv6 servers, relays and clients. Separate 'element' modules for 99 each of these. 101 Additionally, a 'common' module contains typedefs and groupings used 102 by the element modules. A further module contains an initial set of 103 DHCPv6 option definitions. 105 It is worth noting that as DHCPv6 is itself a client configuration 106 protocol, it is not the intention of this document to describe a 107 replacement for the allocation of DHCPv6 assigned addressing and 108 parameters by using NETCONF/YANG. The DHCPv6 client module is 109 intended for the configuration and monitoring of the DHCPv6 client 110 function and does not play a part in the normal DHCPv6 message flow. 112 1.1. Scope 114 [RFC8415] describes the current version of the DHCPv6 base protocol 115 specification. A large number of additional specifications have also 116 been published, extending DHCPv6 element functionality and adding new 117 options. The YANG modules contained in this document do not attempt 118 to capture all of these extensions and additions, rather to model the 119 DHCPv6 functions and options covered in [RFC8415]. A focus has also 120 been given on the extensibility of the modules so that it is easy to 121 augment in additional functionality as required by a particular 122 implementation or deployment scenario. 124 1.2. Extensibility of the DHCPv6 Server YANG Module 126 The modules in this document only attempt to model DHCPv6 specific 127 behavior and do not cover the configuration and management of 128 functionality relevant for specific server implementations. The 129 level of variance between implementations is too great to attempt to 130 standardize in a way that is useful without being restrictive. 132 However, it is recognized that implementation specific configuration 133 and management is also an essential part of DHCP deployment and 134 operations. To resolve this, Appendix B contains an example YANG 135 module for the configuration of implementation specific functions, 136 illustrating how this functionality can be augmented into the main 137 ietf-dhcpv6-server.yang module. 139 In DHCPv6 the concept of 'class selection' for messages received by 140 the server is common. This is the identification and classification 141 of messages based on a number of parameters so that the correct 142 provisioning information can be supplied. For example, allocating a 143 prefix from the correct pool, or supplying a set of options relevant 144 for a specific vendor's client implementation. During the 145 development of this document, research has been carried out into a 146 number of vendor's class selection implementations and the findings 147 were that while this function is common to all, the method for 148 implementing this differs greatly. Therefore, configuration of the 149 class selection function has been omitted from the DHCPv6 server 150 module to allow implementors to define their own suitable YANG 151 module. Appendix C provides an example of this, to demonstrate how 152 this is can be integrated with the main "ietf-dhcpv6-server.yang" 153 module. 155 1.2.1. DHCPv6 Option Definitions 157 A large number of DHCPv6 options have been created in addition to 158 those defined in [RFC8415]. As implementations differ widely in 159 which DHCPv6 options that they support, the following approach has 160 been taken to defining options: Only the relevant set of DHCPv6 161 options defined in [RFC8415] are included in this document. Further 162 options definitions can be added by additional YANG modules via 163 augmentation into the relevant element modules from this document. 164 Appendix A contains an example module showing how the DHCPv6 option 165 definitions can be extended in this manner and provides guidance on 166 writing YANG modules for DHCPv6 options. 168 1.3. Terminology 170 The reader should be familiar with the YANG data modelling language 171 defined in [RFC7950]. 173 The YANG modules in this document adopt the Network Management 174 Datastore Architecture (NMDA) [RFC8342]. The meanings of the symbols 175 used in tree diagrams are defined in [RFC8340]. 177 The reader should be familiar with the terms defined in DHCPv6 178 [RFC8415] and other relevant documents. 180 2. DHCPv6 Tree Diagrams 181 2.1. DHCPv6 Server Tree Diagram 183 The tree diagram in Figure 1 provides an overview of the DHCPv6 184 server module. The tree also includes the augmentations of the 185 relevant option definitions from Section 3.4 and the common functions 186 module Section 3.5. 188 module: ietf-dhcpv6-server 189 +--rw dhcpv6-node-type? identityref 190 +--rw dhcpv6-server 191 +--rw server-duid 192 | +--rw type-code? uint16 193 | +--rw (duid-type)? 194 | | +--:(duid-llt) 195 | | | +--rw duid-llt-hardware-type? uint16 196 | | | +--rw duid-llt-time? yang:timeticks 197 | | | +--rw duid-llt-link-layer-address? 198 | | | yang:mac-address 199 | | +--:(duid-en) 200 | | | +--rw duid-en-enterprise-number? uint32 201 | | | +--rw duid-en-identifier? string 202 | | +--:(duid-ll) 203 | | | +--rw duid-ll-hardware-type? uint16 204 | | | +--rw duid-ll-link-layer-address? 205 | | | yang:mac-address 206 | | +--:(duid-uuid) 207 | | | +--rw uuid? yang:uuid 208 | | +--:(duid-unstructured) 209 | | +--rw data? binary 210 | +--ro active-duid? binary 211 +--rw vendor-config 212 +--rw option-sets 213 | +--rw option-set* [option-set-id] 214 | +--rw option-set-id 215 | | uint32 216 | +--rw description? 217 | | string 218 | +--rw rfc8415:preference-option 219 | | +--rw rfc8415:pref-value? uint8 220 | +--rw rfc8415:auth-option 221 | | +--rw rfc8415:protocol? uint8 222 | | +--rw rfc8415:algorithm? uint8 223 | | +--rw rfc8415:rdm? uint8 224 | | +--rw rfc8415:replay-detection? uint64 225 | | +--rw rfc8415:auth-information? string 226 | +--rw rfc8415:server-unicast-option 227 | | +--rw rfc8415:server-address? inet:ipv6-address 228 | +--rw rfc8415:status-code-option 229 | | +--rw rfc8415:status-code? uint16 230 | | +--rw rfc8415:status-message? string 231 | +--rw rfc8415:rapid-commit-option! 232 | +--rw rfc8415:vendor-specific-information-option 233 | | +--rw rfc8415:vendor-specific-information-option- 234 | | instances* [enterprise-number] 235 | | [enterprise-number] 236 | | +--rw rfc8415:enterprise-number uint32 237 | | +--rw rfc8415:vendor-option-data* 238 | | [sub-option-code] 239 | | +--rw rfc8415:sub-option-code uint16 240 | | +--rw rfc8415:sub-option-data? string 241 | +--rw rfc8415:reconfigure-message-option 242 | | +--rw rfc8415:msg-type? uint8 243 | +--rw rfc8415:reconfigure-accept-option! 244 | +--rw rfc8415:info-refresh-time-option 245 | | +--rw rfc8415:info-refresh-time? 246 | | dhcpv6-common:timer-seconds32 247 | +--rw rfc8415:sol-max-rt-option 248 | | +--rw rfc8415:sol-max-rt-value? 249 | | dhcpv6-common:timer-seconds32 250 | +--rw rfc8415:inf-max-rt-option 251 | +--rw rfc8415:inf-max-rt-value? 252 | dhcpv6-common:timer-seconds32 253 +--rw class-selector 254 +--rw network-ranges 255 +--rw option-set-id* leafref 256 +--rw valid-lifetime? 257 | dhcpv6-common:timer-seconds32 258 +--rw renew-time? 259 | dhcpv6-common:timer-seconds32 260 +--rw rebind-time? 261 | dhcpv6-common:timer-seconds32 262 +--rw preferred-lifetime? 263 | dhcpv6-common:timer-seconds32 264 +--rw rapid-commit? boolean 265 +--rw network-range* [network-range-id] 266 | +--rw network-range-id uint32 267 | +--rw network-description string 268 | +--rw network-prefix inet:ipv6-prefix 269 | +--rw option-set-id* leafref 270 | +--rw valid-lifetime? 271 | | dhcpv6-common:timer-seconds32 272 | +--rw renew-time? 273 | | dhcpv6-common:timer-seconds32 274 | +--rw rebind-time? 275 | | dhcpv6-common:timer-seconds32 276 | +--rw preferred-lifetime? 277 | | dhcpv6-common:timer-seconds32 278 | +--rw rapid-commit? boolean 279 | +--rw address-pools 280 | | +--rw address-pool* [pool-id] 281 | | +--rw pool-id uint32 282 | | +--rw pool-prefix inet:ipv6-prefix 283 | | +--rw start-address 284 | | | inet:ipv6-address-no-zone 285 | | +--rw end-address 286 | | | inet:ipv6-address-no-zone 287 | | +--rw max-address-count 288 | | | dhcpv6-common:threshold 289 | | +--rw option-set-id* leafref 290 | | +--rw valid-lifetime? 291 | | | dhcpv6-common:timer-seconds32 292 | | +--rw renew-time? 293 | | | dhcpv6-common:timer-seconds32 294 | | +--rw rebind-time? 295 | | | dhcpv6-common:timer-seconds32 296 | | +--rw preferred-lifetime? 297 | | | dhcpv6-common:timer-seconds32 298 | | +--rw rapid-commit? boolean 299 | | +--rw host-reservations 300 | | | +--rw host-reservation* [reserved-addr] 301 | | | +--rw client-duid? binary 302 | | | +--rw reserved-addr 303 | | | | inet:ipv6-address 304 | | | +--rw option-set-id* leafref 305 | | | +--rw valid-lifetime? 306 | | | | dhcpv6-common:timer-seconds32 307 | | | +--rw renew-time? 308 | | | | dhcpv6-common:timer-seconds32 309 | | | +--rw rebind-time? 310 | | | | dhcpv6-common:timer-seconds32 311 | | | +--rw preferred-lifetime? 312 | | | | dhcpv6-common:timer-seconds32 313 | | | +--rw rapid-commit? boolean 314 | | +--ro active-leases 315 | | +--ro total-count uint64 316 | | +--ro allocated-count uint64 317 | | +--ro active-lease* [leased-address] 318 | | +--ro leased-address 319 | | | inet:ipv6-address 320 | | +--ro client-duid? binary 321 | | +--ro iaid uint32 322 | | +--ro allocation-time? 323 | | | yang:date-and-time 324 | | +--ro last-renew-rebind? 325 | | | yang:date-and-time 326 | | +--ro preferred-lifetime? 327 | | | dhcpv6-common:timer-seconds32 328 | | +--ro valid-lifetime? 329 | | | dhcpv6-common:timer-seconds32 330 | | +--ro lease-t1? 331 | | | dhcpv6-common:timer-seconds32 332 | | +--ro lease-t2? 333 | | dhcpv6-common:timer-seconds32 334 | +--rw prefix-pools {prefix-delegation}? 335 | +--rw prefix-pool* [pool-id] 336 | +--rw pool-id uint32 337 | +--rw pool-prefix 338 | | inet:ipv6-prefix 339 | +--rw client-prefix-length uint8 340 | +--rw max-pd-space-utilization 341 | | dhcpv6-common:threshold 342 | +--rw option-set-id* leafref 343 | +--rw valid-lifetime? 344 | | dhcpv6-common:timer-seconds32 345 | +--rw renew-time? 346 | | dhcpv6-common:timer-seconds32 347 | +--rw rebind-time? 348 | | dhcpv6-common:timer-seconds32 349 | +--rw preferred-lifetime? 350 | | dhcpv6-common:timer-seconds32 351 | +--rw rapid-commit? boolean 352 | +--rw host-reservations 353 | | +--rw prefix-reservation* [reserved-prefix] 354 | | | +--rw client-duid? binary 355 | | | +--rw reserved-prefix 356 | | | | inet:ipv6-prefix 357 | | | +--rw reserved-prefix-len? uint8 358 | | +--rw option-set-id* leafref 359 | | +--rw valid-lifetime? 360 | | | dhcpv6-common:timer-seconds32 361 | | +--rw renew-time? 362 | | | dhcpv6-common:timer-seconds32 363 | | +--rw rebind-time? 364 | | | dhcpv6-common:timer-seconds32 365 | | +--rw preferred-lifetime? 366 | | | dhcpv6-common:timer-seconds32 367 | | +--rw rapid-commit? boolean 368 | +--ro active-leases 369 | +--ro total-count uint64 370 | +--ro allocated-count uint64 371 | +--ro active-lease* [leased-prefix] 372 | +--ro leased-prefix 373 | | inet:ipv6-prefix 374 | +--ro client-duid? binary 375 | +--ro iaid uint32 376 | +--ro allocation-time? 377 | | yang:date-and-time 378 | +--ro last-renew-rebind? 379 | | yang:date-and-time 380 | +--ro preferred-lifetime? 381 | | dhcpv6-common:timer-seconds32 382 | +--ro valid-lifetime? 383 | | dhcpv6-common:timer-seconds32 384 | +--ro lease-t1? 385 | | dhcpv6-common:timer-seconds32 386 | +--ro lease-t2? 387 | dhcpv6-common:timer-seconds32 388 +--ro solicit-count? uint32 389 +--ro advertise-count? uint32 390 +--ro request-count? uint32 391 +--ro confirm-count? uint32 392 +--ro renew-count? uint32 393 +--ro rebind-count? uint32 394 +--ro reply-count? uint32 395 +--rw release-count? uint32 396 +--ro decline-count? uint32 397 +--ro reconfigure-count? uint32 398 +--ro information-request-count? uint32 400 notifications: 401 +---n address-pool-utilization-threshold-exceeded 402 | +--ro pool-id? leafref 403 | +--ro total-address-count uint64 404 | +--ro max-address-count uint64 405 | +--ro allocated-address-count uint64 406 +---n prefix-pool-utilization-threshold-exceeded 407 | {prefix-delegation}? 408 | +--ro pool-id leafref 409 | +--ro max-pd-space-utilization leafref 410 | +--ro pd-space-utilization? uint64 411 +---n invalid-client-detected 412 | +--ro duid? binary 413 | +--ro description? string 414 +---n decline-received 415 | +--ro duid? binary 416 | +--ro declined-resources* [] 417 | +--ro (resource-type)? 418 | +--:(declined-address) 419 | | +--ro address? inet:ipv6-address 420 | +--:(declined-prefix) 421 | +--ro prefix? inet:ipv6-prefix 422 +---n non-success-code-sent 423 +--ro status-code uint16 424 +--ro duid? binary 426 Figure 1: DHCPv6 Server Data Module Structure 428 Descriptions of important nodes: 430 * dhcpv6-node-type: The different functional DHCPv6 elements each 431 have their relevant identities. 433 * dhcpv6-server: This container holds the server's DHCPv6 specific 434 configuration. 436 * server-duid: Each server must have a DUID (DHCP Unique Identifier) 437 to identify itself to clients. A DUID consists of a two-octet 438 type field and an arbitrary length (of no more than 128-bytes) 439 content field. Currently there are four defined types of DUIDs in 440 [RFC8415] and [RFC6355]: DUID-LLT, DUID-EN, DUID-LL, and DUID- 441 UUID. DUID-Unknown is used for arbitrary DUID formats which do 442 not follow any of these defined types. 'active-duid' is a read- 443 only field that the server's current DUID can be retrieved from. 444 The DUID definitions are imported from the 'ietf- 445 dhcpv6-common.yang' module as they are also used by the 'ietf- 446 dhcpv6-client.yang' module. 448 * vendor-config: This container is provided as a location for 449 additional implementation specific YANG nodes for the 450 configuration of the device to be augmented. See Appendix B for 451 an example module. 453 * option-sets: The server can be configured with multiple option- 454 sets. These are groups of DHCPv6 options with common parameters 455 which will be supplied to clients on request. The 'option-set-id' 456 field is used to reference an option-set elsewhere in the server's 457 configuration. 459 * option-set: Holds configration parameters for DHCPv6 options. The 460 initial set of definitions are contained in the module 'ietf- 461 dhcpv6-options-rfc8415.yang' and are augmented into the server 462 module at this point. Other DHCPv6 options can be augmented here 463 as required. 465 * class-selector: This is provided as a location for additional 466 implementation specific YANG nodes for vendor specific class 467 selector nodes to be augmented. See Appendix C for an example of 468 this. 470 * network-ranges: This module uses a hierarchical model for the 471 allocation of addresses and prefixes. At the top level 'network- 472 ranges' holds global configuration parameters. Under this, a list 473 of 'network-ranges' can be defined. Inside 'network-rages', 474 'address-pools' (for IA_NA and IA_TA allocations), and 'prefix- 475 pools' (for IA_PD allocation) are defined. Finally within the 476 pools, specific host-reservations are held. 478 * prefix-pools: Defines pools to be used for prefix delegation to 479 clients. As prefix delegation is not supported by all DHCPv6 480 server implementations, it is enabled by a feature statement. 482 Information about notifications: 484 * address/prefix-pool-utilization-threshold-exceeded: Raised when 485 number of leased addresses or prefixes exceeds the configurated 486 usage threshold. 488 * invalid-client-detected: Raised when the server detects an invalid 489 client. A description of the error that has generated the 490 notification can be included. 492 * decline-received: Raised when a DHCPv6 Decline message is received 493 from a client. 495 * non-success-code-sent: Raised when a status message is raised for 496 an error. 498 2.2. DHCPv6 Relay Tree Diagram 500 The tree diagram in Figure 2 provides an overview of the DHCPv6 relay 501 module. The tree also includes the augmentations of the relevant 502 option definitions from Section 3.4 and the common functions module 503 Section 3.5. 505 module: ietf-dhcpv6-relay 506 +--rw dhcpv6-node-type? identityref 507 +--rw dhcpv6-relay 508 +--rw relay-if* [if-name] 509 | +--rw if-name 510 | | if:interface-ref 511 | +--rw destination-addresses* 512 | | inet:ipv6-address 513 | +--rw link-address? binary 514 | +--rw relay-options 515 | | +--rw rfc8415:auth-option 516 | | | +--rw rfc8415:protocol? uint8 517 | | | +--rw rfc8415:algorithm? uint8 518 | | | +--rw rfc8415:rdm? uint8 519 | | | +--rw rfc8415:replay-detection? uint64 520 | | | +--rw rfc8415:auth-information? string 521 | | +--rw rfc8415:status-code-option 522 | | | +--rw rfc8415:status-code? uint16 523 | | | +--rw rfc8415:status-message? string 524 | | +--rw rfc8415:interface-id-option 525 | | +--rw rfc8415:interface-id? string 526 | +--ro solicit-received-count? uint32 527 | +--ro advertise-sent-count? uint32 528 | +--ro request-received-count? uint32 529 | +--ro confirm-received-count? uint32 530 | +--ro renew-received-count? uint32 531 | +--ro rebind-received-count? uint32 532 | +--ro reply-sent-count? uint32 533 | +--ro release-received-count? uint32 534 | +--ro decline-received-count? uint32 535 | +--ro reconfigure-sent-count? uint32 536 | +--ro information-request-received-count? uint32 537 | +--ro unknown-message-received-count? uint32 538 | +--ro unknown-message-sent-count? uint32 539 | +--ro discarded-message-count? uint32 540 | +--rw prefix-delegation! {prefix-delegation}? 541 | +--ro pd-leases* [ia-pd-prefix] 542 | +--ro ia-pd-prefix inet:ipv6-prefix 543 | +--ro last-renew? yang:date-and-time 544 | +--ro client-peer-address? inet:ipv6-address 545 | +--ro client-duid? binary 546 | +--ro server-duid? binary 547 +--ro relay-forward-sent-count? uint32 548 +--ro relay-forward-received-count? uint32 549 +--ro relay-reply-received-count? uint32 550 +--ro relay-forward-unknown-sent-count? uint32 551 +--ro relay-forward-unknown-received-count? uint32 552 +--ro discarded-message-count? uint32 554 notifications: 555 +---n relay-event 556 +--ro topology-change 557 +--ro relay-if-name? 558 | -> /dhcpv6-relay/relay-if/if-name 559 +--ro last-ipv6-addr? inet:ipv6-address 561 Figure 2: DHCPv6 Relay Data Module Structure 563 Descriptions of important nodes: 565 * dhcpv6-node-type: The different functional DHCPv6 elements each 566 have their relevant identities. 568 * dhcpv6-relay: This container holds the relay's DHCPv6 specific 569 configuration. 571 * relay-if: As a relay may have multiple client-facing interfaces, 572 they are configured in a list. The if-name leaf is the key and is 573 an interface-ref to the applicable interface defined by the 'ietf- 574 interfaces' YANG module. 576 * destination-addresses: Defines a list of IPv6 addresses that 577 client messages will be relayed to. May include unicast or 578 multicast addresses. 580 * link-address: Configures the value that the relay will put into 581 the link-address field of Relay-Forward messages. 583 * prefix-delegation: As prefix delegation is not supported by all 584 DHCPv6 relay implementations, it is enabled by this feature 585 statement where required. 587 * pd-leases: Contains read-only nodes for holding information about 588 active delegated prefix leases. 590 * relay-options: As with the Server module, DHCPv6 options that can 591 be sent by the relay are augmented here. 593 Information about notifications: 595 * topology-changed: Raised when the topology of the relay agent is 596 changed, e.g. a client facing interface is reconfigured. 598 2.3. DHCPv6 Client Tree Diagram 600 The tree diagram in Figure 3 provides an overview of the DHCPv6 601 client module. The tree also includes the augmentations of the 602 relevant option definitions from Section 3.4 and the common functions 603 module Section 3.5. 605 module: ietf-dhcpv6-client 606 +--rw dhcpv6-node-type? identityref 607 +--rw dhcpv6-client 608 +--rw client-if* [if-name] 609 +--rw if-name 610 | if:interface-ref 611 +--rw type-code? uint16 612 +--rw (duid-type)? 613 | +--:(duid-llt) 614 | | +--rw duid-llt-hardware-type? uint16 615 | | +--rw duid-llt-time? yang:timeticks 616 | | +--rw duid-llt-link-layer-address? 617 | | yang:mac-address 618 | +--:(duid-en) 619 | | +--rw duid-en-enterprise-number? uint32 620 | | +--rw duid-en-identifier? string 621 | +--:(duid-ll) 622 | | +--rw duid-ll-hardware-type? uint16 623 | | +--rw duid-ll-link-layer-address? 624 | | yang:mac-address 625 | +--:(duid-uuid) 626 | | +--rw uuid? yang:uuid 627 | +--:(duid-unstructured) 628 | +--rw data? binary 629 +--ro active-duid? binary 630 +--rw client-configured-options 631 | +--rw rfc8415:option-request-option 632 | | +--rw rfc8415:oro-option* uint16 633 | +--rw rfc8415:status-code-option 634 | | +--rw rfc8415:status-code? uint16 635 | | +--rw rfc8415:status-message? string 636 | +--rw rfc8415:rapid-commit-option! 637 | +--rw rfc8415:user-class-option 638 | | +--rw rfc8415:user-class-data* 639 | | [user-class-datum-id] 640 | | +--rw rfc8415:user-class-datum-id uint8 641 | | +--rw rfc8415:user-class-datum? string 642 | +--rw rfc8415:vendor-class-option 643 | | +--rw rfc8415:vendor-class-option-instances* 644 | | [enterprise-number] 645 | | +--rw rfc8415:enterprise-number uint32 646 | | +--rw rfc8415:vendor-class* 647 | | [vendor-class-datum-id] 648 | | +--rw rfc8415:vendor-class-datum-id uint8 649 | | +--rw rfc8415:vendor-class-datum? string 650 | +--rw rfc8415:vendor-specific-information-option 651 | | +--rw rfc8415:vendor-specific-information-option- 652 | | instances* [enterprise-number] 653 | | [enterprise-number] 654 | | +--rw rfc8415:enterprise-number uint32 655 | | +--rw rfc8415:vendor-option-data* 656 | | [sub-option-code] 657 | | +--rw rfc8415:sub-option-code uint16 658 | | +--rw rfc8415:sub-option-data? string 659 | +--rw rfc8415:reconfigure-accept-option! 660 +--rw ia-na* [iaid] 661 | +--rw iaid uint32 662 | +--rw ia-na-options 663 | +--ro lease-state 664 | +--ro ia-na-address? inet:ipv6-address 665 | +--ro preferred-lifetime? 666 | | dhcpv6-common:timer-seconds32 667 | +--ro valid-lifetime? 668 | | dhcpv6-common:timer-seconds32 669 | +--ro lease-t1? 670 | | dhcpv6-common:timer-seconds32 671 | +--ro lease-t2? 672 | | dhcpv6-common:timer-seconds32 673 | +--ro allocation-time? yang:date-and-time 674 | +--ro last-renew-rebind? yang:date-and-time 675 | +--ro server-duid? binary 676 +--rw ia-ta* [iaid] 677 | +--rw iaid uint32 678 | +--rw ia-ta-options 679 | +--ro lease-state 680 | +--ro ia-ta-address? inet:ipv6-address 681 | +--ro preferred-lifetime? 682 | | dhcpv6-common:timer-seconds32 683 | +--ro valid-lifetime? 684 | | dhcpv6-common:timer-seconds32 685 | +--ro allocation-time? yang:date-and-time 686 | +--ro last-renew-rebind? yang:date-and-time 687 | +--ro server-duid? binary 688 +--rw ia-pd* [iaid] 689 | +--rw iaid uint32 690 | +--rw ia-pd-options 691 | +--ro lease-state 692 | +--ro ia-pd-prefix? inet:ipv6-prefix 693 | +--ro preferred-lifetime? 694 | | dhcpv6-common:timer-seconds32 695 | +--ro valid-lifetime? 696 | | dhcpv6-common:timer-seconds32 697 | +--ro lease-t1? 698 | | dhcpv6-common:timer-seconds32 699 | +--ro lease-t2? 700 | | dhcpv6-common:timer-seconds32 701 | +--ro allocation-time? yang:date-and-time 702 | +--ro last-renew-rebind? yang:date-and-time 703 | +--ro server-duid? binary 704 +--ro solicit-count? uint32 705 +--ro advertise-count? uint32 706 +--ro request-count? uint32 707 +--ro confirm-count? uint32 708 +--ro renew-count? uint32 709 +--ro rebind-count? uint32 710 +--ro reply-count? uint32 711 +--rw release-count? uint32 712 +--ro decline-count? uint32 713 +--ro reconfigure-count? uint32 714 +--ro information-request-count? uint32 716 notifications: 717 +---n invalid-ia-detected 718 | +--ro iaid uint32 719 | +--ro description? string 720 +---n retransmission-failed 721 | +--ro failure-type enumeration 722 +---n unsuccessful-status-code 723 | +--ro status-code uint16 724 | +--ro server-duid binary 725 +---n server-duid-changed 726 +--ro new-server-duid binary 727 +--ro previous-server-duid binary 728 +--ro lease-ia-na? 729 | -> /dhcpv6-client/client-if/ia-na/iaid 730 +--ro lease-ia-ta? 731 | -> /dhcpv6-client/client-if/ia-ta/iaid 732 +--ro lease-ia-pd? 733 -> /dhcpv6-client/client-if/ia-pd/iaid 735 Figure 3: DHCPv6 Client Data Module Structure 737 Descriptions of important nodes: 739 * dhcpv6-node-type: The different functional DHCPv6 elements each 740 have their relevant identities. 742 * dhcpv6-client: This container holds the client's DHCPv6 specific 743 configuration. 745 * client-if: As a client may have multiple interfaces requesting 746 configuration over DHCP, they are configured in a list. The if- 747 name leaf is the key and is an interface-ref to the applicable 748 interface defined by the 'ietf-interfaces' YANG module. 750 * client-duid: Each DHCP client must have a DUID (DHCP Unique 751 Identifier) to identify itself to clients. A DUID consists of a 752 two-octet type field and an arbitrary length (of no more than 753 128-bytes) content field. Currently there are four defined types 754 of DUIDs in [RFC8415]: DUID-LLT, DUID-EN, DUID-LL, and DUID-UUID. 755 DUID-Unknown is used for arbitrary DUID formats which do not 756 follow any of these defined types. 'active-duid' is a read-only 757 field that the client's current DUID can be retrieved from. The 758 DUID definitions are imported from the 'ietf-dhcpv6-common.yang' 759 module. DUID is configured under the 'client-if' to allow a 760 client to have different DUIDs for each interface if required. 762 * ia-na, ia-ta, ia-pd: Contains configuration nodes relevant for 763 requesting one or more of each of the lease types. Also contains 764 read only nodes related to active leases. 766 Information about notifications: 768 * invalid-ia-detected: Raised when the identity association of the 769 client can be proved to be invalid. Possible condition includes 770 duplicated address, illegal address, etc. 772 * retransmission-failed: Raised when the retransmission mechanism 773 defined in [RFC8415] is failed. 775 3. DHCPv6 YANG Modules 777 3.1. DHCPv6 Server YANG Module 779 This module imports typedefs from [RFC6991], [RFC8343]. 781 file ietf-dhcpv6-server.yang 783 module ietf-dhcpv6-server { 784 yang-version 1.1; 785 namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"; 786 prefix "dhcpv6-server"; 788 import ietf-inet-types { 789 prefix inet; 790 } 792 import ietf-yang-types { 793 prefix yang; 794 } 796 import ietf-dhcpv6-common { 797 prefix dhcpv6-common; 798 } 800 organization "DHC WG"; 801 contact 802 "cuiyong@tsinghua.edu.cn 803 lh.sunlinh@gmail.com 804 ian.farrer@telekom.de 805 sladjana.zechlin@telekom.de 806 hezihao9512@gmail.com 807 godfryd@isc.org"; 809 description "This YANG module defines components for the 810 configuration and management of DHCPv6 servers. 812 Copyright (c) 2018 IETF Trust and the persons identified as 813 authors of the code. All rights reserved. 815 Redistribution and use in source and binary forms, with or 816 without modification, is permitted pursuant to, and subject 817 to the license terms contained in, the Simplified BSD License 818 set forth in Section 4.c of the IETF Trust's Legal Provisions 819 Relating to IETF Documents 820 (http://trustee.ietf.org/license-info). 822 This version of this YANG module is part of RFC 8513; see 823 the RFC itself for full legal notices."; 825 revision 2020-05-26 { 826 description "Version update for draft -11 publication and 827 to align revisions across the different modules."; 828 reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; 829 } 831 revision 2019-12-02 { 832 description "Major reworking of the module."; 833 reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; 834 } 836 revision 2018-09-04 { 837 description ""; 838 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 839 } 841 revision 2018-03-04 { 842 description "Resolved most issues on the DHC official 843 github"; 844 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 845 } 847 revision 2017-12-22 { 848 description "Resolve most issues on Ian's github."; 849 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 850 } 852 revision 2017-11-24 { 853 description "First version of the separated server specific 854 YANG model."; 855 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 856 } 858 /* 859 * Identities 860 */ 862 identity server { 863 base "dhcpv6-common:dhcpv6-node"; 864 description "DHCPv6 server identity."; 865 } 867 leaf dhcpv6-node-type { 868 description "Type for a DHCPv6 server."; 869 type identityref { 870 base "dhcpv6-server:server"; 871 } 872 } 874 /* 875 * Features 876 */ 878 feature prefix-delegation { 879 description "Denotes that the server implements DHCPv6 prefix 880 delegation."; 881 } 883 /* 884 * Groupings 885 */ 887 grouping resource-config { 888 description "Nodes that are reused at multiple levels in the 889 DHCPv6 server's addressing hierarchy."; 890 leaf-list option-set-id { 891 type leafref { 892 path "/dhcpv6-server/option-sets/option-set/option-set-id"; 893 } 894 description "The ID field of relevant set of DHCPv6 options 895 (option-set) to be provisioned to clients of this 896 network-range."; 897 } 898 leaf valid-lifetime { 899 type dhcpv6-common:timer-seconds32; 900 description "Valid lifetime for the Identity Association 901 (IA)."; 902 } 903 leaf renew-time { 904 type dhcpv6-common:timer-seconds32; 905 description "Renew (T1) time."; 906 } 907 leaf rebind-time { 908 type dhcpv6-common:timer-seconds32; 909 description "Rebind (T2) time."; 910 } 911 leaf preferred-lifetime { 912 type dhcpv6-common:timer-seconds32; 913 description "Preferred lifetime for the Identity Association 914 (IA)."; 915 } 916 leaf rapid-commit { 917 type boolean; 918 description "A value of 1 specifies that the pool supports 919 client-server exchanges involving two messages."; 920 } 921 } 923 grouping lease-information { 924 description "Binding information for each client that has 925 been allocated an IPv6 address or prefix."; 926 leaf client-duid { 927 description "Client DUID."; 928 type binary; 929 } 930 leaf iaid { 931 type uint32; 932 mandatory true; 933 description "Client's IAID"; 934 } 935 leaf allocation-time { 936 description "Time and date that the lease was made."; 937 type yang:date-and-time; 938 } 939 leaf last-renew-rebind { 940 description "Time of the last successful renew or 941 rebind."; 942 type yang:date-and-time; 943 } 944 leaf preferred-lifetime { 945 description "The preferred lifetime expressed in 946 seconds."; 947 type dhcpv6-common:timer-seconds32; 948 } 949 leaf valid-lifetime { 950 description "The valid lifetime for the leased prefix 951 expressed in seconds."; 952 type dhcpv6-common:timer-seconds32; 953 } 954 leaf lease-t1 { 955 description "The time interval after which the client 956 should contact the server from which the addresses 957 in the IA_NA were obtained to extend the lifetimes 958 of the addresses assigned to the IA_PD."; 959 type dhcpv6-common:timer-seconds32; 960 } 961 leaf lease-t2 { 962 description "The time interval after which the client 963 should contact any available server to extend 964 the lifetimes of the addresses assigned to the 965 IA_PD."; 966 type dhcpv6-common:timer-seconds32; 967 } 968 } 970 grouping message-stats { 971 description "Counters for DHCPv6 messages."; 972 leaf solicit-count { 973 config "false"; 974 type uint32; 975 description "Number of Solicit (1) messages received."; 976 } 977 leaf advertise-count { 978 config "false"; 979 type uint32; 980 description "Number of Advertise (2) messages sent."; 981 } 982 leaf request-count { 983 config "false"; 984 type uint32; 985 description "Number of Request (3) messages received."; 986 } 987 leaf confirm-count { 988 config "false"; 989 type uint32; 990 description "Number of Confirm (4) messages received."; 991 } 992 leaf renew-count { 993 config "false"; 994 type uint32; 995 description "Number of Renew (5) messages received."; 996 } 997 leaf rebind-count { 998 config "false"; 999 type uint32; 1000 description "Number of Rebind (6) messages received."; 1001 } 1002 leaf reply-count { 1003 config "false"; 1004 type uint32; 1005 description "Number of Reply (7) messages sent."; 1006 } 1007 leaf release-count { 1008 type uint32; 1009 description "Number of Release (8) messages received."; 1010 } 1011 leaf decline-count { 1012 config "false"; 1013 type uint32; 1014 description "Number of Decline (9) messages received."; 1015 } 1016 leaf reconfigure-count { 1017 config "false"; 1018 type uint32; 1019 description "Number of Reconfigure (10) messages sent."; 1020 } 1021 leaf information-request-count { 1022 config "false"; 1023 type uint32; 1024 description "Number of Information-request (11) messages 1025 received."; 1026 } 1027 } 1029 /* 1030 * Data Nodes 1031 */ 1033 container dhcpv6-server { 1034 container server-duid { 1035 description "DUID of the server."; 1036 uses dhcpv6-common:duid; 1037 } 1038 container vendor-config { 1039 description "This container provides a location for 1040 augmenting vendor or implementation specific 1041 configuration nodes."; 1042 } 1043 container option-sets { 1044 description "A server may allow different option sets 1045 to be configured for clients matching specific parameters 1046 such as topological location or client type. The 1047 'option-set' list is a set of options and their 1048 contents that will be returned to clients."; 1049 list option-set { 1050 key option-set-id; 1051 description "YANG definitions for DHCPv6 options are 1052 contained in separate YANG modules and augmented to this 1053 container as required."; 1054 leaf option-set-id { 1055 type uint32; 1056 description "Option set identifier."; 1057 } 1058 leaf description { 1059 type string; 1060 description "An optional field for storing additional 1061 information relevant to the option set."; 1062 } 1063 } 1064 } 1066 container class-selector { 1067 description "DHCPv6 servers use a 'class-selector' function 1068 in order to identify and classify incoming client messages 1069 so that they can be given the correct configuration. 1070 The mechanisms used for implementing this function vary 1071 greatly between different implementations such that they 1072 are not possible to include in this module. This container 1073 provides a location for server implementors to augment 1074 their own class-selector YANG."; 1075 } 1077 container network-ranges { 1078 description "This model is based on an address and parameter 1079 allocation hierarchy. The top level is 'global' - which 1080 is defined as the container for all network-ranges. Under 1081 this are the individual network-ranges."; 1082 uses resource-config; 1083 list network-range { 1084 key network-range-id; 1085 description "Network-ranges are identified by the 1086 'network-range-id' key."; 1087 leaf network-range-id { 1088 type uint32; 1089 mandatory true; 1090 description "Equivalent to subnet ID."; 1091 } 1092 leaf network-description { 1093 type string; 1094 mandatory true; 1095 description "Description for the network range."; 1096 } 1097 leaf network-prefix { 1098 type inet:ipv6-prefix; 1099 mandatory true; 1100 description "Network prefix."; 1101 } 1102 uses resource-config; 1103 container address-pools { 1104 description "Configuration for the DHCPv6 server's 1105 address pools."; 1106 list address-pool { 1107 key pool-id; 1108 description "List of address pools for allocation to 1109 clients, distinguished by 'pool-id'."; 1110 leaf pool-id { 1111 type uint32; 1112 mandatory true; 1113 description "Unique identifier for the pool."; 1114 } 1115 leaf pool-prefix { 1116 type inet:ipv6-prefix; 1117 mandatory true; 1118 description "IPv6 prefix for the pool."; 1119 } 1120 leaf start-address { 1121 type inet:ipv6-address-no-zone; 1122 mandatory true; 1123 description "Start IPv6 address for the pool."; 1124 } 1125 leaf end-address { 1126 type inet:ipv6-address-no-zone; 1127 mandatory true; 1128 description "End IPv6 address for the pool."; 1129 } 1130 leaf max-address-count { 1131 type dhcpv6-common:threshold; 1132 mandatory true; 1133 description "Maximum number of addresses that can 1134 be simultaneously allocated from this pool."; 1135 } 1136 uses resource-config; 1137 container host-reservations { 1138 description "Configuration for host reservations from 1139 the address pool."; 1140 list host-reservation { 1141 key reserved-addr; 1142 leaf client-duid { 1143 type binary; 1144 description "Client DUID for the reservation."; 1145 } 1146 leaf reserved-addr { 1147 type inet:ipv6-address; 1148 description "Reserved IPv6 address."; 1149 } 1150 uses resource-config; 1151 } 1152 } 1153 container active-leases { 1154 description "Holds state related to active client 1155 leases."; 1156 config false; 1157 leaf total-count { 1158 type uint64; 1159 mandatory true; 1160 description "The total number of addresses in the 1161 pool."; 1162 } 1163 leaf allocated-count { 1164 type uint64; 1165 mandatory true; 1166 description "The number of addresses or prefixes in 1167 the pool that are currently allocated."; 1168 } 1169 list active-lease { 1170 key leased-address; 1171 leaf leased-address { 1172 type inet:ipv6-address; 1173 } 1174 uses lease-information; 1175 } 1176 } 1177 } 1178 } 1179 container prefix-pools { 1180 description "Configuration for the DHCPv6 server's 1181 prefix pools."; 1182 if-feature prefix-delegation; 1183 list prefix-pool { 1184 key pool-id; 1185 description "List of prefix pools for allocation to 1186 clients, distinguished by 'pool-id'."; 1187 leaf pool-id { 1188 type uint32; 1189 mandatory true; 1190 description "Unique identifier for the pool."; 1191 } 1192 leaf pool-prefix { 1193 type inet:ipv6-prefix; 1194 mandatory true; 1195 description "IPv6 prefix for the pool."; 1196 } 1197 leaf client-prefix-length { 1198 type uint8; 1199 mandatory true; 1200 description "Length of the prefixes that will be 1201 delegated to clients."; 1202 } 1203 leaf max-pd-space-utilization { 1204 type dhcpv6-common:threshold; 1205 mandatory true; 1206 description "Maximum percentage utilization of the 1207 prefix pool in this pool."; 1208 } 1209 uses resource-config; 1210 container host-reservations { 1211 description "Configuration for host reservations 1212 from the prefix pool."; 1213 list prefix-reservation { 1214 description "reserved prefix reservation"; 1215 key reserved-prefix; 1216 leaf client-duid { 1217 type binary; 1218 description "Client DUID for the reservation."; 1219 } 1220 leaf reserved-prefix { 1221 type inet:ipv6-prefix; 1222 description "Reserved IPv6 prefix"; 1223 } 1224 leaf reserved-prefix-len { 1225 type uint8; 1226 description "Reserved IPv6 prefix length."; 1227 } 1228 } 1229 uses resource-config; 1230 } 1231 container active-leases { 1232 description "Holds state related to for active client 1233 prefix leases."; 1234 config false; 1235 leaf total-count { 1236 type uint64; 1237 mandatory true; 1238 description "The total number of prefixes in 1239 the pool."; 1240 } 1241 leaf allocated-count { 1242 type uint64; 1243 mandatory true; 1244 description "The number of prefixes in the pool 1245 that are currently allocated."; 1246 } 1247 list active-lease { 1248 key leased-prefix; 1249 leaf leased-prefix { 1250 type inet:ipv6-prefix; 1251 } 1252 uses lease-information; 1253 } 1254 } 1255 } 1256 } 1257 } 1258 uses message-stats; 1259 } 1260 } 1262 /* 1263 * Notifications 1264 */ 1266 notification address-pool-utilization-threshold-exceeded { 1267 description "Notification sent when the address pool 1268 utilization exceeds the configured threshold."; 1269 leaf pool-id { 1270 type leafref { 1271 path "/dhcpv6-server/network-ranges/network-range/ 1272 address-pools/address-pool/pool-id"; 1273 } 1274 } 1275 leaf total-address-count { 1276 type uint64; 1277 mandatory true; 1278 description "Count of the total addresses in the pool."; 1279 } 1280 leaf max-address-count { 1281 type uint64; 1282 mandatory true; 1283 description "Maximum count of addresses that can be allocated 1284 in the pool. This value may be less than count of total 1285 addresses."; 1286 } 1287 leaf allocated-address-count { 1288 type uint64; 1289 mandatory true; 1290 description "Count of allocated addresses in the pool."; 1291 } 1292 } 1294 notification prefix-pool-utilization-threshold-exceeded { 1295 description "Notification sent when the prefix pool 1296 utilization exceeds the configured threshold."; 1297 if-feature prefix-delegation; 1298 leaf pool-id { 1299 type leafref { 1300 path "/dhcpv6-server/network-ranges/network-range/ 1301 prefix-pools/prefix-pool/pool-id"; 1302 } 1303 mandatory true; 1304 } 1305 leaf max-pd-space-utilization { 1306 description "PD space utilization threshold."; 1307 type leafref { 1308 path "/dhcpv6-server/network-ranges/network-range/ 1309 prefix-pools/prefix-pool/max-pd-space-utilization"; 1310 } 1311 mandatory true; 1312 } 1313 leaf pd-space-utilization { 1314 description "Current PD space utilization"; 1315 type uint64; 1316 } 1317 } 1319 notification invalid-client-detected { 1320 description "Notification sent when the server detects an 1321 invalid client."; 1322 leaf duid { 1323 description "Client DUID."; 1324 type binary; 1325 } 1326 leaf description { 1327 type string; 1328 description "Description of the event (e.g. and error code or 1329 log message)."; 1330 } 1331 } 1332 notification decline-received { 1333 description "Notification sent when the server has received a 1334 Decline (9) message from a client."; 1335 leaf duid { 1336 description "Client DUID."; 1337 type binary; 1338 } 1339 list declined-resources { 1340 description "List of declined addresses and/or prefixes."; 1341 choice resource-type { 1342 case declined-address { 1343 leaf address { 1344 type inet:ipv6-address; 1345 } 1346 } 1347 case declined-prefix { 1348 leaf prefix { 1349 type inet:ipv6-prefix; 1350 } 1351 } 1352 } 1353 } 1354 } 1356 notification non-success-code-sent { 1357 description "Notification sent when the server responded 1358 to a client with non-success status code."; 1359 leaf status-code { 1360 type uint16; 1361 mandatory true; 1362 description "Status code returned to the client."; 1363 } 1364 leaf duid { 1365 description "Client DUID."; 1366 type binary; 1367 } 1368 } 1369 } 1370 1372 3.2. DHCPv6 Relay YANG Module 1374 This module imports typedefs from [RFC6991], [RFC8343]. 1376 file ietf-dhcpv6-relay.yang 1378 module ietf-dhcpv6-relay { 1379 yang-version 1.1; 1380 namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay"; 1381 prefix "dhcpv6-relay"; 1383 import ietf-inet-types { 1384 prefix inet; 1385 } 1387 import ietf-yang-types { 1388 prefix yang; 1389 } 1391 import ietf-dhcpv6-common { 1392 prefix dhcpv6-common; 1393 } 1395 import ietf-interfaces { 1396 prefix if; 1397 } 1399 organization 1400 "IETF DHC (Dynamic Host Configuration) Working group"; 1402 contact 1403 "cuiyong@tsinghua.edu.cn 1404 lh.sunlinh@gmail.com 1405 ian.farrer@telekom.de 1406 sladjana.zechlin@telekom.de 1407 hezihao9512@gmail.com 1408 godfryd@isc.org"; 1410 description 1411 "This YANG module defines components necessary for the 1412 configuration and management of DHCPv6 relays. 1414 Copyright (c) 2018 IETF Trust and the persons identified as 1415 authors of the code. All rights reserved. 1417 Redistribution and use in source and binary forms, with or 1418 without modification, is permitted pursuant to, and subject 1419 to the license terms contained in, the Simplified BSD License 1420 set forth in Section 4.c of the IETF Trust's Legal Provisions 1421 Relating to IETF Documents 1422 (http://trustee.ietf.org/license-info). 1423 This version of this YANG module is part of RFC 8513; see 1424 the RFC itself for full legal notices."; 1426 revision 2020-05-26 { 1427 description "Version update for draft -11 publication and 1428 to align revisions across the different modules."; 1429 reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; 1430 } 1432 revision 2019-09-20 { 1433 description ""; 1434 reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; 1435 } 1437 revision 2018-03-04 { 1438 description "Resolved most issues on the DHC official 1439 github"; 1440 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 1441 } 1443 revision 2017-12-22 { 1444 description 1445 "Resolve most issues on Ians Github."; 1446 reference 1447 "I-D: draft-ietf-dhc-dhcpv6-yang"; 1448 } 1450 revision 2017-11-24 { 1451 description 1452 "First version of the separated relay specific 1453 YANG model."; 1454 reference 1455 "I-D: draft-ietf-dhc-dhcpv6-yang"; 1456 } 1458 /* 1459 * Indentities 1460 */ 1462 identity relay { 1463 base "dhcpv6-common:dhcpv6-node"; 1464 description "DHCPv6 relay agent identity."; 1465 } 1467 leaf dhcpv6-node-type { 1468 description "Type for a DHCPv6 relay."; 1469 type identityref { 1470 base "dhcpv6-relay:relay"; 1472 } 1473 } 1475 /* 1476 * Features 1477 */ 1479 feature prefix-delegation { 1480 description "Enable if the relay functions as a delegating router 1481 for DHCPv6 prefix delegation."; 1482 } 1484 /* 1485 * Groupings 1486 */ 1488 grouping pd-lease-state { 1489 description "State data for the relay."; 1490 list pd-leases { 1491 config false; 1492 key ia-pd-prefix; 1493 description "Information about an active IA_PD prefix 1494 delegation."; 1495 leaf ia-pd-prefix { 1496 description "Prefix that is delegated."; 1497 type inet:ipv6-prefix; 1498 } 1499 leaf last-renew { 1500 description "Time of the last successful refresh or renew 1501 of the delegated prefix."; 1502 type yang:date-and-time; 1503 } 1504 leaf client-peer-address { 1505 description "Peer-address of the client."; 1506 type inet:ipv6-address; 1507 } 1508 leaf client-duid { 1509 description "DUID of the leasing client."; 1510 type binary; 1511 } 1512 leaf server-duid { 1513 description "DUID of the delegating server."; 1514 type binary; 1515 } 1516 } 1517 } 1519 grouping message-statistics { 1520 description "Contains counters for the different DHCPv6 1521 message types."; 1522 leaf solicit-received-count { 1523 config "false"; 1524 type uint32; 1525 description "Number of Solicit (1) messages received."; 1526 } 1527 leaf advertise-sent-count { 1528 config "false"; 1529 type uint32; 1530 description "Number of Advertise (2) messages sent."; 1531 } 1532 leaf request-received-count { 1533 config "false"; 1534 type uint32; 1535 description "Number of Request (3) messages received."; 1536 } 1537 leaf confirm-received-count { 1538 config "false"; 1539 type uint32; 1540 description "Number of Confirm (4) messages received."; 1541 } 1542 leaf renew-received-count { 1543 config "false"; 1544 type uint32; 1545 description "Number of Renew (5) messages received."; 1546 } 1547 leaf rebind-received-count { 1548 config "false"; 1549 type uint32; 1550 description "Number of Rebind (6) messages received."; 1551 } 1552 leaf reply-sent-count { 1553 config "false"; 1554 type uint32; 1555 description "Number of Reply (7) messages received."; 1556 } 1557 leaf release-received-count { 1558 config "false"; 1559 type uint32; 1560 description "Number of Release (8) messages sent."; 1561 } 1562 leaf decline-received-count { 1563 config "false"; 1564 type uint32; 1565 description "Number of Decline (9) messages sent."; 1566 } 1567 leaf reconfigure-sent-count { 1568 config "false"; 1569 type uint32; 1570 description "Number of Reconfigure (10) messages sent."; 1571 } 1572 leaf information-request-received-count { 1573 config "false"; 1574 type uint32; 1575 description "Number of Information-request (11) messages 1576 received."; 1577 } 1578 leaf unknown-message-received-count { 1579 config "false"; 1580 type uint32; 1581 description 1582 "Number of messages of unknown type that have been 1583 received."; 1584 } 1585 leaf unknown-message-sent-count { 1586 config "false"; 1587 type uint32; 1588 description 1589 "Number of messages of unknown type that have been sent."; 1590 } 1591 leaf discarded-message-count { 1592 config "false"; 1593 type uint32; 1594 description 1595 "Number of messages that have been discarded for any 1596 reason."; 1597 } 1598 } 1600 grouping global-statistics { 1601 leaf relay-forward-sent-count { 1602 config "false"; 1603 type uint32; 1604 description "Number of Relay-forward (12) messages sent."; 1605 } 1606 leaf relay-forward-received-count { 1607 config "false"; 1608 type uint32; 1609 description "Number of Relay-forward (12) messages received."; 1610 } 1611 leaf relay-reply-received-count { 1612 config "false"; 1613 type uint32; 1614 description "Number of Relay-reply (13) messages received."; 1615 } 1616 leaf relay-forward-unknown-sent-count { 1617 config "false"; 1618 type uint32; 1619 description "Number of Relay-forward (12) messages containing 1620 a message of unknown type sent."; 1621 } 1622 leaf relay-forward-unknown-received-count { 1623 config "false"; 1624 type uint32; 1625 description "Number of Relay-forward (12) messages containing 1626 a message of unknown type received."; 1627 } 1628 leaf discarded-message-count { 1629 config "false"; 1630 type uint32; 1631 description "Number of messages that have been discarded 1632 for any reason."; 1633 } 1634 } 1636 /* 1637 * Data Nodes 1638 */ 1640 container dhcpv6-relay { 1641 description 1642 "This container contains the configuration data nodes for 1643 the relay."; 1644 list relay-if { 1645 key if-name; 1646 leaf if-name { 1647 type if:interface-ref; 1648 } 1649 leaf-list destination-addresses { 1650 type inet:ipv6-address; 1651 description "Each DHCPv6 relay agent may be configured with 1652 a list of destination addresses for relayed messages. 1653 The list may include unicast addresses, multicast addresses 1654 or other valid addresses."; 1655 } 1656 leaf link-address { 1657 description "An address that may be used by the server 1658 to identify the link on which the client is located."; 1659 type binary { 1660 length "0..16"; 1661 } 1662 } 1663 container relay-options { 1664 description "Definitions for DHCPv6 options that can be sent 1665 by the relay are augmented to this location from other YANG 1666 modules as required."; 1667 } 1668 uses message-statistics; 1669 container prefix-delegation { 1670 description "Controls and holds state information for prefix 1671 delegation."; 1672 presence "Enables prefix delegation for this interface."; 1673 if-feature prefix-delegation; 1674 uses pd-lease-state; 1675 } 1676 } 1677 uses global-statistics; 1678 } 1680 /* 1681 * Notifications 1682 */ 1684 notification relay-event { 1685 description 1686 "DHCPv6 relay event notifications."; 1687 container topology-change { 1688 description "Raised if the entry for and interface with DHCPv6 1689 related configuration or state is removed from 1690 if:interface-refs."; 1691 leaf relay-if-name { 1692 description "Name of the interface that has been removed."; 1693 type leafref { 1694 path "/dhcpv6-relay/relay-if/if-name"; 1695 } 1696 } 1697 leaf last-ipv6-addr { 1698 type inet:ipv6-address; 1699 description "Last IPv6 address configured on the interface."; 1700 } 1701 } 1702 } 1703 } 1704 1706 3.3. DHCPv6 Client YANG Module 1708 This module imports typedefs from [RFC6991], [RFC8343]. 1710 file ietf-dhcpv6-client.yang 1712 module ietf-dhcpv6-client { 1713 yang-version 1.1; 1714 namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; 1715 prefix "dhcpv6-client"; 1717 import ietf-inet-types { 1718 prefix inet; 1719 } 1721 import ietf-yang-types { 1722 prefix yang; 1723 } 1725 import ietf-dhcpv6-common { 1726 prefix dhcpv6-common; 1727 } 1729 import ietf-interfaces { 1730 prefix if; 1731 } 1733 organization "DHC WG"; 1734 contact 1735 "cuiyong@tsinghua.edu.cn 1736 wangh13@mails.tsinghua.edu.cn 1737 lh.sunlinh@gmail.com 1738 ian.farrer@telekom.de 1739 sladjana.zechlin@telekom.de 1740 hezihao9512@gmail.com 1741 godfryd@isc.org"; 1743 description 1744 "This YANG module defines components necessary for the 1745 configuration and management of DHCPv6 clients. 1747 Copyright (c) 2018 IETF Trust and the persons identified as 1748 authors of the code. All rights reserved. 1750 Redistribution and use in source and binary forms, with or 1751 without modification, is permitted pursuant to, and subject 1752 to the license terms contained in, the Simplified BSD License 1753 set forth in Section 4.c of the IETF Trust's Legal Provisions 1754 Relating to IETF Documents 1755 (http://trustee.ietf.org/license-info). 1757 This version of this YANG module is part of RFC 8513; see 1758 the RFC itself for full legal notices."; 1760 revision 2020-05-26 { 1761 description "Version update for draft -11 publication and 1762 to align revisions across the different modules."; 1763 reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; 1764 } 1766 revision 2019-09-20 { 1767 description ""; 1768 reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; 1769 } 1771 revision 2018-09-04 { 1772 description ""; 1773 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 1774 } 1776 revision 2018-03-04 { 1777 description "Resolved most issues on the DHC official github"; 1778 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 1779 } 1781 revision 2017-12-22 { 1782 description "Resolve most issues on Ian's Github."; 1783 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 1784 } 1786 revision 2017-11-24 { 1787 description "First version of the separated client specific 1788 YANG model."; 1789 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 1790 } 1792 /* 1793 * Identities 1794 */ 1796 identity client { 1797 base "dhcpv6-common:dhcpv6-node"; 1798 description "DHCPv6 client identity."; 1799 } 1801 leaf dhcpv6-node-type { 1802 description "Type for a DHCPv6 client."; 1803 type identityref { 1804 base "dhcpv6-client:client"; 1805 } 1807 } 1809 /* 1810 * Groupings 1811 */ 1813 grouping message-statistics { 1814 description "Counters for DHCPv6 messages."; 1815 leaf solicit-count { 1816 config "false"; 1817 type uint32; 1818 description "Number of Solicit (1) messages sent."; 1819 } 1820 leaf advertise-count { 1821 config "false"; 1822 type uint32; 1823 description "Number of Advertise (2) messages received."; 1824 } 1825 leaf request-count { 1826 config "false"; 1827 type uint32; 1828 description "Number of Request (3) messages sent."; 1829 } 1830 leaf confirm-count { 1831 config "false"; 1832 type uint32; 1833 description "Number of Confirm (4) messages sent."; 1834 } 1835 leaf renew-count { 1836 config "false"; 1837 type uint32; 1838 description "Number of Renew (5) messages sent."; 1839 } 1840 leaf rebind-count { 1841 config "false"; 1842 type uint32; 1843 description "Number of Rebind (6) messages sent."; 1844 } 1845 leaf reply-count { 1846 config "false"; 1847 type uint32; 1848 description "Number of Reply (7) messages received."; 1849 } 1850 leaf release-count { 1851 type uint32; 1852 description "Number of Release (8) messages sent."; 1853 } 1854 leaf decline-count { 1855 config "false"; 1856 type uint32; 1857 description "Number of Decline (9) messages sent."; 1858 } 1859 leaf reconfigure-count { 1860 config "false"; 1861 type uint32; 1862 description "Number of Reconfigure (10) messages received."; 1863 } 1864 leaf information-request-count { 1865 config "false"; 1866 type uint32; 1867 description "Number of Information-request (11) messages 1868 sent."; 1869 } 1870 } 1872 /* 1873 * Data Nodes 1874 */ 1876 container dhcpv6-client { 1877 description "DHCPv6 client configuration and state."; 1878 list client-if { 1879 key if-name; 1880 description "The list of interfaces that the client will be 1881 requesting DHCPv6 configuration for."; 1882 leaf if-name { 1883 type if:interface-ref; 1884 mandatory true; 1885 description "Reference to the interface entry that 1886 the requested configuration is relevant to."; 1887 } 1888 uses dhcpv6-common:duid; 1889 container client-configured-options { 1890 description "Definitions for DHCPv6 options that can be be 1891 sent by the client are augmented to this location from 1892 other YANG modules as required."; 1893 } 1894 list ia-na { 1895 key iaid; 1896 description "Configuration relevant for an IA_NA."; 1897 reference "RFC8415: Dynamic Host Configuration Protocol 1898 for IPv6 (DHCPv6)."; 1899 leaf iaid { 1900 type uint32; 1901 description "A unique identifier for this IA_NA."; 1903 } 1904 container ia-na-options { 1905 description "An augmentation point for additional options 1906 that the client will send in the IA_NA-options field 1907 of OPTION_IA_NA."; 1908 } 1909 container lease-state { 1910 config "false"; 1911 description "Information about the active IA_NA lease."; 1912 leaf ia-na-address { 1913 description "Address that is currently leased."; 1914 type inet:ipv6-address; 1915 } 1916 leaf preferred-lifetime { 1917 description "The preferred lifetime for the leased 1918 address expressed in units of seconds."; 1919 type dhcpv6-common:timer-seconds32; 1920 } 1921 leaf valid-lifetime { 1922 description "The valid lifetime for the leased address 1923 expressed in units of seconds."; 1924 type dhcpv6-common:timer-seconds32; 1925 } 1926 leaf lease-t1 { 1927 description "The time interval after which the client 1928 should contact the server from which the addresses 1929 in the IA_NA were obtained to extend the lifetimes 1930 of the addresses assigned to the IA_NA."; 1931 type dhcpv6-common:timer-seconds32; 1932 } 1933 leaf lease-t2 { 1934 description "The time interval after which the client 1935 should contact any available server to extend 1936 the lifetimes of the addresses assigned to the IA_NA."; 1937 type dhcpv6-common:timer-seconds32; 1938 } 1939 leaf allocation-time { 1940 description "Time and date that the address was first 1941 leased."; 1942 type yang:date-and-time; 1943 } 1944 leaf last-renew-rebind { 1945 description "Time of the last successful renew or rebind 1946 of the leased address."; 1947 type yang:date-and-time; 1948 } 1949 leaf server-duid { 1950 description "DUID of the leasing server."; 1951 type binary; 1952 } 1953 } 1954 } 1955 list ia-ta { 1956 key iaid; 1957 description "Configuration relevant for an IA_TA."; 1958 reference "RFC8415: Dynamic Host Configuration Protocol for 1959 IPv6 (DHCPv6)."; 1960 leaf iaid { 1961 type uint32; 1962 description "The unique identifier for this IA_TA."; 1963 } 1964 container ia-ta-options { 1965 description "An augmenation point for additional options 1966 that the client will send in the IA_TA-options field 1967 of OPTION_IA_TA."; 1968 } 1969 container lease-state { 1970 config "false"; 1971 description "Information about an active IA_TA lease."; 1972 leaf ia-ta-address { 1973 description "Address that is currently leased."; 1974 type inet:ipv6-address; 1975 } 1976 leaf preferred-lifetime { 1977 description "The preferred lifetime for the leased 1978 address expressed in units of seconds."; 1979 type dhcpv6-common:timer-seconds32; 1980 } 1981 leaf valid-lifetime { 1982 description "The valid lifetime for the leased address 1983 expressed in units of seconds."; 1984 type dhcpv6-common:timer-seconds32; 1985 } 1986 leaf allocation-time { 1987 description "Time and date that the address was first 1988 leased."; 1989 type yang:date-and-time; 1990 } 1991 leaf last-renew-rebind { 1992 description "Time of the last successful renew or rebind 1993 of the address."; 1994 type yang:date-and-time; 1995 } 1996 leaf server-duid { 1997 description "DUID of the leasing server."; 1998 type binary; 2000 } 2001 } 2002 } 2003 list ia-pd { 2004 key iaid; 2005 reference "RFC8415: Dynamic Host Configuration Protocol for 2006 IPv6 (DHCPv6)."; 2007 description "Configuration relevant for an IA_PD."; 2008 leaf iaid { 2009 type uint32; 2010 description "The unique identifier for this IA_PD."; 2011 } 2012 container ia-pd-options { 2013 description "An augmenation point for additional options 2014 that the client will send in the IA_PD-options field 2015 of OPTION_IA_TA."; 2016 } 2017 container lease-state { 2018 config "false"; 2019 description "Information about an active IA_PD delegated 2020 prefix."; 2021 leaf ia-pd-prefix { 2022 description "Delegated prefix that is currently leased."; 2023 type inet:ipv6-prefix; 2024 } 2025 leaf preferred-lifetime { 2026 description "The preferred lifetime for the leased prefix 2027 expressed in units of seconds."; 2028 type dhcpv6-common:timer-seconds32; 2029 } 2030 leaf valid-lifetime { 2031 description "The valid lifetime for the leased prefix 2032 expressed in units of seconds."; 2033 type dhcpv6-common:timer-seconds32; 2034 } 2035 leaf lease-t1 { 2036 description "The time interval after which the client 2037 should contact the server from which the addresses 2038 in the IA_NA were obtained to extend the lifetimes 2039 of the addresses assigned to the IA_PD."; 2040 type dhcpv6-common:timer-seconds32; 2041 } 2042 leaf lease-t2 { 2043 description "The time interval after which the client 2044 should contact any available server to extend 2045 the lifetimes of the addresses assigned to the IA_PD."; 2046 type dhcpv6-common:timer-seconds32; 2047 } 2048 leaf allocation-time { 2049 description "Time and date that the prefix was first 2050 leased."; 2051 type yang:date-and-time; 2052 } 2053 leaf last-renew-rebind { 2054 description "Time of the last successful renew or rebind 2055 of the delegated prefix."; 2056 type yang:date-and-time; 2057 } 2058 leaf server-duid { 2059 description "DUID of the delegating server."; 2060 type binary; 2061 } 2062 } 2063 } 2064 uses message-statistics; 2065 } 2066 } 2068 /* 2069 * Notifications 2070 */ 2072 notification invalid-ia-detected { 2073 description "Notification sent when the identity association 2074 of the client can be proved to be invalid. Possible conditions 2075 include a duplicate or otherwise illegal address."; 2076 leaf iaid { 2077 type uint32; 2078 mandatory true; 2079 description "IAID"; 2080 } 2081 leaf description { 2082 type string; 2083 description "Description of the event."; 2084 } 2085 } 2087 notification retransmission-failed { 2088 description "Notification sent when the retransmission mechanism 2089 defined in [RFC8415] is unsuccessful."; 2090 leaf failure-type { 2091 type enumeration { 2092 enum "MRC-exceeded" { 2093 description "Maximum retransmission count exceeded."; 2094 } 2095 enum "MRD-exceeded" { 2096 description "Maximum retransmission duration exceeded."; 2097 } 2098 } 2099 mandatory true; 2100 description "Description of the failure."; 2101 } 2102 } 2104 notification unsuccessful-status-code { 2105 description "Notification sent when the client receives a message 2106 that includes an unsuccessful Status Code option."; 2107 leaf status-code { 2108 type uint16; 2109 mandatory true; 2110 description "Unsuccessful status code received by a client."; 2111 } 2112 leaf server-duid { 2113 description "DUID of the server sending the unsuccessful 2114 error code."; 2115 mandatory true; 2116 type binary; 2117 } 2118 } 2120 notification server-duid-changed { 2121 description "Notification sent when the client receives a lease 2122 from a server with different DUID to the one currently stored 2123 by the client."; 2124 leaf new-server-duid { 2125 description "DUID of the new server."; 2126 mandatory true; 2127 type binary; 2128 } 2129 leaf previous-server-duid { 2130 description "DUID of the previous server."; 2131 mandatory true; 2132 type binary; 2133 } 2134 leaf lease-ia-na { 2135 description "Reference to the IA_NA lease."; 2136 type leafref { 2137 path "/dhcpv6-client/client-if/ia-na/iaid"; 2138 } 2139 } 2140 leaf lease-ia-ta { 2141 description "Reference to the IA_TA lease."; 2142 type leafref { 2143 path "/dhcpv6-client/client-if/ia-ta/iaid"; 2145 } 2146 } 2147 leaf lease-ia-pd { 2148 description "Reference to the IA_PD lease."; 2149 type leafref { 2150 path "/dhcpv6-client/client-if/ia-pd/iaid"; 2151 } 2152 } 2153 } 2154 } 2155 2157 3.4. DHCPv6 RFC8415 Options YANG Module 2159 This module imports typedefs from [RFC6991]. 2161 file ietf-dhcpv6-options-rfc8415.yang 2163 module ietf-dhcpv6-options-rfc8415 { 2164 yang-version 1.1; 2165 namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options-8415"; 2166 prefix "rfc8415"; 2168 import ietf-inet-types { 2169 prefix inet; 2170 } 2172 import ietf-dhcpv6-common { 2173 prefix dhcpv6-common; 2174 } 2176 import ietf-dhcpv6-server { 2177 prefix dhcpv6-server; 2178 } 2180 import ietf-dhcpv6-relay { 2181 prefix dhcpv6-relay; 2182 } 2184 import ietf-dhcpv6-client { 2185 prefix dhcpv6-client; 2186 } 2188 organization "DHC WG"; 2189 contact 2190 "cuiyong@tsinghua.edu.cn 2191 wangh13@mails.tsinghua.edu.cn 2192 lh.sunlinh@gmail.com 2193 ian.farrer@telekom.de 2194 sladjana.zechlin@telekom.de 2195 hezihao9512@gmail.com"; 2197 description "This YANG module contains DHCPv6 options defined 2198 in RFC8415 that can be used by DHCPv6 clients, relays 2199 and servers."; 2201 revision 2020-05-26 { 2202 description "Version update for draft -11 publication and 2203 to align revisions across the different modules."; 2204 reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; 2205 } 2207 revision 2019-06-07 { 2208 description "Major reworking to only contain RFC8415 options. 2209 if-feature for each option removed. Removed groupings 2210 of features by device or combination of devices. Added "; 2211 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2212 } 2214 revision 2018-09-04 { 2215 description ""; 2216 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2217 } 2219 revision 2018-03-04 { 2220 description "Resolved most issues on the DHC official 2221 github"; 2222 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2223 } 2225 revision 2017-12-22 { 2226 description "Resolve most issues on Ian's github."; 2227 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2228 } 2230 revision 2017-11-24 { 2231 description "First version of the separated DHCPv6 options 2232 YANG model."; 2233 reference "I-D:draft-ietf-dhc-dhcpv6-yang"; 2234 } 2236 /* 2237 * Groupings 2238 */ 2240 grouping option-iaaddr-option { 2241 description "OPTION_IAADDR (5) IA Address Option."; 2242 reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 2243 (DHCPv6)"; 2244 leaf IPv6-address { 2245 type inet:ipv6-address; 2246 description "An IPv6 address. A client MUST NOT form an 2247 implicit prefix with a length other than 128 for this 2248 address."; 2249 } 2250 leaf preferred-lifetime { 2251 type uint32; 2252 description "The preferred lifetime for the address in the 2253 option, expressed in units of seconds."; 2254 } 2255 leaf valid-lifetime { 2256 type uint32; 2257 description "The preferred lifetime for the address 2258 in the option, expressed in units of seconds."; 2259 } 2260 container iaaddr-options { 2261 description "Definitions for DHCPv6 options that can be sent 2262 by the client are augmented to this location from other YANG 2263 modules as required."; 2264 } 2265 } 2267 grouping option-request-option-group { 2268 container option-request-option { 2269 description "OPTION_ORO (6) Option Request Option. A client 2270 MUST include an Option Request option in a Solicit, Request, 2271 Renew, Rebind, or Information-request message to inform 2272 the server about options the client wants the server to send 2273 to the client."; 2274 reference "RFC8415: Dynamic Host Configuration Protocol for 2275 IPv6 (DHCPv6)"; 2276 leaf-list oro-option { 2277 description "List of options that the client is requesting, 2278 identified by option code"; 2279 type uint16; 2280 } 2281 } 2282 } 2284 grouping preference-option-group { 2285 container preference-option { 2286 description "OPTION_PREFERENCE (7) Preference Option"; 2287 reference "RFC8415: Dynamic Host Configuration Protocol for 2288 IPv6 (DHCPv6)"; 2290 leaf pref-value { 2291 type uint8; 2292 description "The preference value for the server in this 2293 message. A 1-octet unsigned integer."; 2294 } 2295 } 2296 } 2298 grouping auth-option-group { 2299 container auth-option { 2300 description "OPTION_AUTH (11) Authentication Option"; 2301 reference "RFC8415: Dynamic Host Configuration Protocol 2302 for IPv6 (DHCPv6)"; 2303 leaf protocol { 2304 type uint8; 2305 description "The authentication protocol used in this 2306 Authentication option."; 2307 } 2308 leaf algorithm { 2309 type uint8; 2310 description "The algorithm used in the authentication 2311 protocol."; 2312 } 2313 leaf rdm { 2314 type uint8; 2315 description "The replay detection method used 2316 in this Authentication option."; 2317 } 2318 leaf replay-detection { 2319 type uint64; 2320 description "The replay detection information for the RDM."; 2321 } 2322 leaf auth-information { 2323 type string; 2324 description "The authentication information, as specified 2325 by the protocol and algorithm used in this Authentication 2326 option."; 2327 } 2328 } 2329 } 2331 grouping server-unicast-option-group { 2332 container server-unicast-option { 2333 description "OPTION_UNICAST (12) Server Unicast Option"; 2334 reference "RFC8415: Dynamic Host Configuration Protocol for 2335 IPv6 (DHCPv6)"; 2336 leaf server-address { 2337 type inet:ipv6-address; 2338 description "The 128-bit address to which the client 2339 should send messages delivered using unicast."; 2340 } 2341 } 2342 } 2344 grouping status-code-option-group { 2345 container status-code-option { 2346 description "OPTION_STATUS_CODE (13) Status Code Option."; 2347 reference "RFC8415: Dynamic Host Configuration Protocol 2348 for IPv6 (DHCPv6)"; 2349 leaf status-code { 2350 type uint16; 2351 description "The numeric code for the status encoded 2352 in this option. See the Status Codes registry at 2353 2354 for the current list of status codes."; 2355 } 2356 leaf status-message { 2357 type string; 2358 description "A UTF-8 encoded text string suitable for 2359 display to an end user. MUST NOT be null-terminated."; 2360 } 2361 } 2362 } 2364 grouping rapid-commit-option-group { 2365 container rapid-commit-option { 2366 presence "Enable sending of this option"; 2367 description "OPTION_RAPID_COMMIT (14) Rapid Commit Option. 2368 The presence node is used to enable the option."; 2369 reference "RFC8415: Dynamic Host Configuration Protocol for 2370 IPv6 (DHCPv6)"; 2371 } 2372 } 2374 grouping user-class-option-group { 2375 container user-class-option { 2376 description "OPTION_USER_CLASS (15) User Class Option"; 2377 reference "RFC8415: Dynamic Host Configuration Protocol 2378 for IPv6 (DHCPv6)"; 2379 list user-class-data { 2380 key user-class-datum-id; 2381 min-elements 1; 2382 description "The user classes of which the client 2383 is a member."; 2384 leaf user-class-datum-id { 2385 type uint8; 2386 description "User class datum ID"; 2387 } 2388 leaf user-class-datum { 2389 type string; 2390 description "Opaque field representing a User Class 2391 of which the client is a member."; 2392 } 2393 } 2394 } 2395 } 2397 grouping vendor-class-option-group { 2398 container vendor-class-option { 2399 description "OPTION_VENDOR_CLASS (16) Vendor Class Option"; 2400 reference "RFC8415: Dynamic Host Configuration Protocol 2401 for IPv6 (DHCPv6)"; 2402 list vendor-class-option-instances { 2403 key enterprise-number; 2404 description "The vendor class option allows for multiple 2405 instances in a single message. Each list entry defines 2406 the contents of an instance of the option."; 2407 leaf enterprise-number { 2408 type uint32; 2409 description "The vendor's registered Enterprise Number 2410 as maintained by IANA."; 2411 } 2412 list vendor-class { 2413 key vendor-class-datum-id; 2414 description "The vendor classes of which the client is 2415 a member."; 2416 leaf vendor-class-datum-id { 2417 type uint8; 2418 description "Vendor class datum ID"; 2419 } 2420 leaf vendor-class-datum { 2421 type string; 2422 description "Opaque field representing a vendor class 2423 of which the client is a member."; 2424 } 2425 } 2426 } 2427 } 2428 } 2430 grouping vendor-specific-information-option-group { 2431 container vendor-specific-information-option { 2432 description "OPTION_VENDOR_OPTS (17) Vendor-specific 2433 Information Option"; 2435 reference "RFC8415: Dynamic Host Configuration Protocol 2436 for IPv6 (DHCPv6)"; 2437 list vendor-specific-information-option-instances { 2438 key enterprise-number; 2439 description "The vendor specific information option allows 2440 for multiple instances in a single message. Each list entry 2441 defines the contents of an instance of the option."; 2442 leaf enterprise-number { 2443 type uint32; 2444 description "The vendor's registered Enterprise Number, 2445 as maintained by IANA."; 2446 } 2447 list vendor-option-data { 2448 key sub-option-code; 2449 description "Vendor options, interpreted by vendor-specific 2450 client/server functions."; 2451 leaf sub-option-code { 2452 type uint16; 2453 description "The code for the sub-option."; 2454 } 2455 leaf sub-option-data { 2456 type string; 2457 description "The data area for the sub-option."; 2458 } 2459 } 2460 } 2461 } 2462 } 2464 grouping interface-id-option-group { 2465 container interface-id-option { 2466 description "OPTION_INTERFACE_ID (18) Interface-Id Option"; 2467 reference "RFC8415: Dynamic Host Configuration Protocol for 2468 IPv6 (DHCPv6)"; 2469 leaf interface-id { 2470 type string; 2471 description "An opaque value of arbitrary length generated 2472 by the relay agent to identify one of the relay agent's 2473 interfaces."; 2474 } 2475 } 2476 } 2478 grouping reconfigure-message-option-group { 2479 container reconfigure-message-option { 2480 description "OPTION_RECONF_MSG (19) Reconfigure Message 2481 Option."; 2482 reference "RFC8415: Dynamic Host Configuration Protocol for 2483 IPv6 (DHCPv6)"; 2484 leaf msg-type { 2485 type uint8; 2486 description "5 for Renew message, 6 for Rebind message, 2487 11 for Information-request message."; 2488 } 2489 } 2490 } 2492 grouping reconfigure-accept-option-group { 2493 container reconfigure-accept-option { 2494 presence "Enable sending of this option"; 2495 description "OPTION_RECONF_ACCEPT (20) Rapid Commit Option. 2496 A client uses the Reconfigure Accept option to announce to 2497 the server whether the client is willing to accept 2498 Reconfigure messages, and a server uses this option to tell 2499 the client whether or not to accept Reconfigure messages. 2500 In the absence of this option, the default behavior is that 2501 the client is unwilling to accept Reconfigure messages. 2502 The presence node is used to enable the option."; 2503 reference "RFC8415: Dynamic Host Configuration Protocol 2504 for IPv6 (DHCPv6)"; 2505 } 2506 } 2508 grouping option-iaprefix-option { 2509 description "OPTION_IAPREFIX (26) IA Address Option."; 2510 reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 2511 (DHCPv6)"; 2512 leaf preferred-lifetime { 2513 type uint32; 2514 description "The preferred lifetime for the prefix in the 2515 option, expressed in units of seconds."; 2516 } 2517 leaf valid-lifetime { 2518 type uint32; 2519 description "The preferred lifetime for the prefix in the 2520 option, expressed in units of seconds."; 2521 } 2522 leaf IPv6-prefix { 2523 type inet:ipv6-prefix; 2524 description "The IPv6 prefix delegated to the client."; 2525 } 2526 container iaprefix-options { 2527 description "Definitions for DHCPv6 options that can be sent 2528 by the client are augmented to this location from other YANG 2529 modules as required."; 2530 } 2532 } 2534 grouping info-refresh-time-option-group { 2535 container info-refresh-time-option { 2536 description "OPTION_INFORMATION_REFRESH_TIME (32) 2537 Information Refresh Time option."; 2538 reference "RFC8415: Dynamic Host Configuration Protocol for 2539 IPv6 (DHCPv6)"; 2540 leaf info-refresh-time { 2541 type dhcpv6-common:timer-seconds32; 2542 description "Time duration relative to the current time, 2543 expressed in units of seconds."; 2544 } 2545 } 2546 } 2548 grouping sol-max-rt-option-group { 2549 container sol-max-rt-option { 2550 description "OPTION_SOL_MAX_RT (82) sol max rt option"; 2551 reference "RFC8415: Dynamic Host Configuration Protocol for 2552 IPv6 (DHCPv6)"; 2553 leaf sol-max-rt-value { 2554 type dhcpv6-common:timer-seconds32; 2555 description "sol max rt value"; 2556 } 2557 } 2558 } 2560 grouping inf-max-rt-option-group { 2561 container inf-max-rt-option { 2562 description "OPTION_INF_MAX_RT (83) inf max rt option"; 2563 reference "RFC8415: Dynamic Host Configuration Protocol for 2564 IPv6 (DHCPv6)"; 2565 leaf inf-max-rt-value { 2566 type dhcpv6-common:timer-seconds32; 2567 description "inf max rt value"; 2568 } 2569 } 2570 } 2572 /* 2573 * Augmentations 2574 */ 2576 augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/ 2577 dhcpv6-server:option-set" { 2578 when "../../../dhcpv6-server:dhcpv6-node-type= 2579 'dhcpv6-server:server'"; 2581 uses preference-option-group; 2582 uses auth-option-group; 2583 uses server-unicast-option-group; 2584 uses status-code-option-group; 2585 uses rapid-commit-option-group; 2586 uses vendor-specific-information-option-group; 2587 uses reconfigure-message-option-group; 2588 uses reconfigure-accept-option-group; 2589 uses info-refresh-time-option-group; 2590 uses sol-max-rt-option-group; 2591 uses inf-max-rt-option-group; 2592 } 2593 augment "/dhcpv6-relay:dhcpv6-relay/dhcpv6-relay:relay-if/ 2594 dhcpv6-relay:relay-options" { 2595 when "../../../dhcpv6-relay:dhcpv6-node-type= 2596 'dhcpv6-relay:relay'"; 2597 uses auth-option-group; 2598 uses status-code-option-group; 2599 uses interface-id-option-group; 2600 } 2601 augment "/dhcpv6-client:dhcpv6-client/dhcpv6-client:client-if/ 2602 dhcpv6-client:client-configured-options" { 2603 when "../../../dhcpv6-client:dhcpv6-node-type= 2604 'dhcpv6-client:client'"; 2605 uses option-request-option-group; 2606 uses status-code-option-group; 2607 uses rapid-commit-option-group; 2608 uses user-class-option-group; 2609 uses vendor-class-option-group; 2610 uses vendor-specific-information-option-group; 2611 uses reconfigure-accept-option-group; 2612 } 2613 } 2614 2616 3.5. DHCPv6 Common YANG Module 2618 This module imports typedefs from [RFC6991]. 2620 file ietf-dhcpv6-common.yang 2622 module ietf-dhcpv6-common { 2623 yang-version 1.1; 2624 namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common"; 2625 prefix "dhcpv6-common"; 2627 import ietf-yang-types { 2628 prefix yang; 2630 } 2632 organization "DHC WG"; 2633 contact 2634 "yong@csnet1.cs.tsinghua.edu.cn 2635 lh.sunlinh@gmail.com 2636 ian.farrer@telekom.de 2637 sladjana.zechlin@telekom.de 2638 hezihao9512@gmail.com"; 2640 description "This YANG module defines common components 2641 used for the configuration and management of DHCPv6."; 2643 revision 2020-05-26 { 2644 description "Version update for draft -11 publication and 2645 to align revisions across the different modules."; 2646 reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; 2647 } 2649 revision 2018-09-04 { 2650 description ""; 2651 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2652 } 2654 revision 2018-01-30 { 2655 description "Initial revision"; 2656 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 2657 } 2659 typedef threshold { 2660 type union { 2661 type uint16 { 2662 range 0..100; 2663 } 2664 type enumeration { 2665 enum "disabled" { 2666 description "No threshold"; 2667 } 2668 } 2669 } 2670 description "Threshold value in percent"; 2671 } 2673 typedef timer-seconds32 { 2674 type uint32 { 2675 range "1..4294967295"; 2676 } 2677 units "seconds"; 2678 description 2679 "Timer value type, in seconds (32-bit range)."; 2680 } 2682 identity dhcpv6-node { 2683 description "Abstract base type for DHCPv6 functional nodes"; 2684 } 2686 /* 2687 * Groupings 2688 */ 2690 grouping duid { 2691 description "Each server and client has only one DUID (DHCP 2692 Unique Identifier). The DUID here identifies a unique 2693 DHCPv6 server for clients. DUID consists of a two-octet 2694 type field and an arbitrary length (no more than 128 bytes) 2695 content field. Currently there are four defined types of 2696 DUIDs in RFC8415 and RFC6355 - DUID-LLT, DUID-EN, DUID-LL 2697 and DUID-UUID. DUID-unstructured represents DUIDs which 2698 do not follow any of the defined formats."; 2699 reference "RFC8415: Section 11 and RFC6355: Section 4"; 2700 leaf type-code { 2701 type uint16; 2702 default 65535; 2703 description "Type code of this DUID."; 2704 } 2705 choice duid-type { 2706 default duid-unstructured; 2707 description "Selects the format of the DUID."; 2708 case duid-llt { 2709 description "DUID Based on Link-layer Address Plus Time 2710 (Type 1 - DUID-LLT)."; 2711 reference "RFC8415 Section 11.2"; 2712 leaf duid-llt-hardware-type { 2713 type uint16; 2714 description "Hardware type as assigned by IANA (RFC826)."; 2715 } 2716 leaf duid-llt-time { 2717 type yang:timeticks; 2718 description "The time that the DUID is generated 2719 represented in seconds since midnight (UTC), 2720 January 1, 2000, modulo 2^32."; 2721 } 2722 leaf duid-llt-link-layer-address { 2723 type yang:mac-address; 2724 description "Link-layer address as described in RFC2464."; 2725 } 2727 } 2728 case duid-en { 2729 description "DUID Assigned by Vendor Based on Enterprise 2730 Number (Type 2 - DUID-EN)."; 2731 reference "RFC8415 Section 11.3"; 2732 leaf duid-en-enterprise-number { 2733 type uint32; 2734 description "Vendor's registered Private Enterprise Number 2735 as maintained by IANA."; 2736 } 2737 leaf duid-en-identifier { 2738 type string; 2739 description "Indentifier, unique to the device."; 2740 } 2741 } 2742 case duid-ll { 2743 description "DUID Based on Link-layer Address 2744 (Type 3 - DUID-LL)."; 2745 reference "RFC8415 Section 11.4"; 2746 leaf duid-ll-hardware-type { 2747 type uint16; 2748 description "Hardware type, as assigned by IANA (RFC826)."; 2749 } 2750 leaf duid-ll-link-layer-address { 2751 type yang:mac-address; 2752 description "Link-layer address, as described in RFC2464"; 2753 } 2754 } 2755 case duid-uuid { 2756 description "DUID Based on Universally Unique Identifier 2757 (Type 4 - DUID-UUID)."; 2758 reference "RFC6335 Defination of the UUID-Based Unique 2759 Identifier"; 2760 leaf uuid { 2761 type yang:uuid; 2762 description "A Universally Unique Identifier in the string 2763 representation, defined in RFC4122. The canonical 2764 representation uses lowercase characters."; 2765 } 2766 } 2767 case duid-unstructured { 2768 description "DUID which does not follow any of the other 2769 structures, expressed as bytes."; 2770 leaf data { 2771 type binary; 2772 description "The bits to be used as the identifier."; 2773 } 2774 } 2776 } 2777 leaf active-duid { 2778 config "false"; 2779 description "The DUID which is currently in use."; 2780 type binary; 2781 } 2782 } 2783 } 2784 2786 4. Security Considerations 2788 The YANG modules defined in this document are designed to be accessed 2789 via network management protocols such as NETCONF [RFC6241] or 2790 RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport 2791 layer, and the mandatory-to-implement secure transport is Secure 2792 Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the 2793 mandatory-to-implement secure transport is TLS [RFC8446]. 2795 The Network Configuration Access Control Model (NACM) [RFC8341] 2796 provides the means to restrict access for particular NETCONF or 2797 RESTCONF users to a preconfigured subset of all available NETCONF or 2798 RESTCONF protocol operations and content. 2800 All data nodes defined in the YANG modules which can be created, 2801 modified, and deleted (i.e., config true, which is the default) are 2802 considered sensitive. Write operations (e.g., edit-config) to these 2803 data nodes without proper protection can have a negative effect on 2804 network operations. 2806 An attacker who is able to access the DHCPv6 server can undertake 2807 various attacks, such as: 2809 * Denial of service attacks, based on reconfiguring messages to a 2810 rogue DHCPv6 server. 2812 * Various attacks based on reconfiguring the contents of DHCPv6 2813 options. E.g., changing the address of a the DNS server supplied 2814 in a DHCP option to point to a rogue server. 2816 An attacker who is able to access the DHCPv6 relay can undertake 2817 various attacks, such as: 2819 * Reconfiguring the relay's destination address to send messages to 2820 a rogue DHCPv6 server. 2822 * Deleting information about a client's delegated prefix, causing a 2823 denial of service attack as traffic will no longer be routed to 2824 the client. 2826 Some of the readable data nodes in this YANG module may be considered 2827 sensitive or vulnerable in some network environments. It is thus 2828 important to control read access (e.g., via get, get-config, or 2829 notification) to these data nodes. These subtrees and data nodes can 2830 be misused to track the activity of a host: 2832 * Reconfiguring the relay's destination address to send messages to 2833 a rogue DHCPv6 server. 2835 * Information the server holds about clients with active leases: 2836 (dhcpv6-server/network-ranges/network-range/ address-pools/ 2837 address-pool/active-leases) 2839 * Information the relay holds about clients with active leases: 2840 (dhcpv6-relay/relay-if/prefix-delegation/) 2842 Security considerations related to DHCPv6 are discussed in [RFC8415]. 2844 Security considerations given in [RFC7950] are also applicable here. 2846 5. IANA Considerations 2848 This document registers the following YANG modules in the "YANG 2849 Module Names" registry [RFC6020]. 2851 name: ietf-dhcpv6 2852 namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common 2853 prefix: dhcpv6 2854 reference: TBD 2856 name: ietf-dhcpv6 2857 namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server 2858 prefix: dhcpv6 2859 reference: TBD 2861 name: ietf-dhcpv6 2862 namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client 2863 prefix: dhcpv6 2864 reference: TBD 2866 name: ietf-dhcpv6 2867 namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay 2868 prefix: dhcpv6 2869 reference: TBD 2870 name: ietf-dhcpv6 2871 namespace: 2872 urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options- 2873 rfc8415 2874 prefix: dhcpv6 2875 reference: TBD 2877 6. Acknowledgments 2879 The authors would like to thank Qi Sun, Lishan Li, Sladjana Zoric, 2880 Tomek Mrugalski, Marcin Siodelski, Bernie Volz and Bing Liu for their 2881 valuable comments and contributions to this work. 2883 7. Contributors 2885 The following individuals contributed to this effort: 2887 Hao Wang 2888 Tsinghua University 2889 Beijing 100084 2890 P.R. China 2891 Phone: +86-10-6278-5822 2892 Email: wangh13@mails.tsinghua.edu.cn 2894 Ted Lemon 2895 Nomium, Inc 2896 950 Charter St. 2897 Redwood City, CA 94043 2898 USA 2899 Email: Ted.Lemon@nomium.com 2901 Bernie Volz 2902 Cisco Systems, Inc. 2903 1414 Massachusetts Ave 2904 Boxborough, MA 01719 2905 USA 2906 Email: volz@cisco.com 2908 8. References 2910 8.1. Normative References 2912 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2913 Requirement Levels", BCP 14, RFC 2119, 2914 DOI 10.17487/RFC2119, March 1997, 2915 . 2917 [RFC6355] Narten, T. and J. Johnson, "Definition of the UUID-Based 2918 DHCPv6 Unique Identifier (DUID-UUID)", RFC 6355, 2919 DOI 10.17487/RFC6355, August 2011, 2920 . 2922 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2923 the Network Configuration Protocol (NETCONF)", RFC 6020, 2924 DOI 10.17487/RFC6020, October 2010, 2925 . 2927 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2928 and A. Bierman, Ed., "Network Configuration Protocol 2929 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2930 . 2932 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2933 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2934 . 2936 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 2937 RFC 6991, DOI 10.17487/RFC6991, July 2013, 2938 . 2940 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 2941 RFC 7950, DOI 10.17487/RFC7950, August 2016, 2942 . 2944 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2945 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2946 May 2017, . 2948 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 2949 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 2950 . 2952 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 2953 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 2954 . 2956 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 2957 Access Control Model", STD 91, RFC 8341, 2958 DOI 10.17487/RFC8341, March 2018, 2959 . 2961 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 2962 and R. Wilton, "Network Management Datastore Architecture 2963 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 2964 . 2966 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 2967 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 2968 . 2970 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 2971 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 2972 . 2974 [RFC8415] Mrugalski, T., Siodelski, M., Volz, B., Yourtchenko, A., 2975 Richardson, M., Jiang, S., Lemon, T., and T. Winters, 2976 "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", 2977 RFC 8415, DOI 10.17487/RFC8415, November 2018, 2978 . 2980 8.2. Informative References 2982 [RFC3319] Schulzrinne, H. and B. Volz, "Dynamic Host Configuration 2983 Protocol (DHCPv6) Options for Session Initiation Protocol 2984 (SIP) Servers", RFC 3319, DOI 10.17487/RFC3319, July 2003, 2985 . 2987 Appendix A. Example of Augmenting Additional DHCPv6 Option Definitions 2989 The following section provides a example of how the DHCPv6 option 2990 definitions can be extended for additional options. It is expected 2991 that additional specficication documents will be published in the 2992 future for this. 2994 The example YANG models OPTION_SIP_SERVER_D (21) and 2995 OPTION_SIP_SERVER_D (21) defined in [RFC3319]. The overall structure 2996 is as follows: 2998 * A separate grouping is used for each option. 3000 * The name of the option is taken from the registered IANA name for 3001 the option, with an '-option' suffix added. 3003 * The description field is taken from the relevant option code name 3004 and number. 3006 * The reference section is the number and name of the RFC in which 3007 the DHCPv6 option is defined. 3009 * The remaining fields match the fields in the DHCP option. They 3010 are in the same order as defined in the DHCP option. Where-ever 3011 possible, the format that is defined for the DHCP field should be 3012 matched by the relevant YANG type. 3014 * Fields which can have multiple entries or instances are defined 3015 using list or leaf-list nodes. 3017 Below the groupings for option definitions, augment statements are 3018 used to add the option definitions for use in the relevant DHCP 3019 element's module (server, relay and/or client). If an option is 3020 relevant to more than one element type, then an augment statement for 3021 each element is used. 3023 file example-dhcpv6-options-rfc3319.yang 3025 module example-dhcpv6-options-rfc3319 { 3026 yang-version 1.1; 3027 namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-options-rfc33 3028 19"; 3029 prefix "rfc3319"; 3031 import ietf-inet-types { 3032 prefix inet; 3033 } 3035 import ietf-dhcpv6-server { 3036 prefix dhcpv6-server; 3037 } 3039 organization "DHC WG"; 3040 contact 3041 "ian.farrer@telekom.de 3042 godfryd@isc.org"; 3044 description "This YANG module contains DHCPv6 options defined 3045 in RFC3319 that can be used by DHCPv6 servers."; 3047 revision 2020-05-26 { 3048 description "Version update for draft -11 publication and 3049 to align revisions across the different modules."; 3050 reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; 3051 } 3053 revision 2019-10-18 { 3054 description "Initial version."; 3055 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 3056 } 3058 /* 3059 * Groupings 3060 */ 3062 grouping sip-server-domain-name-list-option-group { 3063 container sip-server-domain-name-list-option { 3064 description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name 3065 List"; 3066 reference "RFC3319: Dynamic Host Configuration Protocol 3067 (DHCPv6) Options for Session Initiation Protocol (SIP) 3068 Servers"; 3069 leaf sip-serv-domain-name { 3070 type inet:domain-name; 3071 description "sip server domain name"; 3072 } 3073 } 3074 } 3076 grouping sip-server-address-list-option-group { 3077 container sip-server-address-list-option { 3078 description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address 3079 List"; 3080 reference "RFC3319: Dynamic Host Configuration Protocol 3081 (DHCPv6) Options for Session Initiation Protocol (SIP) 3082 Servers"; 3083 list sip-server { 3084 key sip-serv-id; 3085 description "sip server info"; 3086 leaf sip-serv-id { 3087 type uint8; 3088 description "sip server id"; 3089 } 3090 leaf sip-serv-addr { 3091 type inet:ipv6-address; 3092 description "sip server addr"; 3093 } 3094 } 3095 } 3096 } 3098 /* 3099 * Augmentations 3100 */ 3102 augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/ 3103 dhcpv6-server:option-set" { 3104 when "../../../dhcpv6-server:dhcpv6-node-type= 3105 'dhcpv6-server:server'"; 3106 uses sip-server-domain-name-list-option-group; 3107 uses sip-server-address-list-option-group; 3108 } 3109 } 3110 3112 Appendix B. Example Vendor Specific Server Configuration Module 3114 This section shows how to extend the server YANG module defined in 3115 this document with vendor specific configuration nodes, e.g., 3116 configuring access to a lease storage database. 3118 The example module defines additional server attributes such as name 3119 and description. Storage for leases is configured using a lease- 3120 storage container. It allows storing leases in one of three options: 3121 memory (memfile), MySQL and PosgreSQL. For each case, the necessary 3122 configuration parameters are provided. 3124 At the end there is an augment statement which adds the vendor 3125 specific configuration defined in "dhcpv6-server-config:config" under 3126 "/dhcpv6-server:config/dhcpv6-server:vendor-config" mountpoint. 3128 file example-dhcpv6-server-config.yang 3130 module example-dhcpv6-server-config { 3131 yang-version 1.1; 3132 namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-server-config 3133 "; 3134 prefix "dhcpv6-server-config"; 3136 import ietf-inet-types { 3137 prefix inet; 3138 } 3140 import ietf-interfaces { 3141 prefix if; 3142 } 3144 import ietf-dhcpv6-server { 3145 prefix dhcpv6-server; 3146 } 3148 organization "DHC WG"; 3149 contact 3150 "cuiyong@tsinghua.edu.cn 3151 lh.sunlinh@gmail.com 3152 ian.farrer@telekom.de 3153 sladjana.zechlin@telekom.de 3154 hezihao9512@gmail.com"; 3156 description "This YANG module defines components for the 3157 configuration and management of vendor/implementation specific 3158 DHCPv6 server functionality. As this functionality varies 3159 greatly between different implementations, the module 3160 provided as an example only."; 3162 revision 2020-05-26 { 3163 description "Version update for draft -11 publication and 3164 to align revisions across the different modules."; 3165 reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; 3166 } 3168 revision 2019-06-04 { 3169 description ""; 3170 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 3171 } 3173 /* 3174 * Groupings 3175 */ 3177 grouping config { 3178 description "Parameters necessary for the configuration of a 3179 DHCPv6 server"; 3180 container serv-attributes { 3181 description "Contains basic attributes necessary for running a 3182 DHCPv6 server."; 3183 leaf name { 3184 type string; 3185 description "Name of the DHCPv6 server."; 3186 } 3187 leaf description { 3188 type string; 3189 description "Description of the DHCPv6 server."; 3190 } 3191 leaf ipv6-listen-port { 3192 type uint16; 3193 default 547; 3194 description "UDP port that the server will listen on."; 3195 } 3196 choice listening-interfaces { 3197 default all-interfaces; 3198 description "Configures which interface or addresses the 3199 server will listen for incoming messages on."; 3200 case all-interfaces { 3201 container all-interfaces { 3202 presence true; 3203 description "Configures the server to listen for 3204 incoming messages on all IPv6 addresses (unicats and 3205 multicast) on all of its network interfaces."; 3207 } 3208 } 3209 case interface-list { 3210 leaf-list interfaces { 3211 type if:interface-ref; 3212 description "List of interfaces that the server will 3213 listen for incoming messages on. Messages addressed 3214 to any valid IPv6 address (unicast and multicast) will 3215 be received."; 3216 } 3217 } 3218 case address-list { 3219 leaf-list address-list { 3220 type inet:ipv6-address; 3221 description "List of IPv6 address(es) that the server 3222 will listen for incoming messages on."; 3223 } 3224 } 3225 } 3226 leaf-list interfaces-config { 3227 type if:interface-ref; 3228 default "if:interfaces/if:interface/if:name"; 3229 description "A leaf list to denote which one or more 3230 interfaces the server should listen on."; 3231 } 3232 container lease-storage { 3233 description "Configures how the server will stores leases."; 3234 choice storage-type { 3235 description "The type storage that will be used for lease 3236 information."; 3237 case memfile { 3238 description "Configuration for storing leases information 3239 in a CSV file."; 3240 leaf memfile-name { 3241 type string; 3242 description "Specifies the absolute location 3243 of the lease file. The format of the string follow 3244 the semantics of the relevant operating system."; 3245 } 3246 leaf memfile-lfc-interval { 3247 type uint64; 3248 description "Specifies the interval in seconds, 3249 at which the server will perform a lease file cleanup 3250 (LFC)."; 3251 } 3252 } 3253 case mysql { 3254 leaf mysql-name { 3255 type string; 3256 description "Name of the database."; 3257 } 3258 choice mysql-host { 3259 case mysql-server-hostname { 3260 leaf mysql-hostname { 3261 type inet:domain-name; 3262 default "localhost"; 3263 description "If the database is located on a 3264 different system to the DHCPv6 server, the 3265 domain name can be specified."; 3266 } 3267 } 3268 case mysql-server-address { 3269 leaf mysql-address { 3270 type inet:ip-address; 3271 default "::"; 3272 description "Configure the location of the 3273 database using an IP (v6 or v6) literal 3274 address"; 3275 } 3276 } 3277 } 3278 leaf mysql-username { 3279 type string; 3280 description "User name of the account under which the 3281 server will access the database."; 3282 } 3283 leaf mysql-password { 3284 type string; 3285 description "Password of the account under which 3286 the server will access the database."; 3287 } 3288 leaf mysql-port { 3289 type inet:port-number; 3290 default 5432; 3291 description "If the database is located on a different 3292 system, the port number may be specified."; 3293 } 3294 leaf mysql-lfc-interval { 3295 type uint64; 3296 description "Specifies the interval in seconds, 3297 at which the server will perform a lease file cleanup 3298 (LFC)."; 3299 } 3300 leaf mysql-connect-timeout { 3301 type uint64; 3302 description "Defines the timeout interval for 3303 connecting to the database. A longer interval can 3304 be specified if the database is remote."; 3305 } 3306 } 3307 case postgresql { 3308 choice postgresql-host { 3309 case postgresql-server-hostname { 3310 leaf postgresql-hostname { 3311 type inet:domain-name; 3312 default "localhost"; 3313 description "If the database is located on a 3314 different system to the DHCPv6 server, the 3315 domain name can be specified."; 3316 } 3317 } 3318 case postgresql-server-address { 3319 leaf postgresql-address { 3320 type inet:ip-address; 3321 default "::"; 3322 description "Configure the location of the database 3323 using an IP (v6 or v6) literal address"; 3324 } 3325 } 3326 } 3327 leaf postgresql-username { 3328 type string; 3329 description "User name of the account under which 3330 the server will access the database"; 3331 } 3332 leaf postgresql-password { 3333 type string; 3334 description "Password of the account under which 3335 the server will access the database"; 3336 } 3337 leaf postgresql-port { 3338 type inet:port-number; 3339 default 5432; 3340 description "If the database is located on a different 3341 system, the port number may be specified"; 3342 } 3343 leaf postgresql-lfc-interval { 3344 type uint64; 3345 description "Specifies the interval in seconds, 3346 at which the server will perform a lease file cleanup 3347 (LFC)"; 3348 } 3349 leaf postgresql-connect-timeout { 3350 type uint64; 3351 description "Defines the timeout interval for 3352 connecting to the database. A longer interval can 3353 be specified if the database is remote."; 3354 } 3355 } 3356 } 3357 } 3358 } 3359 } 3361 /* 3362 * Augmentations 3363 */ 3365 augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:vendor-config" 3366 { 3367 uses dhcpv6-server-config:config; 3368 } 3369 } 3370 3372 Appendix C. Example definition of class selector configuration 3374 The module "example-dhcpv6-class-selector" provides an example of how 3375 vendor specific class selection configuration can be modeled and 3376 integrated with the "ietf-dhcpv6-server" module defined in this 3377 document. 3379 The example module defines "client-class-names" with associated 3380 matching rules. A client can be classified based on "client-id", 3381 "interface-id" (ingress interface of the client's messages), packets 3382 source or destination address, relay link address, relay link 3383 interface-id and more. Actually there is endless methods for 3384 classifying clients. So this standard does not try to provide full 3385 specification for class selection, it only shows an example how it 3386 can be defined. 3388 At the end of the example augment statements are used to add the 3389 defined class selector rules into the overall DHCPv6 addressing 3390 hierarchy. This is done in two main parts: 3392 * The augmented class-selector configuration in the main DHCPv6 3393 Server configuration. 3395 * client-class leafrefs augmented to "network-range", "address-pool" 3396 and "pd-pool", pointing to the "client-class-name" that is 3397 required. 3399 The mechanism is as follows: class is associated to client based on 3400 rules and then client is allowed to get address(es)/prefix(es) from 3401 given network-range/pool if the class name matches. 3403 file example-dhcpv6-class-selector.yang 3405 module example-dhcpv6-class-selector { 3406 yang-version 1.1; 3407 namespace 3408 "urn:ietf:params:xml:ns:yang:example-dhcpv6-class-selector"; 3409 prefix "dhcpv6-class-selector"; 3411 import ietf-inet-types { 3412 prefix inet; 3413 } 3415 import ietf-interfaces { 3416 prefix if; 3417 } 3419 import ietf-dhcpv6-common { 3420 prefix dhcpv6-common; 3421 } 3423 import ietf-dhcpv6-server { 3424 prefix dhcpv6-server; 3425 } 3427 organization "DHC WG"; 3428 contact 3429 "yong@csnet1.cs.tsinghua.edu.cn 3430 lh.sunlinh@gmail.com 3431 ian.farrer@telekom.de 3432 sladjana.zechlin@telekom.de 3433 hezihao9512@gmail.com"; 3435 description "This YANG module defines components for the definition 3436 and configuration of the client class selector function for a 3437 DHCPv6 server. As this functionality varies greatly between 3438 different implementations, the module provided as an example 3439 only."; 3441 revision 2020-05-26 { 3442 description "Version update for draft -11 publication and 3443 to align revisions across the different modules."; 3444 reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; 3445 } 3446 revision 2019-06-13 { 3447 description ""; 3448 reference "I-D: draft-ietf-dhc-dhcpv6-yang"; 3449 } 3451 /* 3452 * Groupings 3453 */ 3455 grouping client-class-id { 3456 description "Definitions of client message classification for 3457 authorization and assignment purposes."; 3458 leaf client-class-name { 3459 type string; 3460 description "Unique Identifier for client class identification 3461 list entries."; 3462 } 3463 choice id-type { 3464 description "Definitions for different client identifier 3465 types."; 3466 mandatory true; 3467 case client-id-id { 3468 description "Client class selection based on a string literal 3469 client identifier."; 3470 leaf client-id { 3471 description "String literal client identifier."; 3472 mandatory true; 3473 type string; 3474 } 3475 } 3476 case received-interface-id { 3477 description "Client class selection based on the incoming 3478 interface of the DHCPv6 message."; 3479 leaf received-interface { 3480 description "Reference to the interface entry 3481 for the incoming DHCPv6 message."; 3482 type if:interface-ref; 3483 } 3484 } 3485 case packet-source-address-id { 3486 description "Client class selection based on the source 3487 address of the DHCPv6 message."; 3488 leaf packet-source-address { 3489 description "Source address of the DHCPv6 message."; 3490 mandatory true; 3491 type inet:ipv6-address; 3492 } 3493 } 3494 case packet-destination-address-id { 3495 description "Client class selection based on the destination 3496 address of the DHCPv6 message."; 3497 leaf packet-destination-address { 3498 description "Destination address of the DHCPv6 message."; 3499 mandatory true; 3500 type inet:ipv6-address; 3501 } 3502 } 3503 case relay-link-address-id { 3504 description "Client class selection based on the prefix 3505 of the link-address field in the relay agent message 3506 header."; 3507 leaf relay-link-address { 3508 description "Prefix of the link-address field in the relay 3509 agent message header."; 3510 mandatory true; 3511 type inet:ipv6-prefix; 3512 } 3513 } 3514 case relay-peer-address-id { 3515 description "Client class selection based on the value of the 3516 peer-address field in the relay agent message header."; 3517 leaf relay-peer-address { 3518 description "Prefix of the peer-address field 3519 in the relay agent message header."; 3520 mandatory true; 3521 type inet:ipv6-prefix; 3522 } 3523 } 3524 case relay-interface-id { 3525 description "Client class selection based on the incoming 3526 interface-id option."; 3527 leaf relay-interface { 3528 description "Reference to the interface entry 3529 for the incoming DHCPv6 message."; 3530 type string; 3531 } 3532 } 3533 case user-class-option-id { 3534 description "Client class selection based on the value of the 3535 OPTION_USER_CLASS(15) and its user-class-data field."; 3536 leaf user-class-data { 3537 description "Value of the enterprise-number field."; 3538 mandatory true; 3539 type string; 3540 } 3541 } 3542 case vendor-class-present-id { 3543 description "Client class selection based on the presence of 3544 OPTION_VENDOR_CLASS(16) in the received message."; 3545 leaf vendor-class-present { 3546 description "Presence of OPTION_VENDOR_CLASS(16) 3547 in the received message."; 3548 mandatory true; 3549 type boolean; 3550 } 3551 } 3552 case vendor-class-option-enterprise-number-id { 3553 description "Client class selection based on the value of the 3554 enterprise-number field in OPTION_VENDOR_CLASS(16)."; 3555 leaf vendor-class-option-enterprise-number { 3556 description "Value of the enterprise-number field."; 3557 mandatory true; 3558 type uint32; 3559 } 3560 } 3561 case vendor-class-option-data-id { 3562 description "Client class selection based on the value 3563 of a data field within a vendor-class-data entry 3564 for a matching enterprise-number field 3565 in OPTION_VENDOR_CLASS(16)."; 3566 container vendor-class-option-data { 3567 leaf vendor-class-option-enterprise-number { 3568 description "Value of the enterprise-number field 3569 for matching the data contents."; 3570 mandatory true; 3571 type uint32; 3572 } 3573 leaf vendor-class-data { 3574 description "Vendor class data to match."; 3575 mandatory true; 3576 type string; 3577 } 3578 } 3579 } 3580 case remote-id { 3581 description "Client class selection based on the value 3582 of Remote-ID ."; 3583 container remote-id { 3584 leaf vendor-class-option-enterprise-number { 3585 description "Value of the enterprise-number field 3586 for matching the data contents."; 3587 mandatory true; 3588 type uint32; 3589 } 3590 leaf remote-id { 3591 description "Remote-ID data to match."; 3592 mandatory true; 3593 type string; 3594 } 3595 } 3596 } 3597 case client-duid-id { 3598 description "Client class selection based on the value 3599 of the received client DUID."; 3600 uses dhcpv6-common:duid; 3601 } 3602 } 3603 } 3605 /* 3606 * Augmentations 3607 */ 3609 augment 3610 "/dhcpv6-server:dhcpv6-server/dhcpv6-server:class-selector" { 3611 container client-classes { 3612 list class { 3613 description "List of the client class identifiers applicable 3614 to clients served by this address pool"; 3615 key client-class-name; 3616 uses dhcpv6-class-selector:client-class-id; 3617 } 3618 } 3619 } 3621 augment 3622 "/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/ 3623 dhcpv6-server:network-range" { 3624 leaf-list client-class { 3625 type leafref { 3626 path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:class-select 3627 or/client-classes/class/client-class-name"; 3628 } 3629 } 3630 } 3632 augment 3633 "/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/ 3634 dhcpv6-server:network-range/dhcpv6-server:address-pools/ 3635 dhcpv6-server:address-pool" { 3636 leaf-list client-class { 3637 type leafref { 3638 path "/dhcpv6-server:dhcpv6-server/dhcpv6-server: 3639 class-selector/client-classes/class/client-class-name"; 3641 } 3642 } 3643 } 3645 augment 3646 "/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/ 3647 dhcpv6-server:network-range/dhcpv6-server:prefix-pools/ 3648 dhcpv6-server:prefix-pool" { 3649 leaf-list client-class { 3650 type leafref { 3651 path "/dhcpv6-server:dhcpv6-server/dhcpv6-server: 3652 class-selector/client-classes/class/client-class-name"; 3653 } 3654 } 3655 } 3656 } 3657 3659 Authors' Addresses 3661 Yong Cui 3662 Tsinghua University 3663 Beijing 3664 100084 3665 P.R. China 3667 Phone: +86-10-6260-3059 3668 Email: cuiyong@tsinghua.edu.cn 3670 Linhui Sun 3671 Tsinghua University 3672 Beijing 3673 100084 3674 P.R. China 3676 Phone: +86-10-6278-5822 3677 Email: lh.sunlinh@gmail.com 3679 Ian Farrer 3680 Deutsche Telekom AG 3681 TAI, Landgrabenweg 151 3682 53227 Bonn 3683 Germany 3685 Email: ian.farrer@telekom.de 3686 Sladjana Zechlin 3687 Deutsche Telekom AG 3688 CTO-IPT, Landgrabenweg 151 3689 53227 Bonn 3690 Germany 3692 Email: sladjana.zechlin@telekom.de 3694 Zihao He 3695 Tsinghua University 3696 Beijing 3697 100084 3698 P.R. China 3700 Phone: +86-10-6278-5822 3701 Email: hezihao9512@gmail.com 3703 Michal Nowikowski 3704 Internet Systems Consortium 3705 Gdansk 3706 Poland 3708 Email: godfryd@isc.org