Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lib: FRR next-hop yang data model. #5578

Merged
merged 1 commit into from Feb 12, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
150 changes: 93 additions & 57 deletions yang/frr-nexthop.yang
Expand Up @@ -10,10 +10,15 @@ module frr-nexthop {
import ietf-routing-types {
prefix rt-types;
}

import frr-interface {
prefix frr-interface;
}

import frr-vrf {
prefix "frr-vrf";
}

organization
"Free Range Routing";
contact
Expand All @@ -27,10 +32,19 @@ module frr-nexthop {
"Initial revision.";
}

typedef gateway-address {
type inet:ip-address;
typedef optional-ip-address {
type union {
type inet:ip-address;
type string {
pattern
'';
}
}
}

/*
* Nexthop types.
*/
typedef nexthop-type {
type enumeration {
enum "ifindex" {
Expand Down Expand Up @@ -68,6 +82,9 @@ module frr-nexthop {
"Nexthop types.";
}

/*
* Blockhole nexthop type.
*/
typedef blackhole-type {
type enumeration {
enum "unspec" {
Expand Down Expand Up @@ -97,113 +114,132 @@ module frr-nexthop {
}

/*
* Nexthop object
* Common nexthop attributes grouping.
*/

grouping frr-nexthop {
grouping frr-nexthop-attributes {
leaf nh-type {
type nexthop-type;
mandatory true;
description
"The nexthop type.";
}

leaf gateway {
type gateway-address;
description
"The nexthop gateway address.";
}

leaf vrf {
type string {
length "1..36";
}
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 {
when "../nh-type = 'blackhole'";
type blackhole-type;
description
"A blackhole sub-type, if the nexthop is a blackhole type.";
}

leaf flags {
type uint32;
leaf onlink {
when "../nh-type = 'ip4-ifindex' or
../nh-type = 'ip6-ifindex'";
type boolean;
default false;
description
"The nexthop's raw flags value.";
"Nexthop is directly connected.";
}

leaf is-duplicate {
type empty;
uses rt-types:mpls-label-stack {
Spantik marked this conversation as resolved.
Show resolved Hide resolved
description
"Duplicate nexthop; will be ignored.";
"Nexthop's MPLS label stack.";
}
}

leaf is-recursive {
/*
* operational common attributes for nexthop
*/
grouping frr-nexthop-operational {
leaf duplicate {
Spantik marked this conversation as resolved.
Show resolved Hide resolved
config false;
type empty;
description
"Nexthop must be resolved through another gateway.";
"Duplicate nexthop";
}

leaf is-onlink {
leaf recursive {
Spantik marked this conversation as resolved.
Show resolved Hide resolved
config false;
type empty;
description
"Nexthop is directly connected.";
"Nexthop resolved through another gateway.";
}

leaf is-active {
leaf active {
config false;
type empty;
description
"Nexthop is active.";
}

Spantik marked this conversation as resolved.
Show resolved Hide resolved
uses rt-types:mpls-label-stack {
leaf fib {
config false;
type empty;
description
"Nexthop's MPLS label stack.";
"Nexthop is installed in fib.";
}
}

leaf mtu {
type uint32;
/*
* Single nexthop grouping.
*/
grouping frr-nexthop {
container frr-nexthops {
description
"The nexthop's specific MTU.";
"FRR nexthop object.";
list nexthop {
key "nh-type gateway interface";
Spantik marked this conversation as resolved.
Show resolved Hide resolved
description
"A list of nexthop objects.";

uses frr-nexthop-attributes;
}
}
}

// End of nexthop

/*
* Nexthop-group container
* Container for FRR nexthop group.
*/

grouping frr-nexthop-group {
description
"A nexthop-group, represented as a list of nexthop objects.";
leaf name {
type string;
grouping frr-nexthop-grouping {
list nexthop-group {
key "name";
description
"The nexthop-group name.";
}
"A group of nexthops.";

list entry {
key "id";
description
"A list of nexthop objects.";
leaf id {
type uint32;
leaf name {
type string;
description
"Identifies a nexthop within a nexthop group; the entries
are ordered by id value, and the value has no other meaning.";
"The nexthop-group name.";
}

uses frr-nexthop;
}
}

// End of frr-nexthop-group
container frr-nexthop-group {
description
"A nexthop-group, represented as a list of nexthop objects.";

uses frr-nexthop-grouping;
}

/*
* Agument weight attributes to nexthop group.
*/
augment "/frr-nexthop-group/nexthop-group/frr-nexthops/nexthop" {
leaf weight {
type uint8;
description
"Weight to be used by the nexthop for purposes of ECMP";
}
}
}