blob: e3fecb63d60b551b419b9e736eb2bdda55f572fa [file] [log] [blame]
module l3vpn-svc-ext {
yang-version 1;
namespace "urn:ietf:params:xml:ns:yang:l3vpn:svc:ext";
prefix "l3vpn-svc-ext";
import ietf-inet-types { prefix inet; }
import ietf-l3vpn-svc { prefix l3vpn; }
revision 2016-07-30 {
description
"Eliminated warnings";
}
revision "2016-07-20" {
description "Initial revision of extended l3vpn yang model";
}
typedef short-as-number {
type inet:as-number {
range 0..65535;
}
}
typedef route-distinguisher {
reference "https://tools.ietf.org/html/rfc4364#section-4.2";
type union {
type rd-ipv4;
type rd-as;
type rd-as2;
}
}
typedef rd-ipv4 {
type string {
/* IPv4 : 2B number */
pattern '((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))'
+ ':'
+ '([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
+ '[1-5][0-9][0-9][0-9][0-9]|6[0-4][0-9][0-9][0-9]|'
+ '65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5])';
}
}
typedef rd-as {
type string {
/* 2B AS : 4B number */
pattern '([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
+ '[1-5][0-9][0-9][0-9][0-9]|6[0-4][0-9][0-9][0-9]|'
+ '65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5])'
+ ':'
+ '([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
+ '[1-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9]|'
+ '[1-9][0-9][0-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
+ '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|[1-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
+ '4[0-1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|42[0-8][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
+ '429[0-3][0-9][0-9][0-9][0-9][0-9][0-9]|4294[0-8][0-9][0-9][0-9][0-9][0-9]|'
+ '42949[0-5][0-9][0-9][0-9][0-9]|429496[0-6][0-9][0-9][0-9]|4294967[0-1][0-9][0-9]|'
+ '42949672[0-8][0-9]|429496729[0-5])';
}
}
typedef rd-as2 {
type string {
/* 4B AS : 2B number */
pattern '([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
+ '[1-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9]|'
+ '[1-9][0-9][0-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
+ '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|[1-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
+ '4[0-1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|42[0-8][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
+ '429[0-3][0-9][0-9][0-9][0-9][0-9][0-9]|4294[0-8][0-9][0-9][0-9][0-9][0-9]|'
+ '42949[0-5][0-9][0-9][0-9][0-9]|429496[0-6][0-9][0-9][0-9]|4294967[0-1][0-9][0-9]|'
+ '42949672[0-8][0-9]|429496729[0-5])'
+ ':'
+ '([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
+ '[1-5][0-9][0-9][0-9][0-9]|6[0-4][0-9][0-9][0-9]|'
+ '65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5])';
}
}
identity tc-demanded-tunnel {
base l3vpn:transport-constraint;
description "on-demand tunnel.";
}
grouping class-profile {
list qos-class {
key class-id;
leaf class-id {
type string;
description
"Identification of the
class of service.
This identifier is internal to
the administration.";
}
leaf rate-limit {
type uint8;
units percent;
description
"To be used if class must
be rate
limited. Expressed as
percentage of the svc-bw.";
}
leaf priority-level {
type uint8;
description
"Defines the level of the
class in
term of priority queueing.
The higher the level is the
higher
is the priority.";
}
leaf guaranteed-bw-percent {
type uint8;
units percent;
description
"To be used to define the
guaranteed
BW in percent of the svc-bw
available at the priority-level.";
}
description
"List of class of services.";
}
}
augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:service/l3vpn:qos/l3vpn:qos-profile/l3vpn:qos-profile" {
case custom-unicom {
container inbound-classes {
uses class-profile;
}
container outbound-classes {
uses class-profile;
}
}
}
grouping bearer-attachment-grouping {
container bearer-attachment {
leaf pe-name {
type string;
}
leaf pe-mgmt-ip {
type inet:ipv4-address;
}
description "attached PE";
}
}
augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:bearer" {
uses bearer-attachment-grouping;
}
grouping requested-type-grouping {
container requested-type-profile {
choice requested-type-choice {
case dot1q-case {
container dot1q {
leaf physical-if {
description "physical interface name.";
type string;
}
leaf vlan-id {
type uint16 {
range "1..4096";
}
}
}
}
case physical-case {
container physical {
leaf physical-if {
description "physical interface name.";
type string;
}
}
}
}
leaf circuit-id {
description "circuit description for PE-CE port.";
type string;
}
}
}
augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:bearer/l3vpn:requested-type" {
uses requested-type-grouping;
}
grouping bfd-grouping {
leaf bfd-enabled {
type boolean;
description
"BFD activation";
}
choice holdtime {
case profile {
leaf profile-name {
type string;
description
"Service provider well
known profile.";
}
description
"Service provider well
known profile.";
}
case fixed {
leaf fixed-value {
type uint32;
units msec;
description
"Expected holdtime
expressed
in msec.";
}
}
case dynamic {
container dynamic-value {
leaf interval {
type uint16;
units msec;
default 500;
}
leaf multiplier {
type uint16;
default 3;
}
description
"interval * multiplier is
timeout value.";
}
}
}
}
grouping bgp-profile {
leaf as-override {
type boolean;
default false;
}
container soo {
leaf soo-enabled {
type boolean;
}
leaf soo-value {
type string;
}
}
container password {
leaf password-enabled {
type boolean;
}
leaf password-value {
type string;
}
}
container bgp-timer {
leaf keep-alive {
type uint16;
default 60;
units "seconds";
}
leaf hold-time {
type uint16;
default 180;
units "seconds";
}
}
container bfd {
uses bfd-grouping;
}
}
augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:routing-protocols/l3vpn:routing-protocol/l3vpn:bgp" {
uses bgp-profile;
}
augment "/l3vpn:l3vpn-svc/l3vpn:vpn-services/l3vpn:vpn-svc/l3vpn:transport-constraints/l3vpn:unicast-transport-constraints/l3vpn:constraint/l3vpn:constraint-list" {
leaf constraint-opaque-value2 {
type string;
description
"Opaque value that can be used to
specify constraint parameters.";
}
}
grouping route-ipv4-extended-community {
reference "http://tools.ietf.org/html/rfc4360";
leaf global-administrator {
type inet:ipv4-address;
}
leaf local-administrator {
type uint16;
}
}
grouping extended-community {
choice extended-community {
reference "http://tools.ietf.org/html/rfc4360#section-4";
default route-target-extended-community-case;
case route-target-extended-community-case {
container route-target-extended-community {
leaf global-administrator {
type short-as-number;
}
leaf local-administrator {
type uint32;
}
}
}
case route-target-ipv4-case {
container route-target-ipv4 {
uses route-ipv4-extended-community;
}
}
case route-target-extended-community-case2 {
container route-target-extended-community2 {
leaf global-administrator {
type uint32;
}
leaf local-administrator {
type uint16;
}
}
}
}
}
grouping rdrt-profile {
choice site-role {
case custom-case {
container custom {
list import-rt {
key imrt-id;
leaf imrt-id {
type string;
}
uses extended-community;
}
list export-rt {
key exrt-id;
leaf exrt-id {
type string;
}
uses extended-community;
}
leaf rd {
type route-distinguisher;
}
}
}
}
}
augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:vpn-attachment" {
uses rdrt-profile;
}
}