| ietf-i2rs-rib-originalXML.yang | ietf-i2rs-rib-0906.yang | |||
|---|---|---|---|---|
| module ietf-i2rs-rib { | module ietf-i2rs-rib { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-i2rs-rib"; | namespace "urn:ietf:params:xml:ns:yang:ietf-i2rs-rib"; | |||
| prefix "iir"; | prefix iir; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix inet; | prefix inet; | |||
| reference "RFC 6991"; | reference "RFC 6991"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix if; | prefix if; | |||
| reference "RFC 8344"; | reference "RFC 8344"; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix yang; | prefix yang; | |||
| reference "RFC 6991"; | reference "RFC 6991"; | |||
| } | } | |||
| organization | organization | |||
| "IETF I2RS (Interface to Routing System) Working Group"; | "IETF I2RS (Interface to Routing System) Working Group"; | |||
| contact | contact | |||
| "WG Web: <http://tools.ietf.org/wg/i2rs/> | "WG Web: <https://datatracker.ietf.org/wg/i2rs/> | |||
| WG List: <mailto:i2rs@ietf.org> | WG List: <mailto:i2rs@ietf.org> | |||
| Editor: Lixing Wang | Editor: Lixing Wang | |||
| <mailto:wang_little_star@sina.com> | <mailto:wang_little_star@sina.com> | |||
| Editor: Mach(Guoyi) Chen | Editor: Mach(Guoyi) Chen | |||
| <mailto:mach.chen@huawei.com> | <mailto:mach.chen@huawei.com> | |||
| Editor: Amit Dass | Editor: Amit Dass | |||
| <mailto:amit.dass@ericsson.com> | <mailto:amit.dass@ericsson.com> | |||
| skipping to change at line 48 | skipping to change at line 46 | |||
| Editor: Sriganesh Kini | Editor: Sriganesh Kini | |||
| <mailto:sriganesh.kini@ericsson.com> | <mailto:sriganesh.kini@ericsson.com> | |||
| Editor: Nitin Bahadur | Editor: Nitin Bahadur | |||
| <mailto:nitin_bahadur@yahoo.com>"; | <mailto:nitin_bahadur@yahoo.com>"; | |||
| description | description | |||
| "This module defines a YANG data model for | "This module defines a YANG data model for | |||
| Routing Information Base (RIB) that aligns | Routing Information Base (RIB) that aligns | |||
| with the I2RS RIB information model. | with the I2RS RIB information model. | |||
| Copyright (c) <2018> IETF Trust and the persons | ||||
| identified as authors of the code. All rights reserved."; | Copyright (c) 2018 IETF Trust and the persons | |||
| revision "2018-04-23" { | identified as authors of the code. All rights reserved. | |||
| description "initial revision"; | ||||
| reference "RFC XXXX: draft-ietf-i2rs-data-model-10"; | Redistribution and use in source and binary forms, with or | |||
| // RFC Ed.: replace XXXX with actual RFC number and remove | without modification, is permitted pursuant to, and subject | |||
| // this note | to the license terms contained in, the Simplified BSD License | |||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (http://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC 8341; see | ||||
| the RFC itself for full legal notices."; | ||||
| revision 2018-08-06 { | ||||
| description | ||||
| "initial revision"; | ||||
| reference "RFC 8431"; | ||||
| } | } | |||
| //Features | //Features | |||
| feature nexthop-tunnel { | feature nexthop-tunnel { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| tunnel nexthop capability."; | tunnel nexthop capability."; | |||
| } | } | |||
| feature nexthop-chain { | feature nexthop-chain { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| chain nexthop capability."; | chain nexthop capability."; | |||
| skipping to change at line 79 | skipping to change at line 89 | |||
| feature nexthop-protection { | feature nexthop-protection { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| protection nexthop capability."; | protection nexthop capability."; | |||
| } | } | |||
| feature nexthop-replicate { | feature nexthop-replicate { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| replicates nexthop capability."; | replicate nexthop capability."; | |||
| } | } | |||
| feature nexthop-load-balance { | feature nexthop-load-balance { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| load balance nexthop capability."; | load-balance nexthop capability."; | |||
| } | } | |||
| feature ipv4-tunnel { | feature ipv4-tunnel { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| IPv4 tunnel encapsulation capability."; | IPv4 tunnel encapsulation capability."; | |||
| } | } | |||
| feature ipv6-tunnel { | feature ipv6-tunnel { | |||
| description | description | |||
| skipping to change at line 109 | skipping to change at line 119 | |||
| feature mpls-tunnel { | feature mpls-tunnel { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| MPLS tunnel encapsulation capability."; | MPLS tunnel encapsulation capability."; | |||
| } | } | |||
| feature vxlan-tunnel { | feature vxlan-tunnel { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| VXLAN tunnel encapsulation capability."; | Virtual eXtensible Local Area Network | |||
| reference "RFC7348"; | (VXLAN) tunnel encapsulation capability."; | |||
| reference "RFC 7348"; | ||||
| } | } | |||
| feature gre-tunnel { | feature gre-tunnel { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| GRE tunnel encapsulation capability."; | GRE tunnel encapsulation capability."; | |||
| reference "RFC2784"; | reference "RFC 2784"; | |||
| } | } | |||
| feature nvgre-tunnel { | feature nvgre-tunnel { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| NvGRE tunnel encapsulation capability."; | Network Virtualization Using GRE (NVGRE) | |||
| reference "RFC7637"; | tunnel encapsulation capability."; | |||
| reference "RFC 7637"; | ||||
| } | } | |||
| feature route-vendor-attributes { | feature route-vendor-attributes { | |||
| description | description | |||
| "This feature means that a node supports | "This feature means that a node supports | |||
| route vendor attributes."; | route vendor attributes."; | |||
| } | } | |||
| //Identities and Type Definitions | //Identities and Type Definitions | |||
| identity mpls-label-action { | identity mpls-label-action { | |||
| description | description | |||
| "Base identity from which all MPLS label | "Base identity from which all MPLS label | |||
| operations are derived. | operations are derived. | |||
| The MPLS label stack operations include: | The MPLS label stack operations include: | |||
| push - to add a new label to a label stack, | push - to add a new label to a label stack | |||
| pop - to pop the top label from a label stack, | pop - to pop the top label from a label stack | |||
| swap - to exchange the top label of a label | swap - to exchange the top label of a label | |||
| stack with new label."; | stack with a new label"; | |||
| } | } | |||
| identity label-push { | identity label-push { | |||
| base "mpls-label-action"; | base mpls-label-action; | |||
| description | description | |||
| "MPLS label stack operation: push."; | "MPLS label stack operation: push."; | |||
| } | } | |||
| identity label-pop { | identity label-pop { | |||
| base "mpls-label-action"; | base mpls-label-action; | |||
| description | description | |||
| "MPLS label stack operation: pop."; | "MPLS label stack operation: pop."; | |||
| } | } | |||
| identity label-swap { | identity label-swap { | |||
| base "mpls-label-action"; | base mpls-label-action; | |||
| description | description | |||
| "MPLS label stack operation: swap."; | "MPLS label stack operation: swap."; | |||
| } | } | |||
| typedef mpls-label-action-definition { | typedef mpls-label-action-definition { | |||
| type identityref { | type identityref { | |||
| base "mpls-label-action"; | base mpls-label-action; | |||
| } | } | |||
| description | description | |||
| "MPLS label action definition."; | "MPLS label action definition."; | |||
| } | } | |||
| identity tunnel-decapsulation-action { | identity tunnel-decapsulation-action { | |||
| description | description | |||
| "Base identity from which all tunnel decapsulation | "Base identity from which all tunnel decapsulation | |||
| actions are derived. | actions are derived. | |||
| Tunnel decapsulation actions include: | Tunnel decapsulation actions include | |||
| ipv4-decapsulation - to decapsulate an IPv4 tunnel, | ipv4-decapsulation (to decapsulate an IPv4 tunnel) and | |||
| ipv6-decapsulation - to decapsulate an IPv6 tunnel."; | ipv6-decapsulation (to decapsulate an IPv6 tunnel)."; | |||
| } | } | |||
| identity ipv4-decapsulation { | identity ipv4-decapsulation { | |||
| base "tunnel-decapsulation-action"; | base tunnel-decapsulation-action; | |||
| description | description | |||
| "IPv4 tunnel decapsulation."; | "IPv4 tunnel decapsulation."; | |||
| } | } | |||
| identity ipv6-decapsulation { | identity ipv6-decapsulation { | |||
| base "tunnel-decapsulation-action"; | base tunnel-decapsulation-action; | |||
| description | description | |||
| "IPv6 tunnel decapsulation."; | "IPv6 tunnel decapsulation."; | |||
| } | } | |||
| typedef tunnel-decapsulation-action-definition { | typedef tunnel-decapsulation-action-definition { | |||
| type identityref { | type identityref { | |||
| base "tunnel-decapsulation-action"; | base tunnel-decapsulation-action; | |||
| } | } | |||
| description | description | |||
| "Tunnel decapsulation definition."; | "Tunnel decapsulation definition."; | |||
| } | } | |||
| identity ttl-action { | identity ttl-action { | |||
| description | description | |||
| "Base identity from which all TTL | "Base identity from which all TTL | |||
| actions are derived."; | actions are derived."; | |||
| } | } | |||
| identity no-action { | identity no-action { | |||
| base "ttl-action"; | base ttl-action; | |||
| description | description | |||
| "Do nothing regarding the TTL."; | "Do nothing regarding the TTL."; | |||
| } | } | |||
| identity copy-to-inner { | identity copy-to-inner { | |||
| base "ttl-action"; | base ttl-action; | |||
| description | description | |||
| "Copy the TTL of the outer header | "Copy the TTL of the outer header | |||
| to the inner header."; | to the inner header."; | |||
| } | } | |||
| identity decrease-and-copy-to-inner { | identity decrease-and-copy-to-inner { | |||
| base "ttl-action"; | base ttl-action; | |||
| description | description | |||
| "Decrease TTL by one and copy the TTL | "Decrease TTL by one and copy the TTL | |||
| to the inner header."; | to the inner header."; | |||
| } | } | |||
| identity decrease-and-copy-to-next { | identity decrease-and-copy-to-next { | |||
| base "ttl-action"; | base ttl-action; | |||
| description | description | |||
| "Decrease TTL by one and copy the TTL | "Decrease TTL by one and copy the TTL | |||
| to the next header. For example: when | to the next header; for example, when | |||
| MPLS label swapping, decrease the TTL | MPLS label swapping, decrease the TTL | |||
| of the in_label and copy it to the | of the in_label and copy it to the | |||
| out_label."; | out_label."; | |||
| } | } | |||
| typedef ttl-action-definition { | typedef ttl-action-definition { | |||
| type identityref { | type identityref { | |||
| base "ttl-action"; | base ttl-action; | |||
| } | } | |||
| description | description | |||
| "TTL action definition."; | "TTL action definition."; | |||
| } | } | |||
| identity hop-limit-action { | identity hop-limit-action { | |||
| description | description | |||
| "Base identity from which all hop limit | "Base identity from which all hop limit | |||
| actions are derived."; | actions are derived."; | |||
| } | } | |||
| identity hop-limit-no-action { | identity hop-limit-no-action { | |||
| base "hop-limit-action"; | base hop-limit-action; | |||
| description | description | |||
| "Do nothing regarding the hop limit."; | "Do nothing regarding the hop limit."; | |||
| } | } | |||
| identity hop-limit-copy-to-inner { | identity hop-limit-copy-to-inner { | |||
| base "hop-limit-action"; | base hop-limit-action; | |||
| description | description | |||
| "Copy the hop limit of the outer header | "Copy the hop limit of the outer header | |||
| to the inner header."; | to the inner header."; | |||
| } | } | |||
| typedef hop-limit-action-definition { | typedef hop-limit-action-definition { | |||
| type identityref { | type identityref { | |||
| base "hop-limit-action"; | base hop-limit-action; | |||
| } | } | |||
| description | description | |||
| "IPv6 hop limit action definition."; | "IPv6 hop limit action definition."; | |||
| } | } | |||
| identity special-nexthop { | identity special-nexthop { | |||
| description | description | |||
| "Base identity from which all special | "Base identity from which all special | |||
| nexthops are derived."; | nexthops are derived."; | |||
| } | } | |||
| identity discard { | identity discard { | |||
| base "special-nexthop"; | base special-nexthop; | |||
| description | description | |||
| "This indicates that the network | "This indicates that the network | |||
| device should drop the packet and | device should drop the packet and | |||
| increment a drop counter."; | increment a drop counter."; | |||
| } | } | |||
| identity discard-with-error { | identity discard-with-error { | |||
| base "special-nexthop"; | base special-nexthop; | |||
| description | description | |||
| "This indicates that the network | "This indicates that the network | |||
| device should drop the packet, | device should drop the packet, | |||
| increment a drop counter and send | increment a drop counter, and send | |||
| back an appropriate error message | back an appropriate error message | |||
| (like ICMP error)."; | (like ICMP error)."; | |||
| } | } | |||
| identity receive { | identity receive { | |||
| base "special-nexthop"; | base special-nexthop; | |||
| description | description | |||
| "This indicates that the traffic is | "This indicates that the traffic is | |||
| destined for the network device. For | destined for the network device, e.g., | |||
| example, protocol packets or OAM packets. | protocol packets or Operations, | |||
| Administration, and Maintenance (OAM) packets. | ||||
| All locally destined traffic SHOULD be | All locally destined traffic SHOULD be | |||
| throttled to avoid a denial of service | throttled to avoid a denial-of-service | |||
| attack on the router's control plane. An | attack on the router's control plane. An | |||
| optional rate-limiter can be specified | optional rate-limiter can be specified | |||
| to indicate how to throttle traffic | to indicate how to throttle traffic | |||
| destined for the control plane."; | destined for the control plane."; | |||
| } | } | |||
| identity cos-value { | identity cos-value { | |||
| base "special-nexthop"; | base special-nexthop; | |||
| description | description | |||
| "Cos-value special nexthop."; | "Cos-value special nexthop."; | |||
| } | } | |||
| typedef special-nexthop-definition { | typedef special-nexthop-definition { | |||
| type identityref { | type identityref { | |||
| base "special-nexthop"; | base special-nexthop; | |||
| } | } | |||
| description | description | |||
| "Special nexthop definition."; | "Special nexthop definition."; | |||
| } | } | |||
| identity ip-route-match-type { | identity ip-route-match-type { | |||
| description | description | |||
| "Base identity from which all route | "Base identity from which all route | |||
| match types are derived. | match types are derived. | |||
| Route match type could be: | The route match type could be: | |||
| match source, or | match source, or | |||
| match destination, or | match destination, or | |||
| match source and destination."; | match source and destination."; | |||
| } | } | |||
| identity match-ip-src { | identity match-ip-src { | |||
| base "ip-route-match-type"; | base ip-route-match-type; | |||
| description | description | |||
| "Source route match type."; | "Source route match type."; | |||
| } | } | |||
| identity match-ip-dest { | identity match-ip-dest { | |||
| base "ip-route-match-type"; | base ip-route-match-type; | |||
| description | description | |||
| "Destination route match type"; | "Destination route match type"; | |||
| } | } | |||
| identity match-ip-src-dest { | identity match-ip-src-dest { | |||
| base "ip-route-match-type"; | base ip-route-match-type; | |||
| description | description | |||
| "Source and Destination route match type"; | "Source and Destination route match type"; | |||
| } | } | |||
| typedef ip-route-match-type-definition { | typedef ip-route-match-type-definition { | |||
| type identityref { | type identityref { | |||
| base "ip-route-match-type"; | base ip-route-match-type; | |||
| } | } | |||
| description | description | |||
| "IP route match type definition."; | "IP route match type definition."; | |||
| } | } | |||
| identity address-family { | identity address-family { | |||
| description | description | |||
| "Base identity from which all RIB | "Base identity from which all RIB | |||
| address families are derived."; | address families are derived."; | |||
| } | } | |||
| identity ipv4-address-family { | identity ipv4-address-family { | |||
| base "address-family"; | base address-family; | |||
| description | description | |||
| "IPv4 RIB address family."; | "IPv4 RIB address family."; | |||
| } | } | |||
| identity ipv6-address-family { | identity ipv6-address-family { | |||
| base "address-family"; | base address-family; | |||
| description | description | |||
| "IPv6 RIB address family."; | "IPv6 RIB address family."; | |||
| } | } | |||
| identity mpls-address-family { | identity mpls-address-family { | |||
| base "address-family"; | base address-family; | |||
| description | description | |||
| "MPLS RIB address family."; | "MPLS RIB address family."; | |||
| } | } | |||
| identity ieee-mac-address-family { | identity ieee-mac-address-family { | |||
| base "address-family"; | base address-family; | |||
| description | description | |||
| "MAC RIB address family."; | "MAC RIB address family."; | |||
| } | } | |||
| typedef address-family-definition { | typedef address-family-definition { | |||
| type identityref { | type identityref { | |||
| base "address-family"; | base address-family; | |||
| } | } | |||
| description | description | |||
| "RIB address family definition."; | "RIB address family definition."; | |||
| } | } | |||
| identity route-type { | identity route-type { | |||
| description | description | |||
| "Base identity from which all route types | "Base identity from which all route types | |||
| are derived."; | are derived."; | |||
| } | } | |||
| identity ipv4-route { | identity ipv4-route { | |||
| base "route-type"; | base route-type; | |||
| description | description | |||
| "IPv4 route type."; | "IPv4 route type."; | |||
| } | } | |||
| identity ipv6-route { | identity ipv6-route { | |||
| base "route-type"; | base route-type; | |||
| description | description | |||
| "IPv6 route type."; | "IPv6 route type."; | |||
| } | } | |||
| identity mpls-route { | identity mpls-route { | |||
| base "route-type"; | base route-type; | |||
| description | description | |||
| "MPLS route type."; | "MPLS route type."; | |||
| } | } | |||
| identity ieee-mac { | identity ieee-mac { | |||
| base "route-type"; | base route-type; | |||
| description | description | |||
| "MAC route type."; | "MAC route type."; | |||
| } | } | |||
| identity interface { | identity interface { | |||
| base "route-type"; | base route-type; | |||
| description | description | |||
| "Interface route type."; | "Interface route type."; | |||
| } | } | |||
| typedef route-type-definition { | typedef route-type-definition { | |||
| type identityref { | type identityref { | |||
| base "route-type"; | base route-type; | |||
| } | } | |||
| description | description | |||
| "Route type definition."; | "Route type definition."; | |||
| } | } | |||
| identity tunnel-type { | identity tunnel-type { | |||
| description | description | |||
| "Base identity from which all tunnel | "Base identity from which all tunnel | |||
| types are derived."; | types are derived."; | |||
| } | } | |||
| identity ipv4-tunnel { | identity ipv4-tunnel { | |||
| base "tunnel-type"; | base tunnel-type; | |||
| description | description | |||
| "IPv4 tunnel type"; | "IPv4 tunnel type"; | |||
| } | } | |||
| identity ipv6-tunnel { | identity ipv6-tunnel { | |||
| base "tunnel-type"; | base tunnel-type; | |||
| description | description | |||
| "IPv6 Tunnel type"; | "IPv6 tunnel type"; | |||
| } | } | |||
| identity mpls-tunnel { | identity mpls-tunnel { | |||
| base "tunnel-type"; | base tunnel-type; | |||
| description | description | |||
| "MPLS tunnel type"; | "MPLS tunnel type"; | |||
| } | } | |||
| identity gre-tunnel { | identity gre-tunnel { | |||
| base "tunnel-type"; | base tunnel-type; | |||
| description | description | |||
| "GRE tunnel type"; | "GRE tunnel type"; | |||
| } | } | |||
| identity vxlan-tunnel { | identity vxlan-tunnel { | |||
| base "tunnel-type"; | base tunnel-type; | |||
| description | description | |||
| "VXLAN tunnel type"; | "VXLAN tunnel type"; | |||
| } | } | |||
| identity nvgre-tunnel { | identity nvgre-tunnel { | |||
| base "tunnel-type"; | base tunnel-type; | |||
| description | description | |||
| "NVGRE tunnel type"; | "NVGRE tunnel type"; | |||
| } | } | |||
| typedef tunnel-type-definition { | typedef tunnel-type-definition { | |||
| type identityref { | type identityref { | |||
| base "tunnel-type"; | base tunnel-type; | |||
| } | } | |||
| description | description | |||
| "Tunnel type definition."; | "Tunnel type definition."; | |||
| } | } | |||
| identity route-state { | identity route-state { | |||
| description | description | |||
| "Base identity from which all route | "Base identity from which all route | |||
| states are derived."; | states are derived."; | |||
| } | } | |||
| identity active { | identity active { | |||
| base "route-state"; | base route-state; | |||
| description | description | |||
| "Active state."; | "Active state."; | |||
| } | } | |||
| identity inactive { | identity inactive { | |||
| base "route-state"; | base route-state; | |||
| description | description | |||
| "Inactive state."; | "Inactive state."; | |||
| } | } | |||
| typedef route-state-definition { | typedef route-state-definition { | |||
| type identityref { | type identityref { | |||
| base "route-state"; | base route-state; | |||
| } | } | |||
| description | description | |||
| "Route state definition."; | "Route state definition."; | |||
| } | } | |||
| identity nexthop-state { | identity nexthop-state { | |||
| description | description | |||
| "Base identity from which all nexthop | "Base identity from which all nexthop | |||
| states are derived."; | states are derived."; | |||
| } | } | |||
| identity resolved { | identity resolved { | |||
| base "nexthop-state"; | base nexthop-state; | |||
| description | description | |||
| "Resolved nexthop state."; | "Resolved nexthop state."; | |||
| } | } | |||
| identity unresolved { | identity unresolved { | |||
| base "nexthop-state"; | base nexthop-state; | |||
| description | description | |||
| "Unresolved nexthop state."; | "Unresolved nexthop state."; | |||
| } | } | |||
| typedef nexthop-state-definition { | typedef nexthop-state-definition { | |||
| type identityref { | type identityref { | |||
| base "nexthop-state"; | base nexthop-state; | |||
| } | } | |||
| description | description | |||
| "Nexthop state definition."; | "Nexthop state definition."; | |||
| } | } | |||
| identity route-installed-state { | identity route-installed-state { | |||
| description | description | |||
| "Base identity from which all route | "Base identity from which all route | |||
| installed states are derived."; | installed states are derived."; | |||
| } | } | |||
| identity uninstalled { | identity uninstalled { | |||
| base "route-installed-state"; | base route-installed-state; | |||
| description | description | |||
| "Uninstalled state."; | "Uninstalled state."; | |||
| } | } | |||
| identity installed { | identity installed { | |||
| base "route-installed-state"; | base route-installed-state; | |||
| description | description | |||
| "Installed state."; | "Installed state."; | |||
| } | } | |||
| typedef route-installed-state-definition { | typedef route-installed-state-definition { | |||
| type identityref { | type identityref { | |||
| base "route-installed-state"; | base route-installed-state; | |||
| } | } | |||
| description | description | |||
| "Route installed state definition."; | "Route installed state definition."; | |||
| } | } | |||
| //Route change reason identities | //Route Change Reason Identities | |||
| identity route-change-reason { | identity route-change-reason { | |||
| description | description | |||
| "Base identity from which all route change | "Base identity from which all route change | |||
| reasons are derived."; | reasons are derived."; | |||
| } | } | |||
| identity lower-route-preference { | identity lower-route-preference { | |||
| base "route-change-reason"; | base route-change-reason; | |||
| description | description | |||
| "This route was installed in the FIB because it had | "This route was installed in the FIB because it had | |||
| a lower route preference value (and thus was more | a lower route preference value (and thus was more | |||
| preferred) than the route it replaced."; | preferred) than the route it replaced."; | |||
| } | } | |||
| identity higher-route-preference { | identity higher-route-preference { | |||
| base "route-change-reason"; | base route-change-reason; | |||
| description | description | |||
| "This route was uninstalled from the FIB because it had | "This route was uninstalled from the FIB because it had | |||
| a higher route preference value (and thus was less | a higher route preference value (and thus was less | |||
| preferred) than the route that replaced it."; | preferred) than the route that replaced it."; | |||
| } | } | |||
| identity resolved-nexthop { | identity resolved-nexthop { | |||
| base "route-change-reason"; | base route-change-reason; | |||
| description | description | |||
| "This route was made active because at least | "This route was made active because at least | |||
| one of its nexthops was resolved."; | one of its nexthops was resolved."; | |||
| } | } | |||
| identity unresolved-nexthop { | identity unresolved-nexthop { | |||
| base "route-change-reason"; | base route-change-reason; | |||
| description | description | |||
| "This route was made inactive because all of | "This route was made inactive because all of | |||
| its nexthops are unresolved."; | its nexthops are unresolved."; | |||
| } | } | |||
| typedef route-change-reason-definition { | typedef route-change-reason-definition { | |||
| type identityref { | type identityref { | |||
| base "route-change-reason"; | base route-change-reason; | |||
| } | } | |||
| description | description | |||
| "Route change reason definition."; | "Route change reason definition."; | |||
| } | } | |||
| typedef nexthop-preference-definition { | typedef nexthop-preference-definition { | |||
| type uint8 { | type uint8 { | |||
| range "1..99"; | range "1..99"; | |||
| } | } | |||
| description | description | |||
| "Nexthop-preference is used for protection schemes. | "Nexthop-preference is used for protection schemes. | |||
| It is an integer value between 1 and 99. Lower | It is an integer value between 1 and 99. Lower | |||
| values are more preferred. To download N | values are preferred. To download N | |||
| nexthops to the FIB, the N nexthops with the lowest | nexthops to the FIB, the N nexthops with the lowest | |||
| value are selected. If there are more than N | value are selected. If there are more than N | |||
| nexthops that have the same preference, an | nexthops that have the same preference, an | |||
| implementation of i2rs client should select N | implementation of the I2RS client should select N | |||
| nexthops and download them, as for how to select | nexthops and download them. As for how to select | |||
| the nexthops is left to the implementations."; | the nexthops, this is left to the implementations."; | |||
| } | } | |||
| typedef nexthop-lb-weight-definition { | typedef nexthop-lb-weight-definition { | |||
| type uint8 { | type uint8 { | |||
| range "1..99"; | range "1..99"; | |||
| } | } | |||
| description | description | |||
| "Nexthop-lb-weight is used for load-balancing. | "Nexthop-lb-weight is used for load-balancing. | |||
| Each list member SHOULD be assigned a weight | Each list member SHOULD be assigned a weight | |||
| between 1 and 99. The weight determines the | between 1 and 99. The weight determines the | |||
| proportion of traffic to be sent over a nexthop | proportion of traffic to be sent over a nexthop | |||
| used for forwarding as a ratio of the weight of | used for forwarding as a ratio of the weight of | |||
| this nexthop divided by the sum of the weights | this nexthop divided by the sum of the weights | |||
| of all the nexthops of this route that are used | of all the nexthops of this route that are used | |||
| for forwarding. To perform equal load-balancing, | for forwarding. To perform equal load-balancing, | |||
| one MAY specify a weight of 0 for all the member | one MAY specify a weight of 0 for all the member | |||
| nexthops. The value 0 is reserved for equal | nexthops. The value 0 is reserved for equal | |||
| load-balancing and if applied, MUST be applied | load-balancing and, if applied, MUST be applied | |||
| to all member nexthops. | to all member nexthops. | |||
| Note: The weight of 0 is specially because of | Note that the weight of 0 is special because of | |||
| historical reasons. It's typically used in | historical reasons. It's typically used in | |||
| hardware devices to signify ECMP"; | hardware devices to signify ECMP."; | |||
| } | } | |||
| typedef nexthop-ref { | typedef nexthop-ref { | |||
| type leafref { | type leafref { | |||
| path "/iir:routing-instance" + | path "/iir:routing-instance" + | |||
| "/iir:rib-list" + | "/iir:rib-list" + | |||
| "/iir:route-list" + | "/iir:route-list" + | |||
| "/iir:nexthop" + | "/iir:nexthop" + | |||
| "/iir:nexthop-id"; | "/iir:nexthop-id"; | |||
| } | } | |||
| skipping to change at line 665 | skipping to change at line 682 | |||
| "/iir:route-list" + | "/iir:route-list" + | |||
| "/iir:nexthop" + | "/iir:nexthop" + | |||
| "/iir:nexthop-id"; | "/iir:nexthop-id"; | |||
| } | } | |||
| description | description | |||
| "A nexthop reference that provides | "A nexthop reference that provides | |||
| an indirection reference to a nexthop."; | an indirection reference to a nexthop."; | |||
| } | } | |||
| //Groupings | //Groupings | |||
| grouping route-prefix { | grouping route-prefix { | |||
| description | description | |||
| "The common attributes used for all types of route prefix."; | "The common attributes used for all types of route prefixes."; | |||
| leaf route-index { | leaf route-index { | |||
| type uint64 ; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Route index."; | "Route index."; | |||
| } | } | |||
| container match { | container match { | |||
| description | description | |||
| "The match condition specifies the | "The match condition specifies the | |||
| kind of route (IPv4, MPLS, etc.) | kind of route (IPv4, MPLS, etc.) | |||
| and the set of fields to match on."; | and the set of fields to match on."; | |||
| choice route-type { | choice route-type { | |||
| description | description | |||
| "Route types: IPv4, IPv6, MPLS, MAC etc."; | "Route types: IPv4, IPv6, MPLS, MAC, etc."; | |||
| case ipv4 { | case ipv4 { | |||
| description | description | |||
| "IPv4 route case."; | "IPv4 route case."; | |||
| container ipv4 { | container ipv4 { | |||
| description | description | |||
| "IPv4 route match."; | "IPv4 route match."; | |||
| choice ip-route-match-type { | choice ip-route-match-type { | |||
| description | description | |||
| "IP route match type options: | "IP route match type options: | |||
| match source, or | match source, or | |||
| skipping to change at line 725 | skipping to change at line 743 | |||
| leaf dest-ipv4-prefix { | leaf dest-ipv4-prefix { | |||
| type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The IPv4 destination address of the match."; | "The IPv4 destination address of the match."; | |||
| } | } | |||
| leaf src-ipv4-prefix { | leaf src-ipv4-prefix { | |||
| type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The IPv4 source address of the match"; | "The IPv4 source address of the match."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| case ipv6 { | case ipv6 { | |||
| description | description | |||
| "IPv6 route case."; | "IPv6 route case."; | |||
| container ipv6 { | container ipv6 { | |||
| description | description | |||
| "IPv6 route match."; | "IPv6 route match."; | |||
| choice ip-route-match-type { | choice ip-route-match-type { | |||
| description | description | |||
| "IP route match type options: | "IP route match type options: | |||
| match source, or | match source, | |||
| match destination, or | match destination, or | |||
| match source and destination."; | match source and destination."; | |||
| case dest-ipv6-address { | case dest-ipv6-address { | |||
| leaf dest-ipv6-prefix { | leaf dest-ipv6-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "An IPv6 destination address as the match."; | "An IPv6 destination address as the match."; | |||
| } | } | |||
| } | } | |||
| skipping to change at line 769 | skipping to change at line 787 | |||
| } | } | |||
| case dest-src-ipv6-address { | case dest-src-ipv6-address { | |||
| container dest-src-ipv6-address { | container dest-src-ipv6-address { | |||
| description | description | |||
| "A combination of an IPv6 source and | "A combination of an IPv6 source and | |||
| an IPv6 destination address as the match."; | an IPv6 destination address as the match."; | |||
| leaf dest-ipv6-prefix { | leaf dest-ipv6-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The IPv6 destination address of the match"; | "The IPv6 destination address of the match."; | |||
| } | } | |||
| leaf src-ipv6-prefix { | leaf src-ipv6-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The IPv6 source address of the match."; | "The IPv6 source address of the match."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| case mpls-route { | case mpls-route { | |||
| description | description | |||
| "MPLS route case."; | "MPLS route case."; | |||
| leaf mpls-label { | leaf mpls-label { | |||
| type uint32 ; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The label used for matching."; | "The label used for matching."; | |||
| } | } | |||
| } | } | |||
| case mac-route { | case mac-route { | |||
| description | description | |||
| "MAC route case."; | "MAC route case."; | |||
| leaf mac-address { | leaf mac-address { | |||
| type yang:mac-address; | type yang:mac-address; | |||
| skipping to change at line 833 | skipping to change at line 851 | |||
| uses nexthop; | uses nexthop; | |||
| } | } | |||
| //In the information model, it is called route-statistic | //In the information model, it is called route-statistic | |||
| container route-status { | container route-status { | |||
| description | description | |||
| "The status information of the route."; | "The status information of the route."; | |||
| leaf route-state { | leaf route-state { | |||
| type route-state-definition; | type route-state-definition; | |||
| config false; | config false; | |||
| description | description | |||
| "Indicate a route's state: Active or Inactive."; | "Indicate a route's state: active or inactive."; | |||
| } | } | |||
| leaf route-installed-state { | leaf route-installed-state { | |||
| type route-installed-state-definition; | type route-installed-state-definition; | |||
| config false; | config false; | |||
| description | description | |||
| "Indicate that a route's installed states: | "Indicate that a route's installed states: | |||
| Installed or uninstalled."; | installed or uninstalled."; | |||
| } | } | |||
| leaf route-reason { | leaf route-reason { | |||
| type route-change-reason-definition; | type route-change-reason-definition; | |||
| config false; | config false; | |||
| description | description | |||
| "Indicate the reason that caused the route change."; | "Indicate the reason that caused the route change."; | |||
| } | } | |||
| } | } | |||
| container route-attributes { | container route-attributes { | |||
| description | description | |||
| skipping to change at line 900 | skipping to change at line 918 | |||
| "A nexthop identifier that points | "A nexthop identifier that points | |||
| to a nexthop list member. | to a nexthop list member. | |||
| A nexthop list member is a nexthop."; | A nexthop list member is a nexthop."; | |||
| } | } | |||
| leaf nexthop-preference { | leaf nexthop-preference { | |||
| type nexthop-preference-definition; | type nexthop-preference-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Nexthop-preference is used for protection schemes. | "Nexthop-preference is used for protection schemes. | |||
| It is an integer value between 1 and 99. Lower | It is an integer value between 1 and 99. Lower | |||
| values are more preferred. To download a | values are more preferred. To download a | |||
| primary/standby/tertiary group to the FIB, the | primary/standby/tertiary group to the FIB, the | |||
| nexthops that are resolved and are most preferred | nexthops that are resolved and are most preferred | |||
| are selected."; | are selected."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping nexthop-list-w { | grouping nexthop-list-w { | |||
| description | description | |||
| "A nexthop list with weight parameter."; | "A nexthop list with a weight parameter."; | |||
| list nexthop-list { | list nexthop-list { | |||
| key "nexthop-member-id"; | key "nexthop-member-id"; | |||
| description | description | |||
| "A list of nexthop."; | "A list of nexthop."; | |||
| leaf nexthop-member-id { | leaf nexthop-member-id { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A nexthop identifier that points | "A nexthop identifier that points | |||
| to a nexthop list member. | to a nexthop list member. | |||
| A nexthop list member is a nexthop."; | A nexthop list member is a nexthop."; | |||
| } | } | |||
| leaf nexthop-lb-weight { | leaf nexthop-lb-weight { | |||
| type nexthop-lb-weight-definition; | type nexthop-lb-weight-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The weight of a nexthop of | "The weight of a nexthop of | |||
| the load balance nexthops."; | the load-balance nexthops."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping nexthop { | grouping nexthop { | |||
| description | description | |||
| "The nexthop structure."; | "The nexthop structure."; | |||
| leaf nexthop-id { | leaf nexthop-id { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "An identifier that refers to a nexthop."; | "An identifier that refers to a nexthop."; | |||
| } | } | |||
| leaf sharing-flag { | leaf sharing-flag { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "To indicate whether a nexthop is sharable | "To indicate whether a nexthop is sharable | |||
| or non-sharable. | or non-sharable: | |||
| true - sharable, means the nexthop can be shared | true - sharable (which means the nexthop can be | |||
| with other routes | shared with other routes) | |||
| false - non-sharable, means the nexthop can not | false - non-sharable (which means the nexthop can | |||
| be shared with other routes."; | not be shared with other routes)"; | |||
| } | } | |||
| choice nexthop-type { | choice nexthop-type { | |||
| description | description | |||
| "Nexthop type options."; | "Nexthop type options."; | |||
| case nexthop-base { | case nexthop-base { | |||
| container nexthop-base { | container nexthop-base { | |||
| description | description | |||
| "The base nexthop."; | "The base nexthop."; | |||
| uses nexthop-base; | uses nexthop-base; | |||
| } | } | |||
| } | } | |||
| case nexthop-chain { | case nexthop-chain { | |||
| if-feature nexthop-chain; | if-feature "nexthop-chain"; | |||
| container nexthop-chain { | container nexthop-chain { | |||
| description | description | |||
| "A chain nexthop."; | "A chain nexthop."; | |||
| uses nexthop-list; | uses nexthop-list; | |||
| } | } | |||
| } | } | |||
| case nexthop-replicate { | case nexthop-replicate { | |||
| if-feature nexthop-replicate; | if-feature "nexthop-replicate"; | |||
| container nexthop-replicate { | container nexthop-replicate { | |||
| description | description | |||
| "A replicates nexthop."; | "A replicate nexthop."; | |||
| uses nexthop-list; | uses nexthop-list; | |||
| } | } | |||
| } | } | |||
| case nexthop-protection { | case nexthop-protection { | |||
| if-feature nexthop-protection; | if-feature "nexthop-protection"; | |||
| container nexthop-protection { | container nexthop-protection { | |||
| description | description | |||
| "A protection nexthop."; | "A protection nexthop."; | |||
| uses nexthop-list-p; | uses nexthop-list-p; | |||
| } | } | |||
| } | } | |||
| case nexthop-load-balance { | case nexthop-load-balance { | |||
| if-feature nexthop-load-balance; | if-feature "nexthop-load-balance"; | |||
| container nexthop-lb { | container nexthop-lb { | |||
| description | description | |||
| "A load balance nexthop."; | "A load-balance nexthop."; | |||
| uses nexthop-list-w; | uses nexthop-list-w; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping nexthop-base { | grouping nexthop-base { | |||
| description | description | |||
| "The base nexthop."; | "The base nexthop."; | |||
| choice nexthop-base-type { | choice nexthop-base-type { | |||
| description | description | |||
| "Nexthop base type options."; | "Nexthop base type options."; | |||
| case special-nexthop { | case special-nexthop { | |||
| leaf special { | leaf special { | |||
| type special-nexthop-definition; | type special-nexthop-definition; | |||
| description | description | |||
| "A special nexthop."; | "A special nexthop."; | |||
| } | } | |||
| } | } | |||
| case egress-interface-nexthop { | case egress-interface-nexthop { | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The nexthop is an outgoing interface."; | "The nexthop is an outgoing interface."; | |||
| } | } | |||
| } | } | |||
| case ipv4-address-nexthop { | case ipv4-address-nexthop { | |||
| leaf ipv4-address { | leaf ipv4-address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The nexthop is an IPv4 address."; | "The nexthop is an IPv4 address."; | |||
| } | } | |||
| } | } | |||
| case ipv6-address-nexthop { | case ipv6-address-nexthop { | |||
| leaf ipv6-address { | leaf ipv6-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The nexthop is an IPv6 address."; | "The nexthop is an IPv6 address."; | |||
| } | } | |||
| } | } | |||
| case egress-interface-ipv4-nexthop { | case egress-interface-ipv4-nexthop { | |||
| container egress-interface-ipv4-address{ | container egress-interface-ipv4-address { | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Name of the outgoing interface."; | "Name of the outgoing interface."; | |||
| } | } | |||
| leaf ipv4-address { | leaf ipv4-address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The nexthop points to an interface with | "The nexthop points to an interface with | |||
| an IPv4 address."; | an IPv4 address."; | |||
| } | } | |||
| description | description | |||
| "The nexthop is an egress-interface and an IP | "The nexthop is an egress-interface and an IP | |||
| address. This can be used in cases e.g. where | address. This can be used in cases where, e.g., | |||
| the IP address is a link-local address."; | the IP address is a link-local address."; | |||
| } | } | |||
| } | } | |||
| case egress-interface-ipv6-nexthop { | case egress-interface-ipv6-nexthop { | |||
| container egress-interface-ipv6-address { | container egress-interface-ipv6-address { | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Name of the outgoing interface."; | "Name of the outgoing interface."; | |||
| } | } | |||
| leaf ipv6-address { | leaf ipv6-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The nexthop points to an interface with | "The nexthop points to an interface with | |||
| an IPv6 address."; | an IPv6 address."; | |||
| } | } | |||
| description | description | |||
| "The nexthop is an egress-interface and an IP | "The nexthop is an egress-interface and an IP | |||
| address. This can be used in cases e.g. where | address. This can be used in cases where, e.g., | |||
| the IP address is a link-local address."; | the IP address is a link-local address."; | |||
| } | } | |||
| } | } | |||
| case egress-interface-mac-nexthop { | case egress-interface-mac-nexthop { | |||
| container egress-interface-mac-address { | container egress-interface-mac-address { | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Name of the outgoing interface."; | "Name of the outgoing interface."; | |||
| } | } | |||
| leaf ieee-mac-address { | leaf ieee-mac-address { | |||
| type yang:mac-address; | type yang:mac-address; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The nexthop points to an interface with | "The nexthop points to an interface with | |||
| a specific mac-address."; | a specific MAC address."; | |||
| } | } | |||
| description | description | |||
| "The egress interface must be an Ethernet | "The egress-interface must be an Ethernet | |||
| interface. Address resolution is not required | interface. Address resolution is not required | |||
| for this nexthop."; | for this nexthop."; | |||
| } | } | |||
| } | } | |||
| case tunnel-encap-nexthop { | case tunnel-encapsulation-nexthop { | |||
| if-feature nexthop-tunnel; | if-feature "nexthop-tunnel"; | |||
| container tunnel-encap { | container tunnel-encapsulation { | |||
| uses tunnel-encap; | uses tunnel-encapsulation; | |||
| description | description | |||
| "This can be an encapsulation representing an IP | "This can be an encapsulation representing an IP | |||
| tunnel or MPLS tunnel or others as defined in info | tunnel, MPLS tunnel, or others as defined in the info | |||
| model. An optional egress interface can be chained | model. An optional egress-interface can be chained | |||
| to the tunnel encapsulation to indicate which | to the tunnel encapsulation to indicate which | |||
| interface to send the packet out on. The egress | interface to send the packet out on. The | |||
| interface is useful when the network device | egress-interface is useful when the network device | |||
| contains Ethernet interfaces and one needs to | contains Ethernet interfaces and one needs to | |||
| perform address resolution for the IP packet."; | perform address resolution for the IP packet."; | |||
| } | } | |||
| } | } | |||
| case tunnel-decapsulation-nexthop { | case tunnel-decapsulation-nexthop { | |||
| if-feature nexthop-tunnel; | if-feature "nexthop-tunnel"; | |||
| container tunnel-decapsulation { | container tunnel-decapsulation { | |||
| uses tunnel-decapsulation; | uses tunnel-decapsulation; | |||
| description | description | |||
| "This is to specify the decapsulation of a tunnel header."; | "This is to specify the decapsulation of a tunnel | |||
| header."; | ||||
| } | } | |||
| } | } | |||
| case logical-tunnel-nexthop { | case logical-tunnel-nexthop { | |||
| if-feature nexthop-tunnel; | if-feature "nexthop-tunnel"; | |||
| container logical-tunnel { | container logical-tunnel { | |||
| uses logical-tunnel; | uses logical-tunnel; | |||
| description | description | |||
| "This can be a MPLS LSP or a GRE tunnel (or others | "This can be an MPLS Label Switched Path (LSP) | |||
| as defined in this document), that is represented | or a GRE tunnel (or others as defined in this | |||
| by a unique identifier (e.g. name)."; | document) that is represented by a unique | |||
| identifier (e.g., name)."; | ||||
| } | } | |||
| } | } | |||
| case rib-name-nexthop { | case rib-name-nexthop { | |||
| leaf rib-name { | leaf rib-name { | |||
| type string; | type string; | |||
| description | description | |||
| "A nexthop pointing to a RIB indicates that the | "A nexthop pointing to a RIB indicates that the | |||
| route lookup needs to continue in the specified | route lookup needs to continue in the specified | |||
| RIB. This is a way to perform chained lookups."; | RIB. This is a way to perform chained lookups."; | |||
| } | } | |||
| } | } | |||
| case nexthop-identifier { | case nexthop-identifier { | |||
| leaf nexthop-ref { | leaf nexthop-ref { | |||
| type nexthop-ref; | type nexthop-ref; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A nexthop reference that points to a nexthop."; | "A nexthop reference that points to a nexthop."; | |||
| } | } | |||
| } | } | |||
| skipping to change at line 1201 | skipping to change at line 1221 | |||
| "The protocol id of the header."; | "The protocol id of the header."; | |||
| } | } | |||
| leaf ttl { | leaf ttl { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The TTL of the header."; | "The TTL of the header."; | |||
| } | } | |||
| leaf dscp { | leaf dscp { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The DSCP field of the header."; | "The Differentiated Services Code Point | |||
| (DSCP) field of the header."; | ||||
| } | } | |||
| } | } | |||
| grouping ipv6-header { | grouping ipv6-header { | |||
| description | description | |||
| "The IPv6 header encapsulation information."; | "The IPv6 header encapsulation information."; | |||
| leaf src-ipv6-address { | leaf src-ipv6-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| skipping to change at line 1247 | skipping to change at line 1268 | |||
| type uint8 { | type uint8 { | |||
| range "1..255"; | range "1..255"; | |||
| } | } | |||
| description | description | |||
| "The hop limit of the header."; | "The hop limit of the header."; | |||
| } | } | |||
| } | } | |||
| grouping nvgre-header { | grouping nvgre-header { | |||
| description | description | |||
| "The NvGRE header encapsulation information."; | "The NVGRE header encapsulation information."; | |||
| choice nvgre-type { | choice nvgre-type { | |||
| description | description | |||
| "NvGRE can use either IPv4 | "NVGRE can use either an IPv4 | |||
| or IPv6 header for encapsulation."; | or an IPv6 header for encapsulation."; | |||
| case ipv4 { | case ipv4 { | |||
| uses ipv4-header; | uses ipv4-header; | |||
| } | } | |||
| case ipv6 { | case ipv6 { | |||
| uses ipv6-header; | uses ipv6-header; | |||
| } | } | |||
| } | } | |||
| leaf virtual-subnet-id { | leaf virtual-subnet-id { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The subnet identifier of the NvGRE header."; | "The subnet identifier of the NVGRE header."; | |||
| } | } | |||
| leaf flow-id { | leaf flow-id { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The flow identifier of the NvGRE header."; | "The flow identifier of the NVGRE header."; | |||
| } | } | |||
| } | } | |||
| grouping vxlan-header { | grouping vxlan-header { | |||
| description | description | |||
| "The VXLAN encapsulation header information."; | "The VXLAN encapsulation header information."; | |||
| choice vxlan-type { | choice vxlan-type { | |||
| description | description | |||
| "NvGRE can use either IPv4 | "NVGRE can use either an IPv4 | |||
| or IPv6 header for encapsulation."; | or an IPv6 header for encapsulation."; | |||
| case ipv4 { | case ipv4 { | |||
| uses ipv4-header; | uses ipv4-header; | |||
| } | } | |||
| case ipv6 { | case ipv6 { | |||
| uses ipv6-header; | uses ipv6-header; | |||
| } | } | |||
| } | } | |||
| leaf vxlan-identifier { | leaf vxlan-identifier { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| skipping to change at line 1359 | skipping to change at line 1380 | |||
| "Label push operation."; | "Label push operation."; | |||
| leaf label { | leaf label { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The label to be pushed."; | "The label to be pushed."; | |||
| } | } | |||
| leaf s-bit { | leaf s-bit { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "The s-bit of the label to be pushed. "; | "The s-bit ('Bottom of Stack' bit) of the label to be | |||
| pushed."; | ||||
| } | } | |||
| leaf tc-value { | leaf tc-value { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The traffic class value of the label to be pushed."; | "The traffic class value of the label to be pushed."; | |||
| } | } | |||
| leaf ttl-value { | leaf ttl-value { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The TTL value of the label to be pushed."; | "The TTL value of the label to be pushed."; | |||
| skipping to change at line 1392 | skipping to change at line 1414 | |||
| } | } | |||
| leaf out-label { | leaf out-label { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The out MPLS label."; | "The out MPLS label."; | |||
| } | } | |||
| leaf ttl-action { | leaf ttl-action { | |||
| type ttl-action-definition; | type ttl-action-definition; | |||
| description | description | |||
| "The label ttl actions: | "The label TTL actions: | |||
| - No-action, or | - No-action | |||
| - Copy to inner label,or | - Copy to inner label | |||
| - Decrease (the in-label) by 1 and | - Decrease (the in-label) | |||
| copy to the out-label."; | by 1 and copy to the out-label"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping tunnel-encap{ | grouping tunnel-encapsulation { | |||
| description | description | |||
| "Tunnel encapsulation information."; | "Tunnel encapsulation information."; | |||
| choice tunnel-type { | choice tunnel-type { | |||
| description | description | |||
| "Tunnel options for next-hops."; | "Tunnel options for nexthops."; | |||
| case ipv4 { | case ipv4 { | |||
| if-feature ipv4-tunnel; | if-feature "ipv4-tunnel"; | |||
| container ipv4-header { | container ipv4-header { | |||
| uses ipv4-header; | uses ipv4-header; | |||
| description | description | |||
| "IPv4 header."; | "IPv4 header."; | |||
| } | } | |||
| } | } | |||
| case ipv6 { | case ipv6 { | |||
| if-feature ipv6-tunnel; | if-feature "ipv6-tunnel"; | |||
| container ipv6-header { | container ipv6-header { | |||
| uses ipv6-header; | uses ipv6-header; | |||
| description | description | |||
| "IPv6 header."; | "IPv6 header."; | |||
| } | } | |||
| } | } | |||
| case mpls { | case mpls { | |||
| if-feature mpls-tunnel; | if-feature "mpls-tunnel"; | |||
| container mpls-header { | container mpls-header { | |||
| uses mpls-header; | uses mpls-header; | |||
| description | description | |||
| "MPLS header."; | "MPLS header."; | |||
| } | } | |||
| } | } | |||
| case gre { | case gre { | |||
| if-feature gre-tunnel; | if-feature "gre-tunnel"; | |||
| container gre-header { | container gre-header { | |||
| uses gre-header; | uses gre-header; | |||
| description | description | |||
| "GRE header."; | "GRE header."; | |||
| } | } | |||
| } | } | |||
| case nvgre { | case nvgre { | |||
| if-feature nvgre-tunnel; | if-feature "nvgre-tunnel"; | |||
| container nvgre-header { | container nvgre-header { | |||
| uses nvgre-header; | uses nvgre-header; | |||
| description | description | |||
| "NvGRE header."; | "NVGRE header."; | |||
| } | } | |||
| } | } | |||
| case vxlan { | case vxlan { | |||
| if-feature vxlan-tunnel; | if-feature "vxlan-tunnel"; | |||
| container vxlan-header { | container vxlan-header { | |||
| uses vxlan-header; | uses vxlan-header; | |||
| description | description | |||
| "VXLAN header."; | "VXLAN header."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping tunnel-decapsulation { | grouping tunnel-decapsulation { | |||
| description | description | |||
| "Tunnel decapsulation information."; | "Tunnel decapsulation information."; | |||
| choice tunnel-type { | choice tunnel-type { | |||
| description | description | |||
| "Nexthop tunnel type options."; | "Nexthop tunnel type options."; | |||
| case ipv4 { | case ipv4 { | |||
| if-feature ipv4-tunnel; | if-feature "ipv4-tunnel"; | |||
| container ipv4-decapsulation { | container ipv4-decapsulation { | |||
| description | description | |||
| "IPv4 decapsulation."; | "IPv4 decapsulation."; | |||
| leaf ipv4-decapsulation { | leaf ipv4-decapsulation { | |||
| type tunnel-decapsulation-action-definition; | type tunnel-decapsulation-action-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "IPv4 decapsulation operations."; | "IPv4 decapsulation operations."; | |||
| } | } | |||
| leaf ttl-action { | leaf ttl-action { | |||
| type ttl-action-definition; | type ttl-action-definition; | |||
| description | description | |||
| "The ttl actions: | "The TTL actions: | |||
| no-action or copy to inner header."; | no-action or copy to inner header."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| case ipv6 { | case ipv6 { | |||
| if-feature ipv6-tunnel; | if-feature "ipv6-tunnel"; | |||
| container ipv6-decapsulation { | container ipv6-decapsulation { | |||
| description | description | |||
| "IPv6 decapsulation."; | "IPv6 decapsulation."; | |||
| leaf ipv6-decapsulation { | leaf ipv6-decapsulation { | |||
| type tunnel-decapsulation-action-definition; | type tunnel-decapsulation-action-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "IPv6 decapsulation operations."; | "IPv6 decapsulation operations."; | |||
| } | } | |||
| leaf hop-limit-action { | leaf hop-limit-action { | |||
| type hop-limit-action-definition; | type hop-limit-action-definition; | |||
| description | description | |||
| "The hop limit actions: | "The hop limit actions: | |||
| no-action or copy to inner header."; | no-action or copy to inner header."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| case mpls { | case mpls { | |||
| if-feature mpls-tunnel; | if-feature "mpls-tunnel"; | |||
| container label-pop { | container label-pop { | |||
| description | description | |||
| "MPLS decapsulation."; | "MPLS decapsulation."; | |||
| leaf label-pop { | leaf label-pop { | |||
| type mpls-label-action-definition; | type mpls-label-action-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Pop a label from the label stack."; | "Pop a label from the label stack."; | |||
| } | } | |||
| leaf ttl-action { | leaf ttl-action { | |||
| type ttl-action-definition; | type ttl-action-definition; | |||
| description | description | |||
| "The label ttl action."; | "The label TTL action."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping route-attributes { | grouping route-attributes { | |||
| description | description | |||
| "Route attributes."; | "Route attributes."; | |||
| leaf route-preference { | leaf route-preference { | |||
| skipping to change at line 1541 | skipping to change at line 1563 | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "ROUTE_PREFERENCE: This is a numerical value that | "ROUTE_PREFERENCE: This is a numerical value that | |||
| allows for comparing routes from different | allows for comparing routes from different | |||
| protocols. Static configuration is also | protocols. Static configuration is also | |||
| considered a protocol for the purpose of this | considered a protocol for the purpose of this | |||
| field. It is also known as administrative-distance. | field. It is also known as administrative-distance. | |||
| The lower the value, the higher the preference."; | The lower the value, the higher the preference."; | |||
| } | } | |||
| leaf local-only { | leaf local-only { | |||
| type boolean ; | type boolean; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Indicate whether the attributes is local only."; | "Indicate whether the attribute is local only."; | |||
| } | } | |||
| container address-family-route-attributes{ | container address-family-route-attributes { | |||
| description | description | |||
| "Address family related route attributes."; | "Address-family-related route attributes."; | |||
| choice route-type { | choice route-type { | |||
| description | description | |||
| "Address family related route attributes."; | "Address-family-related route attributes. Future | |||
| documents should specify these attributes by augmenting | ||||
| the cases in this choice."; | ||||
| case ip-route-attributes { | case ip-route-attributes { | |||
| } | } | |||
| case mpls-route-attributes { | case mpls-route-attributes { | |||
| } | } | |||
| case ethernet-route-attributes { | case ethernet-route-attributes { | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container routing-instance { | container routing-instance { | |||
| description | description | |||
| "A routing instance, in the context of | "A routing instance, in the context of | |||
| the RIB information model, is a collection | the RIB information model, is a collection | |||
| of RIBs, interfaces, and routing parameters"; | of RIBs, interfaces, and routing parameters."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the routing instance. This MUST | "The name of the routing instance. This MUST | |||
| be unique across all routing instances in | be unique across all routing instances in | |||
| a given network device."; | a given network device."; | |||
| } | } | |||
| list interface-list { | list interface-list { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "This represents the list of interfaces associated | "This represents the list of interfaces associated | |||
| with this routing instance. The interface list helps | with this routing instance. The interface list helps | |||
| constrain the boundaries of packet forwarding. | constrain the boundaries of packet forwarding. | |||
| Packets coming on these interfaces are directly | Packets coming on these interfaces are directly | |||
| associated with the given routing instance. The | associated with the given routing instance. The | |||
| interface list contains a list of identifiers, with | interface list contains a list of identifiers with | |||
| each identifier uniquely identifying an interface."; | each identifier uniquely identifying an interface."; | |||
| leaf name { | leaf name { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| "A reference to the name of a network layer interface."; | "A reference to the name of a network-layer interface."; | |||
| } | } | |||
| } | } | |||
| leaf router-id { | leaf router-id { | |||
| type yang:dotted-quad; | type yang:dotted-quad; | |||
| description | description | |||
| "Router ID - 32-bit number in the form of a dotted quad."; | "Router ID: The 32-bit number in the form of a dotted quad."; | |||
| } | } | |||
| leaf lookup-limit { | leaf lookup-limit { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "A limit on how many levels of a lookup can be performed."; | "A limit on how many levels of a lookup can be performed."; | |||
| } | } | |||
| list rib-list { | list rib-list { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "A list of RIBs that are associated with the routing | "A list of RIBs that are associated with the routing | |||
| skipping to change at line 1622 | skipping to change at line 1646 | |||
| type address-family-definition; | type address-family-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The address family of a RIB."; | "The address family of a RIB."; | |||
| } | } | |||
| leaf ip-rpf-check { | leaf ip-rpf-check { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "Each RIB can be optionally associated with a | "Each RIB can be optionally associated with a | |||
| ENABLE_IP_RPF_CHECK attribute that enables Reverse | ENABLE_IP_RPF_CHECK attribute that enables Reverse | |||
| path forwarding (RPF) checks on all IP routes in that | Path Forwarding (RPF) checks on all IP routes in that | |||
| RIB. Reverse path forwarding (RPF) check is used to | RIB. An RPF check is used to | |||
| prevent spoofing and limit malicious traffic."; | prevent spoofing and limit malicious traffic."; | |||
| } | } | |||
| list route-list { | list route-list { | |||
| key "route-index"; | key "route-index"; | |||
| description | description | |||
| "A list of routes of a RIB."; | "A list of routes of a RIB."; | |||
| uses route; | uses route; | |||
| } | } | |||
| // This is a list that maintains the nexthops added to the RIB. | // This is a list that maintains the nexthops added to the RIB. | |||
| uses nexthop-list; | uses nexthop-list; | |||
| skipping to change at line 1638 | skipping to change at line 1662 | |||
| description | description | |||
| "A list of routes of a RIB."; | "A list of routes of a RIB."; | |||
| uses route; | uses route; | |||
| } | } | |||
| // This is a list that maintains the nexthops added to the RIB. | // This is a list that maintains the nexthops added to the RIB. | |||
| uses nexthop-list; | uses nexthop-list; | |||
| } | } | |||
| } | } | |||
| //RPC Operations | //RPC Operations | |||
| rpc rib-add { | rpc rib-add { | |||
| description | description | |||
| "To add a RIB to a instance"; | "To add a RIB to an instance"; | |||
| input { | input { | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A reference to the name of the RIB | "A reference to the name of the RIB | |||
| that is to be added."; | that is to be added."; | |||
| } | } | |||
| leaf address-family { | leaf address-family { | |||
| type address-family-definition; | type address-family-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The address family of the RIB."; | "The address family of the RIB."; | |||
| } | } | |||
| leaf ip-rpf-check { | leaf ip-rpf-check { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "Each RIB can be optionally associated with a | "Each RIB can be optionally associated with an | |||
| ENABLE_IP_RPF_CHECK attribute that enables Reverse | ENABLE_IP_RPF_CHECK attribute that enables | |||
| path forwarding (RPF) checks on all IP routes in that | RPF checks on all IP routes in that | |||
| RIB. Reverse path forwarding (RPF) check is used to | RIB. An RPF check is used to | |||
| prevent spoofing and limit malicious traffic."; | prevent spoofing and limit malicious traffic."; | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| leaf result { | leaf result { | |||
| type boolean; | type boolean; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Return the result of the rib-add operation. | "Return the result of the rib-add operation. | |||
| true - success; | true - success; | |||
| skipping to change at line 1727 | skipping to change at line 1752 | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The numbers of routes that are successfully | "The numbers of routes that are successfully | |||
| added/deleted/updated."; | added/deleted/updated."; | |||
| } | } | |||
| leaf failed-count { | leaf failed-count { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The numbers of the routes that are failed | "The numbers of the routes that fail | |||
| to be added/deleted/updated."; | to be added/deleted/updated."; | |||
| } | } | |||
| container failure-detail { | container failure-detail { | |||
| description | description | |||
| "The failure detail reflects the reason why a route | "The failure detail reflects the reason why a route | |||
| operation fails. It is a array that includes the route | operation fails. It is an array that includes the route | |||
| index and error code of the failed route."; | index and error code of the failed route."; | |||
| list failed-routes { | list failed-routes { | |||
| key "route-index"; | key "route-index"; | |||
| description | description | |||
| "The list of failed routes."; | "The list of failed routes."; | |||
| leaf route-index { | leaf route-index { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The route index of the failed route."; | "The route index of the failed route."; | |||
| } | } | |||
| leaf error-code { | leaf error-code { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The error code that reflects the failure reason. | "The error code that reflects the failure reason. | |||
| 0 - Reserved. | 0 - Reserved | |||
| 1 - Trying to add a repeat route; | 1 - Trying to add a repeat route | |||
| 2 - Trying to delete or update a route that is not exist; | 2 - Trying to delete or update a route that does not | |||
| 3 - Malformed route attribute; | exist | |||
| "; | 3 - Malformed route attribute"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| rpc route-add { | rpc route-add { | |||
| description | description | |||
| "To add a route or a list of route to a RIB"; | "To add a route or a list of routes to a RIB"; | |||
| input { | input { | |||
| leaf return-failure-detail { | leaf return-failure-detail { | |||
| type boolean; | type boolean; | |||
| default false; | default "false"; | |||
| description | description | |||
| "Whether return the failure detail. | "Whether to return the failure detail. | |||
| true - return the failure detail; | true - return the failure detail | |||
| false - do not return the failure detail; | false - do not return the failure detail | |||
| the default is false."; | The default is false."; | |||
| } | } | |||
| leaf rib-name { | leaf rib-name { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A reference to the name of a RIB."; | "A reference to the name of a RIB."; | |||
| } | } | |||
| container routes { | container routes { | |||
| description | description | |||
| "The routes to be added to the RIB."; | "The routes to be added to the RIB."; | |||
| skipping to change at line 1791 | skipping to change at line 1816 | |||
| key "route-index"; | key "route-index"; | |||
| description | description | |||
| "The list of routes to be added."; | "The list of routes to be added."; | |||
| uses route-prefix; | uses route-prefix; | |||
| container route-attributes { | container route-attributes { | |||
| uses route-attributes; | uses route-attributes; | |||
| description | description | |||
| "The route attributes."; | "The route attributes."; | |||
| } | } | |||
| container route-vendor-attributes { | container route-vendor-attributes { | |||
| if-feature route-vendor-attributes; | if-feature "route-vendor-attributes"; | |||
| uses route-vendor-attributes; | uses route-vendor-attributes; | |||
| description | description | |||
| "The route vendor attributes."; | "The route vendor attributes."; | |||
| } | } | |||
| container nexthop { | container nexthop { | |||
| uses nexthop; | uses nexthop; | |||
| description | description | |||
| "The nexthop of the added route."; | "The nexthop of the added route."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| uses route-operation-state; | uses route-operation-state; | |||
| } | } | |||
| } | } | |||
| rpc route-delete { | rpc route-delete { | |||
| description | description | |||
| "To delete a route or a list of route from a RIB"; | "To delete a route or a list of routes from a RIB"; | |||
| input { | input { | |||
| leaf return-failure-detail { | leaf return-failure-detail { | |||
| type boolean; | type boolean; | |||
| default false; | default "false"; | |||
| description | description | |||
| "Whether return the failure detail. | "Whether to return the failure detail. | |||
| true - return the failure detail; | true - return the failure detail | |||
| false - do not return the failure detail; | false - do not return the failure detail | |||
| the default is false."; | The default is false."; | |||
| } | } | |||
| leaf rib-name { | leaf rib-name { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A reference to the name of a RIB."; | "A reference to the name of a RIB."; | |||
| } | } | |||
| container routes { | container routes { | |||
| description | description | |||
| "The routes to be added to the RIB."; | "The routes to be added to the RIB."; | |||
| list route-list{ | list route-list { | |||
| key "route-index"; | key "route-index"; | |||
| description | description | |||
| "The list of routes to be deleted."; | "The list of routes to be deleted."; | |||
| uses route-prefix; | uses route-prefix; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| uses route-operation-state; | uses route-operation-state; | |||
| } | } | |||
| } | } | |||
| grouping route-update-options { | grouping route-update-options { | |||
| description | description | |||
| "Update options: | "Update options: | |||
| 1. update the nexthop | 1. update the nexthop | |||
| 2. update the route attributes | 2. update the route attributes | |||
| 3. update the route-vendor-attributes."; | 3. update the route-vendor-attributes"; | |||
| choice update-options { | choice update-options { | |||
| description | description | |||
| "Update options: | "Update options: | |||
| 1. update the nexthop | 1. update the nexthop | |||
| 2. update the route attributes | 2. update the route attributes | |||
| 3. update the route-vendor-attributes."; | 3. update the route-vendor-attributes"; | |||
| case update-nexthop { | case update-nexthop { | |||
| container updated-nexthop { | container updated-nexthop { | |||
| uses nexthop; | uses nexthop; | |||
| description | description | |||
| "The nexthop used for updating."; | "The nexthop used for updating."; | |||
| } | } | |||
| } | } | |||
| case update-route-attributes { | case update-route-attributes { | |||
| container updated-route-attr { | container updated-route-attr { | |||
| uses route-attributes; | uses route-attributes; | |||
| skipping to change at line 1882 | skipping to change at line 1907 | |||
| uses route-vendor-attributes; | uses route-vendor-attributes; | |||
| description | description | |||
| "The vendor route attributes used for updating."; | "The vendor route attributes used for updating."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| rpc route-update { | rpc route-update { | |||
| description | description | |||
| "To update a route or a list of route of a RIB. | "To update a route or a list of routes of a RIB. | |||
| The inputs: | The inputs: | |||
| 1. The match conditions, could be: | 1. The match conditions, which could be: | |||
| a. route prefix, or | a. route prefix, | |||
| b. route attributes, or | b. route attributes, or | |||
| c. nexthop; | c. nexthop. | |||
| 2. The update parameters to be used: | 2. The update parameters to be used: | |||
| a. new nexthop; | a. new nexthop, | |||
| b. new route attributes;nexthop | b. new route attributes, or | |||
| c. nexthop. | ||||
| Actions: | Actions: | |||
| 1. update the nexthop | 1. update the nexthop | |||
| 2. update the route attributes | 2. update the route attributes | |||
| The outputs: | The outputs: | |||
| success-count - the number of routes updated; | success-count - the number of routes updated | |||
| failed-count - the number of routes fail to update | failed-count - the number of routes fail to update | |||
| failure-detail - the detail failure info. | failure-detail - the detail failure info | |||
| "; | "; | |||
| input { | input { | |||
| leaf return-failure-detail { | leaf return-failure-detail { | |||
| type boolean; | type boolean; | |||
| default false; | default "false"; | |||
| description | description | |||
| "Whether return the failure detail. | "Whether to return the failure detail. | |||
| true - return the failure detail; | true - return the failure detail | |||
| false - do not return the failure detail; | false - do not return the failure detail | |||
| the default is false."; | The default is false."; | |||
| } | } | |||
| leaf rib-name { | leaf rib-name { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A reference to the name of a RIB."; | "A reference to the name of a RIB."; | |||
| } | } | |||
| choice match-options { | choice match-options { | |||
| description | description | |||
| "Match options."; | "Match options."; | |||
| case match-route-prefix { | case match-route-prefix { | |||
| description | description | |||
| "Update the routes that match route | "Update the routes that match the route | |||
| prefix(es) condition."; | prefix(es) condition."; | |||
| container input-routes { | container input-routes { | |||
| description | description | |||
| "The matched routes to be updated."; | "The matched routes to be updated."; | |||
| list route-list { | list route-list { | |||
| key "route-index"; | key "route-index"; | |||
| description | description | |||
| "The list of routes to be updated."; | "The list of routes to be updated."; | |||
| uses route-prefix; | uses route-prefix; | |||
| uses route-update-options; | uses route-update-options; | |||
| skipping to change at line 1943 | skipping to change at line 1969 | |||
| } | } | |||
| case match-route-attributes { | case match-route-attributes { | |||
| description | description | |||
| "Update the routes that match the | "Update the routes that match the | |||
| route attributes condition."; | route attributes condition."; | |||
| container input-route-attributes { | container input-route-attributes { | |||
| description | description | |||
| "The route attributes are used for matching."; | "The route attributes are used for matching."; | |||
| uses route-attributes; | uses route-attributes; | |||
| } | } | |||
| container update-parametors { | container update-parameters { | |||
| description | description | |||
| "Update options: | "Update options: | |||
| 1. update the nexthop | 1. update the nexthop | |||
| 2. update the route attributes | 2. update the route attributes | |||
| 3. update the route-vendor-attributes."; | 3. update the route-vendor-attributes"; | |||
| uses route-update-options; | uses route-update-options; | |||
| } | } | |||
| } | } | |||
| case match-route-vendor-attributes { | case match-route-vendor-attributes { | |||
| if-feature route-vendor-attributes; | if-feature "route-vendor-attributes"; | |||
| description | description | |||
| "Update the routes that match the | "Update the routes that match the | |||
| vendor attributes condition"; | vendor attributes condition"; | |||
| container input-route-vendor-attributes { | container input-route-vendor-attributes { | |||
| description | description | |||
| "The vendor route attributes are used for matching."; | "The vendor route attributes are used for matching."; | |||
| uses route-vendor-attributes; | uses route-vendor-attributes; | |||
| } | } | |||
| container update-parameters-vendor { | container update-parameters-vendor { | |||
| description | description | |||
| "Update options: | "Update options: | |||
| 1. update the nexthop | 1. update the nexthop | |||
| 2. update the route attributes | 2. update the route attributes | |||
| 3. update the route-vendor-attributes."; | 3. update the route-vendor-attributes"; | |||
| uses route-update-options; | uses route-update-options; | |||
| } | } | |||
| } | } | |||
| case match-nexthop { | case match-nexthop { | |||
| description | description | |||
| "Update the routes that match the nexthop."; | "Update the routes that match the nexthop."; | |||
| container input-nexthop { | container input-nexthop { | |||
| description | description | |||
| "The nexthop used for matching."; | "The nexthop used for matching."; | |||
| uses nexthop; | uses nexthop; | |||
| } | } | |||
| container update-parameters-nexthop { | container update-parameters-nexthop { | |||
| description | description | |||
| "Update options: | "Update options: | |||
| 1. update the nexthop | 1. update the nexthop | |||
| 2. update the route attributes | 2. update the route attributes | |||
| 3. update the route-vendor-attributes."; | 3. update the route-vendor-attributes"; | |||
| uses route-update-options; | uses route-update-options; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| uses route-operation-state; | uses route-operation-state; | |||
| } | } | |||
| } | } | |||
| rpc nh-add { | rpc nh-add { | |||
| description | description | |||
| "To add a nexthop to a RIB. | "To add a nexthop to a RIB. | |||
| Inputs parameters: | Inputs parameters: | |||
| 1. RIB name | 1. rib-name | |||
| 2. nexthop; | 2. nexthop | |||
| Actions: | Actions: | |||
| Add the nexthop to the RIB | Add the nexthop to the RIB | |||
| Outputs: | Outputs: | |||
| 1.Operation result: | 1. Operation result: | |||
| true - success | true - success | |||
| false - failed; | false - failed | |||
| 2. nexthop identifier."; | 2. nexthop identifier"; | |||
| input { | input { | |||
| leaf rib-name { | leaf rib-name { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A reference to the name of a RIB."; | "A reference to the name of a RIB."; | |||
| } | } | |||
| uses nexthop; | uses nexthop; | |||
| } | } | |||
| output { | output { | |||
| leaf result { | leaf result { | |||
| type boolean; | type boolean; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Return the result of the rib-add operation. | "Return the result of the rib-add operation: | |||
| true - success; | true - success | |||
| false - failed;"; | false - failed"; | |||
| } | } | |||
| leaf reason { | leaf reason { | |||
| type string; | type string; | |||
| description | description | |||
| "The specific reason that caused the failure."; | "The specific reason that caused the failure."; | |||
| } | } | |||
| leaf nexthop-id { | leaf nexthop-id { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "A nexthop identifier that is allocated to the nexthop."; | "A nexthop identifier that is allocated to the nexthop."; | |||
| skipping to change at line 2056 | skipping to change at line 2082 | |||
| description | description | |||
| "A reference to the name of a RIB."; | "A reference to the name of a RIB."; | |||
| } | } | |||
| uses nexthop; | uses nexthop; | |||
| } | } | |||
| output { | output { | |||
| leaf result { | leaf result { | |||
| type boolean; | type boolean; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Return the result of the rib-add operation. | "Return the result of the rib-add operation: | |||
| true - success; | true - success; | |||
| false - failed."; | false - failed"; | |||
| } | } | |||
| leaf reason { | leaf reason { | |||
| type string; | type string; | |||
| description | description | |||
| "The specific reason that caused the failure."; | "The specific reason that caused the failure."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /*Notifications*/ | //Notifications | |||
| notification nexthop-resolution-status-change { | notification nexthop-resolution-status-change { | |||
| description | description | |||
| "Nexthop resolution status (resolved/unresolved) | "Nexthop resolution status (resolved/unresolved) | |||
| notification."; | notification."; | |||
| container nexthop{ | container nexthop { | |||
| description | description | |||
| "The nexthop."; | "The nexthop."; | |||
| uses nexthop; | uses nexthop; | |||
| } | } | |||
| leaf nexthop-state { | leaf nexthop-state { | |||
| type nexthop-state-definition; | type nexthop-state-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Nexthop resolution status (resolved/unresolved) | "Nexthop resolution status (resolved/unresolved) | |||
| notification."; | notification."; | |||
| skipping to change at line 2118 | skipping to change at line 2145 | |||
| } | } | |||
| leaf route-state { | leaf route-state { | |||
| type route-state-definition; | type route-state-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Indicates whether a route is active or inactive."; | "Indicates whether a route is active or inactive."; | |||
| } | } | |||
| list route-change-reasons { | list route-change-reasons { | |||
| key "route-change-reason"; | key "route-change-reason"; | |||
| description | description | |||
| "The reasons that cause the route change. A route | "The reasons that cause the route change. A route | |||
| change that may result from several reasons. For | change may result from several reasons; for | |||
| example, a nexthop becoming resolved will make a | example, a nexthop becoming resolved will make a | |||
| route A active which is of better preference than | route A active, which is of better preference than | |||
| a currently active route B, which results in the | a currently active route B, which results in the | |||
| route A being installed"; | route A being installed"; | |||
| leaf route-change-reason { | leaf route-change-reason { | |||
| type route-change-reason-definition; | type route-change-reason-definition; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The reason that caused the route change."; | "The reason that caused the route change."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| End of changes. 198 change blocks. | ||||
| 263 lines changed or deleted | 290 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||