draft-ietf-bess-evpn-yang-00.txt   draft-ietf-bess-evpn-yang-01.txt 
BESS Working Group P. Brissette BESS Working Group P. Brissette
A.Sajassi
Internet Draft Cisco System Internet Draft Cisco System
Intended Status: Proposed Standard H. Shah Intended Status: Proposed Standard H. Shah
Expires: December 25, 2016 Ciena Corporation Expires: January 9, 2017 Ciena Corporation
Z. Li Z. Li
Huawei Technologies Huawei Technologies
I. Chen I. Chen
Ericsson Ericsson
K. Tiruveedhula K. Tiruveedhula
Juniper Networks Juniper Networks
I. Hussain I. Hussain
Infinera Corporation Infinera Corporation
J. Rabadan J. Rabadan
Nokia Nokia
June 23, 2016 July 8, 2016
Yang Data Model for EVPN Yang Data Model for EVPN
draft-ietf-bess-evpn-yang-00 draft-ietf-bess-evpn-yang-01
Abstract Abstract
This document describes a YANG data model for Ethernet VPN services. This document describes a YANG data model for Ethernet VPN services.
The model is agnostic of the underlay. It apply to MPLS as well as to The model is agnostic of the underlay. It apply to MPLS as well as to
VxLAN encapsulation. The model is also agnostic of the services VxLAN encapsulation. The model is also agnostic of the services
including E-LAN, E-LINE and E-TREE services. Any "add-on" features including E-LAN, E-LINE and E-TREE services. Any "add-on" features
such as EVPN IRB, EVPN overlay, etc. are for future investigation. such as EVPN IRB, EVPN overlay, etc. are for future investigation.
This document mainly focuses on EVPN and Ethernet-Segment instance This document mainly focuses on EVPN and Ethernet-Segment instance
framework. framework.
skipping to change at page 3, line 24 skipping to change at page 3, line 24
(EVPN) [RFC7432], Provider Backbone Bridging Combined with Ethernet (EVPN) [RFC7432], Provider Backbone Bridging Combined with Ethernet
VPN (PBB-EVPN) [RFC7623] as well as other WG draft such as EVPN-VPWS, VPN (PBB-EVPN) [RFC7623] as well as other WG draft such as EVPN-VPWS,
etc... The EVPN services runs over MPLS and VxLAN underlay. etc... The EVPN services runs over MPLS and VxLAN underlay.
The Yang data model in this document defines Ethernet VPN based The Yang data model in this document defines Ethernet VPN based
services. The model will leverage the definitions used in other IETF services. The model will leverage the definitions used in other IETF
Yang draft such as L2VPN Yang. Yang draft such as L2VPN Yang.
The goal is to propose a data object model consisting of building The goal is to propose a data object model consisting of building
blocks that can be assembled in different order to realize different blocks that can be assembled in different order to realize different
services. The definition work is undertaken initially by a smaller EVPN-based services. The definition work is undertaken initially by a
working group with members representing various vendors and service smaller working group with members representing various vendors and
providers. The EVPN basic framework consist of two modules: EVPN and service providers. The EVPN basic framework consist of two modules:
Ethernet-Segment. These models are completely orthogonal. They EVPN and Ethernet-Segment. These models are completely orthogonal.
usually work in pair but user can definitely use one or the other for They usually work in pair but user can definitely use one or the
its own need. other for its own need.
The data model is defined for following constructs that are used for The data model is defined for following constructs that are used for
managing the services: managing the services:
o Configuration o Configuration
o Operational State o Operational State
o Executables (Actions) o Executables (Actions)
skipping to change at page 4, line 6 skipping to change at page 4, line 6
The EVPN data object model defined in this document uses the instance The EVPN data object model defined in this document uses the instance
centric approach whereby EVPN service attributes are specified for a centric approach whereby EVPN service attributes are specified for a
given EVPN instance. given EVPN instance.
The Ethernet-Segment data object model defined in this document refer The Ethernet-Segment data object model defined in this document refer
to a specific interface. That interface can be a physical interface, to a specific interface. That interface can be a physical interface,
a bundle interface or virtual interface. The latter includes a bundle interface or virtual interface. The latter includes
pseudowires. The purpose of creating a separate module is due to the pseudowires. The purpose of creating a separate module is due to the
fact that it can be used without having the need to have EVPN fact that it can be used without having the need to have EVPN
configured in layer 2 service. For example, an access node can be configured as layer 2 service. For example, an access node can be
dual-homed to two service nodes servicing a VPLS core. The access dual-homed to two service nodes servicing a VPLS core. The access
connectivity can be represented by an Ethernet-Segment where EVPN BGP connectivity can be represented by an Ethernet-Segment where EVPN BGP
DF election is performed over both service nodes. The core remains DF election is performed over both service nodes. The core remains
VPLS. and no EVPN instance is being used here. VPLS where no EVPN instance is required.
2. Specification of Requirements 2. Specification of Requirements
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL"
in this document are to be interpreted as described in [RFC2119]. in this document are to be interpreted as described in [RFC2119].
3. EVPN YANG Model 3. EVPN YANG Model
3.1. Overview 3.1. Overview
skipping to change at page 4, line 37 skipping to change at page 4, line 36
first one has common attributes to all VPNs where as the latter has first one has common attributes to all VPNs where as the latter has
attributes specific to an EVI. This document state the scope of the attributes specific to an EVI. This document state the scope of the
EVPN object models definition. The following documents are within the EVPN object models definition. The following documents are within the
scope. This is not an exhaustive list but a representation of scope. This is not an exhaustive list but a representation of
documents that are covered for this work: documents that are covered for this work:
o Requirements for EVPN: RFC 7209 o Requirements for EVPN: RFC 7209
o EVPN: RFC 7432 o EVPN: RFC 7432
o PBB-EVPN: RFC 7623 o PBB-EVPN: RFC 7623
The integration with L2VPN instance Yang model is left for future The integration with L2VPN instance Yang model is being done as part
study. Following documents will be covered at that time: of the L2VPN Yang model.
Following documents will be covered at that time:
o VPWS support in EVPN: o VPWS support in EVPN:
draft-ietf-bess-evpn-vpws-00 draft-ietf-bess-evpn-vpws
o E-TREE Support in EVPN & PBB-EVPN: o E-TREE Support in EVPN & PBB-EVPN:
draft-ietf-bess-evpn-etree-02 draft-ietf-bess-evpn-etree
o (PBB-)EVPN Seamless Integration with (PBB-)VPLS: o (PBB-)EVPN Seamless Integration with (PBB-)VPLS:
draft-ietf-bess-evpn-vpls-seamless-integ-00 draft-ietf-bess-evpn-vpls-seamless-integ
o EVPN Virtual Ethernet Segment: o EVPN Virtual Ethernet Segment:
draft-sajassi-bess-evpn-virtual-eth-segment-00 draft-sajassi-bess-evpn-virtual-eth-segment
The VxLAN aspect and the work related to Layer 3 is also for future The VxLAN aspect and the work related to Layer 3 is also for future
definition. Following documents will be covered at that time: definition. Following documents will be covered at that time:
o IP Prefix Advertisement in EVPN: o IP Prefix Advertisement in EVPN:
draft-ietf-bess-evpn-prefix-advertisement-02 draft-ietf-bess-evpn-prefix-advertisement
o VXLAN DCI Using EVPN: o VXLAN DCI Using EVPN:
draft-boutros-l2vpn-vxlan-evpn draft-boutros-l2vpn-vxlan-evpn
o A Network Virtualization Overlay Solution using EVPN: o A Network Virtualization Overlay Solution using EVPN:
draft-ietf-bess-evpn-overlay-00 draft-ietf-bess-evpn-overlay-
o Interconnect Solution for EVPN Overlay networks: o Interconnect Solution for EVPN Overlay networks:
draft-ietf-bess-dci-evpn-overlay-00 draft-ietf-bess-dci-evpn-overlay
o Integrated Routing and Bridging in EVPN: o Integrated Routing and Bridging in EVPN:
draft-ietf-bess-evpn-inter-subnet-forwarding-00 draft-ietf-bess-evpn-inter-subnet-forwarding
3.2 Ethernet-Segment Model 3.2 Ethernet-Segment Model
The Ethernet-Segment data model has a list of ES where each refer to The Ethernet-Segment data model has a list of ES where each refer to
an interface. All attributes are optional due to auto-sensing default an interface. All attributes are optional due to auto-sensing default
mode where all values are auto-derive from the network connectivity. mode where all values are auto-derive from the network connectivity.
module: ietf-ethernet-segment module: ietf-ethernet-segment
+--rw ethernet-segments +--rw ethernet-segments
+--rw ethernet-segment* [name] | +--rw ethernet-segment* [name]
+--rw name string | +--rw name string
+--rw esi? empty | +--rw (ac-or-pw)?
+--rw (active-mode) | | +--:(ac)
| +--:(single-active) | | | +--rw ac? string
| | +--rw single-active-mode? empty | | +--:(pw)
| +--:(all-active) | | +--rw pw? string
| +--rw all-active-mode? empty | +--rw ethernet-segment-identifier? uint32
+--rw bgp-parameters | +--rw (active-mode)
| +--rw common | | +--:(single-active)
| +--rw route-distinguisher? string | | | +--rw single-active-mode? empty
| +--rw vpn-targets* [rt-value] | | +--:(all-active)
| +--rw rt-value string | | +--rw all-active-mode? empty
| +--rw rt-type bgp-rt-type | +--rw pbb-parameters {ethernet-segment-pbb-params}?
+--rw df-election | | +--rw backbone-src-mac? yang:mac-address
+--rw (df-election-method)? | +--rw bgp-parameters
| +--:(highest-random-weight) | | +--rw common
| +--rw enable-hrw? empty | | +--rw rd-rt* [route-distinguisher]
+--rw election-wait-time? uint32 | | +--rw route-distinguisher string
| | +--rw vpn-target* [rt-value]
| | +--rw rt-value string
| | +--rw rt-type bgp-rt-type
| +--rw df-election
| | +--rw (df-election-method)?
| | | +--:(highest-random-weight)
| | | +--rw hrw? boolean
| | +--rw election-wait-time? uint32
| +--rw ead-evi-route? boolean
+--ro ethernet-segments-state
+--ro ethernet-segment-state* [name]
+--ro name string
+--ro service-type? string
+--ro status? status-type
+--ro (ac-or-pw)?
| +--:(ac)
| | +--ro ac? string
| +--:(pw)
| +--ro pw? string
+--ro interface-status? status-type
+--ro ethernet-segment-identifier? uint32
+--ro active-mode? string
+--ro pbb-parameters {ethernet-segment-pbb-params}?
| +--ro backbone-src-mac? yang:mac-address
+--ro bgp-parameters
| +--ro common
| +--ro rd-rt* [route-distinguisher]
| +--ro route-distinguisher string
| +--ro vpn-target* [rt-value]
| +--ro rt-value string
| +--ro rt-type bgp-rt-type
+--ro df-election
| +--ro hrw-enabled? boolean
| +--ro election-wait-time? uint32
+--ro ead-evi-route-enabled? boolean
+--ro esi-label? string
+--ro member*
| +--ro ip-address? inet:ip-address
+--ro df*
+--ro service-identifier? uint32
+--ro vlan? uint32
+--ro ip-address? inet:ip-address
3.3 EVPN Model 3.3 EVPN Model
The evpn-instances container contains a list of evpn-instance. The evpn-instances container contains a list of evpn-instance.
Each entry of the evpn-instance represents a different Ethernet VPN Each entry of the evpn-instance represents a different Ethernet VPN
and it is represented by a EVI. Again, mainly all attributes are and it is represented by a EVI. Again, mainly all attributes are
optional for the same reason as for the ethernet-segment module. optional for the same reason as for the Ethernet-Segment module.
module: ietf-evpn module: ietf-evpn
+--rw evpn +--rw evpn
+--rw common +--rw common
| +--rw (replication-type)? | +--rw (replication-type)?
| +--:(ingress-replication) | +--:(ingress-replication)
| | +--rw ingress-replication? boolean | | +--rw ingress-replication? boolean
| +--:(p2mp-replication) | +--:(p2mp-replication)
| +--rw p2mp-replication? boolean | +--rw p2mp-replication? boolean
+--rw evpn-instances +--rw evpn-instances
+--rw evpn-instance* [name] | +--rw evpn-instance* [name]
+--rw name string | +--rw name string
+--rw evi? uint32 | +--rw evi? uint32
+--rw source-bmac? yang:hex-string | +--rw pbb-parameters {evpn-pbb-params}?
+--rw evpn-arp-proxy? boolean | | +--rw source-bmac? yang:hex-string
+--rw nd-arp-proxy? boolean | +--rw bgp-parameters
+--rw bgp-parameters | | +--rw common
+--rw common | | +--rw rd-rt* [route-distinguisher]
+--rw route-distinguisher? string | | +--rw route-distinguisher string
+--rw vpn-targets* [rt-value] | | +--rw vpn-target* [rt-value]
+--rw rt-value string | | +--rw rt-value string
+--rw rt-type bgp-rt-type | | +--rw rt-type bgp-rt-type
| +--rw arp-proxy? boolean
| +--rw arp-suppression? boolean
| +--rw nd-proxy? boolean
| +--rw nd-suppression? boolean
| +--rw underlay-multicast? boolean
| +--rw flood-unknown-unicast-supression? boolean
+--ro evpn-instances-state
+--ro evpn-instance-state*
+--ro name? string
+--ro evi? uint32
+--ro pbb-parameters
| +--ro source-bmac? yang:hex-string
+--ro bgp-parameters
| +--ro common
| +--ro rd-rt* [route-distinguisher]
| +--ro route-distinguisher string
| +--ro vpn-target* [rt-value]
| +--ro rt-value string
| +--ro rt-type bgp-rt-type
+--ro advertise-mac-suppression-enabled? boolean
+--ro arp-proxy-enabled? boolean
+--ro arp-suppression-enabled? boolean
+--ro nd-proxy-enabled? boolean
+--ro nd-suppression-enabled? boolean
+--ro underlay-multicast-enabled? boolean
+--ro flood-unknown-unicast-suppression-enabled? boolean
+--ro routes
| +--ro ethernet-auto-discovery-route*
| | +--ro rd-rt* [route-distinguisher]
| | | +--ro route-distinguisher string
| | | +--ro vpn-target* [rt-value]
| | | +--ro rt-value string
| | +--ro ethernet-segment-identifier? uint32
| | +--ro ethernet-tag? uint32
| | +--ro path*
| | +--ro next-hop? inet:ip-address
| | +--ro label? mpls:mpls-label
| | +--ro detail
| | +--ro attributes
| | | +--ro extended-community* string
| | +--ro bestpath? empty
| +--ro mac-ip-advertisement-route*
| | +--ro rd-rt* [route-distinguisher]
| | | +--ro route-distinguisher string
| | | +--ro vpn-target* [rt-value]
| | | +--ro rt-value string
| | +--ro ethernet-segment-identifier? uint32
| | +--ro ethernet-tag? uint32
| | +--ro mac-address? yang:hex-string
| | +--ro mac-address-length? uint8
| | +--ro ip-prefix? inet:ip-prefix
| | +--ro path*
| | +--ro next-hop? inet:ip-address
| | +--ro label? mpls:mpls-label
| | +--ro label2? mpls:mpls-label
| | +--ro detail
| | +--ro attributes
| | | +--ro extended-community* string
| | +--ro bestpath? empty
| +--ro inclusive-multicast-ethernet-tag-route*
| | +--ro rd-rt* [route-distinguisher]
| | | +--ro route-distinguisher string
| | | +--ro vpn-target* [rt-value]
| | | +--ro rt-value string
| | +--ro ethernet-segment-identifier? uint32
| | +--ro originator-ip-prefix? inet:ip-prefix
| | +--ro path*
| | +--ro next-hop? inet:ip-address
| | +--ro label? mpls:mpls-label
| | +--ro detail
| | +--ro attributes
| | | +--ro extended-community* string
| | +--ro bestpath? empty
| +--ro ethernet-segment-route*
| | +--ro rd-rt* [route-distinguisher]
| | | +--ro route-distinguisher string
| | | +--ro vpn-target* [rt-value]
| | | +--ro rt-value string
| | +--ro ethernet-segment-identifier? uint32
| | +--ro originator-ip-prefix? inet:ip-prefix
| | +--ro path*
| | +--ro next-hop? inet:ip-address
| | +--ro detail
| | +--ro attributes
| | | +--ro extended-community* string
| | +--ro bestpath? empty
| +--ro ip-prefix-route*
| +--ro rd-rt* [route-distinguisher]
| | +--ro route-distinguisher string
| | +--ro vpn-target* [rt-value]
| | +--ro rt-value string
| +--ro ethernet-segment-identifier? uint32
| +--ro ip-prefix? inet:ip-prefix
| +--ro path*
| +--ro next-hop? inet:ip-address
| +--ro label? mpls:mpls-label
| +--ro detail
| +--ro attributes
| | +--ro extended-community* string
| +--ro bestpath? empty
+--ro statistics
+--ro tx-count? uint32
+--ro rx-count? uint32
+--ro detail
+--ro broadcast-tx-count? uint32
+--ro broadcast-rx-count? uint32
+--ro multicast-tx-count? uint32
+--ro multicast-rx-count? uint32
+--ro unicast-tx-count? uint32
+--ro unicast-rx-count? uint32
4. YANG Module 4. YANG Module
The EVPN configuration container is logically divided into The EVPN configuration container is logically divided into
following high level config areas: following high level config areas:
4.1 Ethernet Segment Yang Module 4.1 Ethernet Segment Yang Module
<CODE BEGINS> file "ietf-ethernet-segment@2016-06-23.yang" <CODE BEGINS> file "ietf-ethernet-segment@2016-07-08.yang"
module ietf-ethernet-segment { module ietf-ethernet-segment {
namespace "urn:ietf:params:xml:ns:yang:ietf-ethernet-segment"; namespace "urn:ietf:params:xml:ns:yang:ietf-ethernet-segment";
prefix "es"; prefix "es";
import ietf-yang-types {
prefix "yang";
}
import ietf-evpn { import ietf-evpn {
prefix "evpn"; prefix "evpn";
}
import ietf-inet-types {
prefix "inet";
} }
organization "ietf"; organization "ietf";
contact "ietf"; contact "ietf";
description "ethernet segment"; description "ethernet segment";
revision "2016-07-08" {
description " - Added the configuration option to enable or " +
" disable per-EVI/EAD route " +
" - Added PBB parameter backbone-src-mac " +
" - Added operational state branch, initially " +
" to match the configuration branch" +
"";
reference "";
}
revision "2016-06-23" { revision "2016-06-23" {
description "WG document adoption"; description "WG document adoption";
reference ""; reference "";
} }
revision "2015-10-15" { revision "2015-10-15" {
description "Initial revision"; description "Initial revision";
reference ""; reference "";
}
/* Features */
feature ethernet-segment-bgp-params {
description "Ethernet segment's BGP parameters";
}
feature ethernet-segment-pbb-params {
description "Ethernet segment's PBB parameters";
}
/* Typedefs */
typedef status-type {
type enumeration {
enum up {
description "Status is up";
}
enum down {
description "Status is down";
}
}
description "status type";
} }
/* EVPN Ethernet Segment YANG Model */ /* EVPN Ethernet Segment YANG Model */
container ethernet-segments { container ethernet-segments {
description "ethernet-segment"; description "ethernet-segment";
list ethernet-segment { list ethernet-segment {
key "name"; key "name";
leaf name { leaf name {
type string; type string;
description "Name of the ethernet segment"; description "Name of the ethernet segment";
} }
leaf esi { choice ac-or-pw {
type empty; description "ac-or-pw";
description "esi"; case ac {
leaf ac {
type string;
description "Eventual reference to standard " +
"attachment circuit definition";
}
}
case pw {
leaf pw {
type string;
description "Eventual reference to standard " +
"pseudowire definition";
}
}
}
leaf ethernet-segment-identifier {
type uint32;
description "Ethernet segment identifier (esi)";
} }
choice active-mode { choice active-mode {
mandatory true; mandatory true;
description "Choice of active mode"; description "Choice of active mode";
case single-active { case single-active {
leaf single-active-mode { leaf single-active-mode {
type empty; type empty;
description "single-active-mode"; description "single-active-mode";
} }
} }
case all-active { case all-active {
leaf all-active-mode { leaf all-active-mode {
type empty; type empty;
description "all-active-mode"; description "all-active-mode";
} }
} }
} }
uses evpn:bgp-parameters-grp; container pbb-parameters {
if-feature ethernet-segment-pbb-params;
description "PBB configuration";
leaf backbone-src-mac {
type yang:mac-address;
description "backbone-src-mac, only if this is a PBB";
}
}
uses evpn:bgp-parameters-grp {
if-feature ethernet-segment-bgp-params;
}
container df-election { container df-election {
description "df-election"; description "df-election";
choice df-election-method { choice df-election-method {
description "Choice of df election method"; description "Choice of df election method";
case highest-random-weight { case highest-random-weight {
leaf enable-hrw { leaf hrw {
type empty; type boolean;
description "enable-hrw"; description "Enable (TRUE) or disable (FALSE) " +
"highest random weight";
} }
} }
} }
leaf election-wait-time { leaf election-wait-time {
type uint32; type uint32;
description "election-wait-time"; description "election-wait-time";
}
}
leaf ead-evi-route {
type boolean;
default false;
description "Enable (true) or disable (false) ead-evi-route";
}
description "An ethernet segment";
}
}
container ethernet-segments-state {
config false;
description "Ethernet segmet operational state";
list ethernet-segment-state {
key "name";
leaf name {
type string;
description "Name of the ethernet segment";
}
leaf service-type {
type string;
description "service-type";
}
leaf status {
type status-type;
description "Ethernet segment status";
}
choice ac-or-pw {
description "ac-or-pw";
case ac {
leaf ac {
type string;
description "Name of attachment circuit";
}
}
case pw {
leaf pw {
type string;
description "Name of pseudowire";
}
}
}
leaf interface-status {
type status-type;
description "interface status";
}
leaf ethernet-segment-identifier {
type uint32;
description "Ethernet segment identifier (esi)";
}
leaf active-mode {
type string;
description "Single-active-mode/all-active-mode";
}
container pbb-parameters {
if-feature "ethernet-segment-pbb-params";
description "PBB configuration";
leaf backbone-src-mac {
type yang:mac-address;
description "backbone-src-mac, only if this is a PBB";
} }
}
uses evpn:bgp-parameters-grp {
if-feature ethernet-segment-bgp-params;
}
container df-election {
description "df-election";
leaf hrw-enabled {
type boolean;
description "hrw-enabled is enabled (TRUE) " +
"or disabled (FALSE)";
}
leaf election-wait-time {
type uint32;
description "election-wait-time";
}
}
leaf ead-evi-route-enabled {
type boolean;
description "ead-evi-route is enabled (TRUE) " +
"or disabled (FALSE)";
}
leaf esi-label {
type string;
description "esi-label";
}
list member {
leaf ip-address {
type inet:ip-address;
description "ip-address";
}
description "member of the ethernet segment";
}
list df {
leaf service-identifier {
type uint32;
description "service-identifier";
}
leaf vlan {
type uint32;
description "vlan";
}
leaf ip-address {
type inet:ip-address;
description "ip-address";
}
description "df of an evpn instance's vlan";
} }
description "An ethernet segment"; description "An ethernet segment";
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4.2 EVPN Yang Module 4.2 EVPN Yang Module
<CODE BEGINS> file "ietf-evpn@2016-06-23.yang" <CODE BEGINS> file "ietf-evpn@2016-07-08.yang"
module ietf-evpn { module ietf-evpn {
namespace "urn:ietf:params:xml:ns:yang:ietf-evpn"; namespace "urn:ietf:params:xml:ns:yang:ietf-evpn";
prefix "evpn"; prefix "evpn";
import ietf-inet-types {
prefix "inet";
}
import ietf-mpls {
prefix "mpls";
}
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
} }
organization "ietf"; organization "ietf";
contact "ietf"; contact "ietf";
description "evpn"; description "evpn";
revision "2016-07-08" {
description " - Added operational state" +
" - Added a configuration knob to enable/disable " +
" underlay-multicast " +
" - Added a configuration knob to enable/disable " +
" flooding of unknonw unicast " +
" - Added several configuration knobs " +
" to manage ARP and ND" +
"";
reference "";
}
revision "2016-06-23" { revision "2016-06-23" {
description "WG document adoption"; description "WG document adoption";
reference ""; reference "";
} }
revision "2015-10-15" { revision "2015-10-15" {
description "Initial revision"; description "Initial revision";
reference ""; reference "";
} }
feature evpn-bgp-params {
description "EVPN's BGP parameters";
}
feature evpn-pbb-params {
description "EVPN's PBB parameters";
}
/* Typedefs */ /* Typedefs */
typedef bgp-rt-type { typedef bgp-rt-type {
type enumeration { type enumeration {
enum import { enum import {
description "For import"; description "For import";
} }
enum export { enum export {
description "For export"; description "For export";
} }
skipping to change at page 9, line 4 skipping to change at page 16, line 29
type enumeration { type enumeration {
enum import { enum import {
description "For import"; description "For import";
} }
enum export { enum export {
description "For export"; description "For export";
} }
enum both { enum both {
description "For both import and export"; description "For both import and export";
} }
} }
description "BGP route-target type. Import from BGP YANG"; description "BGP route-target type. Import from BGP YANG";
} }
/* Groupings */ /* Groupings */
grouping bgp-rd-grp {
description "BGP RD grouping";
leaf route-distinguisher {
type string;
description "BGP RD";
}
}
grouping bgp-rd-rt-grp {
description "BGP RD-RT grouping";
list rd-rt {
key "route-distinguisher";
leaf route-distinguisher {
type string;
description "BGP RD";
}
list vpn-target {
key "rt-value";
leaf rt-value {
type string;
description "BGP route target";
}
description "List of route targets";
}
description "List of RD";
}
}
grouping bgp-parameters-grp { grouping bgp-parameters-grp {
description "BGP parameters grouping"; description "BGP parameters grouping";
container bgp-parameters { container bgp-parameters {
description "BGP parameters"; description "BGP parameters";
container common { container common {
description "Common BGP parameters"; description "Common BGP parameters";
uses bgp-rd-rt-grp {
leaf route-distinguisher { refine "rd-rt" {
type string; max-elements 1;
description "BGP RD";
}
list vpn-targets {
key rt-value;
description "Route Targets";
leaf rt-value {
type string;
description "Route-Target value";
} }
leaf rt-type { augment "rd-rt/vpn-target" {
type bgp-rt-type; description "Add type of RT";
mandatory true; leaf rt-type {
description "Type of RT"; type bgp-rt-type;
mandatory true;
description "Type of RT";
}
} }
} }
} }
} }
} }
grouping common-route-parameters-grp {
description "common-route-parameters-grp";
uses bgp-rd-rt-grp;
leaf ethernet-segment-identifier {
type uint32;
description "Ethernet segment identifier (esi)";
}
}
grouping next-hop-label-grp {
description "next-hop-label-grp";
leaf next-hop {
type inet:ip-address;
description "next-hop";
}
leaf label {
type mpls:mpls-label;
description "label";
}
}
grouping next-hop-label2-grp {
description "next-hop-label2-grp";
leaf label2 {
type mpls:mpls-label;
description "label2";
}
}
grouping path-detail-grp {
description "path-detail-grp";
container detail {
config false;
description "path details";
container attributes {
leaf-list extended-community {
type string;
description "extended-community";
}
description "attributes";
}
leaf bestpath {
type empty;
description "Indicate this path is the best path";
}
}
}
/* EVPN YANG Model */ /* EVPN YANG Model */
container evpn { container evpn {
description "evpn"; description "evpn";
container common { container common {
description "common epn attributes"; description "common epn attributes";
choice replication-type { choice replication-type {
description "A choice of replication type"; description "A choice of replication type";
case ingress-replication { case ingress-replication {
leaf ingress-replication { leaf ingress-replication {
skipping to change at page 10, line 17 skipping to change at page 19, line 19
description "p2mp-replication"; description "p2mp-replication";
} }
} }
} }
} }
container evpn-instances { container evpn-instances {
description "evpn-instances"; description "evpn-instances";
list evpn-instance { list evpn-instance {
key "name"; key "name";
description "An EVPN instance"; description "An EVPN instance";
leaf name {
type string;
description "Name of EVPN instance";
}
leaf evi {
type uint32;
description "evi";
}
container pbb-parameters {
if-feature "evpn-pbb-params";
description "PBB parameters";
leaf source-bmac {
type yang:hex-string;
description "source-bmac";
}
}
uses bgp-parameters-grp {
if-feature "evpn-bgp-params";
}
leaf arp-proxy {
type boolean;
default false;
description "Enable (TRUE) or disable (FALSE) ARP proxy";
}
leaf arp-suppression {
type boolean;
default false;
description "Enable (TRUE) or disable (FALSE) " +
"ARP suppression";
}
leaf nd-proxy {
type boolean;
default false;
description "Enable (TRUE) or disable (FALSE) ND proxy";
}
leaf nd-suppression {
type boolean;
default false;
description "Enable (TRUE) or disable (FALSE) " +
"ND suppression";
}
leaf underlay-multicast {
type boolean;
default false;
description "Enable (TRUE) or disable (FALSE) " +
"underlay multicast";
}
leaf flood-unknown-unicast-supression {
type boolean;
default false;
description "Enable (TRUE) or disable (FALSE) " +
"flood unknown unicast suppression";
}
}
}
container evpn-instances-state {
config false;
description "evpn-instances-state";
list evpn-instance-state {
description "The state of an EVPN instance";
leaf name { leaf name {
type string; type string;
description "Name of EVPN instance"; description "Name of EVPN instance";
} }
leaf evi { leaf evi {
type uint32; type uint32;
description "evi"; description "evi";
} }
leaf source-bmac { container pbb-parameters {
type yang:hex-string; if-feature "evpn-pbb-params";
description "source-bmac"; description "PBB parameters";
leaf source-bmac {
type yang:hex-string;
description "source-bmac";
}
} }
leaf evpn-arp-proxy { uses bgp-parameters-grp {
if-feature "evpn-bgp-params";
}
leaf advertise-mac-suppression-enabled {
type boolean; type boolean;
description "evpn-arp-proxy"; description "advertise-mac-suppression " +
"is enabled (TRUE) " +
"or disabled (FALSE)";
} }
leaf nd-arp-proxy { leaf arp-proxy-enabled {
type boolean; type boolean;
description "nd-arp-proxy"; description "arp-proxy is enabled (TRUE) " +
"or disabled (FALSE)";
} }
uses bgp-parameters-grp; leaf arp-suppression-enabled {
type boolean;
description "arp-suppression is enabled (TRUE) " +
"or disabled (FALSE)";
}
leaf nd-proxy-enabled {
type boolean;
description "nd-proxy is enabled (TRUE) " +
"or disabled (FALSE)";
}
leaf nd-suppression-enabled {
type boolean;
description "nd-suppression is enabled (TRUE) " +
"or disabled (FALSE)";
}
leaf underlay-multicast-enabled {
type boolean;
description "underlay-multicast is enabled (TRUE) " +
"or disabled (FALSE)";
}
leaf flood-unknown-unicast-suppression-enabled {
type boolean;
description "flood-unknown-unicast-suppression is " +
"enabled (TRUE) or disabled (FALSE)";
}
container routes {
description "routes";
list ethernet-auto-discovery-route {
uses common-route-parameters-grp;
leaf ethernet-tag {
type uint32;
description "An ethernet tag (etag) indentifying a " +
"broadcast domain";
}
list path {
uses next-hop-label-grp;
uses path-detail-grp;
description "path";
}
description "ethernet-auto-discovery-route";
}
list mac-ip-advertisement-route {
uses common-route-parameters-grp;
leaf ethernet-tag {
type uint32;
description "An ethernet tag (etag) indentifying a " +
"broadcast domain";
}
leaf mac-address {
type yang:hex-string;
description "Route mac address";
}
leaf mac-address-length {
type uint8 {
range "0..48";
}
description "mac address length";
}
leaf ip-prefix {
type inet:ip-prefix;
description "ip-prefix";
}
list path {
uses next-hop-label-grp;
uses next-hop-label2-grp;
uses path-detail-grp;
description "path";
}
description "mac-ip-advertisement-route";
}
list inclusive-multicast-ethernet-tag-route {
uses common-route-parameters-grp;
leaf originator-ip-prefix {
type inet:ip-prefix;
description "originator-ip-prefix";
}
list path {
uses next-hop-label-grp;
uses path-detail-grp;
description "path";
}
description "inclusive-multicast-ethernet-tag-route";
}
list ethernet-segment-route {
uses common-route-parameters-grp;
leaf originator-ip-prefix {
type inet:ip-prefix;
description "originator ip-prefix";
}
list path {
leaf next-hop {
type inet:ip-address;
description "next-hop";
}
uses path-detail-grp;
description "path";
}
description "ethernet-segment-route";
}
list ip-prefix-route {
uses common-route-parameters-grp;
leaf ip-prefix {
type inet:ip-prefix;
description "ip-prefix";
}
list path {
uses next-hop-label-grp;
uses path-detail-grp;
description "path";
}
description "ip-prefix route";
}
}
container statistics {
description "Statistics";
leaf tx-count {
type uint32;
description "transmission count";
}
leaf rx-count {
type uint32;
description "receive count";
}
container detail {
description "Detailed statistics";
leaf broadcast-tx-count {
type uint32;
description "broadcast transmission count";
}
leaf broadcast-rx-count {
type uint32;
description "broadcast receive count";
}
leaf multicast-tx-count {
type uint32;
description "multicast transmission count";
}
leaf multicast-rx-count {
type uint32;
description "multicast receive count";
}
leaf unicast-tx-count {
type uint32;
description "unicast transmission count";
}
leaf unicast-rx-count {
type uint32;
description "unicast receive count";
}
}
}
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
5. Security Considerations 5. Security Considerations
The configuration, state, action and notification data defined in The configuration, state, action and notification data defined in
this document are designed to be accessed via the NETCONF protocol this document are designed to be accessed via the NETCONF protocol
skipping to change at page 12, line 15 skipping to change at page 25, line 39
[RFC7623] Sajassi et al., "Provider Backbone Bridging [RFC7623] Sajassi et al., "Provider Backbone Bridging
Combined with Ethernet VPN (PBB-EVPN)", Combined with Ethernet VPN (PBB-EVPN)",
RFC 7623, September 2015 RFC 7623, September 2015
Authors' Addresses Authors' Addresses
Patrice Brissette Patrice Brissette
Cisco Systems, Inc. Cisco Systems, Inc.
EMail: pbrisset@cisco.com EMail: pbrisset@cisco.com
Ali Sajassi
Cisco Systems, Inc.
EMail: sajassi@cisco.com
Himanshu Shah Himanshu Shah
Ciena Corporation Ciena Corporation
EMail: hshah@ciena.com EMail: hshah@ciena.com
Zhenbin Li Zhenbin Li
Huawei Technologies Huawei Technologies
EMail: lizhenbin@huawei.com EMail: lizhenbin@huawei.com
Helen Chen Helen Chen
Ericsson Ericsson
 End of changes. 51 change blocks. 
87 lines changed or deleted 746 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/