diff options
Diffstat (limited to 'src/plugins/yang/openconfig/openconfig-bfd.yang')
-rw-r--r-- | src/plugins/yang/openconfig/openconfig-bfd.yang | 738 |
1 files changed, 738 insertions, 0 deletions
diff --git a/src/plugins/yang/openconfig/openconfig-bfd.yang b/src/plugins/yang/openconfig/openconfig-bfd.yang new file mode 100644 index 0000000..fc573e5 --- /dev/null +++ b/src/plugins/yang/openconfig/openconfig-bfd.yang @@ -0,0 +1,738 @@ +module openconfig-bfd { + + yang-version "1"; + + // namespace + namespace "http://openconfig.net/yang/bfd"; + + prefix "oc-bfd"; + + // import some basic types + import openconfig-extensions { prefix "ocext"; } + import openconfig-types { prefix "oc-types"; } + import openconfig-interfaces { prefix "oc-if"; } + import openconfig-inet-types { prefix "oc-inet"; } + import openconfig-if-types { prefix "oc-ift"; } + import openconfig-network-instance { prefix "oc-ni"; } + import openconfig-policy-types { prefix "oc-pol-types"; } + + // meta + organization "OpenConfig working group"; + + contact + "OpenConfig working group + www.openconfig.net"; + + description + "An OpenConfig model of Bi-Directional Forwarding Detection (BFD) + configuration and operational state."; + + ocext:openconfig-version "0.1.0"; + + revision "2017-11-17" { + description + "Update version number for initial sharing."; + reference "0.1.0"; + } + + revision "2017-10-19" { + description + "Adopt OpenConfig types models, type corrections"; + reference "0.0.2"; + } + + revision "2016-06-24" { + description + "Initial revision"; + reference "0.0.1"; + } + + typedef bfd-session-state { + type enumeration { + enum UP { + description + "The BFD session is perceived to be up by the system."; + } + enum DOWN { + description + "The BFD session is perceived to be down by the system."; + } + enum ADMIN_DOWN { + description + "The BFD session is administratively disabled."; + } + enum INIT { + description + "The BFD session is perceived to be initialising by the + system."; + } + } + description + "The state of the BFD session according to the system referred + to by the context of the leaf."; + reference + "RFC5880 - Bidirectional Forwarding Detection, Section + 4.1"; + } + + typedef bfd-diagnostic-code { + type enumeration { + enum NO_DIAGNOSTIC { + value 0; + description + "No diagnostic code was specified, or the session has not + changed state."; + } + enum DETECTION_TIMEOUT { + value 1; + description + "The control detection time expired: no BFD packet was + received within the required period."; + } + enum ECHO_FAILED { + value 2; + description + "The BFD echo function failed - echo packets have not been + received for the required period of time."; + } + enum FORWARDING_RESET { + value 3; + description + "The forwarding plane in the local system was reset - such + that the remote system cannot rely on the forwarding state of + the device specifying this error code."; + } + enum PATH_DOWN { + value 4; + description + "Signalling outside of BFD specified that the path underlying + this session has failed."; + } + enum CONCATENATED_PATH_DOWN { + value 5; + description + "When a BFD session runs over a series of path segments, this + error code indicates that a subsequent path segment (i.e., + one in the transmit path between the source and destination + of the session) has failed."; + } + enum ADMIN_DOWN { + value 6; + description + "The BFD session has been administratively disabled by the + peer."; + } + enum REVERSE_CONCATENATED_PATH_DOWN { + value 7; + description + "In the case that a BFD session is running over a series of + path segments, this error code indicates that a path segment + on the reverse path (i.e., in the transmit direction from the + destination to the source of the session) has failed."; + } + } + description + "Diagnostic codes defined by BFD. These typically indicate the + reason for a change of session state."; + reference + "RFC5880 - Bidirectional Forwarding Detection, Section + 4.1"; + } + + + grouping bfd-interface-config { + description + "Top-level per-interface configuration parameters for BFD."; + + leaf id { + type string; + description + "A unique identifier for the interface."; + } + + leaf enabled { + type boolean; + description + "When this leaf is set to true then the BFD session is enabled + on the specified interface - if it is set to false, it is + administratively disabled."; + } + + leaf local-address { + type oc-inet:ip-address; + description + "The source IP address to be used for BFD sessions over this + interface."; + } + + leaf desired-minimum-tx-interval { + type uint32; + units microseconds; + description + "The minimum interval between transmission of BFD control + packets that the operator desires. This value is advertised to + the peer, however the actual interval used is specified by + taking the maximum of desired-minimum-tx-interval and the + value of the remote required-minimum-receive interval value. + + This value is specified as an integer number of microseconds."; + } + + leaf required-minimum-receive { + type uint32; + units microseconds; + description + "The minimum interval between received BFD control packets that + this system should support. This value is advertised to the + remote peer to indicate the maximum frequency (i.e., minimum + inter-packet interval) between BFD control packets that is + acceptable to the local system."; + } + + // rjs: Could have required-minimum-echo-receive here, but this is + // generally not configurable. + + leaf detection-multiplier { + type uint16 { + range "1..max"; + } + description + "The number of packets that must be missed to declare this + session as down. The detection interval for the BFD session + is calculated by multiplying the value of the negotiated + transmission interval by this value."; + } + + leaf enable-per-member-link { + type boolean; + default false; + description + "When this leaf is set to true - BFD will be enabled on + each member interface of the aggregated Ethernet bundle."; + + when "/oc-if:interfaces/oc-if:interface" + + "[name=current()/../../interface-ref/config/interface]/" + + "oc-if:state/oc-if:type = 'oc-ift:IF_AGGREGATE'" { + description + "Include per-member link BFD only when the type of + interface is a link aggregate."; + } + } + } + + grouping bfd-interface-state { + // placeholder + description + "Operational state parameters relating to BFD running on an + interface."; + } + + grouping bfd-session-state-mode-timers-common { + description + "Common operational state parameters that are re-used across + both asynchronous and echo modes of BFD."; + + leaf last-packet-transmitted { + type uint64; + description + "The date and time at which the last BFD packet + was transmitted for this session, expressed as the number + of nanoseconds since the Unix Epoch (January 1, 1970, + 00:00 UTC)."; + } + + leaf last-packet-received { + type uint64; + description + "The date and time at which the last BFD packet + was received for this session, expressed as the number + of nanoseconds since the Unix Epoch (January 1, 1970, + 00:00 UTC)."; + } + + leaf transmitted-packets { + // TODO: looks to be unsupported on JUNOS + type uint64; + description + "The number of packets that have been transmitted + by the local system."; + } + + leaf received-packets { + // TODO: looks to be unsupported on JUNOS + type uint64; + description + "The number of packets that have been received by the + local system from the remote neighbour."; + } + + leaf up-transitions { + // TODO: looks to only be supported in SROS + type uint64; + description + "The number of times that the adjacency with the neighbor + has transitioned into the up state."; + } + } + + grouping bfd-session-state-sessiondetails-common { + description + "Common session details for a BFD session."; + + leaf session-state { + type bfd-session-state; + description + "The state of the BFD session perceived by the local system."; + + } + + leaf remote-session-state { + type bfd-session-state; + description + "The reported state of the BFD session according to the remote + system. This state reflects the last state reported in a BFD + control packet."; + } + + leaf last-failure-time { + type oc-types:timeticks64; + description + "The time of the last transition of the BFD session out of + the UP state, expressed as the number of nanoseconds since + the Unix epoch."; + } + + leaf failure-transitions { + type uint64; + description + "The number of times that the BFD session has transitioned + out of the UP state."; + } + + leaf local-discriminator { + type string; + description + "A unique identifier used by the local system to identify this + BFD session."; + } + + leaf remote-discriminator { + type string; + description + "A unique identified used by the remote system to identify this + BFD session."; + } + + leaf local-diagnostic-code { + type bfd-diagnostic-code; + description + "The local BFD diagnostic code indicating the most recent + reason for failure of this BFD session."; + } + + leaf remote-diagnostic-code { + type bfd-diagnostic-code; + description + "The remote BFD diagnostic code indicating the remote system's + reason for failure of the BFD session"; + } + + leaf remote-minimum-receive-interval { + type uint32; + description + "The value of the minimum receive interval that was specified + in the most recent BFD control packet received from the peer."; + } + + leaf demand-mode-requested { + type boolean; + description + "This leaf is set to true when the remote system has requested + demand mode be run for this session."; + } + + leaf remote-authentication-enabled { + type boolean; + description + "This leaf is set to true when the remote system has specified + that authentication is present for the BFD session."; + } + + leaf remote-control-plane-independent { + type boolean; + description + "This leaf is set to true when the remote system has specified + that the hardware implementing this BFD session is independent + of the control plane's liveliness."; + } + } + + + grouping bfd-session-state-async-common { + description + "Common parameters for asynchronous BFD sessions"; + + container async { + description + "Operational state parameters specifically relating to + asynchronous mode of BFD."; + + uses bfd-session-state-mode-timers-common; + } + } + + grouping bfd-session-state-echo-common { + description + "Common parameters for echo-mode BFD sessions."; + + container echo { + description + "Operational state parameters specifically relating to the + echo mode of BFD."; + + leaf active { + type boolean; + description + "This leaf is set to true when echo mode is running between + the local and remote system. When it is set to false, solely + asynchronous mode is active."; + } + + uses bfd-session-state-mode-timers-common; + } + } + + + grouping bfd-session-state-common { + description + "Common operational state parameters that may be re-used across + multiple BFD session contexts."; + + leaf local-address { + type oc-inet:ip-address; + description + "The IP address used by the local system for this BFD session."; + } + + leaf remote-address { + type oc-inet:ip-address; + description + "The IP address used by the remote system for this BFD session."; + } + + leaf-list subscribed-protocols { + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + description + "Indicates the set of protocols that currently use + this BFD session for liveliness detection."; + } + + uses bfd-session-state-sessiondetails-common; + uses bfd-session-state-echo-common; + uses bfd-session-state-async-common; + } + + grouping bfd-session-microbfd-common { + description + "BFD session parameters utilised only for micro-BFD sessions."; + + uses bfd-session-state-sessiondetails-common; + uses bfd-session-state-async-common; + } + + grouping bfd-interface-peer-state { + description + "Per-peer, per-interface operational state parameters for BFD."; + + uses bfd-session-state-common; + } + + grouping bfd-interface-microbfd-config { + description + "Configuration parameters for a microBFD session on an + interface."; + + leaf local-address { + type oc-inet:ip-address; + description + "The local IP address used by the system for the micro-BFD session + specified."; + } + + leaf remote-address { + type oc-inet:ip-address; + description + "The remote IP destination that should be used by the system for + the micro-BFD session specified."; + } + + leaf member-interface { + type leafref { + path "/oc-if:interfaces/" + + "oc-if:interface/oc-if:config/oc-if:name"; + } + // rjs: Note that this does not restrict to only interfaces that + // are part of the current LAG. An implementation should return + // NOK if such an interface is specified. + description + "Reference to a member link of the aggregate interface being + described."; + } + } + + grouping bfd-interface-microbfd-state { + description + "Operational state parameters relating to a micro-BFD session on + an interface."; + + uses bfd-session-microbfd-common; + } + + grouping bfd-interface-microbfd-structural { + description + "Structural grouping for micro-bfd configuration and state + parameters."; + + container micro-bfd-sessions { + description + "Parameters relating to micro-BFD sessions associated + with the interface."; + + list micro-bfd-session { + description + "This list contains configuration and state parameters + relating to micro-BFD session."; + reference + "RFC7130 - Bidirectional Forwarding Detection (BFD) + on Link Aggregation Group (LAG) Interfaces."; + + key "member-interface"; + + leaf member-interface { + type leafref { + path "../config/member-interface"; + } + description + "A reference to the member interface of the link + aggregate."; + } + + container config { + description + "Configuration parameters for the micro-BFD session."; + uses bfd-interface-microbfd-config; + } + + container state { + config false; + description + "Operational state parameters for the micro-BFD session."; + uses bfd-interface-microbfd-config; + uses bfd-interface-microbfd-state; + } + } + when "/oc-if:interfaces/oc-if:interface" + + "[name=current()/../interface-ref/config/interface]/" + + "oc-if:state/oc-if:type = 'oc-ift:IF_AGGREGATE'" { + description + "Include per-member link BFD only when the type of + interface is a link aggregate."; + } + } + } + + grouping bfd-interface-peer-structural { + description + "Structural grouping for BFD peers (in the context of an interface)."; + + container peers { + description + "Parameters relating to the BFD peers which are seen + over this interface."; + + list peer { + key "local-discriminator"; + config false; + + description + "Parameters relating to the BFD peer specified by the + remote address."; + + leaf local-discriminator { + type leafref { + path "../state/local-discriminator"; + } + description + "The local discriminator, which is unique for the + session on the system."; + } + + container state { + config false; + description + "Operational state parameters for the BFD session."; + + uses bfd-interface-peer-state; + } + } + } + } + + grouping bfd-top { + description + "Structural grouping for Bidirectional Forwarding Detection (BFD)."; + + container bfd { + description + "Configuration and operational state parameters for BFD."; + reference "RFC5880, RFC5881"; + + container interfaces { + description + "Interfaces on which BFD sessions are to be enabled."; + + list interface { + key "id"; + + description + "Per-interface configuration and state parameters for BFD."; + + leaf id { + type leafref { + path "../config/id"; + } + description + "A reference to an identifier for the interface on which + BFD is enabled."; + } + + container config { + description + "Configuration parameters for BFD on the specified + interface."; + uses bfd-interface-config; + } + + container state { + config false; + description + "Operational state parameters for BFD on the specified + interface."; + uses bfd-interface-config; + uses bfd-interface-state; + } + + uses oc-if:interface-ref; + + uses bfd-interface-microbfd-structural; + uses bfd-interface-peer-structural; + } + } + } + } + + grouping enable-bfd-config { + description + "Configuration parameters relating to enabling BFD."; + + leaf enabled { + type boolean; + description + "When this leaf is set to true, BFD is used to detect the + liveliness of the remote peer or next-hop."; + } + } + + grouping enable-bfd-state { + description + "Operational state parameters relating to enabling BFD."; + + leaf associated-session { + // TODO: this is a leafref to something unique, but seems + // like it might be expensive for the NMS to find out since + // it will need to cycle through all interfaces looking for + // the associated local-discriminator. + type leafref { + path "/bfd/interfaces/interface/peers/peer/local-discriminator"; + } + description + "A reference to the BFD session that is tracking the liveliness + of the remote entity."; + } + + // + // A fix to the above is to have the following leaf to show which + // interface is associated. + // + // leaf associated-interface { + // type leafref { + // path "/bfd/interfaces/interface/config/id"; + // } + // } + } + + grouping bfd-enable { + description + "Grouping which can be included in a protocol wishing to enable + BFD."; + + container enable-bfd { + description + "Enable BFD for liveliness detection to the next-hop or + neighbour."; + + container config { + description + "Configuration parameters relating to enabling BFD."; + + uses enable-bfd-config; + } + + container state { + config false; + description + "Operational state parameters relating to enabing BFD."; + + uses enable-bfd-config; + uses enable-bfd-state; + } + } + } + + // rjs - TODO - should these be specified within each model? The + // answer here is probably yes, since otherwise openconfig + // network-instance ends up with a circular reference. + augment "/oc-ni:network-instances/oc-ni:network-instance/" + + "oc-ni:protocols/oc-ni:protocol/oc-ni:bgp/" + + "oc-ni:neighbors/oc-ni:neighbor" { + description + "Augment the BGP routing protocol to add a link to BFD for + neighbour detection."; + + uses bfd-enable; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance/" + + "oc-ni:protocols/oc-ni:protocol/oc-ni:bgp/" + + "oc-ni:peer-groups/oc-ni:peer-group" { + description + "Augment the BGP routing protocol to add a link to BFD for + neighbor detection when specified within a peer-group."; + + uses bfd-enable; + } + + augment "/oc-ni:network-instances/oc-ni:network-instance/" + + "oc-ni:protocols/oc-ni:protocol/oc-ni:static-routes/" + + "oc-ni:static/oc-ni:next-hops/oc-ni:next-hop" { + description + "Augment the static route configuration to allow a next-hop + to be tracked by BFD."; + + uses bfd-enable; + } + + uses bfd-top; +} |