idnits 2.17.1 draft-ietf-teas-yang-rsvp-12.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 294 has weird spacing: '...on-port ine...' == Line 472 has weird spacing: '...ce-name lea...' == Line 482 has weird spacing: '...on-port ine...' == Line 485 has weird spacing: '...ce-name lea...' == Line 493 has weird spacing: '...ce-name lea...' == (1 more instance...) == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (January 13, 2020) is 1557 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) == Outdated reference: A later version (-09) exists of draft-ietf-teas-yang-rsvp-te-07 Summary: 0 errors (**), 0 flaws (~~), 9 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 TEAS Working Group V. Beeram 3 Internet-Draft T. Saad 4 Intended status: Standards Track Juniper Networks 5 Expires: July 16, 2020 R. Gandhi 6 Cisco Systems, Inc. 7 X. Liu 8 Jabil 9 I. Bryskin 10 Huawei Technologies 11 January 13, 2020 13 A YANG Data Model for Resource Reservation Protocol (RSVP) 14 draft-ietf-teas-yang-rsvp-12 16 Abstract 18 This document defines a YANG data model for the configuration and 19 management of RSVP Protocol. The model covers the building blocks of 20 the RSVP protocol that can be augmented and used by other RSVP 21 extension models such as RSVP extensions to Traffic-Engineering 22 (RSVP-TE). The model covers the configuration, operational state, 23 remote procedure calls, and event notifications data. 25 Status of This Memo 27 This Internet-Draft is submitted in full conformance with the 28 provisions of BCP 78 and BCP 79. 30 Internet-Drafts are working documents of the Internet Engineering 31 Task Force (IETF). Note that other groups may also distribute 32 working documents as Internet-Drafts. The list of current Internet- 33 Drafts is at https://datatracker.ietf.org/drafts/current/. 35 Internet-Drafts are draft documents valid for a maximum of six months 36 and may be updated, replaced, or obsoleted by other documents at any 37 time. It is inappropriate to use Internet-Drafts as reference 38 material or to cite them other than as "work in progress." 40 This Internet-Draft will expire on July 16, 2020. 42 Copyright Notice 44 Copyright (c) 2020 IETF Trust and the persons identified as the 45 document authors. All rights reserved. 47 This document is subject to BCP 78 and the IETF Trust's Legal 48 Provisions Relating to IETF Documents 49 (https://trustee.ietf.org/license-info) in effect on the date of 50 publication of this document. Please review these documents 51 carefully, as they describe your rights and restrictions with respect 52 to this document. Code Components extracted from this document must 53 include Simplified BSD License text as described in Section 4.e of 54 the Trust Legal Provisions and are provided without warranty as 55 described in the Simplified BSD License. 57 Table of Contents 59 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 60 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 61 1.2. Model Tree Diagram . . . . . . . . . . . . . . . . . . . 3 62 1.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 3 63 2. Model Overview . . . . . . . . . . . . . . . . . . . . . . . 3 64 2.1. Module(s) Relationship . . . . . . . . . . . . . . . . . 4 65 2.2. Design Considerations . . . . . . . . . . . . . . . . . . 4 66 2.3. Model Notifications . . . . . . . . . . . . . . . . . . . 5 67 2.4. RSVP Base YANG Model . . . . . . . . . . . . . . . . . . 5 68 2.4.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . 7 69 2.4.2. YANG Module . . . . . . . . . . . . . . . . . . . . . 11 70 2.5. RSVP Extended YANG Model . . . . . . . . . . . . . . . . 32 71 2.5.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . 32 72 2.5.2. YANG Module . . . . . . . . . . . . . . . . . . . . . 34 73 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 45 74 4. Security Considerations . . . . . . . . . . . . . . . . . . . 46 75 5. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 47 76 6. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 47 77 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 47 78 7.1. Normative References . . . . . . . . . . . . . . . . . . 47 79 7.2. Informative References . . . . . . . . . . . . . . . . . 50 80 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 50 82 1. Introduction 84 YANG [RFC6020] is a data definition language that was introduced to 85 define the contents of a conceptual data store that allows networked 86 devices to be managed using NETCONF [RFC6241]. YANG is proving 87 relevant beyond its initial confines, as bindings to other interfaces 88 (e.g. ReST) and encoding other than XML (e.g. JSON) are being 89 defined. Furthermore, YANG data models can be used as the basis of 90 implementation for other interfaces, such as CLI and programmatic 91 APIs. 93 This document defines a YANG data model that can be used to configure 94 and manage the RSVP protocol [RFC2205]. This model covers RSVP 95 protocol building blocks that can be augmented and used by other RSVP 96 extension models- such as for signaling RSVP-TE MPLS (or other 97 technology specific) Label Switched Paths (LSP)s. 99 1.1. Terminology 101 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 102 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 103 "OPTIONAL" in this document are to be interpreted as described in BCP 104 14 [RFC2119] [RFC8174] when, and only when, they appear in all 105 capitals, as shown here. 107 The terminology for describing YANG data models is found in 108 [RFC7950]. 110 1.2. Model Tree Diagram 112 A full tree diagram of the module(s) defined in this document is 113 given in subsequent sections as per the syntax defined in [RFC8340]. 115 1.3. Prefixes in Data Node Names 117 In this document, names of data nodes and other data model objects 118 are prefixed using the standard prefix associated with the 119 corresponding YANG imported modules, as shown in Table 1. 121 +-----------+--------------------+-----------+ 122 | Prefix | YANG module | Reference | 123 +-----------+--------------------+-----------+ 124 | yang | ietf-yang-types | [RFC6991] | 125 | inet | ietf-inet-types | [RFC6991] | 126 | rt-type | ietf-routing-types | XX | 127 | key-chain | ietf-key-chain | XX | 128 +---------+----------------------+-----------+ 130 Table 1: Prefixes and corresponding YANG modules 132 2. Model Overview 134 The RSVP base YANG module augments the "control-plane-protocol" list 135 in ietf-routing [RFC8349] module with specific RSVP parameters in an 136 "rsvp" container. It also defines an extension identity "rsvp" of 137 base "rt:routing-protocol" to identify the RSVP protocol. 139 The augmentation of the RSVP model by other models (e.g. RSVP-TE for 140 MPLS or other technologies) are outside the scope of this document 141 and are discussed in separate document(s), e.g. 142 [I-D.ietf-teas-yang-rsvp-te]. 144 2.1. Module(s) Relationship 146 This document divides the RSVP model into two modules: base and 147 extended RSVP modules. Some RSVP features are categorized as core to 148 the function of the protocol and are supported by most vendors 149 claiming the support for RSVP protocol. Such features configuration 150 and state are grouped in the RSVP base module. 152 Other extended RSVP features are categorized as either optional or 153 providing ability to better tune the basic functionality of the RSVP 154 protocol. The support for extended RSVP features by all vendors is 155 considered optional. Such features are grouped in a separate RSVP 156 extended module. 158 The relationship between the base and extended RSVP YANG model and 159 the IETF routing YANG model is shown in Figure 1. 161 +--------------+ 162 Routing | ietf-routing | 163 +--------------+ 164 o 165 | 166 +-----------+ 167 RSVP module | ietf-rsvp | 168 +-----------+ 169 o 170 | o: augment relationship 171 RSVP extended | 172 module +--------------------+ 173 | ietf-rsvp-extended | 174 +--------------------+ 176 Figure 1: Relationship of RSVP and RSVP extended modules with other 177 protocol modules 179 2.2. Design Considerations 181 The RSVP base model does not aim to be feature complete. The primary 182 intent is to cover a set of standard core features that are commonly 183 in use. For example: 185 o Authentication ([RFC2747]) 187 o Refresh Reduction ([RFC2961]) 189 o Hellos ([RFC3209]) 191 o Graceful Restart ([RFC3473], [RFC5063]) 192 The extended RSVP YANG model covers the configuration for optional 193 features that are not must for basic RSVP protocol operation. 195 The defined data model supports configuration inheritance for 196 neighbors, and interfaces. Data elements defined in the main 197 container (e.g. the container that encompasses the list of 198 interfaces, or neighbors) are assumed to apply equally to all 199 elements of the list, unless overridden explicitly for a certain 200 element (e.g. interface). Vendors are expected to augment the above 201 container(s) to provide the list of inheritance command for their 202 implementations. 204 2.3. Model Notifications 206 Notifications data modeling is key in any defined data model. 208 [RFC8639] and [RFC8641] define a subscription and push mechanism for 209 YANG datastores. This mechanism currently allows the user to: 211 o Subscribe notifications on a per client basis 213 o Specify subtree filters or xpath filters so that only interested 214 contents will be sent. 216 o Specify either periodic or on-demand notifications. 218 2.4. RSVP Base YANG Model 220 The RSVP base YANG data model defines the container "rsvp" as the top 221 level container in this data model. The presence of this container 222 enables the RSVP protocol functionality. 224 The derived state data is contained in "read-only" nodes directly 225 under the intended object as shown in Figure 2. 227 module: ietf-rsvp 228 +--rw rsvp! 229 +--rw globals 230 . 231 . 232 +--rw interfaces 233 . 234 +-- ro <> 235 . 236 . 237 +--rw neighbors 238 . 239 +-- ro <> 240 . 241 . 242 +--rw sessions 243 . 244 +-- ro <> 245 . 246 rpcs: 247 +--x clear-session 248 +--x clear-neighbor 250 Figure 2: RSVP high-level tree model view 252 Configuration and state data are grouped to those applicable on per 253 node (global), per interface, per neighbor, or per session. 255 Global Data: 257 The global data cover the configuration and state that is 258 applicable the RSVP protocol behavior. 260 Interface Data: 262 The interface data configuration and state model relevant 263 attributes applicable to one or all RSVP interfaces. Any data or 264 state at the "interfaces" container level is equally applicable to 265 all interfaces - unless overridden by explicit configuration or 266 state under a specific interface. 268 Neighbor Data: 270 The neighbor data cover configuration and state relevant to RSVP 271 neighbors. Neighbors can be dynamically discovered using RSVP 272 signaling or explicitly configured. 274 Session Data: 276 The sessions data branch covers configuration and state relevant 277 to RSVP sessions. This is usually derived state that is result of 278 signaling. This model defines attributes related to IP RSVP 279 sessions as defined in [RFC2205]. 281 2.4.1. Tree Diagram 283 Figure 3 shows the YANG tree representation for configuration and 284 state data that is augmenting the RSVP basic module: 286 module: ietf-rsvp 287 augment /rt:routing/rt:control-plane-protocols 288 /rt:control-plane-protocol: 289 +--rw rsvp! 290 +--rw globals 291 | +--rw sessions 292 | | +--ro session-ip* 293 | | [destination protocol-id destination-port] 294 | | +--ro destination-port inet:port-number 295 | | +--ro protocol-id uint8 296 | | +--ro source? inet:ip-address 297 | | +--ro destination inet:ip-address 298 | | +--ro session-name? string 299 | | +--ro session-state? enumeration 300 | | +--ro session-type? identityref 301 | | +--ro psbs 302 | | | +--ro psb* [] 303 | | | +--ro source-port? inet:port-number 304 | | | +--ro expires-in? uint32 305 | | +--ro rsbs 306 | | +--ro rsb* [] 307 | | +--ro source-port? inet:port-number 308 | | +--ro reservation-style? identityref 309 | | +--ro expires-in? uint32 310 | +--ro statistics 311 | | +--ro messages 312 | | | +--ro ack-sent? yang:counter64 313 | | | +--ro ack-received? yang:counter64 314 | | | +--ro bundle-sent? yang:counter64 315 | | | +--ro bundle-received? yang:counter64 316 | | | +--ro hello-sent? yang:counter64 317 | | | +--ro hello-received? yang:counter64 318 | | | +--ro integrity-challenge-sent? yang:counter64 319 | | | +--ro integrity-challenge-received? yang:counter64 320 | | | +--ro integrity-response-sent? yang:counter64 321 | | | +--ro integrity-response-received? yang:counter64 322 | | | +--ro notify-sent? yang:counter64 323 | | | +--ro notify-received? yang:counter64 324 | | | +--ro path-sent? yang:counter64 325 | | | +--ro path-received? yang:counter64 326 | | | +--ro path-err-sent? yang:counter64 327 | | | +--ro path-err-received? yang:counter64 328 | | | +--ro path-tear-sent? yang:counter64 329 | | | +--ro path-tear-received? yang:counter64 330 | | | +--ro resv-sent? yang:counter64 331 | | | +--ro resv-received? yang:counter64 332 | | | +--ro resv-confirm-sent? yang:counter64 333 | | | +--ro resv-confirm-received? yang:counter64 334 | | | +--ro resv-err-sent? yang:counter64 335 | | | +--ro resv-err-received? yang:counter64 336 | | | +--ro resv-tear-sent? yang:counter64 337 | | | +--ro resv-tear-received? yang:counter64 338 | | | +--ro summary-refresh-sent? yang:counter64 339 | | | +--ro summary-refresh-received? yang:counter64 340 | | | +--ro unknown-messages-received? yang:counter64 341 | | +--ro packets 342 | | | +--ro sent? yang:counter64 343 | | | +--ro received? yang:counter64 344 | | +--ro errors 345 | | +--ro authenticate? yang:counter64 346 | | +--ro checksum? yang:counter64 347 | | +--ro packet-length? yang:counter64 348 | +--rw graceful-restart 349 | +--rw enabled? boolean 350 +--rw interfaces 351 | +--rw refresh-reduction 352 | | +--rw enabled? boolean 353 | +--rw hellos 354 | | +--rw enabled? boolean 355 | +--rw authentication 356 | | +--rw enabled? boolean 357 | | +--rw authentication-key? string 358 | | +--rw crypto-algorithm identityref 359 | +--ro statistics 360 | | +--ro messages 361 | | | +--ro ack-sent? yang:counter64 362 | | | +--ro ack-received? yang:counter64 363 | | | +--ro bundle-sent? yang:counter64 364 | | | +--ro bundle-received? yang:counter64 365 | | | +--ro hello-sent? yang:counter64 366 | | | +--ro hello-received? yang:counter64 367 | | | +--ro integrity-challenge-sent? yang:counter64 368 | | | +--ro integrity-challenge-received? yang:counter64 369 | | | +--ro integrity-response-sent? yang:counter64 370 | | | +--ro integrity-response-received? yang:counter64 371 | | | +--ro notify-sent? yang:counter64 372 | | | +--ro notify-received? yang:counter64 373 | | | +--ro path-sent? yang:counter64 374 | | | +--ro path-received? yang:counter64 375 | | | +--ro path-err-sent? yang:counter64 376 | | | +--ro path-err-received? yang:counter64 377 | | | +--ro path-tear-sent? yang:counter64 378 | | | +--ro path-tear-received? yang:counter64 379 | | | +--ro resv-sent? yang:counter64 380 | | | +--ro resv-received? yang:counter64 381 | | | +--ro resv-confirm-sent? yang:counter64 382 | | | +--ro resv-confirm-received? yang:counter64 383 | | | +--ro resv-err-sent? yang:counter64 384 | | | +--ro resv-err-received? yang:counter64 385 | | | +--ro resv-tear-sent? yang:counter64 386 | | | +--ro resv-tear-received? yang:counter64 387 | | | +--ro summary-refresh-sent? yang:counter64 388 | | | +--ro summary-refresh-received? yang:counter64 389 | | | +--ro unknown-messages-received? yang:counter64 390 | | +--ro packets 391 | | | +--ro sent? yang:counter64 392 | | | +--ro received? yang:counter64 393 | | +--ro errors 394 | | +--ro authenticate? yang:counter64 395 | | +--ro checksum? yang:counter64 396 | | +--ro packet-length? yang:counter64 397 | +--rw interface* [interface] 398 | +--rw interface if:interface-ref 399 | +--rw refresh-reduction 400 | | +--rw enabled? boolean 401 | +--rw hellos 402 | | +--rw enabled? boolean 403 | +--rw authentication 404 | | +--rw enabled? boolean 405 | | +--rw authentication-key? string 406 | | +--rw crypto-algorithm identityref 407 | +--ro statistics 408 | +--ro messages 409 | | +--ro ack-sent? yang:counter64 410 | | +--ro ack-received? yang:counter64 411 | | +--ro bundle-sent? yang:counter64 412 | | +--ro bundle-received? yang:counter64 413 | | +--ro hello-sent? yang:counter64 414 | | +--ro hello-received? yang:counter64 415 | | +--ro integrity-challenge-sent? yang:counter64 416 | | +--ro integrity-challenge-received? yang:counter64 417 | | +--ro integrity-response-sent? yang:counter64 418 | | +--ro integrity-response-received? yang:counter64 419 | | +--ro notify-sent? yang:counter64 420 | | +--ro notify-received? yang:counter64 421 | | +--ro path-sent? yang:counter64 422 | | +--ro path-received? yang:counter64 423 | | +--ro path-err-sent? yang:counter64 424 | | +--ro path-err-received? yang:counter64 425 | | +--ro path-tear-sent? yang:counter64 426 | | +--ro path-tear-received? yang:counter64 427 | | +--ro resv-sent? yang:counter64 428 | | +--ro resv-received? yang:counter64 429 | | +--ro resv-confirm-sent? yang:counter64 430 | | +--ro resv-confirm-received? yang:counter64 431 | | +--ro resv-err-sent? yang:counter64 432 | | +--ro resv-err-received? yang:counter64 433 | | +--ro resv-tear-sent? yang:counter64 434 | | +--ro resv-tear-received? yang:counter64 435 | | +--ro summary-refresh-sent? yang:counter64 436 | | +--ro summary-refresh-received? yang:counter64 437 | | +--ro unknown-messages-received? yang:counter64 438 | +--ro packets 439 | | +--ro sent? yang:counter64 440 | | +--ro received? yang:counter64 441 | +--ro errors 442 | +--ro authenticate? yang:counter64 443 | +--ro checksum? yang:counter64 444 | +--ro packet-length? yang:counter64 445 +--rw neighbors 446 +--rw neighbor* [address] 447 +--rw address inet:ip-address 448 +--rw epoch? uint32 449 +--rw expiry-time? uint32 450 +--rw graceful-restart 451 | +--rw enabled? boolean 452 | +--rw local-restart-time? uint32 453 | +--rw local-recovery-time? uint32 454 | +--rw neighbor-restart-time? uint32 455 | +--rw neighbor-recovery-time? uint32 456 | +--rw helper-mode 457 | +--rw enabled? boolean 458 | +--rw max-helper-restart-time? uint32 459 | +--rw max-helper-recovery-time? uint32 460 | +--rw neighbor-restart-time-remaining? uint32 461 | +--rw neighbor-recovery-time-remaining? uint32 462 +--rw hello-status? enumeration 463 +--rw interface? if:interface-ref 464 +--rw neighbor-state? enumeration 465 +--rw refresh-reduction-capable? boolean 466 +--rw restart-count? yang:counter32 467 +--rw restart-time? yang:date-and-time 469 rpcs: 470 +---x clear-session 471 | +---w input 472 | +---w routing-protocol-instance-name leafref 473 | +---w (filter-type) 474 | +--:(match-all) 475 | | +---w all empty 476 | +--:(match-one) 477 | +---w session-info 478 | +---w (session-type) 479 | +--:(rsvp-session-ip) 480 | +---w destination leafref 481 | +---w protocol-id uint8 482 | +---w destination-port inet:ip-address 483 +---x clear-neighbor 484 | +---w input 485 | +---w routing-protocol-instance-name leafref 486 | +---w (filter-type) 487 | +--:(match-all) 488 | | +---w all empty 489 | +--:(match-one) 490 | +---w neighbor-address leafref 491 +---x clear-authentication 492 +---w input 493 +---w routing-protocol-instance-name leafref 494 +---w (filter-type) 495 +--:(match-all) 496 | +---w all empty 497 +--:(match-one-interface) 498 +---w interface? if:interface-ref 500 Figure 3: RSVP model tree diagram 502 2.4.2. YANG Module 504 The ietf-rsvp module imports from the following modules: 506 o ietf-interfaces defined in [RFC8343] 508 o ietf-yang-types and ietf-inet-types defined in [RFC6991] 510 o ietf-routing defined in [RFC8349] 512 o ietf-key-chain defined in [RFC8177] 514 file "ietf-rsvp@2020-01-13.yang" 515 module ietf-rsvp { 516 yang-version 1.1; 518 namespace "urn:ietf:params:xml:ns:yang:ietf-rsvp"; 520 /* Replace with IANA when assigned */ 521 prefix "rsvp"; 523 import ietf-interfaces { 524 prefix if; 525 reference "RFC8343: A YANG Data Model for Interface Management"; 526 } 528 import ietf-inet-types { 529 prefix inet; 530 reference "RFC6991: Common YANG Data Types"; 531 } 533 import ietf-yang-types { 534 prefix "yang"; 535 reference "RFC6991: Common YANG Data Types"; 536 } 538 import ietf-routing { 539 prefix "rt"; 540 reference 541 "RFC8349: A YANG Data Model for Routing Management 542 (NMDA Version)"; 543 } 545 import ietf-key-chain { 546 prefix "key-chain"; 547 reference "RFC8177: YANG Data Model for Key Chains"; 548 } 550 organization 551 "IETF Traffic Engineering Architecture and Signaling (TEAS) 552 Working Group"; 554 contact 555 "WG Web: 556 WG List: 558 Editor: Vishnu Pavan Beeram 559 561 Editor: Tarek Saad 562 564 Editor: Rakesh Gandhi 565 567 Editor: Xufeng Liu 568 570 Editor: Igor Bryskin 571 573 Editor: Himanshu Shah 574 "; 576 description 577 "This module contains the RSVP YANG data model. 578 The model fully conforms to the Network Management Datastore 579 Architecture (NMDA). 581 Copyright (c) 2019 IETF Trust and the persons 582 identified as authors of the code. All rights reserved. 584 Redistribution and use in source and binary forms, with or 585 without modification, is permitted pursuant to, and subject 586 to the license terms contained in, the Simplified BSD License 587 set forth in Section 4.c of the IETF Trust's Legal Provisions 588 Relating to IETF Documents 589 (https://trustee.ietf.org/license-info). 590 This version of this YANG module is part of RFC XXXX; see 591 the RFC itself for full legal notices."; 593 // RFC Ed.: replace XXXX with actual RFC number and remove this 594 // note. 596 // RFC Ed.: update the date below with the date of RFC publication 597 // and remove this note. 599 revision "2020-01-13" { 600 description 601 "A YANG Data Model for Resource Reservation Protocol"; 602 reference 603 "RFCXXXX: A YANG Data Model for Resource Reservation Protocol 604 (RSVP)"; 605 } 607 identity rsvp { 608 base "rt:routing-protocol"; 609 description "RSVP protocol"; 611 } 613 identity rsvp-session-type { 614 description "Base RSVP session type"; 615 } 617 identity rsvp-session-ip { 618 base rsvp-session-type; 619 description "RSVP IP session type"; 620 } 622 identity reservation-style { 623 description "Base identity for reservation style"; 624 } 626 identity reservation-wildcard-filter { 627 base reservation-style; 628 description "Wildcard-Filter (WF) Style"; 629 reference "RFC2205"; 630 } 632 identity reservation-fixed-filter { 633 base reservation-style; 634 description "Fixed-Filter (FF) Style"; 635 reference "RFC2205"; 636 } 638 identity reservation-shared-explicit { 639 base reservation-style; 640 description "Shared Explicit (SE) Style"; 641 reference "RFC2205"; 642 } 644 grouping graceful-restart-config { 645 description 646 "Base configuration parameters relating to RSVP 647 Graceful-Restart"; 648 leaf enabled { 649 type boolean; 650 description 651 "'true' if RSVP Graceful Restart is enabled. 652 'false' if RSVP Graceful Restart is disabled."; 653 } 654 } 656 grouping graceful-restart { 657 description 658 "RSVP graceful restart parameters grouping"; 660 container graceful-restart { 661 description 662 "RSVP graceful restart parameters container"; 663 uses graceful-restart-config; 664 } 665 } 667 grouping refresh-reduction-config { 668 description 669 "Configuration parameters relating to RSVP 670 refresh reduction"; 672 leaf enabled { 673 type boolean; 674 description 675 "'true' if RSVP Refresh Reduction is enabled. 676 'false' if RSVP Refresh Reduction is disabled."; 677 } 678 } 680 grouping refresh-reduction { 681 description 682 "Top level grouping for RSVP refresh reduction 683 parameters"; 684 container refresh-reduction { 685 description 686 "Top level container for RSVP refresh reduction 687 parameters"; 688 uses refresh-reduction-config; 689 } 690 } 692 grouping authentication-config { 693 description 694 "Configuration parameters relating to RSVP 695 authentication"; 696 leaf enabled { 697 type boolean; 698 description 699 "'true' if RSVP Authentication is enabled. 700 'false' if RSVP Authentication is disabled."; 701 } 702 leaf authentication-key { 703 type string; 704 description 705 "An authentication key string"; 706 reference 707 "RFC 2747: RSVP Cryptographic Authentication"; 709 } 710 leaf crypto-algorithm { 711 type identityref { 712 base key-chain:crypto-algorithm; 713 } 714 mandatory true; 715 description 716 "Cryptographic algorithm associated with key."; 717 } 718 } 720 grouping authentication { 721 description 722 "Top level grouping for RSVP authentication parameters"; 723 container authentication { 724 description 725 "Top level container for RSVP authentication 726 parameters"; 727 uses authentication-config; 728 } 729 } 731 grouping hellos-config { 732 description 733 "Configuration parameters relating to RSVP 734 hellos"; 735 leaf enabled { 736 type boolean; 737 description 738 "'true' if RSVP Hello is enabled. 739 'false' if RSVP Hello is disabled."; 740 } 741 } 743 grouping hellos { 744 description 745 "Top level grouping for RSVP hellos parameters"; 746 container hellos { 747 description 748 "Top level container for RSVP hello parameters"; 749 uses hellos-config; 750 } 751 } 753 grouping signaling-parameters-config { 754 description 755 "Configuration parameters relating to RSVP 756 signaling"; 758 } 760 grouping signaling-parameters { 761 description 762 "Top level grouping for RSVP signaling parameters"; 763 uses signaling-parameters-config; 764 } 766 grouping session-attributes-state { 767 description 768 "Top level grouping for RSVP session properties"; 769 leaf destination-port { 770 type inet:port-number; 771 description "RSVP destination port"; 772 reference "RFC2205"; 773 } 774 leaf protocol-id { 775 type uint8; 776 description "The IP protocol ID."; 777 reference "RFC2205, section 3.2"; 778 } 779 leaf source { 780 type inet:ip-address; 781 description "RSVP source address"; 782 reference "RFC2205"; 783 } 784 leaf destination { 785 type inet:ip-address; 786 description "RSVP destination address"; 787 reference "RFC2205"; 788 } 789 leaf session-name { 790 type string; 791 description 792 "The signaled name of this RSVP session."; 793 } 794 leaf session-state { 795 type enumeration { 796 enum "up" { 797 description 798 "RSVP session is up"; 799 } 800 enum "down" { 801 description 802 "RSVP session is down"; 803 } 804 } 805 description 806 "Enumeration of RSVP session states"; 807 } 808 leaf session-type { 809 type identityref { 810 base rsvp-session-type; 811 } 812 description "RSVP session type"; 813 } 814 container psbs { 815 description "Path State Block container"; 816 list psb { 817 description "List of path state blocks"; 818 leaf source-port { 819 type inet:port-number; 820 description "RSVP source port"; 821 reference "RFC2205"; 822 } 823 leaf expires-in { 824 type uint32; 825 units seconds; 826 description "Time to reservation expiry (in seconds)"; 827 } 828 } 829 } 830 container rsbs { 831 description "Reservation State Block container"; 832 list rsb { 833 description "List of reservation state blocks"; 834 leaf source-port { 835 type inet:port-number; 836 description "RSVP source port"; 837 reference "RFC2205"; 838 } 839 leaf reservation-style { 840 type identityref { 841 base reservation-style; 842 } 843 description "RSVP reservation style"; 844 } 845 leaf expires-in { 846 type uint32; 847 units seconds; 848 description "Time to reservation expiry (in seconds)"; 849 } 850 } 851 } 852 } 853 grouping neighbor-attributes { 854 description 855 "Top level grouping for RSVP neighbor properties"; 856 leaf address { 857 type inet:ip-address; 858 description 859 "Address of RSVP neighbor"; 860 } 862 leaf epoch { 863 type uint32; 864 description 865 "Neighbor epoch."; 866 } 868 leaf expiry-time { 869 type uint32; 870 units seconds; 871 description 872 "Neighbor expiry time after which the neighbor state 873 is purged if no states associated with it"; 874 } 876 container graceful-restart { 877 description 878 "Graceful restart information."; 880 leaf enabled { 881 type boolean; 882 description 883 "'true' if graceful restart is enabled for the neighbor."; 884 } 886 leaf local-restart-time { 887 type uint32; 888 units seconds; 889 description 890 "Local node restart time"; 891 } 893 leaf local-recovery-time { 894 type uint32; 895 units seconds; 896 description 897 "Local node recover time"; 898 } 900 leaf neighbor-restart-time { 901 type uint32; 902 units seconds; 903 description 904 "Neighbor restart time"; 905 } 907 leaf neighbor-recovery-time { 908 type uint32; 909 units seconds; 910 description 911 "Neighbor recover time"; 912 } 914 container helper-mode { 915 description 916 "Helper mode information "; 918 leaf enabled { 919 type boolean; 920 description 921 "'true' if helper mode is enabled."; 922 } 924 leaf max-helper-restart-time { 925 type uint32; 926 units seconds; 927 description 928 "The time the router or switch waits after it 929 discovers that a neighboring router has gone down 930 before it declares the neighbor down"; 931 } 933 leaf max-helper-recovery-time { 934 type uint32; 935 units seconds; 936 description 937 "The amount of time the router retains the state of its 938 RSVP neighbors while they undergo a graceful restart"; 939 } 941 leaf neighbor-restart-time-remaining { 942 type uint32; 943 units seconds; 944 description 945 "Number of seconds remaining for neighbor to send 946 Hello message after restart."; 947 } 948 leaf neighbor-recovery-time-remaining { 949 type uint32; 950 units seconds; 951 description 952 "Number of seconds remaining for neighbor to 953 refresh."; 954 } 955 } // helper-mode 956 } // graceful-restart 958 leaf hello-status { 959 type enumeration { 960 enum "enabled" { 961 description 962 "Enabled"; 963 } 964 enum "disabled" { 965 description 966 "Disabled"; 967 } 968 enum "restarting" { 969 description 970 "Restarting"; 971 } 972 } 973 description 974 "Hello status"; 975 } 977 leaf interface { 978 type if:interface-ref; 979 description 980 "Interface where RSVP neighbor was detected"; 981 } 983 leaf neighbor-state { 984 type enumeration { 985 enum "up" { 986 description 987 "up"; 988 } 989 enum "down" { 990 description 991 "down"; 992 } 993 enum "hello-disable" { 994 description 995 "hello-disable"; 997 } 998 enum "restarting" { 999 description 1000 "restarting"; 1001 } 1002 } 1003 description 1004 "Neighbor state"; 1005 } 1007 leaf refresh-reduction-capable { 1008 type boolean; 1009 description 1010 "enables all RSVP refresh reduction message 1011 bundling, RSVP message ID, reliable message delivery 1012 and summary refresh"; 1013 reference 1014 "RFC 2961 RSVP Refresh Overhead Reduction 1015 Extensions"; 1016 } 1018 leaf restart-count { 1019 type yang:counter32; 1020 description 1021 "Number of times this neighbor restart"; 1022 } 1024 leaf restart-time { 1025 type yang:date-and-time; 1026 description 1027 "Last restart time of the neighbor"; 1028 } 1029 } 1031 grouping packets-state { 1032 description 1033 "Packet statistics grouping"; 1034 container packets { 1035 description 1036 "Packet statistics container"; 1037 leaf sent { 1038 type yang:counter64; 1039 description 1040 "Packet sent count"; 1041 } 1043 leaf received { 1044 type yang:counter64; 1045 description 1046 "Packet received count"; 1047 } 1048 } 1049 } 1051 grouping protocol-state { 1052 description 1053 "RSVP protocol statistics grouping"; 1054 container messages { 1055 description 1056 "RSVP protocol statistics container"; 1057 leaf ack-sent { 1058 type yang:counter64; 1059 description 1060 "Hello sent count"; 1061 } 1063 leaf ack-received { 1064 type yang:counter64; 1065 description 1066 "Hello received count"; 1067 } 1069 leaf bundle-sent { 1070 type yang:counter64; 1071 description 1072 "Bundle sent count"; 1073 } 1075 leaf bundle-received { 1076 type yang:counter64; 1077 description 1078 "Bundle received count"; 1079 } 1081 leaf hello-sent { 1082 type yang:counter64; 1083 description 1084 "Hello sent count"; 1085 } 1087 leaf hello-received { 1088 type yang:counter64; 1089 description 1090 "Hello received count"; 1091 } 1092 leaf integrity-challenge-sent { 1093 type yang:counter64; 1094 description 1095 "Integrity Challenge sent count"; 1096 } 1098 leaf integrity-challenge-received { 1099 type yang:counter64; 1100 description 1101 "Integrity Challenge received count"; 1102 } 1104 leaf integrity-response-sent { 1105 type yang:counter64; 1106 description 1107 "Integrity Response sent count"; 1108 } 1110 leaf integrity-response-received { 1111 type yang:counter64; 1112 description 1113 "Integrity Response received count"; 1114 } 1116 leaf notify-sent { 1117 type yang:counter64; 1118 description 1119 "Notify sent count"; 1120 } 1122 leaf notify-received { 1123 type yang:counter64; 1124 description 1125 "Notify received count"; 1126 } 1128 leaf path-sent { 1129 type yang:counter64; 1130 description 1131 "Path sent count"; 1132 } 1134 leaf path-received { 1135 type yang:counter64; 1136 description 1137 "Path received count"; 1138 } 1139 leaf path-err-sent { 1140 type yang:counter64; 1141 description 1142 "Path error sent count"; 1143 } 1145 leaf path-err-received { 1146 type yang:counter64; 1147 description 1148 "Path error received count"; 1149 } 1151 leaf path-tear-sent { 1152 type yang:counter64; 1153 description 1154 "Path tear sent count"; 1155 } 1157 leaf path-tear-received { 1158 type yang:counter64; 1159 description 1160 "Path tear received count"; 1161 } 1163 leaf resv-sent { 1164 type yang:counter64; 1165 description 1166 "Resv sent count"; 1167 } 1169 leaf resv-received { 1170 type yang:counter64; 1171 description 1172 "Resv received count"; 1173 } 1175 leaf resv-confirm-sent { 1176 type yang:counter64; 1177 description 1178 "Confirm sent count"; 1179 } 1181 leaf resv-confirm-received { 1182 type yang:counter64; 1183 description 1184 "Confirm received count"; 1185 } 1186 leaf resv-err-sent { 1187 type yang:counter64; 1188 description 1189 "Resv error sent count"; 1190 } 1192 leaf resv-err-received { 1193 type yang:counter64; 1194 description 1195 "Resv error received count"; 1196 } 1198 leaf resv-tear-sent { 1199 type yang:counter64; 1200 description 1201 "Resv tear sent count"; 1202 } 1204 leaf resv-tear-received { 1205 type yang:counter64; 1206 description 1207 "Resv tear received count"; 1208 } 1210 leaf summary-refresh-sent { 1211 type yang:counter64; 1212 description 1213 "Summary refresh sent count"; 1214 } 1216 leaf summary-refresh-received { 1217 type yang:counter64; 1218 description 1219 "Summary refresh received count"; 1220 } 1222 leaf unknown-messages-received { 1223 type yang:counter64; 1224 description 1225 "Unknown packet received count"; 1226 } 1227 } 1228 } 1230 grouping errors-state { 1231 description 1232 "Error statistics state grouping"; 1233 container errors { 1234 description 1235 "Error statistics state container"; 1236 leaf authenticate { 1237 type yang:counter64; 1238 description 1239 "The total number of packets received with an 1240 authentication failure."; 1241 } 1243 leaf checksum { 1244 type yang:counter64; 1245 description 1246 "The total number of packets received with an invalid 1247 checksum value."; 1248 } 1250 leaf packet-length { 1251 type yang:counter64; 1252 description 1253 "The total number of packets received with an invalid 1254 packet length."; 1255 } 1256 } 1257 } 1259 grouping statistics-state { 1260 description "RSVP statistic attributes."; 1261 container statistics { 1262 config false; 1263 description 1264 "statistics state container"; 1265 uses protocol-state; 1266 uses packets-state; 1267 uses errors-state; 1268 } 1269 } 1271 grouping neighbor-derived-state { 1272 description 1273 "Derived state at neighbor level."; 1275 } 1277 grouping global-attributes { 1278 description 1279 "Top level grouping for RSVP global properties"; 1280 container sessions { 1281 description 1282 "RSVP sessions container"; 1283 list session-ip { 1284 key "destination protocol-id destination-port"; 1285 config false; 1286 description 1287 "List of RSVP sessions"; 1289 uses session-attributes-state; 1290 } 1291 } 1292 uses statistics-state; 1293 } 1295 grouping intf-attributes { 1296 description 1297 "Top level grouping for RSVP interface properties"; 1298 uses signaling-parameters; 1299 uses refresh-reduction; 1300 uses hellos; 1301 uses authentication; 1302 uses statistics-state; 1303 } 1305 augment "/rt:routing/rt:control-plane-protocols/" 1306 + "rt:control-plane-protocol" { 1307 when "rt:type = 'rsvp:rsvp'" { 1308 description 1309 "This augment is only valid when routing protocol 1310 instance type is RSVP."; 1311 } 1312 description 1313 "RSVP protocol augmentation"; 1314 container rsvp { 1315 presence "Enable RSVP feature"; 1316 description "RSVP feature container"; 1317 container globals { 1318 description "RSVP global properties."; 1319 uses global-attributes; 1320 uses graceful-restart; 1321 } 1323 container interfaces { 1324 description 1325 "RSVP interfaces container"; 1326 uses intf-attributes; 1328 list interface { 1329 key "interface"; 1330 description 1331 "RSVP interfaces."; 1332 leaf interface { 1333 type if:interface-ref; 1334 description 1335 "RSVP interface."; 1336 } 1337 uses intf-attributes; 1338 } 1339 } 1341 container neighbors { 1342 description "RSVP neighbors container"; 1343 list neighbor { 1344 key "address"; 1345 description "List of RSVP neighbors"; 1346 uses neighbor-attributes; 1347 } 1348 } 1349 } 1350 } 1352 grouping session-ref { 1353 description "Session reference information"; 1354 leaf destination { 1355 type leafref { 1356 path "/rt:routing/rt:control-plane-protocols" + 1357 "/rt:control-plane-protocol/rsvp:rsvp/rsvp:globals" + 1358 "/rsvp:sessions/rsvp:session-ip/destination"; 1359 } 1360 mandatory true; 1361 description "RSVP session"; 1362 } 1363 leaf protocol-id { 1364 type uint8; 1365 mandatory true; 1366 description "The RSVP session protocol ID"; 1367 } 1368 leaf destination-port { 1369 type inet:ip-address; 1370 mandatory true; 1371 description "The RSVP session destination port"; 1372 } 1373 } 1375 rpc clear-session { 1376 description "Clears RSVP sessions RPC"; 1377 input { 1378 leaf routing-protocol-instance-name { 1379 type leafref { 1380 path "/rt:routing/rt:control-plane-protocols/" 1381 + "rt:control-plane-protocol/rt:name"; 1382 } 1383 mandatory "true"; 1384 description 1385 "Name of the RSVP protocol instance whose session 1386 is being cleared. 1388 If the corresponding RSVP instance doesn't exist, 1389 then the operation will fail with an error-tag of 1390 'data-missing' and an error-app-tag of 1391 'routing-protocol-instance-not-found'."; 1392 } 1393 choice filter-type { 1394 mandatory true; 1395 description "Filter choice"; 1396 case match-all { 1397 leaf all { 1398 type empty; 1399 mandatory true; 1400 description "Match all RSVP sessions"; 1401 } 1402 } 1403 case match-one { 1404 container session-info { 1405 description 1406 "Specifies the specific session to invoke operation on"; 1407 choice session-type { 1408 mandatory true; 1409 description "RSVP session type"; 1410 case rsvp-session-ip { 1411 uses session-ref; 1412 } 1413 } 1414 } 1415 } 1416 } 1417 } 1418 } 1420 rpc clear-neighbor { 1421 description 1422 "RPC to clear the RSVP Hello session to a neighbor"; 1423 input { 1424 leaf routing-protocol-instance-name { 1425 type leafref { 1426 path "/rt:routing/rt:control-plane-protocols/" 1427 + "rt:control-plane-protocol/rt:name"; 1428 } 1429 mandatory "true"; 1430 description 1431 "Name of the RSVP protocol instance whose session 1432 is being cleared. 1434 If the corresponding RSVP instance doesn't exist, 1435 then the operation will fail with an error-tag of 1436 'data-missing' and an error-app-tag of 1437 'routing-protocol-instance-not-found'."; 1438 } 1439 choice filter-type { 1440 mandatory true; 1441 description "Filter choice"; 1442 case match-all { 1443 leaf all { 1444 type empty; 1445 mandatory true; 1446 description "Match all RSVP neighbor sessions"; 1447 } 1448 } 1449 case match-one { 1450 leaf neighbor-address { 1451 type leafref { 1452 path "/rt:routing/rt:control-plane-protocols" + 1453 "/rt:control-plane-protocol/rsvp:rsvp" + 1454 "/rsvp:neighbors/rsvp:neighbor/address"; 1455 } 1456 mandatory true; 1457 description "Match specific RSVP neighbor session"; 1458 } 1459 } 1460 } 1461 } 1462 } 1464 rpc clear-authentication { 1465 description 1466 "Clears RSVP Security Association (SA) before the 1467 lifetime expires."; 1468 input { 1469 leaf routing-protocol-instance-name { 1470 type leafref { 1471 path "/rt:routing/rt:control-plane-protocols/" 1472 + "rt:control-plane-protocol/rt:name"; 1473 } 1474 mandatory "true"; 1475 description 1476 "Name of the RSVP protocol instance whose session 1477 is being cleared. 1479 If the corresponding RSVP instance doesn't exist, 1480 then the operation will fail with an error-tag of 1481 'data-missing' and an error-app-tag of 1482 'routing-protocol-instance-not-found'."; 1483 } 1484 choice filter-type { 1485 mandatory true; 1486 description "Filter choice"; 1487 case match-all { 1488 leaf all { 1489 type empty; 1490 mandatory true; 1491 description "Match all RSVP security associations"; 1492 } 1493 } 1494 case match-one-interface { 1495 leaf interface { 1496 type if:interface-ref; 1497 description 1498 "Interface where RSVP security association(s) to be 1499 detected"; 1500 } 1501 } 1502 } 1503 } 1504 } 1505 } 1506 1508 2.5. RSVP Extended YANG Model 1510 The RSVP extended YANG model covers non-core RSVP feature(s). It 1511 also covers feature(s) that are not necessarily supported by all 1512 vendors, and hence, can be guarded with "if-feature" checks. 1514 2.5.1. Tree Diagram 1516 Figure 4 shows the YANG tree representation for configuration and 1517 state data that is augmenting the RSVP extended module: 1519 module: ietf-rsvp-extended 1520 augment /rt:routing/rt:control-plane-protocols 1521 /rt:control-plane-protocol/rsvp:rsvp/rsvp:globals 1522 /rsvp:graceful-restart: 1523 +--rw restart-time? uint32 1524 +--rw recovery-time? uint32 1525 augment /rt:routing/rt:control-plane-protocols 1526 /rt:control-plane-protocol/rsvp:rsvp/rsvp:globals 1527 /rsvp:statistics/rsvp:packets: 1528 +--ro discontinuity-time? yang:date-and-time 1529 +--ro out-dropped? yang:counter64 1530 +--ro in-dropped? yang:counter64 1531 +--ro out-errors? yang:counter64 1532 +--ro in-errors? yang:counter64 1533 augment /rt:routing/rt:control-plane-protocols 1534 /rt:control-plane-protocol/rsvp:rsvp/rsvp:globals 1535 /rsvp:statistics/rsvp:messages: 1536 augment /rt:routing/rt:control-plane-protocols 1537 /rt:control-plane-protocol/rsvp:rsvp/rsvp:globals 1538 /rsvp:statistics/rsvp:errors: 1539 augment /rt:routing/rt:control-plane-protocols 1540 /rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces: 1541 +--rw refresh-interval? uint32 1542 +--rw refresh-misses? uint32 1543 +--rw checksum? boolean 1544 +--rw patherr-state-removal? empty 1545 augment /rt:routing/rt:control-plane-protocols 1546 /rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces 1547 /rsvp:refresh-reduction: 1548 +--rw bundle-message-max-size? uint32 1549 +--rw reliable-ack-hold-time? uint32 1550 +--rw reliable-ack-max-size? uint32 1551 +--rw reliable-retransmit-time? uint32 1552 +--rw reliable-srefresh? empty 1553 +--rw summary-max-size? uint32 1554 augment /rt:routing/rt:control-plane-protocols 1555 /rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces 1556 /rsvp:hellos: 1557 +--rw interface-based? empty 1558 +--rw hello-interval? uint32 1559 +--rw hello-misses? uint32 1560 augment /rt:routing/rt:control-plane-protocols 1561 /rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces 1562 /rsvp:authentication: 1563 +--rw lifetime? uint32 1564 +--rw window-size? uint32 1565 +--rw challenge? empty 1566 +--rw retransmits? uint32 1567 +--rw key-chain? key-chain:key-chain-ref 1568 augment /rt:routing/rt:control-plane-protocols 1569 /rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces 1570 /rsvp:interface: 1571 +--rw refresh-interval? uint32 1572 +--rw refresh-misses? uint32 1573 +--rw checksum? boolean 1574 +--rw patherr-state-removal? empty 1575 augment /rt:routing/rt:control-plane-protocols 1576 /rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces 1577 /rsvp:interface/rsvp:refresh-reduction: 1578 +--rw bundle-message-max-size? uint32 1579 +--rw reliable-ack-hold-time? uint32 1580 +--rw reliable-ack-max-size? uint32 1581 +--rw reliable-retransmit-time? uint32 1582 +--rw reliable-srefresh? empty 1583 +--rw summary-max-size? uint32 1584 augment /rt:routing/rt:control-plane-protocols 1585 /rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces 1586 /rsvp:interface/rsvp:hellos: 1587 +--rw interface-based? empty 1588 +--rw hello-interval? uint32 1589 +--rw hello-misses? uint32 1590 augment /rt:routing/rt:control-plane-protocols 1591 /rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces 1592 /rsvp:interface/rsvp:authentication: 1593 +--rw lifetime? uint32 1594 +--rw window-size? uint32 1595 +--rw challenge? empty 1596 +--rw retransmits? uint32 1597 +--rw key-chain? key-chain:key-chain-ref 1599 Figure 4: RSVP extended model tree diagram 1601 2.5.2. YANG Module 1603 The ietf-rsvp-extended module imports from the following modules: 1605 o ietf-rsvp defined in this document 1607 o ietf-routing defined in [RFC8349] 1609 o ietf-yang-types and ietf-inet-types defined in [RFC6991] 1611 o ietf-key-chain defined in [RFC8177] 1613 Figure 5 shows the RSVP extended YANG module: 1615 file "ietf-rsvp-extended@2019-07-04.yang" 1616 module ietf-rsvp-extended { 1617 yang-version 1.1; 1618 namespace "urn:ietf:params:xml:ns:yang:ietf-rsvp-extended"; 1620 prefix "rsvp-ext"; 1622 import ietf-rsvp { 1623 prefix "rsvp"; 1624 reference 1625 "RFCXXXX: A YANG Data Model for Resource Reservation Protocol 1626 (RSVP)"; 1627 } 1629 import ietf-routing { 1630 prefix "rt"; 1631 reference 1632 "RFC8349: A YANG Data Model for Routing Management 1633 (NMDA Version)"; 1634 } 1636 import ietf-yang-types { 1637 prefix "yang"; 1638 reference "RFC6991: Common YANG Data Types"; 1639 } 1641 import ietf-key-chain { 1642 prefix "key-chain"; 1643 reference "RFC8177: YANG Data Model for Key Chains"; 1644 } 1646 organization 1647 "IETF Traffic Engineering Architecture and Signaling (TEAS) 1648 Working Group"; 1650 contact 1651 "WG Web: 1652 WG List: 1654 Editor: Vishnu Pavan Beeram 1655 1657 Editor: Tarek Saad 1658 1660 Editor: Rakesh Gandhi 1661 1663 Editor: Himanshu Shah 1664 1666 Editor: Xufeng Liu 1667 1669 Editor: Xia Chen 1670 1672 Editor: Raqib Jones 1673 1675 Editor: Bin Wen 1676 "; 1678 description 1679 "This module contains the Extended RSVP YANG data model. 1680 The model fully conforms to the Network Management Datastore 1681 Architecture (NMDA). 1683 Copyright (c) 2019 IETF Trust and the persons 1684 identified as authors of the code. All rights reserved. 1686 Redistribution and use in source and binary forms, with or 1687 without modification, is permitted pursuant to, and subject 1688 to the license terms contained in, the Simplified BSD License 1689 set forth in Section 4.c of the IETF Trust's Legal Provisions 1690 Relating to IETF Documents 1691 (https://trustee.ietf.org/license-info). 1692 This version of this YANG module is part of RFC XXXX; see 1693 the RFC itself for full legal notices."; 1695 // RFC Ed.: replace XXXX with actual RFC number and remove this 1696 // note. 1698 // RFC Ed.: update the date below with the date of RFC publication 1699 // and remove this note. 1701 revision "2019-07-04" { 1702 description 1703 "A YANG Data Model for Extended Resource Reservation 1704 Protocol"; 1705 reference 1706 "RFCXXXX: A YANG Data Model for Resource Reservation Protocol 1707 (RSVP)"; 1708 } 1710 /* RSVP features */ 1711 feature authentication { 1712 description 1713 "Indicates support for RSVP authentication"; 1715 } 1717 feature error-statistics { 1718 description 1719 "Indicates support for error statistics"; 1720 } 1722 feature global-statistics { 1723 description 1724 "Indicates support for global statistics"; 1725 } 1727 feature graceful-restart { 1728 description 1729 "Indicates support for RSVP graceful restart"; 1730 } 1732 feature hellos { 1733 description 1734 "Indicates support for RSVP hellos (RFC3209)."; 1735 } 1737 feature notify { 1738 description 1739 "Indicates support for RSVP notify message (RFC3473)."; 1740 } 1742 feature refresh-reduction { 1743 description 1744 "Indicates support for RSVP refresh reduction (RFC2961)."; 1745 } 1747 feature refresh-reduction-extended { 1748 description 1749 "Indicates support for RSVP refresh reduction (RFC2961)."; 1750 } 1752 feature per-interface-statistics { 1753 description 1754 "Indicates support for per interface statistics"; 1755 } 1757 grouping graceful-restart-extended-config { 1758 description 1759 "Configuration parameters relating to RSVP 1760 Graceful-Restart"; 1761 leaf restart-time { 1762 type uint32; 1763 units seconds; 1764 description 1765 "Graceful restart time (seconds)."; 1766 reference 1767 "RFC 5495: Description of the Resource 1768 Reservation Protocol - Traffic-Engineered 1769 (RSVP-TE) Graceful Restart Procedures"; 1770 } 1771 leaf recovery-time { 1772 type uint32; 1773 units seconds; 1774 description 1775 "RSVP state recovery time"; 1776 } 1777 } 1779 grouping authentication-extended-config { 1780 description 1781 "Configuration parameters relating to RSVP 1782 authentication"; 1783 leaf lifetime { 1784 type uint32 { 1785 range "30..86400"; 1786 } 1787 units seconds; 1788 description 1789 "Life time for each security association"; 1790 reference 1791 "RFC 2747: RSVP Cryptographic 1792 Authentication"; 1793 } 1794 leaf window-size { 1795 type uint32 { 1796 range "1..64"; 1797 } 1798 description 1799 "Window-size to limit number of out-of-order 1800 messages."; 1801 reference 1802 "RFC 2747: RSVP Cryptographic 1803 Authentication"; 1804 } 1805 leaf challenge { 1806 type empty; 1807 description 1808 "Enable challenge messages."; 1809 reference 1810 "RFC 2747: RSVP Cryptographic 1811 Authentication"; 1812 } 1813 leaf retransmits { 1814 type uint32 { 1815 range "1..10000"; 1816 } 1817 description 1818 "Number of retransmits when messages are 1819 dropped."; 1820 reference 1821 "RFC 2747: RSVP Cryptographic 1822 Authentication"; 1823 } 1824 leaf key-chain { 1825 type key-chain:key-chain-ref; 1826 description 1827 "Key chain name to authenticate RSVP 1828 signaling messages."; 1829 reference 1830 "RFC 2747: RSVP Cryptographic 1831 Authentication"; 1832 } 1833 } 1835 grouping hellos-extended-config { 1836 description 1837 "Configuration parameters relating to RSVP 1838 hellos"; 1839 leaf interface-based { 1840 type empty; 1841 description 1842 "Enable interface-based Hello adjacency if present."; 1843 } 1844 leaf hello-interval { 1845 type uint32; 1846 units milliseconds; 1847 description 1848 "Configure interval between successive Hello 1849 messages in milliseconds."; 1850 reference 1851 "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels. 1852 RFC 5495: Description of the Resource 1853 Reservation Protocol - Traffic-Engineered 1854 (RSVP-TE) Graceful Restart Procedures"; 1855 } 1856 leaf hello-misses { 1857 type uint32 { 1858 range "1..10"; 1860 } 1861 description 1862 "Configure max number of consecutive missed 1863 Hello messages."; 1864 reference 1865 "RFC 3209: RSVP-TE: Extensions to RSVP for 1866 LSP Tunnels RFC 5495: Description of the 1867 Resource Reservation Protocol - Traffic- 1868 Engineered (RSVP-TE) Graceful Restart 1869 Procedures"; 1870 } 1871 } 1873 grouping signaling-parameters-extended-config { 1874 description 1875 "Configuration parameters relating to RSVP 1876 signaling"; 1877 leaf refresh-interval { 1878 type uint32; 1879 description 1880 "Set interval between successive refreshes"; 1881 } 1882 leaf refresh-misses { 1883 type uint32; 1884 description 1885 "Set max number of consecutive missed 1886 messages for state expiry"; 1887 } 1888 leaf checksum { 1889 type boolean; 1890 description 1891 "Enable RSVP message checksum computation"; 1892 } 1893 leaf patherr-state-removal { 1894 type empty; 1895 description 1896 "State-Removal flag in Path Error message 1897 if present."; 1898 } 1899 } 1901 grouping refresh-reduction-extended-config { 1902 description 1903 "Configuration parameters relating to RSVP 1904 refresh reduction"; 1906 leaf bundle-message-max-size { 1907 type uint32 { 1908 range "512..65000"; 1909 } 1910 description 1911 "Configure maximum size (bytes) of a 1912 single RSVP Bundle message."; 1913 } 1914 leaf reliable-ack-hold-time { 1915 type uint32; 1916 units milliseconds; 1917 description 1918 "Configure hold time in milliseconds for 1919 sending RSVP ACK message(s)."; 1920 } 1921 leaf reliable-ack-max-size { 1922 type uint32; 1923 description 1924 "Configure max size of a single RSVP ACK 1925 message."; 1926 } 1927 leaf reliable-retransmit-time { 1928 type uint32; 1929 units milliseconds; 1930 description 1931 "Configure min delay in milliseconds to 1932 wait for an ACK before a retransmit."; 1933 } 1934 leaf reliable-srefresh { 1935 type empty; 1936 description 1937 "Configure use of reliable messaging for 1938 summary refresh if present."; 1939 } 1940 leaf summary-max-size { 1941 type uint32 { 1942 range "20..65000"; 1943 } 1944 description 1945 "Configure max size (bytes) of a single 1946 RSVP summary refresh message."; 1947 } 1948 } 1950 grouping packets-extended-state { 1951 description 1952 "Packet statistics."; 1953 leaf discontinuity-time { 1954 type yang:date-and-time; 1955 description 1956 "The time on the most recent occasion at which any one 1957 or more of the statistic counters suffered a 1958 discontinuity. If no such discontinuities have occurred 1959 since the last re-initialization of the local 1960 management subsystem, then this node contains the time 1961 the local management subsystem re-initialized itself."; 1962 } 1963 leaf out-dropped { 1964 type yang:counter64; 1965 description 1966 "Out packet drop count"; 1967 } 1969 leaf in-dropped { 1970 type yang:counter64; 1971 description 1972 "In packet drop count"; 1973 } 1975 leaf out-errors { 1976 type yang:counter64; 1977 description 1978 "Out packet errors count"; 1979 } 1981 leaf in-errors { 1982 type yang:counter64; 1983 description 1984 "In packet rx errors count"; 1985 } 1986 } 1988 grouping protocol-extended-state { 1989 description "RSVP protocol statistics."; 1990 } 1992 grouping errors-extended-state { 1993 description 1994 "Error statistics."; 1995 } 1997 grouping extended-state { 1998 description "RSVP statistic attributes."; 1999 uses packets-extended-state; 2000 uses protocol-extended-state; 2001 uses errors-extended-state; 2002 } 2003 /** 2004 * RSVP extensions augmentations 2005 */ 2007 /* RSVP globals graceful restart*/ 2008 augment "/rt:routing/rt:control-plane-protocols/" + 2009 "rt:control-plane-protocol/rsvp:rsvp/rsvp:globals/" + 2010 "rsvp:graceful-restart" { 2011 description 2012 "RSVP globals configuration extensions"; 2013 uses graceful-restart-extended-config; 2014 } 2016 /* RSVP statistics augmentation */ 2017 augment "/rt:routing/rt:control-plane-protocols/" + 2018 "rt:control-plane-protocol/rsvp:rsvp/rsvp:globals/" + 2019 "rsvp:statistics/rsvp:packets" { 2020 description 2021 "RSVP packet stats extensions"; 2022 uses packets-extended-state; 2023 } 2024 augment "/rt:routing/rt:control-plane-protocols/" + 2025 "rt:control-plane-protocol/rsvp:rsvp/rsvp:globals/" + 2026 "rsvp:statistics/rsvp:messages" { 2027 description 2028 "RSVP protocol message stats extensions"; 2029 uses protocol-extended-state; 2030 } 2031 augment "/rt:routing/rt:control-plane-protocols/" + 2032 "rt:control-plane-protocol/rsvp:rsvp/rsvp:globals/" + 2033 "rsvp:statistics/rsvp:errors" { 2034 description 2035 "RSVP errors stats extensions"; 2036 uses errors-extended-state; 2037 } 2039 /** 2040 * RSVP all interfaces extensions 2041 */ 2043 /* RSVP interface signaling extensions */ 2044 augment "/rt:routing/rt:control-plane-protocols/" 2045 + "rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces" { 2046 description 2047 "RSVP signaling all interfaces configuration extensions"; 2048 uses signaling-parameters-extended-config; 2049 } 2050 /* RSVP refresh reduction extension */ 2051 augment "/rt:routing/rt:control-plane-protocols/" 2052 + "rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces/" 2053 + "rsvp:refresh-reduction" { 2054 description 2055 "RSVP refresh-reduction all interface configuration 2056 extensions"; 2057 uses refresh-reduction-extended-config; 2058 } 2060 /* RSVP hellos extension */ 2061 augment "/rt:routing/rt:control-plane-protocols/" 2062 + "rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces/" 2063 + "rsvp:hellos" { 2064 description 2065 "RSVP hello all interfaces configuration extensions"; 2066 uses hellos-extended-config; 2067 } 2069 /* RSVP authentication extension */ 2070 augment "/rt:routing/rt:control-plane-protocols/" 2071 + "rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces/" 2072 + "rsvp:authentication" { 2073 description 2074 "RSVP authentication all interfaces configuration extensions"; 2075 uses authentication-extended-config; 2076 } 2078 /** 2079 * RSVP interface extensions 2080 */ 2082 /* RSVP interface signaling extensions */ 2083 augment "/rt:routing/rt:control-plane-protocols/" 2084 + "rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces/" + 2085 "rsvp:interface" { 2086 description 2087 "RSVP signaling interface configuration extensions"; 2088 uses signaling-parameters-extended-config; 2089 } 2091 /* RSVP refresh reduction extension */ 2092 augment "/rt:routing/rt:control-plane-protocols/" 2093 + "rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces/" + 2094 "rsvp:interface/rsvp:refresh-reduction" { 2095 description 2096 "RSVP refresh-reduction interface configuration extensions"; 2097 uses refresh-reduction-extended-config; 2099 } 2101 /* RSVP hellos extension */ 2102 augment "/rt:routing/rt:control-plane-protocols/" 2103 + "rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces/" + 2104 "rsvp:interface/rsvp:hellos" { 2105 description 2106 "RSVP hello interface configuration extensions"; 2107 uses hellos-extended-config; 2108 } 2110 /* RSVP authentication extension */ 2111 augment "/rt:routing/rt:control-plane-protocols/" 2112 + "rt:control-plane-protocol/rsvp:rsvp/rsvp:interfaces/" + 2113 "rsvp:interface/rsvp:authentication" { 2114 description 2115 "RSVP authentication interface configuration extensions"; 2116 uses authentication-extended-config; 2117 } 2118 } 2119 2121 Figure 5: RSVP extended YANG module 2123 3. IANA Considerations 2125 This document registers the following URIs in the IETF XML registry 2126 [RFC3688]. Following the format in [RFC3688], the following 2127 registration is requested to be made. 2129 URI: urn:ietf:params:xml:ns:yang:ietf-rsvp 2130 XML: N/A, the requested URI is an XML namespace. 2132 URI: urn:ietf:params:xml:ns:yang:ietf-rsvp-extended 2133 XML: N/A, the requested URI is an XML namespace. 2135 This document registers two YANG modules in the YANG Module Names 2136 registry [RFC6020]. 2138 name: ietf-rsvp 2139 namespace: urn:ietf:params:xml:ns:yang:ietf-rsvp 2140 prefix: ietf-rsvp 2141 reference: RFCXXXX 2143 name: ietf-rsvp-extended 2144 namespace: urn:ietf:params:xml:ns:yang:ietf-rsvp-extended 2145 prefix: ietf-rsvp-extendeed 2146 reference: RFCXXXX 2148 4. Security Considerations 2150 The YANG module specified in this document defines a schema for data 2151 that is designed to be accessed via network management protocols such 2152 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 2153 is the secure transport layer, and the mandatory-to-implement secure 2154 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 2155 is HTTPS, and the mandatory-to-implement secure transport is TLS 2156 [RFC8446]. 2158 The Network Configuration Access Control Model (NACM) [RFC8341] 2159 provides the means to restrict access for particular NETCONF or 2160 RESTCONF users to a preconfigured subset of all available NETCONF or 2161 RESTCONF protocol operations and content. 2163 There are a number of data nodes defined in the YANG module which are 2164 writable/creatable/deletable (i.e., config true, which is the 2165 default). These data nodes may be considered sensitive or vulnerable 2166 in some network environments. Write operations (e.g., ) 2167 to these data nodes without proper protection can have a negative 2168 effect on network operations. 2170 /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ 2171 rsvp: 2173 The presence of this container enables the RSVP protocol 2174 functionality on a device. It alsocontrols the configuration 2175 settings on data nodes pertaining to RSVP sessions, interfaces and 2176 neighbors. All of which are considered sensitive and if access to 2177 either of these is compromised, it can result in temporary network 2178 outages or be employed to mount DoS attacks. 2180 For RSVP authentication, the configuration supported is via the 2181 specification of key-chains [RFC8177] or the direct specification of 2182 key and authentication algorithm, and hence security considerations 2183 of [RFC8177] are inherited. This includes the considerations with 2184 respect to the local storage and handling of authentication keys. 2186 Some of the RPC operations defined in this YANG module may be 2187 considered sensitive or vulnerable in some network environments. It 2188 is thus important to control access to these operations. The RSVP 2189 YANG module support the "clear-session" and "clear-neighbor" RPCs. 2190 If access to either of these is compromised, they can result in 2191 temporary network outages be employed to mount DoS attacks. 2193 The security considerations spelled out in the YANG 1.1 specification 2194 [RFC7950] apply for this document as well. 2196 5. Acknowledgement 2198 The authors would like to thank Lou Berger for reviewing and 2199 providing valuable feedback on this document. 2201 6. Contributors 2203 Himanshu Shah 2204 Ciena 2206 Email: hshah@ciena.com 2208 Xia Chen 2209 Huawei Technologies 2211 Email: jescia.chenxia@huawei.com 2213 Raqib Jones 2214 Brocade 2216 Email: raqib@Brocade.com 2218 Bin Wen 2219 Comcast 2221 Email: Bin_Wen@cable.comcast.com 2223 7. References 2225 7.1. Normative References 2227 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2228 Requirement Levels", BCP 14, RFC 2119, 2229 DOI 10.17487/RFC2119, March 1997, 2230 . 2232 [RFC2205] Braden, R., Ed., Zhang, L., Berson, S., Herzog, S., and S. 2233 Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1 2234 Functional Specification", RFC 2205, DOI 10.17487/RFC2205, 2235 September 1997, . 2237 [RFC2747] Baker, F., Lindell, B., and M. Talwar, "RSVP Cryptographic 2238 Authentication", RFC 2747, DOI 10.17487/RFC2747, January 2239 2000, . 2241 [RFC2961] Berger, L., Gan, D., Swallow, G., Pan, P., Tommasi, F., 2242 and S. Molendini, "RSVP Refresh Overhead Reduction 2243 Extensions", RFC 2961, DOI 10.17487/RFC2961, April 2001, 2244 . 2246 [RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., 2247 and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP 2248 Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001, 2249 . 2251 [RFC3473] Berger, L., Ed., "Generalized Multi-Protocol Label 2252 Switching (GMPLS) Signaling Resource ReserVation Protocol- 2253 Traffic Engineering (RSVP-TE) Extensions", RFC 3473, 2254 DOI 10.17487/RFC3473, January 2003, 2255 . 2257 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 2258 DOI 10.17487/RFC3688, January 2004, 2259 . 2261 [RFC5063] Satyanarayana, A., Ed. and R. Rahman, Ed., "Extensions to 2262 GMPLS Resource Reservation Protocol (RSVP) Graceful 2263 Restart", RFC 5063, DOI 10.17487/RFC5063, October 2007, 2264 . 2266 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2267 the Network Configuration Protocol (NETCONF)", RFC 6020, 2268 DOI 10.17487/RFC6020, October 2010, 2269 . 2271 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2272 and A. Bierman, Ed., "Network Configuration Protocol 2273 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2274 . 2276 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2277 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2278 . 2280 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 2281 RFC 6991, DOI 10.17487/RFC6991, July 2013, 2282 . 2284 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 2285 RFC 7950, DOI 10.17487/RFC7950, August 2016, 2286 . 2288 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 2289 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 2290 . 2292 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2293 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2294 May 2017, . 2296 [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. 2297 Zhang, "YANG Data Model for Key Chains", RFC 8177, 2298 DOI 10.17487/RFC8177, June 2017, 2299 . 2301 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 2302 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 2303 . 2305 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 2306 Access Control Model", STD 91, RFC 8341, 2307 DOI 10.17487/RFC8341, March 2018, 2308 . 2310 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 2311 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 2312 . 2314 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 2315 Routing Management (NMDA Version)", RFC 8349, 2316 DOI 10.17487/RFC8349, March 2018, 2317 . 2319 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 2320 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 2321 . 2323 [RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard, 2324 E., and A. Tripathy, "Subscription to YANG Notifications", 2325 RFC 8639, DOI 10.17487/RFC8639, September 2019, 2326 . 2328 [RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications 2329 for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641, 2330 September 2019, . 2332 7.2. Informative References 2334 [I-D.ietf-teas-yang-rsvp-te] 2335 Beeram, V., Saad, T., Gandhi, R., Liu, X., Bryskin, I., 2336 and H. Shah, "A YANG Data Model for RSVP-TE Protocol", 2337 draft-ietf-teas-yang-rsvp-te-07 (work in progress), July 2338 2019. 2340 Authors' Addresses 2342 Vishnu Pavan Beeram 2343 Juniper Networks 2345 Email: vbeeram@juniper.net 2347 Tarek Saad 2348 Juniper Networks 2350 Email: tsaad@juniper.net 2352 Rakesh Gandhi 2353 Cisco Systems, Inc. 2355 Email: rgandhi@cisco.com 2357 Xufeng Liu 2358 Jabil 2360 Email: Xufeng_Liu@jabil.com 2362 Igor Bryskin 2363 Huawei Technologies 2365 Email: Igor.Bryskin@huawei.com