idnits 2.17.1 draft-ietf-i2rs-rib-data-model-01.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (September 29, 2015) is 3130 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 (-15) exists of draft-ietf-i2rs-architecture-09 == Outdated reference: A later version (-17) exists of draft-ietf-i2rs-rib-info-model-06 == Outdated reference: A later version (-03) exists of draft-ietf-i2rs-usecase-reqs-summary-01 -- Obsolete informational reference (is this intentional?): RFC 6021 (Obsoleted by RFC 6991) Summary: 0 errors (**), 0 flaws (~~), 4 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group L. Wang 3 Internet-Draft Huawei 4 Intended status: Standards Track H. Ananthakrishnan 5 Expires: April 1, 2016 Packet Design 6 M. Chen 7 Huawei 8 A. Dass 9 S. Kini 10 Ericsson 11 N. Bahadur 12 Bracket Computing 13 September 29, 2015 15 A YANG Data Model for Routing Information Base (RIB) 16 draft-ietf-i2rs-rib-data-model-01 18 Abstract 20 This document defines a YANG data model for Routing Information Base 21 (RIB) that aligns with the I2RS RIB information model. 23 Requirements Language 25 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 26 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 27 document are to be interpreted as described in RFC 2119 [RFC2119]. 29 Status of This Memo 31 This Internet-Draft is submitted in full conformance with the 32 provisions of BCP 78 and BCP 79. 34 Internet-Drafts are working documents of the Internet Engineering 35 Task Force (IETF). Note that other groups may also distribute 36 working documents as Internet-Drafts. The list of current Internet- 37 Drafts is at http://datatracker.ietf.org/drafts/current/. 39 Internet-Drafts are draft documents valid for a maximum of six months 40 and may be updated, replaced, or obsoleted by other documents at any 41 time. It is inappropriate to use Internet-Drafts as reference 42 material or to cite them other than as "work in progress." 44 This Internet-Draft will expire on April 1, 2016. 46 Copyright Notice 48 Copyright (c) 2015 IETF Trust and the persons identified as the 49 document authors. All rights reserved. 51 This document is subject to BCP 78 and the IETF Trust's Legal 52 Provisions Relating to IETF Documents 53 (http://trustee.ietf.org/license-info) in effect on the date of 54 publication of this document. Please review these documents 55 carefully, as they describe your rights and restrictions with respect 56 to this document. Code Components extracted from this document must 57 include Simplified BSD License text as described in Section 4.e of 58 the Trust Legal Provisions and are provided without warranty as 59 described in the Simplified BSD License. 61 Table of Contents 63 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 64 1.1. Definitions and Acronyms . . . . . . . . . . . . . . . . 3 65 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 66 2. Model Structure . . . . . . . . . . . . . . . . . . . . . . . 3 67 2.1. RIB Capability . . . . . . . . . . . . . . . . . . . . . 5 68 2.2. Routing Instance and Rib . . . . . . . . . . . . . . . . 6 69 2.3. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 7 70 2.4. Nexthop . . . . . . . . . . . . . . . . . . . . . . . . . 8 71 2.5. Notifications . . . . . . . . . . . . . . . . . . . . . . 12 72 3. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 14 73 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 74 5. Security Considerations . . . . . . . . . . . . . . . . . . . 37 75 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 37 76 6.1. Normative References . . . . . . . . . . . . . . . . . . 37 77 6.2. Informative References . . . . . . . . . . . . . . . . . 37 78 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 38 80 1. Introduction 82 The Interface to the Routing System (I2RS) 83 [I-D.ietf-i2rs-architecture] provides read and write access to the 84 information and state within the routing process that exists inside 85 the routing elements, this is achieved via the protocol message 86 exchange between I2RS clients and I2RS agents associated with the 87 routing system. One of the functions of I2RS is to read and write 88 data of Routing Information Base (RIB). 89 [I-D.ietf-i2rs-usecase-reqs-summary] introduces a set of RIB use 90 cases and the RIB information model is defined in 91 [I-D.ietf-i2rs-rib-info-model]. 93 This document defines a YANG [RFC6020][RFC6021] data model for the 94 RIB that satisfies the RIB use cases and aligns with the RIB 95 information model. 97 1.1. Definitions and Acronyms 99 RIB: Routing Information Base 101 Information Model (IM): An abstract model of a conceptual domain, 102 independent of a specific implementation or data representation. 104 1.2. Tree Diagrams 106 A simplified graphical representation of the data model is used in 107 this document. The meaning of the symbols in these diagrams is as 108 follows: 110 o Brackets "[" and "]" enclose list keys. 112 o Abbreviations before data node names: "rw" means configuration 113 (read-write) and "ro" state data (read-only). 115 o Symbols after data node names: "?" means an optional node and "*" 116 denotes a "list" and "leaf-list". 118 o Parentheses enclose choice and case nodes, and case nodes are also 119 marked with a colon (":"). 121 o Ellipsis ("...") stands for contents of subtrees that are not 122 shown. 124 2. Model Structure 126 The following figure shows an overview of structure tree of the i2rs- 127 rib module. To give a whole view of the structure tree, some details 128 of the tree are omitted. The detail are introduced in the following 129 sub-sections. 131 module: i2rs-rib 132 +--rw nexthop-capacity 133 | ... 134 +--rw nexthop-tunnel-encap-capacity 135 | ... 136 +--rw routing-instance 137 +--rw instance-name string 138 +--rw interface-list* [name] 139 | +--rw name if:interface-ref 140 +--rw router-id? yang:dotted-quad 141 +--rw rib-list* [rib-name] 142 +--rw rib-name string 143 +--rw rib-family rib-family-def 144 +--rw enable-ip-rpf-check? boolean 145 +--rw route-list* [route-index] 146 +--rw route-index uint64 147 +--rw route-type route-type-def 148 +--rw match 149 | +--rw (rib-route-type)? 150 | +--:(ipv4) 151 | | ... 152 | +--:(ipv6) 153 | | ... 154 | +--:(mpls-route) 155 | | ... 156 | +--:(mac-route) 157 | | ... 158 | +--:(interface-route) 159 | ... 160 +--rw nexthop 161 | +--rw nexthop-id uint32 162 | +--rw (nexthop-type)? 163 | +--:(nexthop-base) 164 | | ... 165 | +--:(nexthop-protection) 166 | | ... 167 | +--:(nexthop-load-balance) 168 | | ... 169 | +--:(nexthop-replicate) 170 | ... 171 +--rw route-statistic 172 | ... 173 +--rw route-attributes 174 | +--rw route-preference uint32 175 | +--rw local-only boolean 176 | +--rw address-family-route-attributes 177 | +--rw (route-type)? 178 | +--:(ip-route-attributes) 179 | +--:(mpls-route-attributes) 180 | +--:(eThernet-route-attributes) 181 +--rw route-vendor-attributes 182 notifications: 183 +---n nexthop-resolution-status-change 184 | +--ro nexthop 185 | | +--ro nexthop-id uint32 186 | | +--ro (nexthop-type)? 187 | | +--:(nexthop-base) 188 | | | ... 190 | | +--:(nexthop-protection) 191 | | | ... 192 | | +--:(nexthop-load-balance) 193 | | | ... 194 | | +--:(nexthop-replicate) 195 | | ... 196 | +--ro nexthop-state nexthop-state-def 197 +---n route-change 198 +--ro instance-name string 199 +--ro rib-name string 200 +--ro rib-family rib-family-def 201 +--ro route-index uint64 202 +--ro route-type route-type-def 203 +--ro match 204 | +--ro (rib-route-type)? 205 | +--:(ipv4) 206 | | ... 207 | +--:(ipv6) 208 | | ... 209 | +--:(mpls-route) 210 | | +--ro mpls-label uint32 211 | +--:(mac-route) 212 | | +--ro mac-address uint32 213 | +--:(interface-route) 214 | +--ro interface-identifier if:interface-ref 215 +--ro route-installed-state route-installed-state-def 216 +--ro route-state route-state-def 217 +--ro route-reason route-reason-def 219 Figure 1 Overview of I2RS module 221 2.1. RIB Capability 223 RIB capability negotiation is very important because not all of the 224 hardware will be able to support all kinds of nexthops and there 225 should be a limitation on how many levels of lookup can be 226 practically performed. Therefore, a RIB data model MUST specify a 227 way for an external entity to learn about the functional capabilities 228 of a network device. 230 At the same time, nexthop chains can be used to specify multiple 231 headers over a packet, before that particular packet is forwarded. 232 Not every network device will be able to support all kinds of nexthop 233 chains along with the arbitrary number of headers which are chained 234 together. The RIB data model MUST provide a way to expose the 235 nexthop chaining capability supported by a given network device. 237 The structure of the next-hop-capacity and the nexthop-tunnel-encap- 238 capacity is shown in the following figure: 240 Editor Notes: this version only includes the nexthop-hop and nexthop- 241 tunnel-encap capabilities, there may also need to define RIB 242 capabilities in future revision. 244 +--rw nexthop-capacity 245 | +--rw support-tunnel? boolean 246 | +--rw support-chains? boolean 247 | +--rw support-list-of-list? boolean 248 | +--rw support-replication? boolean 249 | +--rw support-weighted? boolean 250 | +--rw support-protection? boolean 251 | +--rw lookup-limit? uint8 252 +--rw nexthop-tunnel-encap-capacity 253 | +--rw support-ipv4? boolean 254 | +--rw support-ipv6? boolean 255 | +--rw support-mpls? boolean 256 | +--rw support-gre? boolean 257 | +--rw support-vxlan? boolean 258 | +--rw support-nvgre? boolean 260 Figure 2 RIB Capability 262 2.2. Routing Instance and Rib 264 A routing instance, in the context of the RIB information model, is a 265 collection of RIBs, interfaces, and routing protocol parameters. A 266 routing instance creates a logical slice of the router and can allow 267 multiple different logical slices; across a set of routers; to 268 communicate with each other. And the routing protocol parameters 269 control the information available in the RIBs. More detail about 270 routing instance can be found in Section 2.2 of 271 [I-D.ietf-i2rs-rib-info-model]. 273 As described in [I-D.ietf-i2rs-rib-info-model], there will be 274 multiple routing instances for a router. At the same time, for a 275 routing instance, there would be multiple RIBs as well. Therefore, 276 this model uses "list" to express the RIBs. The structure tree is 277 shown as following figure. 279 +--rw routing-instance 280 +--rw instance-name string 281 +--rw interface-list* [name] 282 | +--rw name if:interface-ref 283 +--rw router-id? yang:dotted-quad 284 +--rw rib-list* [rib-name] 285 +--rw rib-name string 286 +--rw rib-family rib-family-def 287 +--rw enable-ip-rpf-check? boolean 288 +--rw route-list* [route-index] 289 ... (refer to sec.2.3) 291 Figure 3 Routing Instance 293 2.3. Route 295 A route is essentially a match condition and an action following that 296 match. The match condition specifies the kind of route (e.g., IPv4, 297 MPLS, MAC, Interface etc.) and the set of fields to match on. 299 According to the definition in [I-D.ietf-i2rs-rib-info-model], a 300 route MUST associate with the following attributes: 302 o ROUTE_PREFERENCE: See Section 2.3 of 303 [I-D.ietf-i2rs-rib-info-model]. 305 o ACTIVE: Indicates whether a route is fully resolved and is a 306 candidate for selection. 308 o INSTALLED: Indicates whether the route got installed in the FIB. 310 In addition, a route can associate with one or more optional route 311 attributes(e.g., route-vendor-attributes). 313 For a RIB, there will have a number of routes, so the routes are 314 expressed as a list under the rib list. 316 +--rw route-list* [route-index] 317 +--rw route-index uint64 318 +--rw route-type route-type-def 319 +--rw match 320 | +--rw (rib-route-type)? 321 | +--:(ipv4) 322 | | +--rw ipv4 323 | | +--rw ipv4-route-type ip-route-type-def 324 | | +--rw (ip-route-type)? 325 | | +--:(destination-ipv4-address) 326 | | | +--rw destination-ipv4-prefix inet:ipv4-prefix 327 | | +--:(source-ipv4-address) 328 | | | +--rw source-ipv4-prefix inet:ipv4-prefix 329 | | +--:(destination-source-ipv4-address) 330 | | +--rw destination-source-ipv4-address 331 | | +--rw destination-ipv4-prefix inet:ipv4-prefix 332 | | +--rw source-ipv4-prefix inet:ipv4-prefix 333 | +--:(ipv6) 334 | | +--rw ipv6 335 | | +--rw ipv6-route-type ip-route-type-def 336 | | +--rw (ip-route-type)? 337 | | +--:(destination-ipv6-address) 338 | | | +--rw destination-ipv6-prefix inet:ipv6-prefix 339 | | +--:(source-ipv6-address) 340 | | | +--rw source-ipv6-prefix inet:ipv6-prefix 341 | | +--:(destination-source-ipv6-address) 342 | | +--rw destination-source-ipv6-address 343 | | +--rw destination-ipv6-prefix inet:ipv6-prefix 344 | | +--rw source-ipv6-prefix inet:ipv6-prefix 345 | +--:(mpls-route) 346 | | +--rw mpls-label uint32 347 | +--:(mac-route) 348 | | +--rw mac-address uint32 349 | +--:(interface-route) 350 | +--rw interface-identifier if:interface-ref 351 +--rw nexthop 352 ... (refer to sec.2.4) 354 Figure 4 Route 356 2.4. Nexthop 358 A nexthop represents an object resulting from a route lookup. As 359 illustrated in Section 2.4 of [I-D.ietf-i2rs-rib-info-model], to 360 support various of use cases (e.g., load balance, protection, 361 multicast or the combination of them), the nexthop is modelled as a 362 multi-level structure and supports recursion. The first level of the 363 nexthop includes the following four types: 365 o Base: The "base" nexthop itself is a hierarchical structure, it is 366 the base of all other nexthop types. The first level of the base 367 nexthop includes special-nexthop and nexthop-chain. The nexthop- 368 chain can have one or more nexthop chain members, each member is 369 one of the four types (as listed below) of specific nexthop. 370 Other first level nexthop (e.g., load-balance, protection and 371 replicate) will finally be iterated to a "base" nexthop. 373 * nexthop-id 375 * egress-interface 377 * logical-tunnel 379 * tunnel-encap 381 o Load-balance: Designed for load-balance case. 383 o Protection: Designed for protection scenario where it normally 384 will have primary and standby nexthop. 386 o Replicate: Designed for multiple destinations forwarding. 388 The structure tree of nexthop is shown in the following figures. 390 +--rw nexthop 391 | +--rw nexthop-id uint32 392 | +--rw (nexthop-type)? 393 | +--:(nexthop-base) 394 | | +--rw nexthop-base 395 | | +--rw nexthop-chain* [nexthop-chain-id] 396 | | +--rw nexthop-chain-id uint32 397 | | +--rw (nexthop-chain-type)? 398 | | ... (refer to Figure 6) 399 | +--:(nexthop-protection) 400 | | +--rw nexthop-protection-list* [nexthop-protection-id] 401 | | +--rw nexthop-protection-id uint32 402 | | +--rw nexthop-preference nexthop-preference-def 403 | | +--rw nexthop nexthop-ref 404 | +--:(nexthop-load-balance) 405 | | +--rw nexthop-lb 406 | | +--rw nexthop-lbs* [nexthop-lbs-id] 407 | | +--rw nexthop-lbs-id uint32 408 | | +--rw nhop-lb-weight nhop-lb-weight-def 409 | | +--rw nexthop-lb-member nexthop-ref 410 | +--:(nexthop-replicate) 411 | +--rw nexthop-replicate 412 | +--rw nexthop-replicates* [nexthop-replicates-id] 413 | +--rw nexthop-replicates-id uint32 414 | +--rw nexthop-replicate? nexthop-ref 416 Figure 5 Nexhop 418 Figure 6 (as shown blow) is a sub-tree of nexthop, it's under the 419 nexthop chain node. 421 +--rw (nexthop-chain-type)? 422 +--:(nexthop-chain-member-special) 423 | +--rw nexthop-chain-member-special 424 | +--rw nexthop-chain-member-special? special-nexthop-def 425 +--:(nexthop-chain-member-identifier) 426 | +--rw (nexthop-identifier-type)? 427 | +--:(nexthop-chain-name) 428 | | +--rw nexthop-chain-name string 429 | +--:(nexthop-chain-id) 430 | +--rw nexthop-chain-id uint32 431 +--:(egress-interface-next-hop) 432 | +--rw outgoing-interface if:interface-ref 433 +--:(ipv4-address-next-hop) 434 | +--rw next-hop-ipv4-address inet:ipv4-address 435 +--:(ipv6-address-next-hop) 436 | +--rw next-hop-ipv6-address inet:ipv6-address 437 +--:(egress-interface-ipv4-next-hop) 438 | +--rw next-hop-egress-interface-ipv4-address 439 | +--rw outgoing-interface if:interface-ref 440 | +--rw next-hop-egress-ipv4-address inet:ipv4-address 441 +--:(egress-interface-ipv6-next-hop) 442 | +--rw next-hop-egress-interface-ipv6-address 443 | +--rw outgoing-interface if:interface-ref 444 | +--rw next-hop-egress-ipv6-address inet:ipv4-address 445 +--:(egress-interface-mac-next-hop) 446 | +--rw next-hop-egress-interface-mac-address 447 | +--rw outgoing-interface if:interface-ref 448 | +--rw ieee-mac-address uint32 449 +--:(tunnel-encap-next-hop) 450 | +--rw tunnel-encap 451 | +--rw (tunnel-type)? 452 | | +--:(ipv4) 453 | | | +--rw source-ipv4-address inet:ipv4-address 454 | | | +--rw destination-ipv4-address inet:ipv4-address 455 | | | +--rw protocol uint8 456 | | | +--rw ttl? uint8 457 | | | +--rw dscp? uint8 458 | | +--:(ipv6) 459 | | | +--rw source-ipv6-address inet:ipv6-address 460 | | | +--rw destination-ipv6-address inet:ipv6-address 461 | | | +--rw next-header uint8 462 | | | +--rw traffic-class? uint8 463 | | | +--rw flow-label? uint16 464 | | | +--rw hop-limit? uint8 465 | | +--:(mpls) 466 | | | +--rw (mpls-action-type)? 467 | | | +--:(mpls-push) 468 | | | | +--rw mpls-push boolean 469 | | | | +--rw mpls-label uint32 470 | | | | +--rw s-bit? boolean 471 | | | | +--rw tos-value? uint8 472 | | | | +--rw ttl-value? uint8 473 | | | +--:(mpls-pop) 474 | | | +--rw mpls-pop boolean 475 | | | +--rw ttl-action? uint8 476 | | +--:(gre) 477 | | | +--rw gre-ip-destination inet:ipv4-address 478 | | | +--rw gre-protocol-type inet:ipv4-address 479 | | | +--rw gre-key? uint64 480 | | +--:(nvgre) 481 | | +--rw (nvgre-type)? 482 | | | +--:(ipv4) 483 | | | | +--rw source-ipv4-address inet:ipv4-address 484 | | | | +--rw destination-ipv4-address inet:ipv4-address 485 | | | | +--rw protocol uint8 486 | | | | +--rw ttl? uint8 487 | | | | +--rw dscp? uint8 488 | | | +--:(ipv6) 489 | | | +--rw source-ipv6-address inet:ipv6-address 490 | | | +--rw destination-ipv6-address inet:ipv6-address 491 | | | +--rw next-header uint8 492 | | | +--rw traffic-class? uint8 493 | | | +--rw flow-label? uint16 494 | | | +--rw hop-limit? uint8 495 | | +--rw virtual-subnet-id uint32 496 | | +--rw flow-id? uint16 497 | +--rw outgoing-interface? string 498 +--:(logical-tunnel-next-hop) 499 | +--rw logical-tunnel 500 | +--rw tunnel-type tunnel-type-def 501 | +--rw tunnel-name string 502 +--:(rib-name) 503 +--rw rib-name? string 505 Figure 6 Nexthop Chain 507 2.5. Notifications 509 Asynchronous notifications are sent by the RIB manager of a network 510 device to an external entity when some event triggers on the network 511 device. A RIB data-model MUST support sending 2 kind of asynchronous 512 notifications. 514 1. Route change notification: 516 o Installed (Indicates whether the route got installed in the FIB) ; 518 o Active (Indicates whether a route is fully resolved and is a 519 candidate for selection) ; 521 o Reason - E.g. Not authorized 523 2. Nexthop resolution status notification 525 Nexthops can be fully resolved nexthops or an unresolved nexthop. 527 A resolved nexthop has adequate level of information to send the 528 outgoing packet towards the destination by forwarding it on an 529 interface of a directly connected neighbor. 531 An unresolved nexthop is something that requires the RIB manager to 532 determine the final resolved nexthop. For example, in a case when a 533 nexthop could be an IP address. The RIB manager would resolve how to 534 reach that IP address, e.g. by checking if that particular IP is 535 address reachable by regular IP forwarding or by a MPLS tunnel or by 536 both. If the RIB manager cannot resolve the nexthop, then the 537 nexthop remains in an unresolved state and is NOT a suitable 538 candidate for installation in the FIB. 540 The structure tree of notifications is shown in the following figure. 542 notifications: 543 +---n nexthop-resolution-status-change 544 | +--ro nexthop 545 | | +--ro nexthop-id uint32 546 | | +--ro (nexthop-type)? 547 | | +--:(nexthop-base) 548 | | | +--ro nexthop-base 549 | | | +--ro nexthop-chain* [nexthop-chain-id] 550 | | | +--ro nexthop-chain-id uint32 551 | | | +--ro (nexthop-chain-type)? 552 | | | ... 553 | | +--:(nexthop-protection) 554 | | | +--ro nexthop-protection-list* [nexthop-protection-id] 555 | | | +--ro nexthop-protection-id uint32 556 | | | +--ro nexthop-preference nexthop-preference-def 557 | | | +--ro rw nexthop nexthop-ref 558 | | +--:(nexthop-load-balance) 559 | | | +--ro nexthop-lb 560 | | | +--ro nexthop-lbs* [nexthop-lbs-id] 561 | | | +--ro nexthop-lbs-id uint32 562 | | | +--ro nhop-lb-weight nhop-lb-weight-def 563 | | | +--ro nexthop-lb-member nexthop-ref 564 | | +--:(nexthop-replicate) 565 | | +--ro nexthop-replicate 566 | | +--ro nexthop-replicates* [nexthop-replicates-id] 567 | | +--ro nexthop-replicates-id uint32 568 | | +--ro nexthop-replicate? nexthop-ref 569 | +--ro nexthop-state nexthop-state-def 570 +---n route-change 571 +--ro instance-name string 572 +--ro rib-name string 573 +--ro rib-family rib-family-def 574 +--ro route-index uint64 575 +--ro route-type route-type-def 576 +--ro match 577 | +--ro (rib-route-type)? 578 | +--:(ipv4) 579 | | +--ro ipv4 580 | | ... 581 | +--:(ipv6) 582 | | +--ro ipv6 583 | | ... 584 | +--:(mpls-route) 585 | | +--ro mpls-label uint32 586 | +--:(mac-route) 587 | | +--ro mac-address uint32 588 | +--:(interface-route) 589 | +--ro interface-identifier if:interface-ref 590 +--ro route-installed-state route-installed-state-def 591 +--ro route-state route-state-def 592 +--ro route-reason route-reason-def 594 Figure 7 Notifications 596 3. YANG Modules 598 file "i2rs rib@2015-04-03.yang" 600 module i2rs-rib { 601 namespace "urn:TBD1:params:xml:ns:yang:rt:i2rs:rib"; 602 // replace with iana namespace when assigned 603 prefix "i2rs-rib"; 605 import ietf-inet-types { 606 prefix inet; 607 //rfc6991 608 } 610 import ietf-interfaces { 611 prefix "if"; 612 } 614 import ietf-routing { 615 prefix "rt"; 616 } 618 organization 619 "TBD2"; 620 contact 621 "email: wang_little_star@sina.com 622 email: hari@packetdesign.com 623 email: mach.chen@huawei.com 624 email: amit.dass@ericsson.com 625 email: sriganesh.kini@ericsson.com 626 email: nitin_bahadur@yahoo.com"; 628 description 629 "This module defines a YANG data model for 630 Routing Information Base (RIB) that aligns 631 with the I2RS RIB information model. 632 "; 634 revision "2015-04-03" { 635 description "initial revision"; 636 reference "draft-ietf-i2rs-rib-info-model-06"; 637 } 639 container nexthop-capacity{ 640 leaf support-tunnel{ 641 type boolean; 642 } 643 leaf support-chains{ 644 type boolean; 645 } 646 leaf support-list-of-list{ 647 type boolean; 648 } 649 leaf support-replication{ 650 type boolean; 651 } 652 leaf support-weighted{ 653 type boolean; 654 } 655 leaf support-protection{ 656 type boolean; 657 } 658 leaf lookup-limit{ 659 type uint8; 660 } 661 } 663 container nexthop-tunnel-encap-capacity{ 664 leaf support-ipv4{ 665 type boolean; 666 } 667 leaf support-ipv6{ 668 type boolean; 669 } 670 leaf support-mpls{ 671 type boolean; 672 } 673 leaf support-gre{ 674 type boolean; 675 } 676 leaf support-vxlan{ 677 type boolean; 679 } 680 leaf support-nvgre{ 681 type boolean; 682 } 683 } 685 // Identities and Type Definitions 686 identity mpls-action { 687 description 688 "The mpls-action. "; 689 } 691 identity push { 692 base "mpls-action"; 693 } 695 identity pop { 696 base "mpls-action"; 697 } 699 identity swap { 700 base "mpls-action"; 701 } 703 typedef mpls-action-def { 704 type identityref { 705 base "mpls-action"; 706 } 707 } 709 identity special-nexthop { 710 description 711 "special-nexthop. "; 712 } 714 identity discard { 715 base "special-nexthop"; 716 } 718 identity discard-with-error { 719 base "special-nexthop"; 720 } 722 identity receive { 723 base "special-nexthop"; 724 } 726 identity cos-value { 727 base "special-nexthop"; 728 } 730 typedef special-nexthop-def { 731 type identityref { 732 base "special-nexthop"; 733 } 734 } 736 identity ip-route-type { 737 description 738 "The ip route type. "; 739 } 741 identity src { 742 base "ip-route-type"; 743 } 745 identity dest { 746 base "ip-route-type"; 747 } 749 identity dest-src { 750 base "ip-route-type"; 751 } 753 typedef ip-route-type-def { 754 type identityref { 755 base "ip-route-type"; 756 } 757 } 759 identity rib-family { 760 description 761 "The rib-family."; 762 } 764 identity ipv4-rib-family { 765 base "rib-family"; 766 } 768 identity ipv6-rib-family { 769 base "rib-family"; 770 } 772 identity mpls-rib-family { 773 base "rib-family"; 774 } 775 identity ieee-mac-rib-family { 776 base "rib-family"; 777 } 779 typedef rib-family-def { 780 type identityref { 781 base "rib-family"; 782 } 783 } 785 identity route-type { 786 description "The route type. "; 787 } 789 identity ipv4-route { 790 base "route-type"; 791 } 793 identity ipv6-route { 794 base "route-type"; 795 } 797 identity mpls-route { 798 base "route-type"; 799 } 801 identity ieee-mac { 802 base "route-type"; 803 } 805 identity interface { 806 base "route-type"; 807 } 809 typedef route-type-def { 810 type identityref { 811 base "route-type"; 812 } 813 } 815 identity tunnel-type { 816 description 817 "The tunnel type."; 818 } 820 identity ipv4-tunnel { 821 base "tunnel-type"; 822 description 823 "IPv4 tunnel type"; 824 } 826 identity ipv6-tunnel { 827 base "tunnel-type"; 828 description 829 "IPv6 Tunnel type"; 830 } 832 identity mpls-tunnel { 833 base "tunnel-type"; 834 description 835 "MPLS tunnel type"; 836 } 838 identity gre-tunnel { 839 base "tunnel-type"; 840 description 841 "GRE tunnel type"; 842 } 844 identity vxlan-tunnel { 845 base "tunnel-type"; 846 description 847 "VxLAN tunnel type"; 848 } 850 identity nvgre-tunnel { 851 base "tunnel-type"; 852 description 853 "NVGRE tunnel type"; 854 } 856 typedef tunnel-type-def { 857 type identityref { 858 base "tunnel-type"; 859 } 860 } 862 identity route-state { 863 description 864 "The route state."; 865 } 867 identity active { 868 base "route-state"; 869 } 870 identity inactive { 871 base "route-state"; 872 } 874 typedef route-state-def { 875 type identityref { 876 base "route-state"; 877 } 878 } 880 identity nexthop-state { 881 description 882 "The nexthop state."; 883 } 885 identity resolved { 886 base "nexthop-state"; 887 } 889 identity unresolved { 890 base "nexthop-state"; 891 } 893 typedef nexthop-state-def { 894 type identityref { 895 base "nexthop-state"; 896 } 897 } 899 identity route-installed-state { 900 description 901 "The route installed state. "; 902 } 904 identity uninstalled { 905 base "route-installed-state"; 906 } 908 identity Installed { 909 base "route-installed-state"; 910 } 912 typedef route-installed-state-def { 913 type identityref { 914 base "route-installed-state"; 915 } 916 } 917 identity route-reason { 918 description 919 "The reason of invalid route. "; 920 } 922 identity low-preference { 923 base "route-reason"; 924 description 925 "Low preference"; 926 } 928 identity unresolved-nexthop { 929 base "route-reason"; 930 description 931 "Unresolved nexthop"; 932 } 934 identity higher-metric { 935 base "route-reason"; 936 description 937 "Higher metric"; 938 } 940 typedef route-reason-def { 941 type identityref { 942 base "route-reason"; 943 } 944 } 946 typedef nexthop-preference-def { 947 description 948 "Nexthop-preference is used for protection schemes. 949 It is an integer value between 1 and 99. A lower 950 value indicates higher preference. To download a 951 primary/standby/tertiary group to the FIB, the 952 nexthops that are resolved and have two highest 953 preferences are selected."; 954 type uint8 { 955 range "1..99"; 956 } 957 } 958 typedef nhop-lb-weight-def { 959 description 960 "Nhop-lb-weight is a number between 1 and 99."; 961 type uint8 { 962 range "1..99"; 963 } 964 } 965 typedef nexthop-ref { 966 type leafref { 967 path "/i2rs-rib:routing-instance/i2rs-rib:rib-list" + 968 "/i2rs-rib:route-list/i2rs-rib:nexthop/i2rs-rib:nexthop-id"; 969 } 970 } 972 //Groupings 974 grouping route-prefix{ 975 description 976 "The common attributes used for all routes"; 977 leaf route-index { 978 type uint64 ; 979 mandatory true; 980 } 981 leaf route-type { 982 type route-type-def ; 983 mandatory true; 984 } 985 container match { 986 choice rib-route-type { 987 case ipv4 { 988 description 989 "Match on destination IP address in the IPv4 header"; 990 container ipv4{ 991 leaf ipv4-route-type { 992 type ip-route-type-def ; 993 mandatory true; 994 } 995 choice ip-route-type { 996 case destination-ipv4-address { 997 leaf destination-ipv4-prefix { 998 type inet:ipv4-prefix; 999 mandatory true; 1000 } 1001 } 1002 case source-ipv4-address { 1003 leaf source-ipv4-prefix { 1004 type inet:ipv4-prefix; 1005 mandatory true; 1006 } 1007 } 1008 case destination-source-ipv4-address { 1009 container destination-source-ipv4-address { 1010 leaf destination-ipv4-prefix { 1011 type inet:ipv4-prefix; 1012 mandatory true; 1014 } 1015 leaf source-ipv4-prefix { 1016 type inet:ipv4-prefix; 1017 mandatory true; 1018 } 1019 } 1020 } 1021 } 1022 } 1023 } 1024 case ipv6 { 1025 description 1026 "Match on destination IP address in the IPv6 header"; 1027 container ipv6 { 1028 leaf ipv6-route-type { 1029 type ip-route-type-def ; 1030 mandatory true; 1031 } 1032 choice ip-route-type { 1033 case destination-ipv6-address { 1034 leaf destination-ipv6-prefix { 1035 type inet:ipv6-prefix; 1036 mandatory true; 1037 } 1038 } 1039 case source-ipv6-address { 1040 leaf source-ipv6-prefix { 1041 type inet:ipv6-prefix; 1042 mandatory true; 1043 } 1044 } 1045 case destination-source-ipv6-address { 1046 container destination-source-ipv6-address { 1047 leaf destination-ipv6-prefix { 1048 type inet:ipv6-prefix; 1049 mandatory true; 1050 } 1051 leaf source-ipv6-prefix { 1052 type inet:ipv6-prefix; 1053 mandatory true; 1054 } 1055 } 1056 } 1057 } 1058 } 1059 } 1060 case mpls-route { 1061 description 1062 "Match on a MPLS label at the top of the MPLS label stack"; 1063 leaf mpls-label { 1064 type uint32 ; 1065 mandatory true; 1066 } 1067 } 1068 case mac-route { 1069 description 1070 "Match on MAC destination addresses in the ethernet header"; 1071 leaf mac-address { 1072 type uint32 ; 1073 mandatory true; 1074 } 1075 } 1076 case interface-route { 1077 description 1078 "Match on incoming interface of the packet"; 1079 leaf interface-identifier { 1080 type if:interface-ref; 1081 mandatory true; 1082 } 1083 } 1084 } 1085 } 1086 } 1088 grouping route{ 1089 description 1090 "The common attributes usesd for all routes"; 1091 uses route-prefix; 1092 container nexthop{ 1093 uses nexthop; 1094 } 1095 container route-statistic{ 1096 leaf route-state { 1097 type route-state-def ; 1098 config false; 1099 } 1100 leaf route-installed-state { 1101 type route-installed-state-def ; 1102 config false; 1103 } 1104 leaf route-reason { 1105 type route-reason-def ; 1106 config false; 1107 } 1108 } 1109 container route-attributes{ 1110 uses route-attributes; 1111 } 1112 container route-vendor-attributes{ 1113 uses route-vendor-attributes; 1114 } 1115 } 1117 grouping nexthop { 1118 leaf nexthop-id { 1119 mandatory true; 1120 type uint32; 1121 } 1122 choice nexthop-type { 1123 case nexthop-base { 1124 container nexthop-base { 1125 list nexthop-chain { 1126 key "nexthop-chain-id"; 1127 uses nexthop-chain-member; 1128 } 1129 } 1130 } 1132 case nexthop-protection { 1133 list nexthop-protection-list { 1134 key "nexthop-protection-id"; 1135 leaf nexthop-protection-id { 1136 mandatory true; 1137 type uint32; 1138 } 1139 leaf nexthop-preference { 1140 description 1141 "Nexthop-preference is used for protection schemes. 1142 It is an integer value between 1 and 99. A lower 1143 value indicates higher preference. To download a 1144 primary/standby/tertiary group to the FIB, the 1145 nexthops that are resolved and have two highest 1146 preferences are selected."; 1147 mandatory true; 1148 type nexthop-preference-def; 1149 } 1150 leaf nexthop { 1151 mandatory true; 1152 type nexthop-ref; 1153 } 1154 } 1155 } 1157 case nexthop-load-balance { 1158 container nexthop-lb { 1159 list nexthop-lbs { 1160 key "nexthop-lbs-id"; 1161 leaf nexthop-lbs-id { 1162 mandatory true; 1163 type uint32; 1164 } 1165 leaf nhop-lb-weight { 1166 mandatory true; 1167 type nhop-lb-weight-def; 1168 } 1169 leaf nexthop-lb-member { 1170 mandatory true; 1171 type nexthop-ref; 1172 } 1173 } 1174 } 1175 } 1177 case nexthop-replicate { 1178 container nexthop-replicate { 1179 list nexthop-replicates{ 1180 key "nexthop-replicates-id"; 1181 leaf nexthop-replicates-id { 1182 mandatory true; 1183 type uint32; 1184 } 1185 leaf nexthop-replicate { 1186 type nexthop-ref; 1187 } 1188 } 1189 } 1190 } 1191 } 1192 } 1194 grouping nexthop-chain-member { 1195 description 1196 "One nexthop content for a route."; 1197 leaf nexthop-chain-id{ 1198 type uint32; 1199 mandatory true; 1200 } 1201 choice nexthop-chain-type { 1202 case nexthop-chain-member-special { 1203 container nexthop-chain-member-special { 1204 leaf nexthop-chain-member-special{ 1205 type special-nexthop-def; 1207 } 1208 } 1209 } 1211 case nexthop-chain-member-identifier{ 1212 uses nexthop-chain-member-identifier; 1213 } 1215 case egress-interface-next-hop { 1216 description 1217 "Simple next-hop is specified as an outgoing interface, 1218 next-hop address or both."; 1219 leaf outgoing-interface { 1220 type if:interface-ref; 1221 mandatory true; 1222 description 1223 "Name of the outgoing interface."; 1224 } 1225 } 1227 case ipv4-address-next-hop { 1228 leaf next-hop-ipv4-address { 1229 type inet:ipv4-address; 1230 mandatory true; 1231 description 1232 "The nexthop is an IPv4 address."; 1233 } 1234 } 1236 case ipv6-address-next-hop { 1237 leaf next-hop-ipv6-address { 1238 type inet:ipv6-address; 1239 mandatory true; 1240 description 1241 "The nexthop is an IPv6 address."; 1242 } 1243 } 1245 case egress-interface-ipv4-next-hop { 1246 container next-hop-egress-interface-ipv4-address{ 1247 leaf outgoing-interface { 1248 type if:interface-ref; 1249 mandatory true; 1250 description 1251 "Name of the outgoing interface."; 1252 } 1253 leaf next-hop-egress-ipv4-address { 1254 type inet:ipv4-address; 1255 mandatory true; 1256 description 1257 "The nexthop points to an interface with 1258 an IPv4 address."; 1259 } 1260 description 1261 "Egress-interface and ip address: This can be usesd 1262 in cases e.g.where the ip address is a link-local 1263 address."; 1264 } 1265 } 1267 case egress-interface-ipv6-next-hop { 1268 container next-hop-egress-interface-ipv6-address{ 1269 leaf outgoing-interface { 1270 type if:interface-ref; 1271 mandatory true; 1272 description 1273 "Name of the outgoing interface."; 1274 } 1275 leaf next-hop-egress-ipv6-address { 1276 type inet:ipv6-address; 1277 mandatory true; 1278 description 1279 "The nexthop points to an interface with 1280 an IPv6 address."; 1281 } 1282 description 1283 "Egress-interface and ip address: This can be usesd 1284 in cases e.g.where the ip address is a link-local 1285 address."; 1286 } 1287 } 1289 case egress-interface-mac-next-hop { 1290 container next-hop-egress-interface-mac-address{ 1291 leaf outgoing-interface { 1292 type if:interface-ref; 1293 mandatory true; 1294 description 1295 "Name of the outgoing interface."; 1296 } 1297 leaf ieee-mac-address { 1298 type uint32; 1299 mandatory true; 1300 description 1301 "The nexthop points to an interface with 1302 a specific mac-address."; 1304 } 1305 description 1306 "The egress interface must be an ethernet 1307 interface.Address resolution is not required 1308 for this nexthop." 1310 } 1311 } 1313 case tunnel-encap-next-hop { 1314 container tunnel-encap { 1315 uses tunnel-encap; 1316 leaf outgoing-interface { 1317 type string; 1318 } 1319 description 1320 "This can be an encap representing an ip tunnel or 1321 mpls tunnel or others as defined in this document. 1322 An optional egress interface can be specified to 1323 indicate which interface to send The packet out on. 1324 The egress interface is usesful when the network 1325 device contains eThernet interfaces and one needs 1326 to perform address resolution for The ip packet."; 1327 } 1328 } 1330 case logical-tunnel-next-hop { 1331 container logical-tunnel { 1332 uses logical-tunnel; 1333 description 1334 "This can be a MPLS LSP or a GRE tunnel (or others 1335 as defined in This document), that is represented 1336 by a unique identifier (e.g. name)."; 1337 } 1338 } 1340 case rib-name { 1341 leaf rib-name { 1342 type string; 1343 description 1344 "A nexthop pointing to a rib indicates that the 1345 route lookup needs to continue in The specified 1346 rib. This is a way to perform chained lookups."; 1347 } 1348 } 1349 } 1350 } 1351 grouping nexthop-chain-member-identifier{ 1352 choice nexthop-identifier-type{ 1353 case nexthop-chain-name { 1354 leaf nexthop-chain-name { 1355 type string; 1356 mandatory true; 1357 } 1358 } 1359 case nexthop-chain-id { 1360 leaf nexthop-chain-id { 1361 type uint32; 1362 mandatory true; 1363 } 1364 } 1365 } 1366 } 1368 grouping route-vendor-attributes{ 1369 } 1371 grouping logical-tunnel{ 1372 leaf tunnel-type { 1373 type tunnel-type-def ; 1374 mandatory true; 1375 } 1376 leaf tunnel-name { 1377 type string ; 1378 mandatory true; 1379 } 1380 } 1382 grouping ipv4-header{ 1383 leaf source-ipv4-address { 1384 type inet:ipv4-address; 1385 mandatory true; 1386 } 1387 leaf destination-ipv4-address { 1388 type inet:ipv4-address; 1389 mandatory true; 1390 } 1391 leaf protocol { 1392 type uint8; 1393 mandatory true; 1394 } 1395 leaf ttl { 1396 type uint8; 1397 } 1398 leaf dscp { 1399 type uint8; 1400 } 1401 } 1403 grouping ipv6-header{ 1404 leaf source-ipv6-address { 1405 type inet:ipv6-address; 1406 mandatory true; 1407 } 1408 leaf destination-ipv6-address { 1409 type inet:ipv6-address; 1410 mandatory true; 1411 } 1412 leaf next-header { 1413 type uint8; 1414 mandatory true; 1415 } 1416 leaf traffic-class { 1417 type uint8; 1418 } 1419 leaf flow-label { 1420 type uint16; 1421 } 1422 leaf hop-limit { 1423 type uint8; 1424 } 1425 } 1427 grouping nvgre-header{ 1428 choice nvgre-type { 1429 description 1430 "nvgre-header."; 1431 case ipv4 { 1432 uses ipv4-header; 1433 } 1434 case ipv6 { 1435 uses ipv6-header; 1436 } 1437 } 1438 leaf virtual-subnet-id { 1439 type uint32; 1440 mandatory true; 1441 } 1442 leaf flow-id { 1443 type uint16; 1444 } 1445 } 1446 grouping vxlan-header{ 1447 choice vxlan-type { 1448 description 1449 "vxlan-header."; 1450 case ipv4 { 1451 uses ipv4-header; 1452 } 1453 case ipv6 { 1454 uses ipv6-header; 1455 } 1456 } 1457 leaf vxlan-identifier { 1458 type uint32; 1459 } 1460 } 1462 grouping gre-header{ 1463 leaf gre-ip-destination { 1464 type inet:ipv4-address; 1465 mandatory true; 1466 } 1467 leaf gre-protocol-type { 1468 type inet:ipv4-address; 1469 mandatory true; 1470 } 1471 leaf gre-key { 1472 type uint64; 1473 } 1474 } 1476 grouping mpls-header{ 1477 choice mpls-action-type { 1478 description 1479 "mpls-header."; 1480 case mpls-push { 1481 leaf mpls-push { 1482 type boolean; 1483 mandatory true; 1484 } 1485 leaf mpls-label { 1486 type uint32; 1487 mandatory true; 1488 } 1489 leaf s-bit { 1490 type boolean; 1491 } 1492 leaf tos-value { 1493 type uint8; 1495 } 1496 leaf ttl-value { 1497 type uint8; 1498 } 1499 } 1500 case mpls-pop { 1501 leaf mpls-pop { 1502 type boolean; 1503 mandatory true; 1504 } 1505 leaf ttl-action { 1506 type uint8; 1507 } 1508 } 1509 } 1510 } 1512 grouping tunnel-encap{ 1513 choice tunnel-type { 1514 description 1515 "options for next-hops."; 1516 case ipv4 { 1517 uses ipv4-header; 1518 } 1519 case ipv6 { 1520 uses ipv6-header; 1521 } 1522 case mpls { 1523 uses mpls-header; 1524 } 1525 case gre { 1526 uses gre-header; 1527 } 1528 case nvgre { 1529 uses nvgre-header; 1530 } 1531 } 1532 } 1534 grouping route-attributes{ 1535 leaf route-preference { 1536 description 1537 "ROUTE_PREFERENCE: This is a numerical value that 1538 allows for comparing routes from different 1539 protocols. Static configuration is also 1540 considered a protocol for the purpose of this 1541 field. It iss also known as administrative-distance. 1542 The lower the value, the higher the preference."; 1544 type uint32 ; 1545 mandatory true; 1546 } 1547 leaf local-only { 1548 type boolean ; 1549 mandatory true; 1550 } 1551 container address-family-route-attributes{ 1552 choice route-type { 1553 case ip-route-attributes { 1554 } 1555 case mpls-route-attributes { 1556 } 1557 case ethernet-route-attributes { 1558 } 1559 } 1560 } 1561 } 1563 container routing-instance { 1564 description 1565 "Configuration of an 'i2rs' pseudo-protocol instance 1566 consists of a list of ribs."; 1568 leaf name { 1569 description 1570 "A routing instance is identified by its name, 1571 INSTANCE_name. This MUST be unique across all routing 1572 instances in a given network device."; 1573 type string ; 1574 mandatory true; 1575 } 1576 list interface-list { 1577 description 1578 "This represents the list of interfaces associated 1579 with this routing instance. The interface list helps 1580 constrain the boundaries of packet forwarding. 1581 Packets coming on these interfaces are directly 1582 associated with the given routing instance. The 1583 interface list contains a list of identifiers, with 1584 each identifier uniquely identifying an interface."; 1585 key "name"; 1586 leaf name { 1587 type if:interface-ref; 1588 description 1589 "A reference to the name of a configured network layer 1590 interface."; 1591 } 1593 } 1594 uses rt:router-id ; 1595 list rib-list { 1596 description 1597 "This is the list of RIBs associated with this routing 1598 instance. Each routing instance can have multiple RIBs 1599 to represent routes of different types."; 1600 key "name"; 1601 leaf name { 1602 description 1603 "A reference to the name of a rib."; 1604 type string; 1605 mandatory true; 1606 } 1607 leaf rib-family { 1608 type rib-family-def; 1609 mandatory true; 1610 } 1611 leaf enable-ip-rpf-check { 1612 description 1613 "Each RIB can be optionally associated with a 1614 ENABLE_IP_RPF_CHECK attribute that enables Reverse 1615 path forwarding (RPF) checks on all IP routes in that 1616 RIB. Reverse path forwarding (RPF) check is used to 1617 prevent spoofing and limit malicious traffic."; 1618 type boolean; 1619 } 1620 list route-list{ 1621 key "route-index"; 1622 uses route; 1623 } 1624 } 1625 } 1627 notification nexthop-resolution-status-change { 1628 description 1629 "Nexthop resolution status (resolved/unresolved) 1630 notification."; 1631 container nexthop{ 1632 uses nexthop; 1633 } 1634 leaf nexthop-state { 1635 description 1636 "Nexthop resolution status (resolved/unresolved) 1637 notification."; 1638 type nexthop-state-def; 1639 mandatory true; 1640 } 1642 } 1644 notification route-change { 1645 description 1646 "Route change notification."; 1647 leaf instance-name { 1648 description 1649 "A routing instance is identified by its name, 1650 INSTANCE_name. This MUST be unique across all 1651 routing instances in a given network device."; 1652 type string ; 1653 mandatory true; 1654 } 1655 leaf rib-name { 1656 description 1657 "A reference to the name of a rib."; 1658 type string; 1659 mandatory true; 1660 } 1661 leaf rib-family { 1662 type rib-family-def; 1663 mandatory true; 1664 } 1665 uses route-prefix; 1666 leaf route-installed-state { 1667 description 1668 "Indicates whether the route got installed in the FIB."; 1669 type route-installed-state-def; 1670 mandatory true; 1671 } 1672 leaf route-state { 1673 description 1674 "Indicates whether a route is fully resolved and 1675 is a candidate for selection."; 1676 type route-state-def; 1677 mandatory true; 1678 } 1679 leaf route-reason { 1680 description 1681 "Need to be added."; 1682 type route-reason-def; 1683 mandatory true; 1684 } 1685 } 1686 } 1688 1689 4. IANA Considerations 1691 TBD. 1693 5. Security Considerations 1695 This document introduces no new security threat and SHOULD follow the 1696 security requirements as stated in [I-D.ietf-i2rs-architecture]. 1698 6. References 1700 6.1. Normative References 1702 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1703 Requirement Levels", BCP 14, RFC 2119, 1704 DOI 10.17487/RFC2119, March 1997, 1705 . 1707 6.2. Informative References 1709 [I-D.ietf-i2rs-architecture] 1710 Atlas, A., Halpern, J., Hares, S., Ward, D., and T. 1711 Nadeau, "An Architecture for the Interface to the Routing 1712 System", draft-ietf-i2rs-architecture-09 (work in 1713 progress), March 2015. 1715 [I-D.ietf-i2rs-rib-info-model] 1716 Bahadur, N., Folkes, R., Kini, S., and J. Medved, "Routing 1717 Information Base Info Model", draft-ietf-i2rs-rib-info- 1718 model-06 (work in progress), March 2015. 1720 [I-D.ietf-i2rs-usecase-reqs-summary] 1721 Hares, S. and M. Chen, "Summary of I2RS Use Case 1722 Requirements", draft-ietf-i2rs-usecase-reqs-summary-01 1723 (work in progress), May 2015. 1725 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1726 the Network Configuration Protocol (NETCONF)", RFC 6020, 1727 DOI 10.17487/RFC6020, October 2010, 1728 . 1730 [RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", 1731 RFC 6021, DOI 10.17487/RFC6021, October 2010, 1732 . 1734 Authors' Addresses 1736 Lixing Wang 1737 Huawei 1739 Email: wang_little_star@sina.com 1741 Hariharan Ananthakrishnan 1742 Packet Design 1744 Email: hari@packetdesign.com 1746 Mach(Guoyi) Chen 1747 Huawei 1749 Email: mach.chen@huawei.com 1751 Amit Dass 1752 Ericsson 1753 Torshamnsgatan 48. 1754 Stockholm 16480 1755 Sweden 1757 Email: amit.dass@ericsson.com 1759 Sriganesh Kini 1760 Ericsson 1762 Email: sriganesh.kini@ericsson.com 1764 Nitin Bahadur 1765 Bracket Computing 1767 Email: nitin_bahadur@yahoo.com