idnits 2.17.1 draft-cui-dhc-dhcpv6-yang-01.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 70 instances of too long lines in the document, the longest one being 36 characters in excess of 72. ** The abstract seems to contain references ([RFC6020]), which it shouldn't. Please replace those with straight textual mentions of the documents in question. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 324 has weird spacing: '...d-count uint3...' == Line 325 has weird spacing: '...d-count uin...' == Line 326 has weird spacing: '...d-count uin...' == Line 329 has weird spacing: '...d-count uin...' == Line 330 has weird spacing: '...d-count uin...' == (9 more instances...) == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (March 24, 2015) is 3321 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Unused Reference: 'RFC6087' is defined on line 1431, but no explicit reference was found in the text ** Obsolete normative reference: RFC 3315 (Obsoleted by RFC 8415) ** Obsolete normative reference: RFC 3633 (Obsoleted by RFC 8415) ** Obsolete normative reference: RFC 6087 (Obsoleted by RFC 8407) Summary: 5 errors (**), 0 flaws (~~), 9 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 H. Wang 4 Intended status: Standards Track L. Sun 5 Expires: September 25, 2015 Tsinghua University 6 March 24, 2015 8 YANG Data Model for DHCPv6 Configuration 9 draft-cui-dhc-dhcpv6-yang-01 11 Abstract 13 There has no unified method to configure DHCPv6 server ,relay and 14 client itself, always pre-configured manually by operators. 16 IETF netmod WG has developed a general data model for NETCONF 17 protocol, YANG data model [RFC6020]. 19 This document defines a YANG data model for the configuration and 20 management of DHCPv6 server, DHCPv6 relay and DHCPv6 client. With 21 this model, the operators can configure and manage the devices by 22 using NETCONF. 24 Requirements Language 26 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 27 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 28 document are to be interpreted as described in [RFC2119]. 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 http://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 September 25, 2015. 47 Copyright Notice 49 Copyright (c) 2015 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 54 (http://trustee.ietf.org/license-info) in effect on the date of 55 publication of this document. Please review these documents 56 carefully, as they describe your rights and restrictions with respect 57 to this document. Code Components extracted from this document must 58 include Simplified BSD License text as described in Section 4.e of 59 the Trust Legal Provisions and are provided without warranty as 60 described in the Simplified BSD License. 62 Table of Contents 64 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 65 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 66 2. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 3 67 2.1. DHCPv6 server . . . . . . . . . . . . . . . . . . . . . . 3 68 2.2. DHCPv6 relay . . . . . . . . . . . . . . . . . . . . . . 3 69 2.3. DHCPv6 client . . . . . . . . . . . . . . . . . . . . . . 3 70 3. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 3 71 3.1. DHCPv6 Server Tree Diagrams . . . . . . . . . . . . . . . 4 72 3.2. DHCPv6 Relay Tree Diagrams . . . . . . . . . . . . . . . 7 73 3.3. DHCPv6 Client Tree Diagrams . . . . . . . . . . . . . . . 9 74 3.4. Notifications Mechanism for DHCPv6 . . . . . . . . . . . 11 75 4. DHCPv6 YANG Model . . . . . . . . . . . . . . . . . . . . . . 13 76 5. Security Considerations (TBD) . . . . . . . . . . . . . . . . 31 77 6. IANA Considerations (TBD) . . . . . . . . . . . . . . . . . . 31 78 7. Acknowledgements (TBD) . . . . . . . . . . . . . . . . . . . 31 79 8. Normative References . . . . . . . . . . . . . . . . . . . . 31 80 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 82 1. Introduction 84 This document defines a YANG data model for the configuration and 85 management of DHCPv6 server, DHCPv6 relay and DHCPv6 client. With 86 this model, the operators can configure and manage the devices by 87 using NETCONF. 89 Model include three sub-modules: 91 o DHCPv6 server 93 o DHCPv6 relay 94 o DHCPv6 client 96 1.1. Terminology 98 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 99 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 100 document are to be interpreted as described in [RFC2119]. 102 The reader should be familiar with the terms defined in DHCPv6 103 [RFC3315] and relevant documents. 105 DHCPv6 tree diagrams provide a concise representation of a YANG 106 module to help readers understand the module structure. The meaning 107 if the symbols in these diagrams is as follows: 109 o Brackets "[" and "]" enclose list keys. 111 o Parentheses "(" and ")" enclose choice and case nodes, and case 112 nodes are also marked with a colon (":"). 114 o Symbols after data node names: "?" means an optional node, and "*" 115 denotes a list and leaf-list. 117 o Abbreviations before data node names: "rw" means configuration 118 data (read-write), and "ro" means state data (read-only). 120 2. Objectives 122 This document defines a YANG data model that can be used to configure 123 and manage DHCPv6 server, DHCPv6 relay and DHCPv6 client. 125 2.1. DHCPv6 server 127 DHCPv6 server parameters. 129 2.2. DHCPv6 relay 131 DHCPv6 relay parameters. 133 2.3. DHCPv6 client 135 DHCPv6 client parameters. 137 3. DHCPv6 Tree Diagrams 138 3.1. DHCPv6 Server Tree Diagrams 140 +--rw dhcpv6 141 +--rw server {dhcpv6-server}? 142 +--rw servAttributes 143 | +--rw name string 144 | +--ro duid uint32 145 | +--rw enable boolean 146 | +--rw description? string 147 | +--rw pd-function boolean 148 | +--rw two-step-interaction boolean 149 | +--rw rapidCommit boolean 150 | +--ro vendorInfo 151 | +--ro entNum uint8 152 | +--ro data* string 153 +--rw address-pools 154 | +--rw address-pool* [pool-name] 155 | | +--rw pool-name string 156 | | +--rw pool-prefix inet:ipv6-prefix 157 | | +--rw start-address inet:ipv6-address-no-zone 158 | | +--rw end-address inet:ipv6-address-no-zone 159 | | +--rw preferred-lifetime yang:timeticks 160 | | +--rw valid-lifetime yang:timeticks 161 | | +--ro used-ipv6-count uint32 162 | | +--ro idle-ipv6-count uint32 163 | +--ro bindingInfo* [cliDUID] 164 | +--ro cliDUID uint32 165 | +--ro cliIA* [iaid] 166 | +--ro iaType string 167 | +--ro iaid uint8 168 | +--ro cliAddr* inet:ipv6-address 169 | +--ro pool-name? string 170 +--rw prefix-pools 171 | +--rw prefix-pool* [pool-name] 172 | | +--rw pool-name string 173 | | +--rw prefix inet:ipv6-prefix 174 | | +--rw prefix-length uint8 175 | | +--rw preferred-lifetime yang:timeticks 176 | | +--rw valid-lifetime yang:timeticks 177 | +--ro bindingInfo* [cliDUID] 178 | +--ro cliDUID uint32 179 | +--ro cliIAPD* [iaid] 180 | +--ro iaid uint8 181 | +--ro cliPrefix* inet:ipv6-prefix 182 | +--ro cliPrefixLen* uint8 183 | +--ro pool-name? string 184 +--rw otherParas? 185 | +--rw dnsServer* [dnsName] 186 | | +--rw dnsName string 187 | | +--rw dnsServAddr inet:ipv6-address 188 | +--rw domainSearchList string 189 | +--rw sipServer* [sipServDomainName] 190 | | +--rw sipServDomainName string 191 | | +--rw sipServAddr inet:ipv6-address 192 | +--rw sntpServer* [sntpServName] 193 | | +--rw sntpServName string 194 | | +--rw sntpServAddr inet:ipv6-address 195 | +--rw ntpServParas* [ntpName] 196 | | +--rw ntpName string 197 | | +--rw ntpServAddr inet:ipv6-address 198 | | +--rw ntpServMulAddr inet:ipv6-address 199 | | +--rw ntpServFQDN string 200 | +--rw nisParas 201 | | +--rw nisServAddr inet:ipv6-address 202 | | +--rw nisCli* [cliDUID] 203 | | +--rw cliDUID uint32 204 | | +--rw cliDomainName string 205 | +--rw nispParas 206 | +--rw nispServAddr inet:ipv6-address 207 | +--rw nispCli* [cliDUID] 208 | +--rw cliDUID uint32 209 | +--rw cliDomainName string 210 +--rw relayOpaqueParas? 211 | +--rw relays* [relayName] 212 | +--rw relayName string 213 | +--rw interfaceInfo* [ifName] 214 | | +--rw ifName string 215 | | +--rw interface-id string 216 | +--rw subscribers* [subscriberName] 217 | | +--rw subscriberName string 218 | | +--rw subscriber-id string 219 | +--rw remoteHost* [entNum] 220 | +--rw entNum uint8 221 | +--rw remote-id string 222 +--ro packetStats 223 +--ro solicit-count uint32 224 +--ro request-count uint32 225 +--ro renew-count uint32 226 +--ro rebind-count uint32 227 +--ro decline-count uint32 228 +--ro release-count uint32 229 +--ro infoReq-count uint32 230 +--ro advertise-count uint32 231 +--ro confirm-count uint32 232 +--ro reply-count uint32 233 +--ro reconfigure-count uint32 234 +--ro relay-forward-count uint32 235 +--ro relay-reply-count uint32 237 Figure 1: DHCPv6 Data Model Structure 239 Introduction of important nodes: 241 o servAttributes: This container contains basic attributes of a 242 DHCPv6 server such as DUID, server name and so on. Some optional 243 functions that can be provided by the server is also included. 245 o duid: Each server and client has only one DUID (DHCP Unique 246 Identifier). The DUID here identifies a unique DHCPv6 server for 247 clients. 249 o pd-function: Whether the server can act as a delegating router to 250 perform prefix delegation ([RFC3633]). 252 o two-step-interaction : A boolean value specifies whether the 253 server support client-server exchanges involving two messages 254 defined in ([RFC3315]). 256 o rapidCommit: Setting the value to '1' represents the server 257 support the Solicit-Reply message exchange. '0' means the server 258 will simply ignore the Rapid Commit option in Solicit message. 260 o address-pools: A container describes the DHCPv6 server's address 261 pools. 263 o address-pool: A DHCPv6 server can be configured with several 264 address pools. This list defines such address pools which are 265 distinguish by the key called "pool-name". 267 o bindingInfo: A list records a binding information for each DHCPv6 268 client that has already been allocated IPv6 addresses. 270 o prefix-pools: If a server supports prefix delegation function, 271 this container will be used to define the delegating router's 272 prefix pools. 274 o prefix-pool: Similar to server's address pools, a delegating 275 router can also be configured with multiple prefix pools specified 276 by a list called "prefix-pool". 278 o bindingInfo: A list records a binding information for each DHCPv6 279 requesting router that has already been configured IPv6 prefixes. 281 o otherParas: This container defines extra configuration parameters 282 provided by the DHCPv6 server apart from the address and prefix 283 information. Such parameters may include DNS servers, SIP 284 servers, SNTP servers, etc. 286 o relayOpaqueParas: This container contains some opaque values in 287 Relay Agent options that need to be configured on the server side 288 only for value match. Such Relay Agent options include Interface- 289 Id option, Remote-Id option and Subscriber-Id option. 291 o packetStats: A container presents the packet statistics related to 292 the DHCPv6 server. 294 3.2. DHCPv6 Relay Tree Diagrams 296 +--rw dhcpv6 297 +-- ... 298 | 299 +--rw relay {dhcpv6-relay}? 300 +--rw relayAttributes 301 | +--rw name string 302 | +--rw enable boolean 303 | +--rw destAddrs* inet:ipv6-address 304 | +--rw subscribers* [subscriberName]? 305 | | +--rw subscriberName string 306 | | +--rw subscriber-id string 307 | +--rw remoteHost* [entNum]? 308 | | +--rw entNum uint8 309 | | +--rw remote-id string 310 | +--ro vendorInfo 311 | | +--ro entNum uint8 312 | | +--ro data* string 313 | +--rw relayInterfaces 314 | +--rw relayIf* [ifName] 315 | +--rw ifName string 316 | +--rw enable boolean 317 | +--rw interface-id? string 318 | +--rw nextEntity* [destAddr] 319 | +--rw destAddr inet:ipv6-address 320 | +--rw available boolean 321 | +--rw multicast boolean 322 | +--rw server boolean 323 | +--ro packetStats 324 | +--ro cliPacketRvd-count uint32 325 | +--ro solicitRvd-count uint32 326 | +--ro requestRvd-count uint32 327 | +--ro renewRvd-count uint32 328 | +--ro rebindRvd-count uint32 329 | +--ro declineRvd-count uint32 330 | +--ro releaseRvd-count uint32 331 | +--ro infoReqRvd-count uint32 332 | +--ro relayForRvd-count uint32 333 | +--ro relayRepRvd-count uint32 334 | +--ro packetToCli-count uint32 335 | +--ro advertiseSent-count uint32 336 | +--ro confirmSent-count uint32 337 | +--ro replySent-count uint32 338 | +--ro reconfigSent-count uint32 339 | +--ro relayForSent-count uint32 340 | +--ro relayRepSent-count uint32 341 +--ro relayStats 342 +--ro cliPacketRvd-count uint32 343 +--ro relayForRvd-count uint32 344 +--ro relayRepRvd-count uint32 345 +--ro packetToCli-count uint32 346 +--ro relayForSent-count uint32 347 +--ro relayRepSent-count uint32 348 +--ro discardedPacket-count uint32 350 Introduction of important nodes: 352 o relayAttributes: A container describes some basic attributes of 353 the relay agent including some relay agent specific options data 354 that need to be configured previously. Such options include 355 Remote-Id option and Subscriber-Id option. 357 o destAddrs: Each DHCPv6 relay agent may be configured with a list 358 of destination addresses. This node defines such a list of IPv6 359 addresses that may include unicast addresses, multicast addresses 360 or other addresses. 362 o relayInterfaces: It is a sub-container of "relayAttributes" that 363 defines common configuration and state parameters in the 364 interfaces of a DHCPv6 relay agent. 366 o relayIf: A list describes a specific interface and its 367 corresponding parameters. Here we use a string called "ifName" as 368 the key of list. 370 o nextEntity: This node defines a list that is used to describe the 371 next hop entity of this relay agent. Different entities are 372 distinguished by their addresses. 374 o packetStats: A container shows packet state information of a 375 specific data communication. 377 o relayStats: The "relayStats" container records and presents the 378 overall packet statistics of the relay agent. 380 3.3. DHCPv6 Client Tree Diagrams 382 +--rw dhcpv6 383 +-- ... 384 | 385 +--rw client {dhcpv6-client}? 386 +--rw clientInterfaces 387 +--rw clientIf* [ifName] 388 +--rw ifName string 389 +--ro duid uint32 390 +--rw enable boolean 391 +--rw cliFQDN? string 392 +--rw pd-function boolean 393 +--rw rapidCommit boolean 394 +--rw dual-stack boolean 395 +--rw mo-tab 396 | +--rw m-tab boolean 397 | +--rw o-tab boolean 398 +--ro vendorInfo 399 | +--ro entNum uint8 400 | +--ro data* string 401 +--ro identity-associations 402 | +--ro identity-association* [iaid] 403 | +--ro iaid uint8 404 | +--ro iaType string 405 | +--ro ipv6Addr* inet:ipv6-address 406 | +--ro ipv6Prefix* inet:ipv6-prefix 407 | +--ro prefix-length* uint8 408 | +--ro t1-time yang:date-and-time 409 | +--ro t2-time yang:date-and-time 410 | +--ro preferred-lifetime yang:timeticks 411 | +--ro valid-lifetime yang:timeticks 412 +--ro ifOtherParas? 413 | +--ro dnsServAddr* inet:ipv6-address 414 | +--ro domainSearchList string 415 | +--ro sipServAddr* inet:ipv6-address 416 | +--ro sipServDomainNameList string 417 | +--ro uniDHCPv6ServAddr inet:ipv6-address 418 | +--ro sntpServAddr* inet:ipv6-address 419 | +--ro ntpServParas 420 | | +--ro ntpServAddr inet:ipv6-address 421 | | +--ro ntpServMulAddr inet:ipv6-address 422 | | +--ro ntpServFQDN string 423 | +--ro nisParas 424 | | +--ro nisServAddr inet:ipv6-address 425 | | +--ro nisCliDomainName string 426 | +--ro nispParas 427 | +--ro nispServAddr inet:ipv6-address 428 | +--ro nispCliDomainName string 429 +--ro packetStats 430 +--ro solicit-count uint32 431 +--ro request-count uint32 432 +--ro renew-count uint32 433 +--ro rebind-count uint32 434 +--ro decline-count uint32 435 +--ro release-count uint32 436 +--ro infoReq-count uint32 437 +--ro advertise-count uint32 438 +--ro confirm-count uint32 439 +--ro reply-count uint32 440 +--ro reconfigure-count uint32 442 Introduction of important nodes: 444 o clientInterfaces: A client may have several interfaces, it is more 445 reasonable to configure and manage parameters on the interface- 446 level. This container includes configuration and state data of a 447 DHCPv6 client in a per-interface manner. 449 o clientIf: The list defines a specific client interface and its 450 data. Different interfaces are distinguished by the "ifName" key 451 which is a configurable string value. 453 o duid: Each server and client has only one DUID (DHCP Unique 454 Identifier). The DUID here will be carried in the Client ID 455 option to identify a specific DHCPv6 client. 457 o cliFQDN: A DHCPv6 server needs to know the Fully Qualified Domain 458 Name (FQDN) of the client to achieve the DNS update. 460 o pd-function: Whether the client can act as a requesting router to 461 request prefixes using prefix delegation ([RFC3633]). 463 o rapidCommit: '1' indicates a client can initiate a Solicit-Reply 464 message exchange by adding a Rapid Commit option in Solicit 465 message. '0' means the client is not allowed to add a Rapid Commit 466 option to request addresses in a two-message exchange pattern. 468 o mo-tab: The management tab label indicates the operation mode of 469 the DHCPv6 client. 'm'=1 and 'o'=1 indicate the client will use 470 DHCPv6 to obtain all the configuration data. 'm'=1 and 'o'=0 are a 471 meaningless combination. 'm'=0 and 'o'=1 indicate the client will 472 use stateless DHCPv6 to obtain configuration data apart from 473 addresses/prefixes data. 'm'=0 and 'o'=0 represent the client will 474 not use DHCPv6 but use SLAAC to achieve configuration. 476 o identity-association: IA is a construct through which a server and 477 a client can identify, group, and manage a set of related IPv6 478 addresses. The key of the "identity-association" list is a 4-byte 479 number IAID defined in [RFC3315] . 481 o ifOtherParas: A client can obtain extra configuration data other 482 than address and prefix information through DHCPv6. This 483 container describes such data the client was configured. The 484 potential configuration data may include DNS server addresses, SIP 485 server domain names, etc. 487 o packetStats: A container records all the packet status information 488 of a specific interface. 490 3.4. Notifications Mechanism for DHCPv6 491 +--rw dhcpv6 492 +-- ... 493 | 494 +--n notifications 495 +--n dhcpv6-server-event {dhcpv6-server}? 496 | +--n addr-used-up 497 | | +--ro servDUID uint32 498 | | +--ro servName? string 499 | | +--ro pool-name string 500 | +--n prefix-used-up 501 | | +--ro servDUID uint32 502 | | +--ro servName? string 503 | | +--ro pool-name string 504 | +--n invalid-client-detected 505 | +--ro cliDUID uint32 506 | +--ro description? string 507 +--n dhcpv6-relay-event {dhcpv6-relay}? 508 | +--n topo-changed 509 | +--ro relayIfName string 510 | +--ro first-hop boolean 511 | +--ro lastEntityAddr inet:ipv6-address 512 +--n dhcpv6-client-event {dhcpv6-client}? 513 +--n invalid-ia-detected 514 | +--ro cliDUID uint32 515 | +--ro iaid uint8 516 | +--ro servDUID? uint32 517 | +--ro description? string 518 +--n retransmission-failed 519 | +--ro cliDUID uint32 520 | +--ro description enum 521 +--n failed-status-turn-up 522 +--ro cliDUID uint32 523 +--ro statusCode enum 525 Introduction of notifications: 527 o addr-used-up: raised when the address pool has run out all its 528 addresses. 530 o prefix-used-up: raised when the prefix pool has run out all it 531 prefixes. 533 o invalid-client-detected: raised when the server has found a client 534 which can be regarded as a potential attacker. Some description 535 could also be included. 537 o topo-changed: raised when the topology of the relay agent is 538 changed. 540 o invalid-ia-detected: raised when the identity association of the 541 client can be proved to be invalid. Possible condition includes 542 duplicated address, illegal address, etc. 544 o retransmission-failed: raised when the retransmission mechanism 545 defined in [RFC3315] is failed. 547 o failed-status-turn-up: raised when the client receives a message 548 includes an unsuccessful Status Code option. 550 4. DHCPv6 YANG Model 552 This module imports typedefs from [RFC6991]. 554 file "ietf-dhcpv6@2015-03-24.yang" 556 module ietf-dhcpv6 { 557 namespace "urn:ietf:params:xml:ns:yang:dhcpv6"; 558 prefix "dhcpv6"; 560 import ietf-inet-types { prefix inet; revision-date "2013-07-15"; } 561 import ietf-yang-types { prefix yang; revision-date "2013-07-15"; } 563 organization "dhc wg"; 564 contact "yong@csnet1.cs.tsinghua.edu.cn 565 wangh13@mails.tsinghua.edu.cn 566 lh.sunlinh@gmail.com 567 "; 569 description "This model defines a YANG data model that can be used to configure 570 and manage DHCPv6 server, DHCPv6 relay and DHCPv6 client."; 572 revision 2015-03-24 { 573 description "Version01: Correct grammar errors, Reuse groupings, Update 574 "dhcpv6-realy" feature, Add notifications.; 575 } 577 revision 2015-03-04 { 578 description "Version00: Initial revision."; 579 } 581 /* 582 * Features 583 */ 585 feature dhcpv6-server { 586 description 587 "Server in DHCPv6."; 589 reference 590 "RFC3315"; 591 } 593 feature dhcpv6-relay { 594 description 595 "Relay agent in DHCPv6."; 596 reference 597 "RFC3315"; 598 } 600 feature dhcpv6-client { 601 description 602 "Client in DHCPv6."; 603 reference 604 "RFC3315"; 605 } 607 /* 608 * Grouping 609 */ 611 grouping vendor-info { 612 container vendorinfo { 613 config "false"; 614 leaf entnum { 615 type uint8; 616 } 617 leaf-list data { 618 type string; 619 } 620 } 621 } 623 /* 624 * Data Nodes 625 */ 627 container server { 628 if-feature dhcpv6-server; 629 container servattributes { 630 description "This container contains basic attributes of a DHCPv6 server 631 such as DUID, server name and so on. Some optional functions that 632 can be provided by the server is also included."; 633 leaf name { 634 type string; 635 } 636 leaf duid { 637 config false; 638 description "Each server and client has only one DUID (DHCP Unique Identifier). 639 The DUID here identifies a unique DHCPv6 server for clients."; 640 type uint32; 641 } 642 leaf enable { 643 type boolean; 644 } 645 leaf description { 646 type string; 647 } 648 leaf pd-function { 649 description "Whether the server can act as a delegating router to perform 650 prefix delegation ([RFC3633])."; 651 type boolean; 652 } 653 leaf two-step-interaction { 654 description "A boolean value specifies whether the server support client-server 655 exchanges involving two messages defined in ([RFC3315])."; 656 type boolean; 657 } 658 leaf rapidcommit { 659 description "A boolean value specifies whether the server support client-server 660 exchanges involving two messages defined in ([RFC3315])."; 661 type boolean; 662 } 663 uses vendor-info; 664 } 665 container address-pools { 666 description "A container describes the DHCPv6 server's address pools."; 667 list address-pool { 668 description "A DHCPv6 server can be configured with several address pools. 669 This list defines such address pools which are distinguish by 670 the key called 'pool-name'."; 671 key pool-name; 672 leaf pool-name { 673 type string; 674 } 675 leaf pool-prefix { 676 type inet:ipv6-prefix; 677 } 678 leaf start-address { 679 type inet:ipv6-address-no-zone; 680 } 681 leaf end-address { 682 type inet:ipv6-address-no-zone; 683 } 684 leaf preferred-lifetime { 685 type yang:timeticks; 686 } 687 leaf valid-lifetime { 688 type yang:timeticks; 689 } 690 leaf used-ipv6-count { 691 config "false"; 692 type uint32; 693 } 694 leaf idle-ipv6-count { 695 config "false"; 696 type uint32; 697 } 698 } 699 list bindinginfo { 700 config "false"; 701 description "A list records a binding information for each DHCPv6 client that 702 has already been allocated IPv6 addresses."; 703 key cliduid; 704 leaf cliduid { 705 type uint32; 706 } 707 list cliia { 708 key iaid; 709 leaf iaid { 710 type uint8; 711 } 712 leaf iatype { 713 type string; 714 } 715 leaf-list cliaddr { 716 type inet:ipv6-address; 717 } 718 leaf pool-name { 719 type string; 720 } 721 } 722 } 723 } 724 container prefix-pools { 725 description "If a server supports prefix delegation function, this container 726 will be used to define the delegating router's refix pools."; 727 list prefix-pool { 728 description "Similar to server's address pools, a delegating router can also 729 be configured with multiple prefix pools specified by a list called 730 'prefix-pool'."; 731 key pool-name; 732 leaf pool-name { 733 description ""; 734 type string; 735 } 736 leaf prefix { 737 description ""; 738 type inet:ipv6-prefix; 739 } 740 leaf prefix-length { 741 description ""; 742 type uint8; 743 } 744 leaf preferred-lifetime { 745 description ""; 746 type yang:timeticks; 747 } 748 leaf valid-lifetime { 749 description ""; 750 type yang:timeticks; 751 } 752 } 753 list bindinginfo { 754 config "false"; 755 description "A list records a binding information for each DHCPv6 client that 756 has already been allocated IPv6 addresses."; 757 key cliduid; 758 leaf cliduid { 759 type uint32; 760 } 761 list cliiapd { 762 key iaid; 763 leaf iaid { 764 type uint8; 765 } 766 leaf-list cliprefix { 767 type inet:ipv6-prefix; 768 } 769 leaf-list cliprefixlen { 770 type uint8; 771 } 772 leaf pool-name { 773 type string; 774 } 775 } 776 } 777 } 778 container otherparas { 779 description "This container defines extra configuration parameters provided 780 by the DHCPv6 server apart from the address and prefix information. 781 Such parameters may include DNS servers, SIP servers, SNTP servers, 782 etc."; 783 list dnsserver { 784 key dnsname; 785 leaf dnsname { 786 type string; 787 } 788 leaf dnsservaddr { 789 type inet:ipv6-address; 790 } 791 } 792 leaf domainsearchlist { 793 type string; 794 } 795 list sipserver { 796 key sipservdomainname; 797 leaf sipserverdomainname { 798 type string; 799 } 800 leaf sipservaddr { 801 type inet:ipv6-address; 802 } 803 } 804 list sntpserver { 805 key sntpservname; 806 leaf sntpservname { 807 type string; 808 } 809 leaf sntpservaddr { 810 type inet:ipv6-address; 811 } 812 } 813 list ntpservparas { 814 key ntpname; 815 leaf ntpname { 816 type string; 817 } 818 leaf ntpservaddr { 819 type inet:ipv6-address; 820 } 821 leaf ntpservmuladdr { 822 type inet:ipv6-address; 823 } 824 leaf ntpservfqdn { 825 type string; 826 } 827 } 828 container nisparas { 829 leaf nisservaddr { 830 type inet:ipv6-address; 831 } 832 list niscli { 833 key cliduid; 834 leaf cliduid { 835 type uint32; 836 } 837 leaf clidomainname { 838 type string; 839 } 840 } 841 } 842 container nispparas { 843 leaf nispservaddr { 844 type inet:ipv6-address; 845 } 846 list nispcli { 847 key cliduid; 848 leaf cliduid { 849 type uint32; 850 } 851 leaf clidomainname { 852 type string; 853 } 854 } 855 } 856 } 857 container relayopaqueparas { 858 description "This container contains some opaque values in Relay Agent options 859 that need to be configured on the server side only for value match. 860 Such Relay Agent options include Interface-Id option, Remote-Id 861 option and Subscriber-Id option."; 862 list relays { 863 key relayname; 864 leaf relayname { 865 type string; 866 } 867 list interfaceinfo { 868 key ifname; 869 leaf ifname { 870 type string; 871 } 872 leaf interface-id { 873 type string; 874 } 875 } 876 list subscribers { 877 key subscribername; 878 leaf subscribername { 879 type string; 880 } 881 leaf subscribernameid { 882 type string; 883 } 884 } 885 list remotehost { 886 key entnum; 887 leaf entnum { 888 type uint8; 889 } 890 leaf remote-id { 891 type string; 892 } 893 } 894 } 895 } 896 container packetstats { 897 config "false"; 898 description "A container presents the packet statistics related to the DHCPv6 899 server."; 900 leaf solicit-count { 901 type uint32; 902 } 903 leaf request-count { 904 type uint32; 905 } 906 leaf renew-count { 907 type uint32; 908 } 909 leaf rebind-count { 910 type uint32; 911 } 912 leaf decline-count { 913 type uint32; 914 } 915 leaf release-count { 916 type uint32; 917 } 918 leaf inforeq-count { 919 type uint32; 920 } 921 leaf advertise-count { 922 type uint32; 923 } 924 leaf confirm-count { 925 type uint32; 926 } 927 leaf reply-count { 928 type uint32; 929 } 930 leaf reconfigure-count { 931 type uint32; 932 } 933 leaf relay-forward-count { 934 type uint32; 935 } 936 leaf relay-reply-count { 937 type uint32; 938 } 939 } 940 } 942 container relay { 943 if-feature dhcpv6-relay; 944 container relayattributes { 945 description "A container describes some basic attributes of the relay agent 946 including some relay agent specific options data that need to be configured 947 previously. Such options include Remote-Id option and Subscriber-Id option."; 948 leaf name { 949 type string; 950 } 951 leaf enable { 952 type boolean; 953 } 954 leaf-list destaddrs { 955 description "Each DHCPv6 relay agent may be configured with a list of destination 956 addresses. This node defines such a list of IPv6 addresses that 957 may include unicast addresses, multicast addresses or other addresses."; 958 type inet:ipv6-address; 959 } 960 list subscribers { 961 key subscribername; 962 leaf subscribername { 963 type string; 964 } 965 leaf subscriber-id { 966 type string; 967 } 968 } 969 list remotehost { 970 key entnum; 971 leaf entnum { 972 type uint8; 973 } 974 leaf remote-id { 975 type string; 976 } 977 } 978 uses vendor-info; 979 container relayinterfaces { 980 description "It is a container that defines common configuration and state 981 parameters in the interfaces of a DHCPv6 relay agent. In this 982 YANG data model for DHCPv6 relay agent, the parameters are configured 983 in a per-interface manner."; 984 list relayif { 985 description "A list describes a specific interface and its corresponding parameters. 986 Here we use a string called 'ifName' as the key of list."; 987 key ifname; 988 leaf ifname { 989 type string; 990 } 991 leaf enable { 992 type boolean; 993 } 994 leaf interface-id { 995 type string; 996 } 997 list nextentity { 998 description "This node defines a list that is used to describe the next hop 999 entity of this relay distinguished by their addresses."; 1000 key destaddr; 1001 leaf destaddr { 1002 type inet:ipv6-address; 1003 } 1004 leaf available { 1005 type boolean; 1006 } 1007 leaf multicast { 1008 type boolean; 1009 } 1010 leaf server { 1011 type boolean; 1012 } 1013 container packetstats { 1014 config "false"; 1015 description "A container shows packet state information of a specific interface. 1016 It is a sub-container of the 'relayInterfaces' container."; 1017 leaf clipacketrvd-count { 1018 type uint32; 1019 } 1020 leaf solicitrvd-count { 1021 type uint32; 1022 } 1023 leaf requestrvd-count { 1024 type uint32; 1025 } 1026 leaf renewrvd-count { 1027 type uint32; 1028 } 1029 leaf rebindrvd-count { 1030 type uint32; 1031 } 1032 leaf declinervd-count { 1033 type uint32; 1034 } 1035 leaf releaservd-count { 1036 type uint32; 1037 } 1038 leaf inforeqrvd-count { 1039 type uint32; 1040 } 1041 leaf relayforvd-count { 1042 type uint32; 1043 } 1044 leaf relayreprvd-count { 1045 type uint32; 1046 } 1047 leaf packettocli-count { 1048 type uint32; 1049 } 1050 leaf advertisesent-count { 1051 type uint32; 1052 } 1053 leaf confirmsent-count { 1054 type uint32; 1055 } 1056 leaf replysent-count { 1057 type uint32; 1058 } 1059 leaf reconfigsent-count { 1060 type uint32; 1061 } 1062 leaf relayforsent-count { 1063 type uint32; 1064 } 1065 leaf relayrepsent-count { 1066 type uint32; 1067 } 1069 } 1070 } 1071 } 1072 } 1073 } 1074 container relaystats { 1075 config "false"; 1076 description "The container records and presents the overall packet statistics 1077 of the relay agent."; 1078 leaf clipacketrvd-count { 1079 type uint32; 1080 } 1081 leaf relayforrvd-count { 1082 type uint32; 1083 } 1084 leaf relayreprvd-count { 1085 type uint32; 1086 } 1087 leaf packettocli-count { 1088 type uint32; 1089 } 1090 leaf relayforsent-count { 1091 type uint32; 1092 } 1093 leaf relayrepsent-count { 1094 type uint32; 1095 } 1096 leaf discardedpacket-count { 1097 type uint32; 1098 } 1099 } 1100 } 1102 container client { 1103 if-feature dhcpv6-client; 1104 container clientinterfaces { 1105 description "A client may have several interfaces, it is more reasonable to 1106 configure and manage parameters on the interface-level. This container 1107 includes configuration and state data of a DHCPv6 client in a 1108 per-interface manner."; 1109 list clientif { 1110 description "The list defines a specific client interface and its data. Different 1111 interfaces are distinguished by the key which is a configurable string 1112 value."; 1113 key ifname; 1114 leaf ifname { 1115 type string; 1116 } 1117 leaf duid { 1118 config "false"; 1119 description "Each server and client has only one DUID (DHCP Unique Identifier). 1120 The DUID here will be carried in the Client ID option to identify 1121 a specific DHCPv6 client."; 1122 type uint32; 1123 } 1124 leaf enable { 1125 type boolean; 1126 } 1127 leaf clifqdn { 1128 description "A DHCPv6 server needs to know the Fully Qualified Domain Name 1129 (FQDN) of the client to achieve the DNS update."; 1130 type string; 1131 } 1132 leaf pd-function { 1133 description "Whether the client can act as a requesting router to request 1134 prefixes using prefix delegation ([RFC3633])."; 1135 type boolean; 1136 } 1137 leaf rapidcommit { 1138 description "'1' indicates a client can initiate a Solicit-Reply message exchange 1139 by adding a Rapid Commit option in Solicit message. '0' means 1140 the client is not allowed to add a Rapid Commit option to request 1141 addresses in a two-message exchange pattern."; 1142 type boolean; 1143 } 1144 leaf dual-stack { 1145 type boolean; 1146 } 1147 container mo-tab { 1148 description "The management tab label indicates the operation mode of the 1149 DHCPv6 client. 'm'=1 and 'o'=1 indicate the client will use DHCPv6 1150 to obtain all the configuration data. 'm'=1 and 'o'=0 are a meaningless 1151 combination. 'm'=0 and 'o'=1 indicate the client will use stateless 1152 DHCPv6 to obtain configuration data apart from addresses/prefixes 1153 data. 'm'=0 and 'o'=0 represent the client will not use DHCPv6 1154 but use SLAAC to achieve configuration."; 1155 leaf m-tab { 1156 type boolean; 1157 } 1158 leaf o-tab { 1159 type boolean; 1160 } 1161 } 1162 uses vendor-info; 1163 container identity-associations { 1164 config "false"; 1165 description "IA is a construct through which a server and a client can identify, 1166 group, and manage a set of related IPv6 addresses. The key of 1167 the list is a 4-byte number IAID defined in [RFC3315] ."; 1168 list identity-association { 1169 key iaid; 1170 leaf iaid { 1171 type uint8; 1172 } 1173 leaf iatype { 1174 type string; 1175 } 1176 leaf-list ipv6addr { 1177 type inet:ipv6-address; 1178 } 1179 leaf-list ipv6prefix { 1180 type inet:ipv6-prefix; 1181 } 1182 leaf-list prefix-length { 1183 type uint8; 1184 } 1185 leaf t1-time { 1186 type yang:date-and-time; 1187 } 1188 leaf t2-time { 1189 type yang:date-and-time; 1190 } 1191 leaf preferred-lifetime { 1192 type yang:timeticks; 1193 } 1194 leaf valid-lifetime { 1195 type yang:timeticks; 1196 } 1197 } 1198 } 1199 container ifotherparas { 1200 config "false"; 1201 description "A client can obtain extra configuration data other than address 1202 and prefix information through DHCPv6. This container describes 1203 such data the client was configured. The potential configuration 1204 data may include DNS server addresses, SIP server domain names, etc."; 1205 leaf-list dnsservaddr { 1206 type inet:ipv6-address; 1207 } 1208 leaf domainsearchlist { 1209 type string; 1210 } 1211 leaf-list sipservaddr { 1212 type inet:ipv6-address; 1214 } 1215 leaf sipservdomainnamelist { 1216 type string; 1217 } 1218 leaf unidhcpv6servaddr { 1219 type inet:ipv6-address; 1220 } 1221 leaf-list sntpservaddr { 1222 type inet:ipv6-address; 1223 } 1224 container ntpservparas { 1225 leaf ntpservaddr { 1226 type inet:ipv6-address; 1227 } 1228 leaf ntpservmuladdr { 1229 type inet:ipv6-address; 1230 } 1231 leaf ntpservfqdn { 1232 type string; 1233 } 1234 } 1235 container nisparas { 1236 leaf nisservaddr { 1237 type inet:ipv6-address; 1238 } 1239 leaf nisclidomainname { 1240 type string; 1241 } 1242 } 1243 container nispparas { 1244 leaf nispservaddr { 1245 type inet:ipv6-address; 1246 } 1247 leaf nispclidomainname { 1248 type string; 1249 } 1250 } 1251 } 1252 container packetstats { 1253 config "false"; 1254 description "A container records all the packet status information of a specific 1255 interface."; 1256 leaf solicit-count { 1257 type uint32; 1258 } 1259 leaf request-count { 1260 type uint32; 1261 } 1262 leaf renew-count { 1263 type uint32; 1264 } 1265 leaf rebind-count { 1266 type uint32; 1267 } 1268 leaf decline-count { 1269 type uint32; 1270 } 1271 leaf release-count { 1272 type uint32; 1273 } 1274 leaf inforeq-count { 1275 type uint32; 1276 } 1277 leaf advertise-count { 1278 type uint32; 1279 } 1280 leaf confirm-count { 1281 type uint32; 1282 } 1283 leaf reply-count { 1284 type uint32; 1285 } 1286 leaf reconfigure-count { 1287 type uint32; 1288 } 1289 } 1290 } 1291 } 1292 } 1294 /* 1295 * Notifications 1296 */ 1298 notification notifications { 1299 container dhcpv6-server-event { 1300 if-feature dhcpv6-server; 1301 container addr-used-up { 1302 leaf servduid { 1303 type uint32; 1304 } 1305 leaf servname { 1306 type string; 1307 } 1308 leaf pool-name { 1309 type string; 1311 } 1312 } 1313 container prefix-used-up { 1314 leaf servduid { 1315 type uint32; 1316 } 1317 leaf servname { 1318 type string; 1319 } 1320 leaf pool-name { 1321 type string; 1322 } 1323 } 1324 container invalid-client-detected { 1325 leaf cliduid { 1326 type uint32; 1327 } 1328 leaf description { 1329 type string; 1330 } 1331 } 1332 } 1333 container dhcpv6-relay-event { 1334 if-feature dhcpv6-relay; 1335 container topo-changed { 1336 leaf relayifname { 1337 type string; 1338 } 1339 leaf first-hop { 1340 type boolean; 1341 } 1342 leaf lastentityaddr { 1343 type inet:ipv6-address; 1344 } 1345 } 1346 } 1347 container dhcpv6-client-event { 1348 if-feature dhcpv6-client; 1349 container invalid-ia-detected { 1350 leaf cliduid { 1351 type uint32; 1352 } 1353 leaf iaid { 1354 type uint8; 1355 } 1356 leaf servduid { 1357 type uint32; 1358 } 1359 leaf description { 1360 type string; 1361 } 1362 } 1363 container retransmission-failed { 1364 leaf cliduid { 1365 type uint32; 1366 } 1367 leaf description { 1368 type enumeration { 1369 enum "MRC failed"; 1370 enum "MRD failed"; 1371 } 1372 } 1373 } 1374 container failed-status-turn-up { 1375 leaf cliduid { 1376 type uint32; 1377 } 1378 leaf statuscode { 1379 type enumeration { 1380 enum "1" { 1381 description "UnspecFail"; 1382 } 1383 enum "2" { 1384 description "NoAddrAvail"; 1385 } 1386 enum "3" { 1387 description "NoBinding"; 1388 } 1389 enum "4" { 1390 description "NotOnLink"; 1391 } 1392 enum "5" { 1393 description "UseMulticast"; 1394 } 1395 } 1396 } 1397 } 1398 } 1399 } 1400 } 1401 1402 5. Security Considerations (TBD) 1404 TBD 1406 6. IANA Considerations (TBD) 1408 TBD 1410 7. Acknowledgements (TBD) 1412 TBD 1414 8. Normative References 1416 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1417 Requirement Levels", BCP 14, RFC 2119, March 1997. 1419 [RFC3315] Droms, R., Bound, J., Volz, B., Lemon, T., Perkins, C., 1420 and M. Carney, "Dynamic Host Configuration Protocol for 1421 IPv6 (DHCPv6)", RFC 3315, July 2003. 1423 [RFC3633] Troan, O. and R. Droms, "IPv6 Prefix Options for Dynamic 1424 Host Configuration Protocol (DHCP) version 6", RFC 3633, 1425 December 2003. 1427 [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the 1428 Network Configuration Protocol (NETCONF)", RFC 6020, 1429 October 2010. 1431 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 1432 Data Model Documents", RFC 6087, January 2011. 1434 [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, 1435 July 2013. 1437 Authors' Addresses 1439 Yong Cui 1440 Tsinghua University 1441 Beijing 100084 1442 P.R.China 1444 Phone: +86-10-6260-3059 1445 Email: yong@csnet1.cs.tsinghua.edu.cn 1446 Hao Wang 1447 Tsinghua University 1448 Beijing 100084 1449 P.R.China 1451 Phone: +86-10-6278-5822 1452 Email: wangh13@mails.tsinghua.edu.cn 1454 Linhui Sun 1455 Tsinghua University 1456 Beijing 100084 1457 P.R.China 1459 Phone: +86-10-6278-5822 1460 Email: lh.sunlinh@gmail.com