summaryrefslogtreecommitdiffstats
path: root/yang/frr-nexthop.yang
diff options
context:
space:
mode:
Diffstat (limited to 'yang/frr-nexthop.yang')
-rw-r--r--yang/frr-nexthop.yang348
1 files changed, 348 insertions, 0 deletions
diff --git a/yang/frr-nexthop.yang b/yang/frr-nexthop.yang
new file mode 100644
index 0000000..175487d
--- /dev/null
+++ b/yang/frr-nexthop.yang
@@ -0,0 +1,348 @@
+// SPDX-License-Identifier: BSD-2-Clause
+module frr-nexthop {
+ yang-version 1.1;
+ namespace "http://frrouting.org/yang/nexthop";
+ prefix frr-nexthop;
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+
+ import ietf-routing-types {
+ prefix rt-types;
+ }
+
+ import frr-interface {
+ prefix frr-interface;
+ }
+
+ import frr-vrf {
+ prefix frr-vrf;
+ }
+
+ organization
+ "FRRouting";
+ contact
+ "FRR Users List: <mailto:frog@lists.frrouting.org>
+ FRR Development List: <mailto:dev@lists.frrouting.org>";
+ description
+ "This module defines a model for managing FRR nexthop information.
+
+ Copyright 2020 FRRouting
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
+
+ revision 2019-08-15 {
+ description
+ "Initial revision.";
+ }
+
+ typedef optional-ip-address {
+ type union {
+ type inet:ip-address;
+ type string {
+ length "0";
+ }
+ }
+ }
+
+ /*
+ * Nexthop types.
+ */
+ typedef nexthop-type {
+ type enumeration {
+ enum "ifindex" {
+ value 1;
+ description
+ "Specific interface.";
+ }
+ enum "ip4" {
+ value 2;
+ description
+ "IPv4 address.";
+ }
+ enum "ip4-ifindex" {
+ value 3;
+ description
+ "IPv4 address and interface.";
+ }
+ enum "ip6" {
+ value 4;
+ description
+ "IPv6 address.";
+ }
+ enum "ip6-ifindex" {
+ value 5;
+ description
+ "IPv6 address and interface.";
+ }
+ enum "blackhole" {
+ value 6;
+ description
+ "Unreachable or prohibited.";
+ }
+ }
+ description
+ "Nexthop types.";
+ }
+
+ /*
+ * Blockhole nexthop type.
+ */
+ typedef blackhole-type {
+ type enumeration {
+ enum "unspec" {
+ value 0;
+ description
+ "Generic unreachable.";
+ }
+ enum "null" {
+ value 1;
+ description
+ "Null type.";
+ }
+ enum "reject" {
+ value 2;
+ description
+ "ICMP unreachable.";
+ }
+ enum "prohibited" {
+ value 3;
+ description
+ "ICMP admin-prohibited.";
+ }
+ }
+ default "null";
+ description
+ "Nexthop blackhole types.";
+ }
+
+ typedef nexthop-group-ref {
+ type leafref {
+ path "/frr-nexthop:frr-nexthop-group/frr-nexthop:nexthop-groups/frr-nexthop:name";
+ require-instance false;
+ }
+ }
+
+ /*
+ * Common nexthop attributes grouping.
+ */
+ grouping frr-nexthop-attributes {
+ leaf nh-type {
+ type nexthop-type;
+ mandatory true;
+ description
+ "The nexthop type.";
+ }
+
+ leaf vrf {
+ type frr-vrf:vrf-ref;
+ description
+ "The nexthop vrf name, if different from the route.";
+ }
+
+ leaf gateway {
+ type frr-nexthop:optional-ip-address;
+ description
+ "The nexthop gateway address.";
+ }
+
+ leaf interface {
+ type frr-interface:interface-ref;
+ description
+ "The nexthop egress interface.";
+ }
+
+ leaf bh-type {
+ type blackhole-type;
+ description
+ "A blackhole sub-type, if the nexthop is a blackhole type.";
+ }
+
+ leaf onlink {
+ type boolean;
+ default "false";
+ description
+ "Nexthop is directly connected.";
+ }
+
+ leaf srte-color {
+ when "../nh-type = 'ip4' or
+ ../nh-type = 'ip6' or
+ ../nh-type = 'ip4-ifindex' or
+ ../nh-type = 'ip6-ifindex'";
+ type uint32;
+ description
+ "The nexthop SR-TE color";
+ }
+
+ uses rt-types:mpls-label-stack {
+ description
+ "Nexthop's MPLS label stack.";
+ }
+
+ uses srv6-segs-stack {
+ description
+ "Nexthop's SRv6 segs SIDs stack.";
+ }
+ }
+
+ /*
+ * operational common attributes for nexthop
+ */
+ grouping frr-nexthop-operational {
+ leaf duplicate {
+ type empty;
+ config false;
+ description
+ "Duplicate nexthop";
+ }
+
+ leaf recursive {
+ type empty;
+ config false;
+ description
+ "Nexthop resolved through another gateway.";
+ }
+
+ leaf active {
+ type empty;
+ config false;
+ description
+ "Nexthop is active.";
+ }
+
+ leaf fib {
+ type empty;
+ config false;
+ description
+ "Nexthop is installed in fib.";
+ }
+
+ leaf weight {
+ type uint8;
+ config false;
+ description
+ "Weight to be used by the nexthop for purposes of ECMP";
+ }
+ }
+
+ grouping nexthop-grouping {
+ list nexthop {
+ key "nh-type vrf gateway interface";
+ min-elements 1;
+ description
+ "A list of nexthop objects.";
+ uses frr-nexthop-attributes;
+ }
+ }
+
+ /*
+ * Single nexthop grouping.
+ */
+ grouping frr-nexthop {
+ container frr-nexthops {
+ description
+ "FRR nexthop object.";
+ uses nexthop-grouping;
+ }
+ }
+
+
+ /*
+ * Container for FRR nexthop group.
+ */
+ grouping frr-nexthop-grouping {
+ list nexthop-groups {
+ key "name";
+ description
+ "List of nexthop groups, each contains group of nexthops";
+ leaf name {
+ type string;
+ description
+ "The nexthop-group name.";
+ }
+
+ uses frr-nexthop;
+ }
+ }
+
+ /* Operational nexthop-group */
+ grouping frr-nexthop-group-operational {
+ container nexthop-group {
+ description
+ "A group of nexthops.";
+ leaf id {
+ type uint32;
+ description
+ "The nexthop-group id.";
+ }
+
+ uses nexthop-grouping;
+ }
+ }
+
+ /* Contaner for SRv6 segs SIDs */
+ grouping srv6-segs-stack {
+ description
+ "This grouping specifies an SRv6 segs SIDs stack. The segs
+ SIDs stack is encoded as a list of SID entries. The
+ list key is an identifier that indicates the relative
+ ordering of each entry.";
+ container srv6-segs-stack {
+ description
+ "Container for a list of SRv6 segs SIDs entries.";
+ list entry {
+ key "id";
+ description
+ "List of SRv6 segs SIDs entries.";
+ leaf id {
+ type uint8;
+ description
+ "Identifies the entry in a sequence of SRv6 segs SIDs
+ entries.";
+ }
+ leaf seg {
+ type inet:ipv6-address;
+ }
+ }
+ }
+ }
+ container frr-nexthop-group {
+ description
+ "A nexthop-group, represented as a list of nexthop objects.";
+ uses frr-nexthop-grouping;
+ }
+
+ /*
+ * Augment weight attributes to nexthop group.
+ */
+ augment "/frr-nexthop-group/nexthop-groups/frr-nexthops/nexthop" {
+ leaf weight {
+ type uint8;
+ description
+ "Weight to be used by the nexthop for purposes of ECMP";
+ }
+ }
+}