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/ |