<CODE BEGINS> file "ietf-bgp-ls@2023-10-10.yang"
module ietf-bgp-ls {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-ls";
prefix bgp-ls;
import ietf-yang-types {
prefix yang;
reference
"RFC 6991: Common YANG Data Types.";
}
import ietf-routing {
prefix rt;
reference
"RFC 8349, A YANG Data Model for Routing Management
(NMDA Version).";
}
import ietf-bgp {
prefix bgp;
reference
"I-D.ietf-idr-bgp-model: BGP YANG Model for Service Provider
Networks.";
}
import ietf-bgp-types {
prefix bt;
reference
"I-D.ietf-idr-bgp-model: BGP YANG Model for Service Provider
Networks.";
}
import ietf-bgp-lsdb {
prefix bgp-lsdb;
reference
"RFC XXXX: A YANG model for BGP-LS, BGP-LS-VPN,
and BGP-LS-SPF.";
}
organization
"IETF LSVR Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/lsvr>
WG List: <lsvr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com)";
description
"This module contains contains management
information for BGP-LS database.
Copyright (c) 2023 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Revised BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
for full legal notices.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here.";
revision 2023-10-10 {
description
"Initial Version";
reference
"RFC XXXX, BGP Model for Link State Distribution.";
}
// Identities.
identity bgp-ls {
base bt:afi-safi-type;
description
"BGP Link-State.";
reference
"RFC 7752: Link-State Info Distribution using BGP.";
}
identity bgp-ls-vpn {
base bt:afi-safi-type;
description
"BGP Link-State VPN.";
reference
"RFC 7752: Link-State Info Distribution using BGP.";
}
identity bgp-ls-spf {
base bt:afi-safi-type;
description
"BGP Link-State Shortest Path First (BGP-LS-SPF).";
reference
"I-D.ietf-lsvr-bgp-spf: BGP Link-State SPF Routing.";
}
identity attribute-type {
description
"Base identity for BGP-LS Attribute type.";
}
identity multi-topology-identifier {
base attribute-type;
description
"Multi Topology Identifier TLV.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
identity node-flag-bits {
base attribute-type;
description
"The Node Flag Bits TLV.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
identity opaque-node-attribute {
base attribute-type;
description
"The Opaque Node Attribute TLV.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
identity node-name {
base attribute-type;
description
"The Node Name TLV.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
identity isis-area-identifier {
base attribute-type;
description
"IS-IS Area Identifier.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
identity ipv4-route-id-of-local-node {
base attribute-type;
description
"IPv4 Router-ID of Local Node.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
identity ipv6-router-id-of-local-node {
base attribute-type;
description
"IPv6 Router-ID of Local Node.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
// Typedefs
typedef spf-algorithm-type {
type enumeration {
enum normal {
description
"Normal Shortest Path First (SPF) algorithm based on link
metric. This is the standard shortest path algorithm as
computed by the IGP protocol. Consistent with the
deployed practice for link-state protocols, Algorithm 0
permits any node to overwrite the SPF path with a
different path based on its local policy.";
}
enum strict {
description
"Strict Shortest Path First (SPF) algorithm based on link
metric. The algorithm is identical to Algorithm 0 but
Algorithm 1 requires that all nodes along the path will
honor the SPF routing decision. Local policy at the node
claiming support for Algorithm 1 MUST NOT alter the SPF
paths computed by Algorithm 1";
}
enum unknown {
description
"Unknown Algorithm";
}
}
description
"SPF algorithm type.";
}
// Groupings
grouping bgp-neighbor-ls-common {
description
"Grouping for neighbor configuration for Link-State.";
leaf metric {
type uint32;
default 10;
description
"Metric associated with the corresponding link to
be used in the SPF graph computation.";
}
leaf status {
type enumeration {
enum reachable {
description
"The link is reachable in the current SPF topology.";
}
enum uncreachable {
description
"The link is unreachable in the current SPF topology.";
}
}
default reachable;
description
"Sets SPF-Status of the corresponding LS Link NLRI.";
}
}
grouping bgp-mp-ls {
description
"Grouping for BGP-LS paramters.";
container link-state {
when "derived-from-or-self(../../bgp:afi-safi/bgp:name, " +
"'bgp-ls')" {
description
"Include this container for BGP Linkstate specific
configuration";
}
presence
"This container is for BGP Linkstate specific
congfiguration.";
description
"Information related to Link-State configuration and
management.";
uses bgp:mp-all-afi-safi-common;
leaf max-rate {
type uint32;
units per-second;
default 200;
description
"Maximum rate at which Link-State NLRIs will be
advertised or withdrawn from neighbors.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
leaf max-number {
type uint32;
description
"Maximim number of Link-State NLRIs stored in a router's
RIB.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
leaf instance-id {
type uint64;
description
"64-bit Instance-ID.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
leaf asn-plus-bgp-ls-ids {
type uint32;
description
"A pair of ASN and BGP-LS identifiers per flooding set
in which the node participates.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
}
container tlvs {
config false;
description
"Container for BGP-LS attribute TLVs.";
list tlv {
description
"List of all TLVs.";
container multi-topology-identifier {
description
"Multi Topo Identifier TLV.";
leaf type {
type identityref {
base attribute-type;
}
description
"Type should be of value 263.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
leaf length {
type uint16;
units octets;
description
"The length of the TLV in octets.";
reference
"RFC 8654: Extended Message Support for BGP.";
}
leaf-list value {
type uint16 {
range 0..2048;
}
description
"Leaf list of Multi Topology IDs.";
}
}
container node-flag-bits {
description
"Node Flag Bits TLV.";
leaf type {
type identityref {
base attribute-type;
}
description
"The type should be 1024";
}
leaf length {
type uint8 {
range 0..1;
}
description
"The length of this TLV in octets.";
}
leaf value {
type bits {
bit overload {
position 0;
description
"Overload bit.";
reference
"ISO10589: International Organization for
Standardization, Intermediate System to
Intermediate System intra-domain
routeing information exchange protocol for use
in conjunction with the protocol for providing
the connectionless-mode network service
(ISO 8473), ISO/IEC 10589, November 2002.";
}
bit attached {
position 1;
description
"Attached bit.";
reference
"ISO10589: International Organization for
Standardization, Intermediate System to
Intermediate System intra-domain
routeing information exchange protocol for use
in conjunction with the protocol for providing
the connectionless-mode network service
(ISO 8473), ISO/IEC 10589, November 2002.";
}
bit external {
position 2;
description
"External bit.";
reference
"RFC 2328: OSPF Version 2.";
}
}
description
"The value of this TLV.";
}
}
container opaque-node-attribute {
description
"Opaque Node Attribute TLV.";
leaf type {
type identityref {
base attribute-type;
}
description
"The type should be 1025";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
leaf length {
type uint16 {
range 0..max;
}
units octets;
description
"The length of the TLV in octets.";
reference
"RFC 8654: Extended Message Support for BGP.";
}
leaf-list value {
type uint16 {
range 0..2048;
}
description
"Leaf list of Opaque Node Attribute TLV.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
}
container node-name {
description
"Node Name TLV.";
leaf type {
type identityref {
base attribute-type;
}
description
"The type should be 1026";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
leaf length {
type uint16 {
range 0..max;
}
units octets;
description
"The length of the TLV in octets.";
reference
"RFC 8654: Extended Message Support for BGP.";
}
leaf-list value {
type uint16 {
range 0..2048;
}
description
"Leaf list of Node Name TLV.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
}
container isis-area-identifier {
description
"IS-IS Area Identifier TLV.";
leaf type {
type identityref {
base attribute-type;
}
description
"The type should be 1027";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
leaf length {
type uint16 {
range 0..max;
}
units octets;
description
"The length of the TLV in octets.";
reference
"RFC 8654: Extended Message Support for BGP.";
}
leaf-list value {
type uint16 {
range 0..2048;
}
description
"Leaf list of IS-IS Area Identifier TLV.";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
}
container ipv4-router-id {
description
"IPv4 Router-ID of Local Node TLV.";
leaf type {
type identityref {
base attribute-type;
}
description
"The type should be 1028";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
leaf length {
type uint8 {
range 0..4;
}
description
"4-octet router-id of the router originating the LSP.";
reference
"RFC 5305: IS-IS Extenstions for Traffic Engineering.";
}
leaf value {
type uint16 {
range 0..max;
}
description
"4-octet router-id of the router originating the LSP.";
reference
"RFC 5305: IS-IS Extenstions for Traffic Engineering.";
}
}
container ipv6-router-id {
description
"IPv6 Router-ID of Local Node TLV.";
leaf type {
type identityref {
base attribute-type;
}
description
"The type should be 1029";
reference
"I-D.ietf-idr-rfc7752-bis: Link State Info Distribution
Using BGP.";
}
leaf length {
type uint8 {
range 0..16;
}
description
"16-octet router-id of the router originating the LSP.";
reference
"RFC 6119: IPv6 Traffic Engineering in IS-IS.";
}
leaf value {
type uint16 {
range 0..max;
}
description
"16-octet router-id of the router originating the LSP.";
reference
"RFC 6119: IS-IS Traffic Engineering in IS-IS.";
}
}
uses unknown-tlvs;
}
}
}
grouping bgp-mp-ls-spf {
description
"Grouping for BGP-LS-SPF parameters.";
container link-state-spf {
when "derived-from-or-self (../../bgp:afi-safi/bgp:name, " +
"'bgp-ls-spf')" {
description
"Include this container for BGP Link-State SPF specific
configuration";
}
description "BGP Linkstate-SPF configuration options";
uses bgp:mp-all-afi-safi-common;
}
}
grouping tlv {
description
"Generic grouping for all TLVs.";
leaf type {
type identityref {
base attribute-type;
}
description
"TLV type.";
}
leaf length {
type uint16;
description
"TLV length in octets.";
}
leaf value {
type yang:hex-string;
description
"TLV value in the form of a hex string.";
}
}
grouping unknown-tlvs {
description
"Unknown TLVs grouping. Used for unknown TLVs or
unknown sub-TLVs.";
container unknown-tlvs {
description
"All unknown TLVs.";
list unknown-tlv {
description
"Unknown TLV.";
uses tlv;
}
}
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:global" +
"/bgp:afi-safis/bgp:afi-safi" {
description
"Augmentation of the BGP model to add BGL-LS.";
uses bgp-mp-ls;
uses bgp-mp-ls-spf;
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:global" +
"/bgp:afi-safis/bgp:afi-safi/link-state" {
description
"Augmentation of BGL-LS to add dB.";
uses bgp-lsdb:lsdb-top;
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:global" +
"/bgp:afi-safis/bgp:afi-safi/link-state-spf" {
description
"Augmentation of BGL-LS-SPF.";
leaf instance-identifier {
type uint64;
default 0;
description
"Instance Identifier to be used for all Link-State NLRI
advertisements originated locally";
}
leaf algorithm-type {
type spf-algorithm-type;
default normal;
description
"SPF Algorithm type associated with Link-State AFI SAFI";
}
leaf node-status {
type enumeration {
enum reachable {
description
"The local node is reachable in the current SPF
topology.";
}
enum unreacable {
description
"The local node is unreachable in the current SPF
topology.";
}
enum no-transit-support {
description
"The local node is reachable but does not support
forwarding of transit traffic.";
}
}
default reachable;
description
"Sets SPF-Status of the local node.";
}
container log {
config false;
description
"This container lists the SPF computation events.";
list event {
key id;
description
"List of computation events - implemented as a
wrapping buffer.";
leaf id {
type uint32;
description
"Event identifier.";
}
leaf type {
type enumeration {
enum full {
description "Full SPF computation.";
}
enum route-only {
description
"Route reachability only SPF computation";
}
}
description "Type of SPF computation performed.";
}
leaf schedule-time {
type yang:date-and-time;
description
"Time when the SPF computation was
scheduled.";
}
leaf delay {
type uint64;
description
"Delay in micro-seconds applied for this SPF event.";
}
leaf start-time {
type yang:date-and-time;
description
"Time when the SPF computation started.";
}
leaf end-time {
type yang:date-and-time;
description
"Time when the SPF computation ended.";
}
leaf duration {
type uint64;
description
"Time taken in micro-seconds to execute the SPF
computations.";
}
leaf node-count {
type uint64;
description
"Number of nodes involved in the SPF computations.";
}
leaf prefix-count {
type uint64;
description
"Number of prefixes involved in the SPF computations.";
}
leaf route-download-count {
type uint64;
description
"Number of routes updated in the SPF computations.";
}
list lsp-trigger {
key "id";
description
"This list includes the LSPs that triggered the
SPF computation.";
leaf id {
type uint32;
description
"Trigger identifier.";
}
leaf nlri-prefix {
type string;
description
"Prefix of the NLRI triggering SPF computation.";
}
leaf nlri-sequence {
type uint32;
description
"Sequence number of the NLRI triggering SPF
computation.";
}
leaf trigger-time {
type yang:date-and-time;
description
"Time when the trigger event was recorded.";
}
}
}
}
uses bgp-lsdb:lsdb-top;
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:neighbors" +
"/bgp:neighbor/bgp:afi-safis/bgp:afi-safi" {
description
"Augmentation of the BGP model to add BGL-LS.";
uses bgp-mp-ls;
uses bgp-mp-ls-spf;
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:neighbors" +
"/bgp:neighbor/bgp:afi-safis/bgp:afi-safi/link-state-spf" {
description
"Augmentation of the BGP neighbor to add BGL-LS.";
uses bgp-neighbor-ls-common;
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:global" +
"/bgp:afi-safis/bgp:afi-safi/bgp:statistics" {
when "derived-from-or-self (../bgp:name, 'bgp-ls')" {
description
"Include these for BGP Link-State specific statistics.";
}
description
"Augmentation of the global statistics counter to add BGP-LS
statistics.";
leaf updates-sent {
type yang:zero-based-counter32;
description
"Total number of Link-State NLRI updates sent.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
leaf updates-received {
type yang:zero-based-counter32;
description
"Total number of Link-State NLRI updates received.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
leaf local-ls-originated {
type yang:zero-based-counter32;
description
"Total number of locally originated Link-State NLRIs.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
action clear {
if-feature "bt:clear-statistics";
description
"Clear statistics action command.
Execution of this command should result in all the
counters to be cleared and set to 0.";
input {
leaf clear-at {
type yang:date-and-time;
description
"Time when the clear action needs to be executed.";
}
}
output {
leaf clear-finished-at {
type yang:date-and-time;
description
"Time when the clear action command completed.";
}
}
}
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:global" +
"/bgp:afi-safis/bgp:afi-safi/bgp:statistics" {
when "derived-from-or-self (../bgp:name, 'bgp-ls-spf')" {
description
"Include these for BGP Link-State SPF specific statistics.";
}
description
"Augmentation of the global statistics counter to add BGP-LS-SPF
statistics.";
leaf scheduled {
type yang:zero-based-counter64;
description
"Number of times SPF has been re/scheduled";
}
leaf computed {
type yang:zero-based-counter64;
description
"Number of times SPF has been computed";
}
leaf maximum-duration {
type uint64;
units "microseconds";
description
"Maximum duration taken for SPF compuation in
microseconds.";
}
leaf minimum-duration {
type uint64;
units "microseconds";
description
"Minimum duration taken for SPF compuation in
microseconds.";
}
leaf average-duration {
type uint64;
units "microseconds";
description
"Average duration taken for SPF compuation in
microseconds.";
}
leaf last-computation-time {
type yang:date-and-time;
description
"Timestamp for last SPF computation for this
address-family";
}
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:neighbors" +
"/bgp:neighbor/bgp:statistics" {
when "derived-from-or-self (../bgp:afi-safis/bgp:afi-safi" +
"/bgp:name, 'bgp-ls')" {
description
"Include these for BGP Link-State specific statistics.";
}
description
"Augmentation of the BGP per-neighbor statistics to add
BGP-LS specific counters.";
leaf updates-sent {
type yang:zero-based-counter32;
description
"Total number of Link-State NLRIs updates sent per neighbor.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
leaf updates-received {
type yang:zero-based-counter32;
description
"Total number of Link-State NLRIs updates received per
neighbor.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
leaf error-updates-received {
type yang:zero-based-counter32;
description
"Total number of Link-State NLRIs updates received that
were errored, per neighbor.";
reference
"RFC 7752: Link-State Info Distribution Using BGP.";
}
leaf computations {
type yang:zero-based-counter32;
description
"Count of number of SPF computations made.";
reference
"I-D.ietf-lsvr-bgp-spf: BGP Link-State SPF Routing.";
}
leaf triggering-events {
type yang:zero-based-counter32;
description
"SPF triggering events.";
reference
"I-D.ietf-lsvr-bgp-spf: BGP Link-State SPF Routing.";
}
action clear {
if-feature "bt:clear-statistics";
description
"Clear statistics action command.
Execution of this command should result in all the
counters to be cleared and set to 0.";
input {
leaf clear-at {
type yang:date-and-time;
description
"Time when the clear action needs to be executed.";
}
}
output {
leaf clear-finished-at {
type yang:date-and-time;
description
"Time when the clear action command completed.";
}
}
}
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:peer-groups" +
"/bgp:peer-group/bgp:afi-safis/bgp:afi-safi" {
description
"Augmentation of the BGP peer-group to add BGP-LS and
BGP-LS-SPF.";
uses bgp-mp-ls;
uses bgp-mp-ls-spf;
}
augment "/rt:routing/rt:control-plane-protocols" +
"/rt:control-plane-protocol/bgp:bgp/bgp:peer-groups" +
"/bgp:peer-group/bgp:afi-safis/bgp:afi-safi/link-state-spf" {
description
"Augmentation of the BGP peer-groups to add BGL-LS.";
uses bgp-neighbor-ls-common;
}
}
<CODE ENDS>