idnits 2.17.1 draft-ietf-alto-oam-yang-00.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 1 instance of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 303 has weird spacing: '...pe-name str...' == Line 308 has weird spacing: '...a-value str...' == Line 324 has weird spacing: '...egation ine...' == Line 340 has weird spacing: '...tervals uin...' == Line 351 has weird spacing: '...tervals uin...' == (10 more instances...) -- The document date (12 April 2022) is 737 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) == Missing Reference: 'RFCthis' is mentioned on line 1486, but not defined Summary: 0 errors (**), 0 flaws (~~), 9 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 ALTO WG J. Zhang 3 Internet-Draft Tongji University 4 Intended status: Standards Track D. Dhody 5 Expires: 14 October 2022 Huawei Technologies 6 K. Gao 7 Sichuan University 8 R. Schott 9 Deutsche Telekom 10 12 April 2022 12 A Yang Data Model for OAM and Management of ALTO Protocol 13 draft-ietf-alto-oam-yang-00 15 Abstract 17 This document defines a YANG data model for Operations, 18 Administration, and Maintenance (OAM) & Management of Application- 19 Layer Traffic Optimization (ALTO) Protocol. The operator can use the 20 data model to create and update ALTO information resources, manage 21 the access control, configure server-to-server communication and 22 server discovery, and collect statistical data. 24 Discussion Venues 26 This note is to be removed before publishing as an RFC. 28 Discussion of this document takes place on the ALTO Working Group 29 mailing list (alto@ietf.org), which is archived at 30 https://mailarchive.ietf.org/arch/browse/alto/. 32 Source for this draft and an issue tracker can be found at 33 https://github.com/openalto/draft-alto-oam-yang. 35 Status of This Memo 37 This Internet-Draft is submitted in full conformance with the 38 provisions of BCP 78 and BCP 79. 40 Internet-Drafts are working documents of the Internet Engineering 41 Task Force (IETF). Note that other groups may also distribute 42 working documents as Internet-Drafts. The list of current Internet- 43 Drafts is at https://datatracker.ietf.org/drafts/current/. 45 Internet-Drafts are draft documents valid for a maximum of six months 46 and may be updated, replaced, or obsoleted by other documents at any 47 time. It is inappropriate to use Internet-Drafts as reference 48 material or to cite them other than as "work in progress." 49 This Internet-Draft will expire on 14 October 2022. 51 Copyright Notice 53 Copyright (c) 2022 IETF Trust and the persons identified as the 54 document authors. All rights reserved. 56 This document is subject to BCP 78 and the IETF Trust's Legal 57 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 58 license-info) in effect on the date of publication of this document. 59 Please review these documents carefully, as they describe your rights 60 and restrictions with respect to this document. Code Components 61 extracted from this document must include Revised BSD License text as 62 described in Section 4.e of the Trust Legal Provisions and are 63 provided without warranty as described in the Revised BSD License. 65 Table of Contents 67 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 68 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 3 69 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 70 3.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 71 3.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 4 72 4. Design Scope and Requirements . . . . . . . . . . . . . . . . 4 73 4.1. Scope of Data Model for ALTO O&M . . . . . . . . . . . . 4 74 4.2. Basic Requirements . . . . . . . . . . . . . . . . . . . 5 75 4.3. Additional Requirements for Extensibility . . . . . . . . 6 76 4.4. Overview of ALTO O&M Data Model for Reference ALTO 77 Architecture . . . . . . . . . . . . . . . . . . . . . . 6 78 5. Design of ALTO O&M Data Model . . . . . . . . . . . . . . . . 6 79 5.1. Overview of ALTO O&M Data Model . . . . . . . . . . . . . 7 80 5.2. Meta Information of ALTO Server . . . . . . . . . . . . . 9 81 5.3. ALTO Information Resources Configuration Management . . . 9 82 5.4. Data Sources . . . . . . . . . . . . . . . . . . . . . . 12 83 5.4.1. Yang DataStore Data Source . . . . . . . . . . . . . 13 84 5.4.2. Prometheus Data Source . . . . . . . . . . . . . . . 13 85 5.5. Model for ALTO Server-to-server Communication . . . . . . 13 86 6. Design of ALTO O&M Statistics Data Model . . . . . . . . . . 13 87 6.1. Model for ALTO Logging and Fault Management . . . . . . . 14 88 6.2. Model for ALTO-specific Performance Monitoring . . . . . 14 89 7. Extension of ALTO O&M Data Model . . . . . . . . . . . . . . 15 90 8. ALTO OAM YANG Module . . . . . . . . . . . . . . . . . . . . 16 91 8.1. The ietf-alto Module . . . . . . . . . . . . . . . . . . 16 92 8.2. The ietf-alto-stats Module . . . . . . . . . . . . . . . 28 93 9. Security Considerations . . . . . . . . . . . . . . . . . . . 31 94 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 95 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 96 11.1. Normative References . . . . . . . . . . . . . . . . . . 32 97 11.2. Informative References . . . . . . . . . . . . . . . . . 33 98 Appendix A. Example Module for Information Resource Creation 99 Algorithm . . . . . . . . . . . . . . . . . . . . . . . . 34 100 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 35 101 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 103 1. Introduction 105 This document defines a YANG data model for the Operations, 106 Administration, and Maintenance (OAM) & Management of Application- 107 Layer Traffic Optimization (ALTO) Protocol. The basic purpose of 108 this YANG data model is discussed in Section 16 of [RFC7285]. The 109 operator can use the data model to create and update ALTO information 110 resources, manage the access control, configure server-to-server 111 communication and server discovery, and collect statistical data. 113 The basic structure of this YANG data model is guided by Section 16 114 of [RFC7285] and [RFC7971]. Although the scope of the YANG data 115 model in this document mainly focuses on the support of the base ALTO 116 protocol [RFC7285] and the existing ALTO standard extensions 117 (including [RFC8189], [RFC8895] and [RFC8896]), the design will also 118 be extensible for future standard extensions (e.g., 119 [I-D.ietf-alto-path-vector], [I-D.ietf-alto-unified-props-new], 120 [I-D.ietf-alto-cdni-request-routing-alto], and 121 [I-D.ietf-alto-performance-metrics]). 123 2. Requirements Language 125 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 126 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 127 "OPTIONAL" in this document are to be interpreted as described in BCP 128 14 [RFC2119] [RFC8174] when, and only when, they appear in all 129 capitals, as shown here. When the words appear in lower case, they 130 are to be interpreted with their natural language meanings. 132 3. Terminology 134 This document uses the following acronyms: 136 * OAM - Operations, Administration, and Maintainance 138 * O&M - OAM and Management 140 3.1. Tree Diagrams 142 A simplified graphical representation of the data model is used in 143 this document. The meaning of the symbols in these diagrams is 144 defined in [RFC8340]. 146 3.2. Prefixes in Data Node Names 148 In this document, names of data nodes and other data model objects 149 are often used without a prefix, as long as it is clear from the 150 context in which YANG module each name is defined. Otherwise, names 151 are prefixed using the standard prefix associated with the 152 corresponding YANG module, as shown in Table 1. 154 +===========+=================+===========+ 155 | Prefix | YANG module | Reference | 156 +===========+=================+===========+ 157 | yang | ietf-yang-types | [RFC6991] | 158 +-----------+-----------------+-----------+ 159 | inet | ietf-inet-types | [RFC6991] | 160 +-----------+-----------------+-----------+ 161 | key-chain | ietf-key-chain | [RFC8177] | 162 +-----------+-----------------+-----------+ 164 Table 1: Prefixes and corresponding 165 YANG modules 167 4. Design Scope and Requirements 169 4.1. Scope of Data Model for ALTO O&M 171 What is in the scope of this document? 173 * Data model for deploy an ALTO server/client. 175 * Data model for operate and manage a running ALTO server/client. 177 * Data model for functionality/capability configuration for ALTO 178 services. 180 * Data model for monitoring ALTO-related performance metrics. 182 What is not in the scope of this document? 184 This document does not define any data model related to specific 185 implementation, including: 187 * Data structures for how to store/deliver ALTO information 188 resources (e.g., database schema to store a network map). 190 * Data structures for how to store information collected from data 191 sources. (e.g., database schema to store topology collected from 192 an Interface to the Routing System (I2RS) client [RFC7921]) 194 4.2. Basic Requirements 196 Based on discussions and recommendations in [RFC7285] and [RFC7971], 197 the data model provided by this document satisfies basic requirements 198 listed in Table 2. 200 +======================================+========================+ 201 | Requirement | Reference | 202 +======================================+========================+ 203 | R1: The data model should support | Section 16.1 of | 204 | configuration for ALTO server setup. | [RFC7285] | 205 +--------------------------------------+------------------------+ 206 | R2: The data model should provide | Section 16.2.1 of | 207 | logging management. | [RFC7285] | 208 +--------------------------------------+------------------------+ 209 | R3: The data model should provide | Section 16.2.2 of | 210 | ALTO-related management information. | [RFC7285] | 211 +--------------------------------------+------------------------+ 212 | R4: The data model should provide | Section 16.2.3 of | 213 | metrics for server failures. | [RFC7285], Section 3.3 | 214 | | of [RFC7971] | 215 +--------------------------------------+------------------------+ 216 | R5-1: The data model should support | Section 16.2.4 of | 217 | configuration for different data | [RFC7285], Section 3.2 | 218 | sources. | of [RFC7971] | 219 +--------------------------------------+------------------------+ 220 | R5-2: The data model should support | Section 16.2.4 of | 221 | configuration for information | [RFC7285] | 222 | resource generation algorithms. | | 223 +--------------------------------------+------------------------+ 224 | R5-3: The data model should support | Section 16.2.4 of | 225 | configuration for access control at | [RFC7285] | 226 | information resource level. | | 227 +--------------------------------------+------------------------+ 228 | R6: The data model should provide | Section 16.2.5 of | 229 | performance monitoring for ALTO- | [RFC7285], Section 3.4 | 230 | specific metrics. | of [RFC7971] | 231 +--------------------------------------+------------------------+ 232 | R7: The data model should support | Section 16.2.6 of | 233 | configuration for security policy | [RFC7285] | 234 | management. | | 235 +--------------------------------------+------------------------+ 237 Table 2: Basic Requirements of Data Model for ALTO O&M. 239 4.3. Additional Requirements for Extensibility 241 R8: As the ALTO protocol is extensible, the data model for ALTO O&M 242 should allow for augmentation to support potential future extensions. 244 4.4. Overview of ALTO O&M Data Model for Reference ALTO Architecture 246 Figure 1 shows a reference architecture for ALTO server 247 implementation and YANG modules that server components implement. 248 The server manager, information resource manager and data source 249 listeners need to implement ietf-alto.yang (see Section 5). The 250 performance monitor and logging and fault manager need to implement 251 ietf-alto-stats.yang (see Section 6). 253 The data broker and algorithm plugins are not in the scope of the 254 data model defined in this document. But user specified YANG modules 255 can be applied to different algorithm plugins by augmenting the data 256 model defined in this document (see Section 7). 258 +----------------------+ +-----------------+ 259 | Performance Monitor: |<-----| Server Manager: | 260 | ietf-alto-stats.yang |<-+ +-| ietf-alto.yang | 261 +----------------------+ | | +-----------------+ 262 report 263 +----------------------+ | | +-------------------+ 264 | Logging and Fault | +---| Information | 265 | Manager: |<---+ | Resource Manager: | 266 | ietf-alto-stats.yang |<-----| ietf-alto.yang | 267 +----------------------+ +-------------------+ 268 ^| 269 || callback 270 |v 271 ............. .............................. 272 / \ ------> . Algorithm Plugin: . 273 . Data Broker . read . example-ietf-alto-alg.yang . 274 ............... .............................. 275 ^ 276 | write 277 +----------------+ Southbound ++=============++ 278 | Data Source | API || || 279 | Listener: | <==========> || Data Source || 280 | ietf-alto.yang | || || 281 +----------------+ ++=============++ 283 Figure 1: A Reference ALTO Server Architecture and YANG Modules 285 5. Design of ALTO O&M Data Model 286 5.1. Overview of ALTO O&M Data Model 288 The ietf-alto module defined in this document provide all the basic 289 ALTO O&M data models fitting the requirements listed in Section 4. 291 The container "alto-server" in the ietf-alto module contains all the 292 configured and operational parameters of the adminstrated ALTO server 293 instance. 295 NOTE: So far, the ALTO YANG module only focuses on the ALTO server 296 related configuration. The ALTO client related configuration will be 297 added in a future version of the document. 299 module: ietf-alto 300 +--rw alto-server 301 +--rw hostname? inet:host 302 +--rw cost-type* [cost-type-name] 303 | +--rw cost-type-name string 304 | +--rw cost-mode cost-mode 305 | +--rw cost-metric cost-metric 306 +--rw meta* [meta-key] 307 | +--rw meta-key string 308 | +--rw meta-value string 309 +--rw resource* [resource-id] 310 | +--rw resource-id resource-id 311 | +--rw resource-type identityref 312 | +--rw description? string 313 | +--rw accepted-group* string 314 | +--rw dependency* resource-id 315 | +--rw auth 316 | | +--rw (auth-type-selection)? 317 | | +--:(auth-key-chain) 318 | | | +--rw key-chain? key-chain:key-chain-ref 319 | | +--:(auth-key) 320 | | +--:(auth-tls) 321 | +--rw (resource-params)? 322 | +--:(ird) 323 | | +--rw alto-ird-params 324 | | +--rw delegation inet:uri 325 | +--:(networkmap) 326 | | +--rw alto-networkmap-params 327 | | +--rw is-default? boolean 328 | | +--rw filtered? boolean 329 | | +--rw (algorithm) 330 | +--:(costmap) 331 | | +--rw alto-costmap-params 332 | | +--rw filtered? boolean 333 | | +--rw cost-type-names* string 334 | | +--rw cost-constraints? boolean 335 | | +--rw max-cost-types? uint32 {multi-cost}? 336 | | +--rw testable-cost-type-names* string {multi-cost}? 337 | | +--rw calendar-attributes {cost-calendar}? 338 | | | +--rw cost-type-names* string 339 | | | +--rw time-interval-size decimal64 340 | | | +--rw number-of-intervals uint32 341 | | +--rw (algorithm) 342 | +--:(endpointcost) 343 | | +--rw alto-endpointcost-params 344 | | +--rw cost-type-names* string 345 | | +--rw cost-constraints? boolean 346 | | +--rw max-cost-types? uint32 {multi-cost}? 347 | | +--rw testable-cost-type-names* string {multi-cost}? 348 | | +--rw calendar-attributes {cost-calendar}? 349 | | | +--rw cost-type-names* string 350 | | | +--rw time-interval-size decimal64 351 | | | +--rw number-of-intervals uint32 352 | | +--rw (algorithm) 353 | +--:(endpointprop) 354 | | +--rw alto-endpointprop-params 355 | | +--rw prop-types* string 356 | | +--rw (algorithm) 357 | +--:(propmap) {propmap}? 358 | | +--rw alto-propmap-params 359 | | +--rw (algorithm) 360 | +--:(cdni) {cdni}? 361 | | +--rw alto-cdni-params 362 | | +--rw (algorithm) 363 | +--:(update) {incr-update}? 364 | +--rw alto-update-params 365 | +--rw (algorithm) 366 +--rw data-source* [source-id] 367 +--rw source-id string 368 +--rw source-type identityref 369 +--rw (update-policy) 370 | +--:(reactive) 371 | | +--rw reactive boolean 372 | +--:(proactive) 373 | +--rw poll-interval uint32 374 +--rw (source-params)? 375 +--:(yang-datastore) 376 | +--rw yang-datastore-source-params 377 | +--rw source-path yang:xpath1.0 378 +--:(prometheus) 379 +--rw prometheus-source-params 380 +--rw source-uri inet:uri 381 +--rw query-data? string 383 5.2. Meta Information of ALTO Server 385 The ALTO server instance contains the following basic configurations 386 for the server setup. 388 The hostname is the name that is used to access the ALTO server. It 389 will be also used in the URI of each information resource provided by 390 the ALTO server. 392 The cost type list is the registry for the cost types that can be 393 used in the ALTO server. 395 The meta list contains the customized meta data of the ALTO server. 396 It will be populated into the meta field of the default Information 397 Resource Directory (IRD). 399 TODO: As suggested by [RFC7286] and [RFC8686], the configuration 400 related to ALTO server discovery should also be included here. 402 module: ietf-alto 403 +--rw alto-server 404 +--rw hostname? inet:host 405 +--rw cost-type* [cost-type-name] 406 | +--rw cost-type-name string 407 | +--rw cost-mode cost-mode 408 | +--rw cost-metric cost-metric 409 +--rw meta* [meta-key] 410 | +--rw meta-key string 411 | +--rw meta-value string 412 ... 414 5.3. ALTO Information Resources Configuration Management 416 The ALTO server instance contains a list of resource entries. Each 417 resource entry contains the configurations of an ALTO information 418 resource (See Section 8.1 of [RFC7285]). The operator of the ALTO 419 server can use this model to create, update, and remove the ALTO 420 information resource. 422 Each resoruce entry provide configuration defining how to create or 423 update an ALTO information resource. Adding a new resource entry 424 will submit an ALTO information resource creation intent to the 425 intent system to create a new ALTO information resource. Updating an 426 existing resource entry will update the corresponding ALTO 427 information resource creation intent. Removing an existing resource 428 entry will remove the corresponding ALTO information resource 429 creation intent and also the created ALTO information resource. 431 The parameter of the intent interface defined by a resource entry 432 MUST include a unique resource-id and a resource-type. 434 It can also include an accepted-group node containing a list of user- 435 groups that can access this ALTO information resource. 437 As section 15.5.2 of [RFC7285] suggests, the module also defines 438 authentication related configuration to employ access control at 439 information resource level. The ALTO server returns the IRD to the 440 ALTO client based on its authentication information. 442 For some resource-type, the parameter of the intent interface MUST 443 also include the a dependency node containing the resource-id of the 444 dependent ALTO information resources (See Section 9.1.5 of 445 [RFC7285]). 447 For each type of ALTO information resource, the creation intent MAY 448 also need type-specific parameters. These type-specific parameters 449 include two categories: 451 1. One categories of the type-specific parameters are common for the 452 same type of ALTO information resource. They declare the 453 Capabilities of the ALTO information resource (See Section 9.1.3 454 of [RFC7285]). 456 2. The other categories of the type-specific parameters are 457 algorithm-specific. The developer of the ALTO server can 458 implement their own creation altorithms and augment the algorithm 459 node to declare algorithm-specific input parameters. 461 Except for the ird resource, all the other types of resource entries 462 have augmented algorithm node. The augmented algorithm node can 463 reference data sources subscribed by the data-source entries (See 464 Section 5.4). 466 The developer cannot customize the creation algorithm of the ird 467 resource. The default ird resource will be created automatically 468 based on all the added resource entries. The delegated ird resource 469 will be created as a static ALTO information resource (See 470 Section 9.2.4 of [RFC7285]). 472 module: ietf-alto 473 +--rw alto-server 474 ... 475 +--rw resource* [resource-id] 476 | +--rw resource-id resource-id 477 | +--rw resource-type identityref 478 | +--rw description? string 479 | +--rw accepted-group* string 480 | +--rw dependency* resource-id 481 | +--rw auth 482 | | +--rw (auth-type-selection)? 483 | | +--:(auth-key-chain) 484 | | | +--rw key-chain? key-chain:key-chain-ref 485 | | +--:(auth-key) 486 | | +--:(auth-tls) 487 | +--rw (resource-params)? 488 | +--:(ird) 489 | | +--rw alto-ird-params 490 | | +--rw delegation inet:uri 491 | +--:(networkmap) 492 | | +--rw alto-networkmap-params 493 | | +--rw is-default? boolean 494 | | +--rw filtered? boolean 495 | | +--rw (algorithm) 496 | +--:(costmap) 497 | | +--rw alto-costmap-params 498 | | +--rw filtered? boolean 499 | | +--rw cost-type-names* string 500 | | +--rw cost-constraints? boolean 501 | | +--rw max-cost-types? uint32 {multi-cost}? 502 | | +--rw testable-cost-type-names* string {multi-cost}? 503 | | +--rw calendar-attributes {cost-calendar}? 504 | | | +--rw cost-type-names* string 505 | | | +--rw time-interval-size decimal64 506 | | | +--rw number-of-intervals uint32 507 | | +--rw (algorithm) 508 | +--:(endpointcost) 509 | | +--rw alto-endpointcost-params 510 | | +--rw cost-type-names* string 511 | | +--rw cost-constraints? boolean 512 | | +--rw max-cost-types? uint32 {multi-cost}? 513 | | +--rw testable-cost-type-names* string {multi-cost}? 514 | | +--rw calendar-attributes {cost-calendar}? 515 | | | +--rw cost-type-names* string 516 | | | +--rw time-interval-size decimal64 517 | | | +--rw number-of-intervals uint32 518 | | +--rw (algorithm) 519 | +--:(endpointprop) 520 | | +--rw alto-endpointprop-params 521 | | +--rw prop-types* string 522 | | +--rw (algorithm) 523 | +--:(propmap) {propmap}? 524 | | +--rw alto-propmap-params 525 | | +--rw (algorithm) 526 | +--:(cdni) {cdni}? 527 | | +--rw alto-cdni-params 528 | | +--rw (algorithm) 529 | +--:(update) {incr-update}? 530 | +--rw alto-update-params 531 | +--rw (algorithm) 532 ... 534 5.4. Data Sources 536 The ALTO server instance contains a list of data-source entries to 537 subscribe the data sources from which ALTO information resources are 538 derived (See Section 16.2.4 of [RFC7285]). 540 A data-source entry MUST include: 542 * a unique source-id for resource creation algorithms to reference, 544 * the source-type attribute to declare the type of the data source, 546 * the update-policy to specify how to get the data update from the 547 data source, 549 * the source-params to specify where and how to query the data. 551 The update policy can be either reactive or proactive. For the 552 reactive update, the ALTO server gets the update as soon as the data 553 source changes. For the proactive update, the ALTO server has to 554 proactively fetch the data source periodically. 556 To use the reactive update, the reactive attribute MUST be set true. 557 To use the proactive update, the poll-interval attribute MUST be 558 greater than zero. The value of poll-interval specifies the interval 559 of fetching the data in milliseconds. If reactive is false or poll- 560 interval is zero, the ALTO server will not update the data source. 562 The data-source/source-params node can be augmented for different 563 types of data sources. This data model only includes import 564 interfaces for a list of predefined data sources. More data sources 565 can be supported by future documents and other third-party providers. 567 module: ietf-alto 568 +--rw alto-server 569 ... 570 +--rw data-source* [source-id] 571 +--rw source-id string 572 +--rw source-type identityref 573 +--rw (update-policy) 574 | +--:(reactive) 575 | | +--rw reactive boolean 576 | +--:(proactive) 577 | +--rw poll-interval uint32 578 +--rw (source-params)? 579 +--:(yang-datastore) 580 | +--rw yang-datastore-source-params 581 | +--rw source-path yang:xpath1.0 582 +--:(prometheus) 583 +--rw prometheus-source-params 584 +--rw source-uri inet:uri 585 +--rw query-data? string 587 Note: Current source configuration still has limitations. It should 588 be revised to support more general southbound and data retrieval 589 mechanisms. 591 5.4.1. Yang DataStore Data Source 593 The yang-datastore-source-params is used to import the YANG data 594 which is located in the same YANG model-driven data store supplying 595 the current ALTO O&M data model. The source-path is used to specify 596 the XPath of the data source node. 598 5.4.2. Prometheus Data Source 600 The prometheus-source-params is used to import common performance 601 metrics data which is provided by a Prometheus server. The source- 602 uir is used to establish the connection with the Prometheus server. 603 The query-data is used to speficify the potential query expression in 604 PromQL. 606 5.5. Model for ALTO Server-to-server Communication 608 TBD. 610 6. Design of ALTO O&M Statistics Data Model 611 6.1. Model for ALTO Logging and Fault Management 613 As section 16.2.1 and section 16.2.3 of [RFC7285] suggest, the YANG 614 data module defined in this document contains statistics for logging 615 and failure detection. 617 NOTE: The detailed YANG module will appear in the future version. 619 6.2. Model for ALTO-specific Performance Monitoring 621 As section 16.2.5 of [RFC7285] suggests, the YANG data module defined 622 in this document also contains statistics for ALTO-specific 623 performance metrics. 625 More specifically, this data model contains the following measurement 626 information suggested by [RFC7971]: 628 * Measurement of impact 630 - Total amount and distribution of traffic 632 - Application performance 634 * System and service performance 636 - Requests and responses for each information resource 638 - CPU and memory utilization 640 - ALTO map updates 642 - Number of PIDs 644 - ALTO map sizes 646 Besides the measurement information suggested by [RFC7971], this data 647 model also contains useful measurement information for other ALTO 648 extensions: 650 * Number of generic ALTO entities (for 651 [I-D.ietf-alto-unified-props-new] and 652 [I-D.ietf-alto-cdni-request-routing-alto]) 654 * Statistics for update sessions and events (for [RFC8189]) 656 * Statistics for calendar (for [RFC8896]) 657 The module, "ietf-alto-stats", augments the ietf-alto module to 658 include statistics at the ALTO server and information resource level. 660 module: ietf-alto-stats 662 augment /alto:alto-server/alto:resource: 663 +--ro num-res-upd? yang:counter32 664 +--ro res-mem-size? yang:counter32 665 +--ro res-enc-size? yang:counter32 667 augment /alto:alto-server/alto:resource/alto:resource-params 668 /alto:networkmap/alto:alto-networkmap-params: 669 +--ro num-map-pid? yang:counter32 671 augment /alto:alto-server/alto:resource/alto:resource-params 672 /alto:propmap/alto:alto-propmap-params: 673 +--ro num-map-entry? yang:counter32 675 augment /alto:alto-server/alto:resource/alto:resource-params 676 /alto:cdni/alto:alto-cdni-params: 677 +--ro num-base-obj? yang:counter32 679 augment /alto:alto-server/alto:resource/alto:resource-params 680 /alto:update/alto:alto-update-params: 681 +--ro num-upd-sess yang:counter32 682 +--ro num-event-total yang:counter32 683 +--ro num-event-max? yang:counter32 684 +--ro num-event-min? yang:counter32 685 +--ro num-event-avg? yang:counter32 687 7. Extension of ALTO O&M Data Model 689 As ALTO protocol is extensible, new protocol extensions can be 690 developed after this data model is published. To support future ALTO 691 protocol extensions, the extension documents can augment the existing 692 cases of the resource-params choice with new configuration parameters 693 for existing ALTO information resource extensions, or augment the 694 resource-params with new cases for new ALTO information resources. 696 Developers and operators can also extend this ALTO O&M data model to 697 align with their own implementations. Specifically, the following 698 nodes of the data model can be augmented: 700 * The algorithm choice of the resource-params of each resource. 702 * The data-source choice. 704 The following example shows how the developer augments the algorithm 705 choice of alto-networkmap-params with a creation algorithm for the 706 network map resource. 708 module: example-ietf-alto-alg 710 augment /alto:alto-server/alto:resource/alto:resource-params 711 /alto:networkmap/alto:alto-networkmap-params 712 /alto:algorithm: 713 +--:(l3-unicast-cluster) 714 +--rw l3-unicast-cluster-algorithm 715 +--rw l3-unicast-topo 716 | -> /alto:alto-server/data-source/source-id 717 +--rw depth? uint32 719 This example defines a creation algorithm called l3-unicast-cluster- 720 algorithm for the network map resource. It takes two algorithm- 721 specific parameters: 723 l3-unicast-topo This parameter refers to the source id of a data 724 source node subscribed in the data-source list (See Section 5.4). 725 The corresponding data source is assumed to be an internel data 726 source (See Section 5.4.1) for an IETF layer 3 unicast topology 727 defined in [RFC8346]. The algorithm uses the topology data from 728 this data source to compute the ALTO network map resource. 730 depth This optional parameter sets the depth of the clustering 731 algorithm. For example, if the depth sets to 1, the algorithm 732 will generate PID for every l3-node in the topology. 734 The creation algorithm can be reactively called once the referenced 735 data source updates. Therefore, the ALTO network map resource can be 736 updated dynamically. The update of the reference data source depends 737 on the used update-policy (See Section 5.4). 739 8. ALTO OAM YANG Module 741 8.1. The ietf-alto Module 743 file "ietf-alto@2022-03-07.yang" 744 module ietf-alto { 745 yang-version 1.1; 746 namespace 747 "urn:ietf:params:xml:ns:yang:ietf-alto"; 748 prefix "alto"; 750 import ietf-inet-types { 751 prefix "inet"; 752 reference 753 "RFC 6991: Common YANG Data Types"; 754 } 756 import ietf-yang-types { 757 prefix "yang"; 758 reference 759 "RFC 6991: Common YANG Data Types"; 760 } 762 import ietf-key-chain { 763 prefix key-chain; 764 reference 765 "RFC 8177: YANG Data Model for Key Chains"; 766 } 768 organization 769 "IETF ALTO Working Group"; 771 contact 772 "WG Web: 773 WG List: "; 775 description 776 "This YANG module defines all the configured and operational 777 parameters of the administrated ALTO server instance. 779 Copyright (c) 2022 IETF Trust and the persons identified as 780 authors of the code. All rights reserved. 782 Redistribution and use in source and binary forms, with or 783 without modification, is permitted pursuant to, and subject to 784 the license terms contained in, the Revised BSD License set 785 forth in Section 4.c of the IETF Trust's Legal Provisions 786 Relating to IETF Documents 787 (https://trustee.ietf.org/license-info). 789 This version of this YANG module is part of RFC XXXX 790 (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself 791 for full legal notices. 793 The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL 794 NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 795 'MAY', and 'OPTIONAL' in this document are to be interpreted as 796 described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, 797 they appear in all capitals, as shown here."; 799 revision "2022-03-07" { 800 description 801 "Initial Version."; 802 reference 803 "RFC XXXX: A YANG Data Model for OAM and Management of ALTO 804 Protocol."; 805 } 807 typedef cost-mode { 808 type enumeration { 809 enum numerical { 810 value 1; 811 description 812 "This mode indicates that it is safe to perform numerical 813 operations"; 814 } 815 enum ordinal { 816 value 2; 817 description 818 "This mode indicates that the cost values in a cost map 819 represent ranking"; 820 } 821 } 822 description 823 "The cost mode attribute indicates how costs should be 824 interpreted. Specifically, the cost mode attribute indicates 825 whether returned costs should be interpreted as numerical 826 values or ordinal rankings."; 827 reference 828 "Section 6.1.2 of RFC 7285."; 829 } 831 typedef cost-metric { 832 type string; 833 description 834 "The cost metric attribute indicates what the cost 835 represents."; 836 reference 837 "Section 6.1.1 of RFC 7285."; 838 } 840 typedef resource-id { 841 type string { 842 length "1..64"; 843 pattern "[0-9a-zA-Z\\-:@_]*"; 844 } 845 description 846 "Format of Resource ID"; 847 reference 848 "Section 9.1.1 of RFC 7285."; 849 } 851 identity resource-types { 852 description 853 "Base identity for type of information resource."; 854 } 856 identity source-types { 857 description 858 "Base identity for type of data source."; 859 } 861 identity network-map { 862 base resource-types; 863 description 864 "Identity for network map."; 865 } 867 identity cost-map { 868 base resource-types; 869 description 870 "Identity for cost map."; 871 } 873 identity property-map { 874 base resource-types; 875 description 876 "Identity for property map."; 877 } 879 identity yang-datastore { 880 base source-types; 881 description 882 "Identity for data source of YANG-based datastore."; 883 } 885 identity prometheus { 886 base source-types; 887 description 888 "Identity for data source of prometheus system."; 889 } 891 feature multi-cost { 892 description 893 "Support multi-cost extension."; 894 reference 895 "RFC 8189: Multi-Cost Application-Layer Traffic Optimization 896 (ALTO)"; 897 } 899 feature cost-calendar { 900 description 901 "Support cost calendar extension."; 902 reference 903 "RFC 8896: Application-Layer Traffic Optimization (ALTO) Cost 904 Calendar"; 905 } 907 feature propmap { 908 description 909 "Support entity property map extension."; 910 reference 911 "RFC XXXX: An ALTO Extension: Entity Property Maps"; 912 } 914 feature cdni { 915 description 916 "Support CDNi extension."; 917 reference 918 "RFC XXXX: Content Delivery Network Interconnection (CDNI) 919 Request Routing: CDNI Footprint and Capabilities 920 Advertisement using ALTO"; 921 } 923 feature incr-update { 924 description 925 "Support incremental update extension."; 926 reference 927 "RFC 8896: Application-Layer Traffic Optimization (ALTO) 928 Incremental Updates Using Server-Sent Events (SSE)"; 929 } 931 grouping filt-costmap-cap { 932 description 933 "This grouping defines data model for 934 FilteredCostMapCapabilities."; 935 reference 936 "Sec 11.3.2.4 of RFC 7285."; 937 leaf-list cost-type-names { 938 type string; 939 min-elements 1; 940 description 941 "Supported cost types"; 942 } 943 leaf cost-constraints { 944 type boolean; 945 description 946 "If true, then the ALTO server allows cost 947 constraints to be included in requests to the 948 corresponding URI. If not present, this field MUST 949 be interpreted as if it specified false."; 950 } 951 leaf max-cost-types { 952 if-feature "multi-cost"; 953 type uint32; 954 default 0; 955 description 956 "If present with value N greater than 0, this resource 957 understands the multi-cost extensions in this document and 958 can return a multi-cost map with any combination of N or 959 fewer cost types in the 'cost-type-names' list. If omitted, 960 the default value is 0."; 961 } 962 leaf-list testable-cost-type-names { 963 if-feature "multi-cost"; 964 type string; 965 description 966 "If present, the resource allows constraint tests, but only 967 on the cost type names in this array."; 968 } 969 container calendar-attributes { 970 if-feature "cost-calendar"; 971 leaf-list cost-type-names { 972 type string; 973 min-elements 1; 974 description 975 "An array of one or more elements indicating the cost type 976 names in the IRD entry to which the values of 977 'time-interval-size' and 'number-of-intervals' apply."; 978 } 979 leaf time-interval-size { 980 type decimal64 { 981 fraction-digits 4; 982 } 983 mandatory true; 984 description 985 "The duration of an ALTO Calendar time interval in a unit 986 of seconds."; 987 } 988 leaf number-of-intervals { 989 type uint32 { 990 range "1..max"; 991 } 992 mandatory true; 993 description 994 "A strictly positive integer (greater or equal to 1) that 995 indicates the number of values of the Cost Calendar 996 array."; 997 } 998 description 999 "Configuration for CalendarAttributes."; 1000 reference 1001 "Section 4.1 of RFC 8896."; 1002 } 1003 } 1005 grouping algorithm { 1006 choice algorithm { 1007 mandatory true; 1008 description 1009 "Information resource creation algorithm to be augmented."; 1010 } 1011 description 1012 "This grouping defines base data model for information 1013 resource creation algorithm."; 1014 } 1016 container alto-server { 1017 description 1018 "The ALTO server instance."; 1019 leaf hostname { 1020 type inet:host; 1021 description 1022 "The name that is used to access the ALTO server."; 1023 } 1024 list cost-type { 1025 key "cost-type-name"; 1026 leaf cost-type-name { 1027 type string; 1028 description 1029 "The name to reference cost type"; 1030 } 1031 leaf cost-mode { 1032 type cost-mode; 1033 mandatory true; 1034 description 1035 "The referenced cost mode"; 1036 } 1037 leaf cost-metric { 1038 type cost-metric; 1039 mandatory true; 1040 description 1041 "The referenced cost metric"; 1042 } 1043 description 1044 "Mapping between name and referenced cost type"; 1045 } 1046 list meta { 1047 key "meta-key"; 1048 leaf meta-key { 1049 type string; 1050 description 1051 "Custom meta key"; 1052 } 1053 leaf meta-value { 1054 type string; 1055 mandatory true; 1056 description 1057 "Custom meta value"; 1058 } 1059 description 1060 "Mapping of custom meta information"; 1061 reference 1062 "Section 8.4.1 of RFC 7285."; 1063 } 1064 list resource { 1065 key "resource-id"; 1066 leaf resource-id { 1067 type resource-id; 1068 description 1069 "resource-id to be defined."; 1070 } 1071 leaf resource-type { 1072 type identityref { 1073 base resource-types; 1074 } 1075 mandatory true; 1076 description 1077 "identityref to be defined."; 1078 } 1079 leaf description { 1080 type string; 1081 description 1082 "The optional description for this information resource."; 1083 } 1084 leaf-list accepted-group { 1085 type string; 1086 description 1087 "Access list for authenticated clients."; 1089 } 1090 leaf-list dependency { 1091 type resource-id; 1092 description 1093 "A list of dependent information resources."; 1094 } 1095 container auth { 1096 description 1097 "The authentication options"; 1098 choice auth-type-selection { 1099 description 1100 "Options for expressing authentication 1101 setting."; 1102 case auth-key-chain { 1103 leaf key-chain { 1104 type key-chain:key-chain-ref; 1105 description 1106 "key-chain name."; 1107 } 1108 } 1109 case auth-key { 1110 } 1111 case auth-tls { 1112 } 1113 } 1114 } 1115 choice resource-params { 1116 description 1117 "Resource-specific configuration."; 1118 case ird { 1119 container alto-ird-params { 1120 leaf delegation { 1121 type inet:uri; 1122 mandatory true; 1123 description 1124 "Upstream IRD to be delegated"; 1125 } 1126 description 1127 "IRD-specific configuration"; 1128 } 1129 } 1130 case networkmap { 1131 container alto-networkmap-params { 1132 description 1133 "(Filtered) Network Map specific configuration"; 1134 reference 1135 "Section 11.2.1 and Section 11.3.1 of RFC 7285."; 1136 leaf is-default { 1137 type boolean; 1138 description 1139 "Set whether this is the default network map"; 1140 } 1141 leaf filtered { 1142 type boolean; 1143 default false; 1144 description 1145 "Configure whether filtered network map is 1146 supported."; 1147 } 1148 uses algorithm; 1149 } 1150 } 1151 case costmap { 1152 container alto-costmap-params { 1153 description 1154 "(Filtered) Cost Map specific configuration"; 1155 reference 1156 "Section 11.2.2 and Section 11.3.2 of RFC 7285."; 1157 leaf filtered { 1158 type boolean; 1159 description 1160 "Configure whether filtered cost map is supported."; 1161 } 1162 uses filt-costmap-cap; 1163 uses algorithm; 1164 } 1165 } 1166 case endpointcost { 1167 container alto-endpointcost-params { 1168 description 1169 "Endpoint Cost Service specific configuration"; 1170 reference 1171 "Section 11.5 of RFC 7285"; 1172 uses filt-costmap-cap; 1173 uses algorithm; 1174 } 1175 } 1176 case endpointprop { 1177 container alto-endpointprop-params { 1178 description 1179 "Endpoint Cost Service specific configuration"; 1180 reference 1181 "Section 11.5 of RFC 7285"; 1182 leaf-list prop-types { 1183 type string; 1184 min-elements 1; 1185 description 1186 "Supported endpoint properties."; 1187 } 1188 uses algorithm; 1189 } 1190 } 1191 case propmap { 1192 if-feature "propmap"; 1193 container alto-propmap-params { 1194 uses algorithm; 1195 description 1196 "(Filtered) Entity Property Map specific 1197 configuration"; 1198 } 1199 } 1200 case cdni { 1201 if-feature "cdni"; 1202 container alto-cdni-params { 1203 uses algorithm; 1204 description 1205 "CDNi specific configuration"; 1206 } 1207 } 1208 case update { 1209 if-feature "incr-update"; 1210 container alto-update-params { 1211 uses algorithm; 1212 description 1213 "Incremental Updates specific configuration"; 1214 } 1215 } 1216 } 1217 description 1218 "ALTO information resources to be defined"; 1219 } 1220 list data-source { 1221 key "source-id"; 1222 leaf source-id { 1223 type string; 1224 description 1225 "Data source id that can be referenced by information 1226 resource creation algorithms."; 1227 } 1228 leaf source-type { 1229 type identityref { 1230 base source-types; 1231 } 1232 mandatory true; 1233 description 1234 "Source-type to be defined"; 1235 } 1236 choice update-policy { 1237 mandatory true; 1238 case reactive { 1239 leaf reactive { 1240 type boolean; 1241 mandatory true; 1242 description 1243 "Reactive mode"; 1244 } 1245 } 1246 case proactive { 1247 leaf poll-interval { 1248 type uint32; 1249 mandatory true; 1250 description 1251 "Polling interval in seconds for proactive mode"; 1252 } 1253 } 1254 description 1255 "Policy to get updates from data sources"; 1256 } 1257 choice source-params { 1258 case yang-datastore { 1259 container yang-datastore-source-params { 1260 leaf source-path { 1261 type yang:xpath1.0; 1262 mandatory true; 1263 description 1264 "XPath to subscribed YANG datastore node"; 1265 } 1266 description 1267 "YANG datastore specific configuration"; 1268 } 1269 } 1270 case prometheus { 1271 container prometheus-source-params { 1272 leaf source-uri { 1273 type inet:uri; 1274 mandatory true; 1275 description 1276 "URI to prometheus agent"; 1277 } 1278 leaf query-data { 1279 type string; 1280 description 1281 "Query expression"; 1282 } 1283 description 1284 "Prometheus specific configuration"; 1285 } 1286 } 1287 description 1288 "Data source specific configuration"; 1289 } 1290 description 1291 "List of subscribed data sources."; 1292 } 1293 } 1294 } 1295 1297 8.2. The ietf-alto-stats Module 1299 file "ietf-alto-stats@2022-03-07.yang" 1300 module ietf-alto-stats { 1301 yang-version 1.1; 1302 namespace 1303 "urn:ietf:params:xml:ns:yang:ietf-alto-stats"; 1304 prefix "alto-stats"; 1306 import ietf-yang-types { 1307 prefix "yang"; 1308 reference 1309 "RFC 6991: Common YANG Data Types"; 1310 } 1312 import ietf-alto { 1313 prefix alto; 1314 reference 1315 "RFC XXXX: A YANG Data Model for OAM and Management of ALTO 1316 Protocol."; 1317 } 1319 organization 1320 "IETF ALTO Working Group"; 1322 contact 1323 "WG Web: 1324 WG List: "; 1326 description 1327 "This YANG module defines all the configured and operational 1328 parameters of the administrated ALTO server instance. 1330 Copyright (c) 2022 IETF Trust and the persons identified as 1331 authors of the code. All rights reserved. 1333 Redistribution and use in source and binary forms, with or 1334 without modification, is permitted pursuant to, and subject to 1335 the license terms contained in, the Revised BSD License set 1336 forth in Section 4.c of the IETF Trust's Legal Provisions 1337 Relating to IETF Documents 1338 (https://trustee.ietf.org/license-info). 1340 This version of this YANG module is part of RFC XXXX 1341 (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself 1342 for full legal notices."; 1344 revision "2022-03-07" { 1345 description 1346 "Initial Version."; 1347 reference 1348 "RFC XXXX: A YANG Data Model for Operations, Administration, 1349 and Maintenance of ALTO Protocol."; 1350 } 1352 augment "/alto:alto-server/alto:resource" { 1353 description 1354 "Common statistics for each information resource."; 1355 leaf num-res-upd { 1356 type yang:counter32; 1357 config false; 1358 description 1359 "The number of version updates since the information resource 1360 was created."; 1361 } 1362 leaf res-mem-size { 1363 type yang:counter32; 1364 config false; 1365 description 1366 "Memory size (Bytes) utilized by the information resource."; 1367 } 1368 leaf res-enc-size { 1369 type yang:counter32; 1370 config false; 1371 description 1372 "Size (Bytes) of JSON encoded data of the information 1373 resource."; 1374 } 1375 } 1377 augment "/alto:alto-server/alto:resource/alto:resource-params" 1378 + "/alto:networkmap/alto:alto-networkmap-params" { 1379 description 1380 "Augmented statistics for network maps only."; 1381 leaf num-map-pid { 1382 type yang:counter32; 1383 config false; 1384 description 1385 "Number of PIDs contained by the network map."; 1386 } 1387 } 1389 augment "/alto:alto-server/alto:resource/alto:resource-params" 1390 + "/alto:propmap/alto:alto-propmap-params" { 1391 description 1392 "Augmented statistics for property maps only."; 1393 leaf num-map-entry { 1394 type yang:counter32; 1395 config false; 1396 description 1397 "Number of ALTO entities contained by the property map."; 1398 } 1399 } 1401 augment "/alto:alto-server/alto:resource/alto:resource-params" 1402 + "/alto:cdni/alto:alto-cdni-params" { 1403 description 1404 "Augmented statistics for CDNi resources only."; 1405 leaf num-base-obj { 1406 type yang:counter32; 1407 config false; 1408 description 1409 "Number of base CDNi advertisement objects contained by the 1410 CDNi resource."; 1411 } 1412 } 1414 augment "/alto:alto-server/alto:resource/alto:resource-params" 1415 + "/alto:update/alto:alto-update-params" { 1416 description 1417 "Augmented statistics for incremental updates only."; 1418 leaf num-upd-sess { 1419 type yang:counter32; 1420 config false; 1421 description 1422 "Number of sessions connected to the incremental update 1423 service."; 1424 } 1425 leaf num-event-total { 1426 type yang:counter32; 1427 config false; 1428 description 1429 "Total number of update events sent to all the connected 1430 clients."; 1431 } 1432 leaf num-event-max { 1433 type yang:counter32; 1434 config false; 1435 description 1436 "The maximum number of update events sent to the connected 1437 clients."; 1438 } 1439 leaf num-event-min { 1440 type yang:counter32; 1441 config false; 1442 description 1443 "The minimum number of update events sent to the connected 1444 clients."; 1445 } 1446 leaf num-event-avg { 1447 type yang:counter32; 1448 config false; 1449 description 1450 "The average number of update events sent to the connected 1451 clients."; 1452 } 1453 } 1454 } 1455 1457 9. Security Considerations 1459 TBD. 1461 10. IANA Considerations 1463 This document registers two URIs in the "IETF XML Registry" 1464 [RFC3688]. Following the format in RFC 3688, the following 1465 registrations are requested. 1467 URI: urn:ietf:params:xml:ns:yang:ietf-alto 1468 Registrant Contact: The IESG. 1469 XML: N/A; the requested URI is an XML namespace. 1471 URI: urn:ietf:params:xml:ns:yang:ietf-alto-stats 1472 Registrant Contact: The IESG. 1473 XML: N/A; the requested URI is an XML namespace. 1475 This document registers two YANG modules in the "YANG Module Names" 1476 registry [RFC6020]. 1478 Name: ietf-alto 1479 Namespace: urn:ietf:params:xml:ns:yang:ietf-alto 1480 Prefix: alto 1481 Reference: [RFCthis] 1483 Name: ietf-alto-stats 1484 Namespace: urn:ietf:params:xml:ns:yang:ietf-alto-stats 1485 Prefix: alto 1486 Reference: [RFCthis] 1488 [RFC Editor: Please replace RFCthis with the published RFC number for 1489 this document.] 1491 11. References 1493 11.1. Normative References 1495 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1496 Requirement Levels", BCP 14, RFC 2119, 1497 DOI 10.17487/RFC2119, March 1997, 1498 . 1500 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1501 DOI 10.17487/RFC3688, January 2004, 1502 . 1504 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1505 the Network Configuration Protocol (NETCONF)", RFC 6020, 1506 DOI 10.17487/RFC6020, October 2010, 1507 . 1509 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1510 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1511 . 1513 [RFC7285] Alimi, R., Ed., Penno, R., Ed., Yang, Y., Ed., Kiesel, S., 1514 Previdi, S., Roome, W., Shalunov, S., and R. Woundy, 1515 "Application-Layer Traffic Optimization (ALTO) Protocol", 1516 RFC 7285, DOI 10.17487/RFC7285, September 2014, 1517 . 1519 [RFC7286] Kiesel, S., Stiemerling, M., Schwan, N., Scharf, M., and 1520 H. Song, "Application-Layer Traffic Optimization (ALTO) 1521 Server Discovery", RFC 7286, DOI 10.17487/RFC7286, 1522 November 2014, . 1524 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 1525 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 1526 May 2017, . 1528 [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. 1529 Zhang, "YANG Data Model for Key Chains", RFC 8177, 1530 DOI 10.17487/RFC8177, June 2017, 1531 . 1533 [RFC8189] Randriamasy, S., Roome, W., and N. Schwan, "Multi-Cost 1534 Application-Layer Traffic Optimization (ALTO)", RFC 8189, 1535 DOI 10.17487/RFC8189, October 2017, 1536 . 1538 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 1539 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 1540 . 1542 [RFC8686] Kiesel, S. and M. Stiemerling, "Application-Layer Traffic 1543 Optimization (ALTO) Cross-Domain Server Discovery", 1544 RFC 8686, DOI 10.17487/RFC8686, February 2020, 1545 . 1547 [RFC8895] Roome, W. and Y. Yang, "Application-Layer Traffic 1548 Optimization (ALTO) Incremental Updates Using Server-Sent 1549 Events (SSE)", RFC 8895, DOI 10.17487/RFC8895, November 1550 2020, . 1552 [RFC8896] Randriamasy, S., Yang, R., Wu, Q., Deng, L., and N. 1553 Schwan, "Application-Layer Traffic Optimization (ALTO) 1554 Cost Calendar", RFC 8896, DOI 10.17487/RFC8896, November 1555 2020, . 1557 11.2. Informative References 1559 [I-D.ietf-alto-cdni-request-routing-alto] 1560 Seedorf, J., Yang, Y. R., Ma, K. J., Peterson, J., and J. 1561 J. Zhang, "Content Delivery Network Interconnection (CDNI) 1562 Request Routing: CDNI Footprint and Capabilities 1563 Advertisement using ALTO", Work in Progress, Internet- 1564 Draft, draft-ietf-alto-cdni-request-routing-alto-22, 16 1565 February 2022, . 1568 [I-D.ietf-alto-path-vector] 1569 Gao, K., Lee, Y., Randriamasy, S., Yang, Y. R., and J. J. 1570 Zhang, "An ALTO Extension: Path Vector", Work in Progress, 1571 Internet-Draft, draft-ietf-alto-path-vector-25, 20 March 1572 2022, . 1575 [I-D.ietf-alto-performance-metrics] 1576 Wu, Q., Yang, Y. R., Lee, Y., Dhody, D., Randriamasy, S., 1577 and L. M. C. Murillo, "ALTO Performance Cost Metrics", 1578 Work in Progress, Internet-Draft, draft-ietf-alto- 1579 performance-metrics-28, 21 March 2022, 1580 . 1583 [I-D.ietf-alto-unified-props-new] 1584 Roome, W., Randriamasy, S., Yang, Y. R., Zhang, J. J., and 1585 K. Gao, "An ALTO Extension: Entity Property Maps", Work in 1586 Progress, Internet-Draft, draft-ietf-alto-unified-props- 1587 new-24, 28 February 2022, 1588 . 1591 [RFC7921] Atlas, A., Halpern, J., Hares, S., Ward, D., and T. 1592 Nadeau, "An Architecture for the Interface to the Routing 1593 System", RFC 7921, DOI 10.17487/RFC7921, June 2016, 1594 . 1596 [RFC7971] Stiemerling, M., Kiesel, S., Scharf, M., Seidel, H., and 1597 S. Previdi, "Application-Layer Traffic Optimization (ALTO) 1598 Deployment Considerations", RFC 7971, 1599 DOI 10.17487/RFC7971, October 2016, 1600 . 1602 [RFC8346] Clemm, A., Medved, J., Varga, R., Liu, X., 1603 Ananthakrishnan, H., and N. Bahadur, "A YANG Data Model 1604 for Layer 3 Topologies", RFC 8346, DOI 10.17487/RFC8346, 1605 March 2018, . 1607 Appendix A. Example Module for Information Resource Creation Algorithm 1609 The base data model defined by ietf-alto.yang does not include any 1610 choice cases for information resource creation algorithms. But 1611 developers may augment the ietf-alto.yang data model with definitions 1612 for any custom creation algorithms for different information 1613 resources. The following example module demonstrates the parameters 1614 of a network map creation algorithm that translates an IETF layer 3 1615 unicast topology into a network map. 1617 module example-ietf-alto-alg { 1619 namespace "urn:example:ietf-alto-alg"; 1620 prefix "alto-alg"; 1622 import ietf-alto { 1623 prefix "alto"; 1624 } 1626 augment "/alto:alto-server/alto:resource/alto:resource-params" 1627 + "/alto:networkmap/alto:alto-networkmap-params" 1628 + "/alto:algorithm" { 1629 case l3-unicast-cluster { 1630 container l3-unicast-cluster-algorithm { 1631 leaf l3-unicast-topo { 1632 type leafref { 1633 path "/alto:alto-server/data-source/source-id"; 1634 } 1635 mandatory true; 1636 description 1637 "The data source to an IETF layer 3 unicast topology."; 1638 } 1639 leaf depth { 1640 type uint32; 1641 description 1642 "The depth of the clustering."; 1643 } 1644 } 1645 } 1646 } 1647 } 1649 Acknowledgements 1651 The authors thank Qiufang Ma and Qin Wu for their help with drafting 1652 the initial version of the YANG modules. Thanks also to Adrian 1653 Farrel, Qiao Xiang, Qin Wu, and Qiufang Ma for their reviews and 1654 valuable feedback. 1656 Authors' Addresses 1658 Jingxuan Jensen Zhang 1659 Tongji University 1660 4800 Cao'An Hwy 1661 Shanghai 1662 201804 1663 China 1664 Email: jingxuan.n.zhang@gmail.com 1665 Dhruv Dhody 1666 Huawei Technologies 1667 Divyashree Techno Park, Whitefield 1668 Bangalore 560066 1669 Karnataka 1670 India 1671 Email: dhruv.ietf@gmail.com 1673 Kai Gao 1674 Sichuan University 1675 No.24 South Section 1, Yihuan Road 1676 Chengdu 1677 610000 1678 China 1679 Email: kaigao@scu.edu.cn 1681 Roland Schott 1682 Deutsche Telekom 1683 Heinrich-Hertz-Strasse 3-7 1684 64295 Darmstadt 1685 Germany 1686 Email: Roland.Schott@telekom.de