< draft-zhang-nvo3-yang-cfg-05.txt   draft-zhang-nvo3-yang-cfg-06.txt >
INTERNET-DRAFT Mingui Zhang INTERNET-DRAFT B. Liu, Editor
Intended Status: Standards Track Yuan Gao Intended Status: Standards Track Huawei
Haibo Wang R. Chen
Bing Liu ZTE
Huawei F. Qin
Fu Qiao
China Mobile China Mobile
Expires: September 9, 2019 March 8, 2019 Expires: January 9, 2020 July 8, 2019
Base YANG Data Model for NVO3 Protocols Base YANG Data Model for NVO3 Protocols
draft-zhang-nvo3-yang-cfg-05.txt draft-zhang-nvo3-yang-cfg-06.txt
Abstract Abstract
This document describes the base YANG data model that can be used by This document describes the base YANG data model that can be used by
operators to configure and manage Network Virtualization Overlay operators to configure and manage Network Virtualization Overlay
protocols. The model is focused on the common configuration protocols. The model is focused on the common configuration
requirement of various encapsulation options, such as VXLAN, NVGRE, requirement of various encapsulation options, such as VXLAN, NVGRE,
GENEVE and VXLAN-GPE. Using this model as a starting point, GENEVE and VXLAN-GPE. Using this model as a starting point,
incremental work can be done to satisfy the requirement of a specific incremental work can be done to satisfy the requirement of a specific
encapsulation. encapsulation.
skipping to change at page 2, line 22 skipping to change at page 2, line 22
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Acronyms and Terminology . . . . . . . . . . . . . . . . . . . 3 2. Acronyms and Terminology . . . . . . . . . . . . . . . . . . . 3
2.1. Acronyms . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1. Acronyms . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3
3. The YANG Data Model for NVO3 . . . . . . . . . . . . . . . . . 3 3. The YANG Data Model for NVO3 . . . . . . . . . . . . . . . . . 3
3.1. The Configuration Parameters . . . . . . . . . . . . . . . 4 3.1 Mapping to the NVO3 architecture . . . . . . . . . . . . . . 4
3.1.1. NVE ID . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2. The Configuration Parameters . . . . . . . . . . . . . . . 4
3.1.2. Virtual Network Instance . . . . . . . . . . . . . . . 4 3.2.1. NVE as an interface . . . . . . . . . . . . . . . . . . 4
3.1.3. Flags in the Header . . . . . . . . . . . . . . . . . . 4 3.2.2. Virtual Network Instance . . . . . . . . . . . . . . . 5
3.1.4. BUM Mode . . . . . . . . . . . . . . . . . . . . . . . 4 3.2.3. BUM Mode . . . . . . . . . . . . . . . . . . . . . . . 5
3.2. Statistics . . . . . . . . . . . . . . . . . . . . . . . . 4 3.3. Statistics . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3. Model Structure . . . . . . . . . . . . . . . . . . . . . . 4 3.3. Model Structure . . . . . . . . . . . . . . . . . . . . . . 5
3.4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . 7 3.4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . 8
4. Security Considerations . . . . . . . . . . . . . . . . . . . . 26 4. Security Considerations . . . . . . . . . . . . . . . . . . . . 24
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 26 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 24
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . 27 6. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 24
6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 27 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 25
6.1. Normative References . . . . . . . . . . . . . . . . . . . 27 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.2. Informative References . . . . . . . . . . . . . . . . . . 27 8.1. Normative References . . . . . . . . . . . . . . . . . . . 25
Author's Addresses . . . . . . . . . . . . . . . . . . . . . . . . 29 8.2. Informative References . . . . . . . . . . . . . . . . . . 26
Author's Addresses . . . . . . . . . . . . . . . . . . . . . . . . 27
1. Introduction 1. Introduction
Network Virtualization Overlays (NVO3), such as VXLAN, NVGRE, GENEVE Network Virtualization Overlays (NVO3), such as VXLAN, NVGRE, GENEVE
and VXLAN-GPE, enable network virtualization for data center networks and VXLAN-GPE, enable network virtualization for data center networks
environment that assumes an IP-based underlay. environment that assumes an IP-based underlay.
YANG [RFC6020] is a data definition language that was introduced to YANG [RFC6020] is a data definition language that was introduced to
define the contents of a conceptual data store that allows networked define the contents of a conceptual data store that allows networked
devices to be managed using NETCONF [RFC6241]. This document devices to be managed using NETCONF [RFC6241]. This document
specifies a YANG data model that can be used to configure and manage specifies a YANG data model that can be used to configure and manage
NVO3 protocols. The model covers the configuration of NVO3 instances NVO3 protocols. The model covers the configuration of NVO3 instances
as well as their operation states, which are the basic common as well as their operation states, which are the basic common
requirements of the different tunnel encapsulations. Thus it is requirements of the different tunnel encapsulations. Thus it is
called "the base model for NVO3" in this document. called "the base model for NVO3" in this document.
As the Network Virtualization Overlay evolves, newly defined tunnel As the Network Virtualization Overlay evolves, newly defined tunnel
encapsulation may require extra configuration. For example, GENEVE encapsulation may require extra configuration. For example, GENEVE
may require configuration of TLVs at the NVE. The base model can be may require configuration of TLVs at the NVE. The base module can be
augmented to accommodate these new solutions. augmented to accommodate these new solutions.
2. Acronyms and Terminology 2. Acronyms and Terminology
2.1. Acronyms 2.1. Acronyms
NVO3: Network Virtualization Overlays NVO3: Network Virtualization Overlays
VNI: Virtual Network Instance VNI: Virtual Network Instance
BUM: Broadcast, Unknown Unicast, Multicast traffic BUM: Broadcast, Unknown Unicast, Multicast traffic
BUM: Broadcast, Unknown Unicast, Multicast traffic
2.2. Terminology 2.2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119]. document are to be interpreted as described in RFC 2119 [RFC2119].
Familiarity with [RFC7348], [RFC7364], [RFC7365] and [RFC8014] is Familiarity with [RFC7348], [RFC7364], [RFC7365] and [RFC8014] is
assumed in this document. assumed in this document.
3. The YANG Data Model for NVO3 3. The YANG Data Model for NVO3
The NVO3 base YANG model is divided in three containers. The first The NVO3 base YANG model defined in this document is used to
container contains writable parameters. The second container contains configure the NVEs. It is divided into three containers. The first
the writable enablers per VNI for the statistical operational states container contains the configuration of the virtual network
as well as the status of these enablers. The third container contains instances, e.g. the VNI, the NVE that the instance is mounted, the
the statistical operational states. peer NVEs which can be determined dynamically via a control plane or
given statically, and the statistical states of the instance. The
other two containers are separately the statistical states of the
peer NVEs and the tunnels.
3.1. The Configuration Parameters 3.1 Mapping to the NVO3 architecture
3.1.1. NVE ID The NVO3 base YANG model is defined according to the NVO3
architecture [RFC8014]. As shown in Figure 3.1, the reference model
of the NVE defined in [RFC8014], multiple instances can be mounted
under a NVE. The key of the instance is VNI. The source NVE of the
instance is the NVE configured by the base YANG. An instance can have
several peer NVEs. A NVO3 tunnel can be determined by the VNI, the
source NVE and the peer NVE. The tunnel can be built statically by
manually indicate the addresses of the peer NVEs, or dynamically via
a control plane, e.g. EVPN [RFC8365]. An enabler is defined in the
NVO3 base YANG to choose from these two modes.
The 'nves' list contains NVEs under the management. The NVE is | Data-Center Network (IP) |
identified using the 'srcAddr', which is the underlay IP address of | |
the NVE. +-----------------------------------------+
| |
| Tunnel Overlay |
+------------+---------+ +---------+------------+
| +----------+-------+ | | +-------+----------+ |
| | Overlay Module | | | | Overlay Module | |
| +---------+--------+ | | +---------+--------+ |
| | | | | |
NVE1 | | | | | | NVE2
| +--------+-------+ | | +--------+-------+ |
| | VNI1 VNI2 | | | | VNI1 VNI2 | |
| +-+----------+---+ | | +-+-----------+--+ |
| | VAP1 | VAP2 | | | VAP1 | VAP2|
+----+----------+------+ +----+-----------+-----+
| | | |
| | | |
| | | /|
-------+---------+-------------------+---------/-+-------
| | Tenant | / |
TSI1 |TSI2 | TSI3 TSI1 TSI2/ TSI3
+---+ +---+ +---+ +---+ +---+ +---+
|TS1| |TS2| |TS3| |TS4| |TS5| |TS6|
+---+ +---+ +---+ +---+ +---+ +---+
Figure 3.1. NVE Reference model in RFC 8014
3.1.2. Virtual Network Instance 3.2. The Configuration Parameters
3.2.1. NVE as an interface
A NVE in the NVO3 base YANG is defined via augmenting the IETF
interface YANG. If anycast gateway is enabled, the source VTEP
address is the address of the anycast gateway, and a bypass address
is used to uniquely identify the NVE. Otherwise, the source VTEP
address is the NVE interface's own IP address.
3.2.2. Virtual Network Instance
A Virtual Network Instance ('VNI') is a specific VN instance on an A Virtual Network Instance ('VNI') is a specific VN instance on an
NVE [RFC7365]. At each NVE, a Tenant System is connect to VNIs NVE [RFC7365]. At each NVE, a Tenant System is connect to VNIs
through Virtual Access Points (VAP). VAPs can be physical ports or through Virtual Access Points (VAP). VAPs can be physical ports or
virtual ports identified by the bridge domain Identifier ('bdId'). virtual ports identified by the bridge domain Identifier ('bdId').
The mapping between VNI and bdId is managed by the operator. The mapping between VNI and bdId is managed by the operator.
3.1.3. Flags in the Header As defined in [draft-ietf-bess-evpn-inter-subnet-forwarding], a
tenant can have multiple bridge domains, and each domain has its own
Flags in the NVO3 header are to be configured. For VxLAN, the I bit VNI. Thus these VNIs are used as L2VPN. Besides, a dedicated VNI can
of 'flag' MUST be set to 1 while other 7 bits are reserved and MUST be used for routing between the bridge domains, i.e. used as L3VPN.
be set to zero on transmission and ignored on receipt. For NVGRE, The mapping relationship between VNI and L2VPN (respectively, L3VPN)
bits in position 0 and 3 MUST be set to zero. The bit in position 2 is given by augmenting the IETF YANG of L2VPN (respectively L3VPN).
MUST be set to 1. Bits from position 4 through 12 are reserved and
MUST be set to zero on transmission and ignored on receipt.
3.1.4. BUM Mode 3.2.3. BUM Mode
An NVE SHOULD support either ingress replication, or multicast proxy, An NVE SHOULD support either ingress replication, or multicast proxy,
or point to multipoint tunnels on a per-VNI basis. It is possible or point to multipoint tunnels on a per-VNI basis. It is possible
that both modes be used simultaneously in one NVO3 network by that both modes be used simultaneously in one NVO3 network by
different NVEs. different NVEs.
If ingress replication is used, the receiver addresses are listed in If ingress replication is used, the receiver addresses are listed in
'peers'. If multicast proxy is used, the proxy's address is given in 'peers'. If multicast proxy [RFC8293] is used, the proxy's address is
"flood-proxy". If the choice is point to multipoint tunnels, the given in "flood-proxy". If the choice is point to multipoint tunnels,
multicast address is given as 'multiAddr'. the multicast address is given as 'multiAddr'.
3.2. Statistics 3.3. Statistics
Operators can determine whether a NVE should gather statistic values Operators can determine whether a NVE should gather statistic values
on a per-VNI base. The enablers are contained in the 'nvo3Info' list on a per-VNI basis. An enabler is contained in the 'static' list as
as 'statisticsEnable' leaf. 'statistic-enable' leaf. If the gathering for a VNI is enabled, the
statistical information about the local NVEs, the remote NVEs, the
If the gathering for a VNI is enabled, the statistical information flows and the MAC addresses will be collected by the NVEs in this
about the local NVEs, the remote NVEs, the flows and the MAC VNI.
addresses will be collected by the NVEs in this VNI.
3.3. Model Structure 3.3. Model Structure
module: ietf-nvo3-base module: ietf-nvo3
+--rw nov3 +--rw nvo3
+--rw common | +--rw vni-instances
| +--rw nvo3-enable? boolean | +--rw vni-instance* [vni-id]
+--rw nves | +--rw vni-id uint32
| +--rw nve* [if-name source-interface] | +--rw vni-mode enumeration
| +--rw if-name ifName | +--rw source-nve if:interface-ref
| +--rw vtep-ip? inet:ipv4-address-no-zone | +--rw protocol-bgp? boolean
| +--rw ipv6-vtep-ip? inet:ipv6-address-no-zone | +--ro status? vni-status-type
| +--rw source-interface ifName | +--rw static-ipv4-peers
| +--rw mac-address? yang:mac-address | | +--rw static-peer* [peer-ip]
| +--rw bypass-vtep-ip? inet:ipv4-address-no-zone | | +--rw peer-ip inet:ipv4-address-no-zone
| +--rw vni-members | | +--rw out-vni-id? uint32
| | +--rw vni-member* [vni-id] | +--rw static-ipv6-peers
| | +--rw vni-id uint32 | | +--rw static-ipv6-peer* [peer-ip]
| | +--rw protocol-bgp? protocolType | | +--rw peer-ip inet:ipv6-address-no-zone
| | +--rw peers | +--rw flood-proxys
| | | +--rw peer* [peer-ip] | | +--rw flood-proxy* [peer-ip]
| | | +--rw peer-ip inet:ipv4-address-no-zone | | +--rw peer-ip inet:ipv4-address-no-zone
| | | +--rw out-vni-id? uint32 | +--rw mcast-groups
| | | +--rw split-horizon-group? string | | +--rw mcast-group* [mcast-ip]
| | +--rw ipv6-peers | | +--rw mcast-ip inet:ipv4-address-no-zone
| | | +--rw ipv6-peer* [ipv6-peer-ip] | +--rw statistic
| | | +--rw ipv6-peer-ip inet:ipv6-address-no-zone | +--rw statistic-enable? boolean
| | +--rw flood-proxys | +--ro statistic-info
| | | +--rw flood-proxy* [peer-ip] | +--ro rx-bits-per-sec? uint64
| | | +--rw peer-ip inet:ipv4-address-no-zone | +--ro rx-pkt-per-sec? uint64
| | +--rw mcast-group* [mcast-group] | +--ro tx-bits-per-sec? uint64
| | +--rw mcast-group inet:ipv4-address-no-zone | +--ro tx-pkt-per-sec? uint64
| +--rw vni-map-l2vpns | +--ro rx-pkts? uint64
| | +--rw vni-map-l2vpn* [vni-id] | +--ro rx-bytes? uint64
| | +--rw l2vpn-id uint32 | +--ro tx-pkts? uint64
| | +--rw l2vpn-name? string | +--ro tx-bytes? uint64
| | +--rw vni-id uint32 | +--ro rx-unicast-pkts? uint64
| | +--rw split-horizon-group? string | +--ro rx-multicast-pkts? uint64
| +--rw vni-map-l3vpns | +--ro rx-broadcast-pkts? uint64
| | +--rw vni-map-l3vpn* [l3vpn-name] | +--ro drop-unicast-pkts? uint64
| | +--rw l3vpn-name vrfName | +--ro drop-multicast-pkts? uint64
| | +--rw vni-id? uint32 | +--ro drop-broadcast-pkts? uint64
| +--ro vni-statistics-infos | +--ro tx-unicast-pkts? uint64
| | +--ro vni-statistic-info* [vni-id] | +--ro tx-multicast-pkts? uint64
| | +--ro vni-id uint32 | +--ro tx-broadcast-pkts? uint64
| | +--ro vni-statistics +--ro vni-peer-infos
| | +--ro rx-bits-persec? uint64 | +--ro peers
| | +--ro rx-pkts-persec? uint64 | +--ro peer* [vni-id source-ip peer-ip]
| | +--ro tx-bits-persec? uint64 | +--ro vni-id uint32
| | +--ro tx-pkts-persec? uint64 | +--ro source-ip inet:ip-address-no-zone
| | +--ro rx-pkts? uint64 | +--ro peer-ip inet:ip-address-no-zone
| | +--ro rx-bytes? uint64 | +--ro tunnel-type? peer-type
| | +--ro tx-pkts? uint64 | +--ro out-vni-id? uint32
| | +--ro tx-bytes? uint64 +--ro tunnel-infos
| | +--ro rx-unicast-pkts? uint64 +--ro tunnel-info* [tunnel-id]
| | +--ro rx-multicast-pkts? uint64 +--ro tunnel-id uint32
| | +--ro rx-broadcast-pkts? uint64 +--ro source-ip? inet:ip-address-no-zone
| | +--ro drop-unicast-pkts? uint64 +--ro peer-ip? inet:ip-address-no-zone
| | +--ro drop-multicast-pkts? uint64 +--ro status? tunnel-status
| | +--ro drop-broadcast-pkts? uint64 +--ro type? tunnel-type
| | +--ro tx-unicast-pkts? uint64 +--ro up-time? string
| | +--ro tx-multicast-pkts? uint64 +--ro vrf-name? -> /ni:network-instances/network-instance/name
| | +--ro tx-broadcast-pkts? uint64
| +--rw vnipeer-statistics-cfgs
| | +--rw vnipeer-satistics-cfg* [vni-id peer-ip]
| | +--rw vni-id uint32
| | +--rw peer-ip inet:ipv4-address-no-zone
| +--ro vnipeer-statistics-infos
| | +--ro vnipeer-satistics-info* [vni-id source-ip peer-ip]
| | +--ro vni-id uint32
| | +--ro source-ip inet:ipv4-address-no-zone
| | +--ro peer-ip inet:ipv4-address-no-zone
| | +--ro vnipeer_statistics
| | +--ro rx-bits-persec? uint64
| | +--ro rx-pkts-persec? uint64
| | +--ro tx-bits-persec? uint64
| | +--ro tx-pkts-persec? uint64
| | +--ro rx-pkts? uint64
| | +--ro rx-bytes? uint64
| | +--ro tx-pkts? uint64
| | +--ro tx-bytes? uint64
| | +--ro rx-unicast-pkts? uint64
| | +--ro rx-multicast-pkts? uint64
| | +--ro rx-broadcast-pkts? uint64
| | +--ro drop-unicast-pkts? uint64
| | +--ro drop-multicast-pkts? uint64
| | +--ro drop-broadcast-pkts? uint64
| | +--ro tx-unicast-pkts? uint64
| | +--ro tx-multicast-pkts? uint64
| | +--ro tx-broadcast-pkts? uint64
| +--rw ipv6-vnipeer-statistics-cfgs
| | +--rw ipv6-vnipeer-statistics-cfg* [vni-id ipv6-source-ip ipv6-peer-ip]
| | +--rw vni-id uint32
| | +--rw ipv6-source-ip inet:ipv6-address-no-zone
| | +--rw ipv6-peer-ip inet:ipv6-address-no-zone
| +--ro ipv6-vnipeer-statistics-infos
| +--ro ipv6-vnipeer-statistics-info* [vniId ipv6-source-ip ipv6-peer-ip]
| +--ro vniId uint32
| +--ro ipv6-source-ip inet:ipv6-address-no-zone
| +--ro ipv6-peer-ip inet:ipv6-address-no-zone
| +--ro ipv6_vnipeer_statistics
| +--ro rx-bits-persec? uint64
| +--ro rx-pkts-persec? uint64
| +--ro tx-bits-persec? uint64
| +--ro tx-pkts-persec? uint64
| +--ro rx-pkts? uint64
| +--ro rx-bytes? uint64
| +--ro tx-pkts? uint64
| +--ro tx-bytes? uint64
| +--ro rx-unicast-pkts? uint64
| +--ro rx-multicast-pkts? uint64
| +--ro rx-broadcast-pkts? uint64
| +--ro drop-unicast-pkts? uint64
| +--ro drop-multicast-pkts? uint64
| +--ro drop-broadcast-pkts? uint64
| +--ro tx-unicast-pkts? uint64
| +--ro tx-multicast-pkts? uint64
| +--ro tx-broadcast-pkts? uint64
+--ro vnipeer-infos
| +--ro vnipeer-info* [vni-id source-ip peer-ip]
| +--ro vni-id uint32
| +--ro source-ip inet:ip-address-no-zone
| +--ro peer-ip inet:ip-address-no-zone
| +--ro type? peerType
| +--ro out-vni-id? uint32
+--rw vni-infos
| +--rw vni_info* [vni-id]
| +--rw vni-id uint32
| +--rw statistics-enable? vniStatisticsEnable
| +--ro status? vniStatus
+--ro tunnel-infos
+--ro tunnel-infos* [tunnel-id]
+--ro tunnel-id uint32
+--ro source-ip? inet:ip-address-no-zone
+--ro peer-ip? inet:ip-address-no-zone
+--ro status? tunnelStatus
+--ro type? tunnelType
+--ro up-time? string
+--ro vrf-name? vrfName
Figure 3.1. The tree structure of YANG module for NVO3 configuration augment /if:interfaces/if:interface:
+--rw nvo3-nve
| +--rw nvo3-config
| +--rw source-vtep-ip? inet:ipv4-address-no-zone
| +--rw source-vtep-ipv6? inet:ipv6-address-no-zone
| +--rw bypass-vtep-ip? inet:ipv4-address-no-zone
| +--rw statistics
| +--rw statistic* [vni-id mode peer-ip direction]
| +--rw vni-id uint32
| +--rw mode vni-type
| +--rw peer-ip inet:ipv4-address-no-zone
| +--rw direction direction-type
| +--ro info
| +--ro rx-pkts? uint64
| +--ro rx-bytes? uint64
| +--ro tx-pkts? uint64
| +--ro tx-bytes? uint64
| +--ro rx-unicast-pkts? uint64
| +--ro rx-multicast-pkts? uint64
| +--ro rx-broadcast-pkts? uint64
| +--ro tx-unicast-pkts? uint64
| +--ro tx-multicast-pkts? uint64
| +--ro tx-broadcast-pkts? uint64
| +--ro drop-unicast-pkts? uint64
| +--ro drop-multicast-pkts? uint64
| +--ro drop-broadcast-pkts? uint64
| +--ro rx-bits-per-sec? uint64
| +--ro rx-pkt-per-sec? uint64
| +--ro tx-bits-per-sec? uint64
| +--ro tx-pkt-per-sec? uint64
+--rw nvo3-gateway
+--rw nvo3-gateway
+--rw vxlan-anycast-gateway? boolean
augment /ni:network-instances/ni:network-instance/ni:ni-type/l3vpn:l3vpn/l3vpn:l3vpn:
+--rw vni-lists
+--rw vni* [vni-id]
+--rw vni-id uint32
augment /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn:
+--rw vni-lists
+--rw vni* [vni-id]
+--rw vni-id uint32
+--rw split-horizon-mode? vni-bind-type
+--rw split-group? string
rpcs:
+---x reset-vni-instance-statistic
| +---w input
| +---w vni-id uint32
+---x reset-vni-peer-statistic
+---w input
+---w vni-id uint32
+---w mode vni-type
+---w peer-ip inet:ipv4-address-no-zone
+---w direction direction-type
Figure 3.2. The tree structure of YANG module for NVO3 configuration
3.4. YANG Module 3.4. YANG Module
<CODE BEGINS> file "ietf-nvo3-base@2019-03-01.yang" <CODE BEGINS> file "ietf-nvo3-base@2019-07-01.yang"
module ietf-nvo3-base { module ietf-nvo3 {
namespace "urn:ietf:params:xml:ns:yang:ietf-nvo3-base"; yang-version 1.1;
//namespace need to be assigned by IANA namespace "urn:ietf:params:xml:ns:yang:ietf-nvo3";
prefix "nvo3"; prefix "nvo3";
import ietf-network-instance {
prefix "ni";
}
import ietf-interfaces {
prefix "if";
}
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-yang-types {
prefix yang; import ietf-l2vpn {
prefix "l2vpn";
} }
organization "IETF NVO3 Working Group"; import ietf-bgp-l3vpn {
contact "zhangmingui@huawei.com prefix "l3vpn";
sean.gao@huawei.com";
description "nvo3 yang module";
revision "2019-03-01" {
description
"Initial version";
reference "RFC 7348 RFC 7637";
} }
typedef vrfName {
type string { organization "ietf";
length "1..31"; contact "ietf";
} description "Yang model for NVO3";
revision 2019-04-01 {
description description
"vrfName is a string type with length constraints"; "Init revision";
reference
"";
} }
typedef ifName {
type string { typedef vni-status-type {
length "1..63"; type enumeration {
enum "up" {
description
"Vni status up.";
}
enum "down" {
description
"Vni status down.";
}
} }
description description
"ifName is a string type with length constraints"; "Vni status";
} }
typedef vniStatus {
typedef vni-type {
type enumeration { type enumeration {
enum up { enum "l2" {
description description
"The VNI is up"; "layer 2 mode";
} }
enum down { enum "l3" {
description description
"The VNI is down"; "layer 3 mode";
} }
} }
description description
"The status of a VNI can be either up or down"; "vni type";
} }
typedef protocolType {
typedef peer-type {
type enumeration { type enumeration {
enum null { enum "static" {
description description
"No specific protocol is used"; "Static.";
} }
enum evpn { enum "dynamic" {
description description
"EVPN is used as the control plane protocol"; "Dynamic.";
} }
} }
description description
"The protocol type being used as control plane"; "Peer type";
} }
typedef peerType {
typedef tunnel-status {
type enumeration { type enumeration {
enum static { enum "up" {
description description
"Static peer NVE"; "The tunnel is up.";
} }
enum dynamic { enum "down" {
description description
"Dynamic peer NVE"; "The tunnel is down.";
} }
} }
description description
"The type of the peer NVE"; "Tunnel status";
} }
typedef tunnelStatus { typedef tunnel-type {
type enumeration { type enumeration {
enum up { enum "dynamic" {
description description
"The tunnel is up"; "The tunnel is dynamic.";
} }
enum down { enum "static" {
description description
"The tunnel is down"; "The tunnel is static.";
}
enum "invalid" {
description
"The tunnel is invalid.";
} }
} }
description description
"The status of a tunnel can be either up or down"; "Tunnel type";
} }
typedef vniStatisticsEnable {
typedef direction-type {
type enumeration { type enumeration {
enum enable { enum "inbound" {
description description
"The statistics is enabled"; "Inbound.";
}
} enum "outbound" {
enum disable {
description description
"The statistics is disabled"; "Outbound.";
} }
enum "bidirection" {
description
"Bidirection.";
}
} }
description description
"The statistics of a VNI can be enabled or disabled"; "Bound direction";
} }
typedef tunnelType {
typedef vni-bind-type {
type enumeration { type enumeration {
enum dynamic { enum "hub-mode" {
description description
"The tunnel is built in a dynamic way"; "Hub mode.";
} }
enum static { enum "spoke-mode" {
description description
"The tunnel is built by static configuration"; "Spoke mode.";
} }
} }
description description
"The type of a tunnel"; "bdBindVniType";
} }
container nvo3{
container nvo3 {
description description
"NVO3 base YANG main part"; "Management of NVO3.";
container common {
description container vni-instances {
"Common part";
leaf nvo3-enable {
type boolean;
default "false";
description
"Enable/Disable NVO3 featrues";
}
}
container nves {
description description
"Parameters of NVEs"; "The confiuration and information table of the VNI.";
list nve { list vni-instance {
key "if-name source-interface"; key "vni-id";
must "(/if:interfaces/if:interface[if:name = current()/source_nve]/if:type = 'Nve')";
description description
"The list of NVEs"; "The confiuration and information of the VNI.";
leaf if-name { leaf vni-id {
type ifName; type uint32 {
range "1..16777215";
}
description description
"nve interface name"; "The id of VNI.";
} }
leaf vtep-ip { leaf vni-mode {
type inet:ipv4-address-no-zone; type enumeration {
description enum "Local" {
"NVO3 tunnel source address"; description
"Local mode";
}
enum "Global" {
description
"Global mode";
}
}
description
"The mode of the VNI instance.";
} }
leaf ipv6-vtep-ip { leaf source-nve {
type inet:ipv6-address-no-zone; type if:interface-ref;
mandatory true;
description description
"ipv6 NVO3 tunnel source address"; "The name of the nve interface .";
} }
leaf source-interface { leaf protocol-bgp {
type ifName; type boolean;
default "false";
description description
"source interface"; "Whether use bgp as vxlan's protocol.";
} }
leaf mac-address { leaf status {
type yang:mac-address; type vni-status-type;
config false;
description description
"mac address"; "The status of the VNI.";
} }
leaf bypass-vtep-ip { container static-ipv4-peers {
type inet:ipv4-address-no-zone;
description description
"bypass NVO3 tunnel source address"; "The remote NVE address table in a same VNI.";
} list static-peer {
container vni-members { key "peer-ip";
description
"The VNI members on the NVE";
list vni-member {
key "vni-id";
description description
"nve vni member"; "The remote NVE address in a same VNI.";
leaf vni-id { leaf peer-ip {
type inet:ipv4-address-no-zone;
description
"The address of the NVE.";
}
leaf out-vni-id {
type uint32 { type uint32 {
range "1..16777215"; range "1..16777215";
} }
description description
"Associate NVO3 VNIs (Virtual Network Identifiers) with the NVE interface."; "The ID of the out VNI. Do not support separate deletion.";
} }
leaf protocol-bgp { }
type protocolType; }
default "null"; container static-ipv6-peers {
description
"The remote NVE ipv6 address table in a same VNI.";
list static-ipv6-peer {
key "peer-ip";
description
"The remote NVE ipv6 address in a same VNI.";
leaf peer-ip {
type inet:ipv6-address-no-zone;
description description
"Enables BGP EVPN with ingress replication for the VNI."; "The ipv6 address of the NVE.";
} }
container peers { }
}
container flood-proxys {
description
"The flood proxys for this VNI";
list flood-proxy {
key "peer-ip";
leaf peer-ip {
type inet:ipv4-address-no-zone;
description description
"The peers in this VNI"; "peer ip address";
list peer {
key "peer-ip";
description
"A peer NVE in this VNI";
leaf peer-ip {
type inet:ipv4-address-no-zone;
description
"peer ip address";
}
leaf out-vni-id {
type uint32 {
range "1..16777215";
}
description
"out vni id";
}
leaf split-horizon-group {
type string {
length "1..31";
}
description
"split group name";
}
}
} }
container ipv6-peers { description
"List of the flood proxys";
}
}
container mcast-groups {
description
"The mcast address table.";
list mcast-group {
key "mcast-ip";
description
"The mcast address.";
leaf mcast-ip {
type inet:ipv4-address-no-zone;
description description
"The IPv6 peers in this VNI"; "The mcast address of NVO3.";
list ipv6-peer {
key "ipv6-peer-ip";
description
"An IPv6 peer NVE in this VNI";
leaf ipv6-peer-ip {
type inet:ipv6-address-no-zone;
description
"peer ipv6 address";
}
}
}
container flood-proxys {
description
"The flood proxys for this VNI";
list flood-proxy {
key "peer-ip";
leaf peer-ip {
type inet:ipv4-address-no-zone;
description
"peer ip address";
}
description
"List of the flood proxys";
}
}
list mcast-group {
key "mcast-group";
description
"The multicast groups in this VNI";
leaf mcast-group {
type inet:ipv4-address-no-zone;
description
"mcast ip address";
}
} }
} }
} }
container vni-map-l2vpns { container statistic {
description description
"Mapping VNIs to L2VPNs"; "The VNI member in a same NVE.";
list vni-map-l2vpn { leaf statistic-enable {
key "vni-id"; type boolean;
description default "false";
"L2VPN"; description
leaf l2vpn-id { "To determine whether to enable the statistics for a VNI.";
type uint32 {
range "1..16777215"; }
} container statistic-info {
mandatory true;
description
"l2vpn id";
}
leaf l2vpn-name {
type string {
length "1..31";
}
description
"l2vpn name";
}
leaf vni-id {
type uint32 {
range "1..16777215";
}
description
"vni id";
}
leaf split-horizon-group {
type string {
length "1..31";
}
description
"split group name";
}
}
}
container vni-map-l3vpns {
description
"Mapping VNIs to L3VPNs";
list vni-map-l3vpn {
key "l3vpn-name";
description
"L3VPN";
leaf l3vpn-name {
type vrfName;
description
"l3vpn name";
}
leaf vni-id {
type uint32 {
range "1..16777215";
}
description
"vni id";
}
}
}
container vni-statistics-infos {
config false;
description
"The statistics information for VNIs";
list vni-statistic-info {
key "vni-id";
config false; config false;
description description
"The statistics information for a VNI"; "The vni instance traffic statistics information.";
leaf vni-id { leaf rx-bits-per-sec {
type uint32 { type uint64;
range "1..16777215";
}
config false; config false;
description description
"vni id"; "Number of bits received per second.";
} }
container vni-statistics { leaf rx-pkt-per-sec {
type uint64;
config false; config false;
description description
"The statistics information items for a VNI"; "Number of packets received per second.";
leaf rx-bits-persec {
type uint64;
config false;
description
"Received bits per second";
}
leaf rx-pkts-persec {
type uint64;
config false;
description
"Received packets per second";
}
leaf tx-bits-persec {
type uint64;
config false;
description
"Transmitted bits per second";
}
leaf tx-pkts-persec {
type uint64;
config false;
description
"Transmitted packets per second";
}
leaf rx-pkts {
type uint64;
config false;
description
"Received packets";
}
leaf rx-bytes {
type uint64;
config false;
description
"Received bytes";
}
leaf tx-pkts {
type uint64;
config false;
description
"Transmitted packets";
}
leaf tx-bytes {
type uint64;
config false;
description
"Transmitted bytes";
}
leaf rx-unicast-pkts {
type uint64;
config false;
description
"Received unicast packets";
}
leaf rx-multicast-pkts {
type uint64;
config false;
description
"Received multicast packets";
}
leaf rx-broadcast-pkts {
type uint64;
config false;
description
"Received broadcast packets";
}
leaf drop-unicast-pkts {
type uint64;
config false;
description
"Dropped unicast packets";
}
leaf drop-multicast-pkts {
type uint64;
config false;
description
"Dropped multicast packets";
}
leaf drop-broadcast-pkts {
type uint64;
config false;
description
"Dropped broadcast packets";
}
leaf tx-unicast-pkts {
type uint64;
config false;
description
"Transmitted unicast packets";
}
leaf tx-multicast-pkts {
type uint64;
config false;
description
"Transmitted multicast packets";
}
leaf tx-broadcast-pkts {
type uint64;
config false;
description
"Transmitted broadcast packets";
}
} }
} leaf tx-bits-per-sec {
} type uint64;
container vnipeer-statistics-cfgs { config false;
description
"Statistics configuration of peers in the VNI.";
list vnipeer-satistics-cfg {
key "vni-id peer-ip";
description
"Statistics configuration of a peer in the VNI.";
leaf vni-id {
type uint32 {
range "1..16777215";
}
description description
"vni id"; "Number of bits sent per second.";
} }
leaf peer-ip { leaf tx-pkt-per-sec {
type inet:ipv4-address-no-zone; type uint64;
description config false;
"The Ipv4 address of the peer"; description
"Number of packets sent per second.";
} }
} leaf rx-pkts {
} type uint64;
container vnipeer-statistics-infos {
config false;
description
"Statistics configuration of the peers in a VNI";
list vnipeer-satistics-info {
key "vni-id source-ip peer-ip";
config false;
description
"Statistics information of a peer in the VNI.";
leaf vni-id {
type uint32 {
range "0..16777215";
}
config false; config false;
description description
"vni id"; "Total number of received packets.";
} }
leaf source-ip { leaf rx-bytes {
type inet:ipv4-address-no-zone; type uint64;
config false; config false;
description description
"Source address"; "Total number of received bytes.";
} }
leaf peer-ip { leaf tx-pkts {
type inet:ipv4-address-no-zone; type uint64;
config false; config false;
description description
"Address of the peer"; "Total number of sent packets.";
} }
container vnipeer_statistics { leaf tx-bytes {
type uint64;
config false; config false;
description description
"Statistics information items of a peer in the VNI"; "Total number of sent bytes.";
leaf rx-bits-persec {
type uint64;
config false;
description
"Received bits per second";
}
leaf rx-pkts-persec {
type uint64;
config false;
description
"Received packets per second";
}
leaf tx-bits-persec {
type uint64;
config false;
description
"Transmitted bits per second";
}
leaf tx-pkts-persec {
type uint64;
config false;
description
"Transmitted packets per second";
}
leaf rx-pkts {
type uint64;
config false;
description
"Received packets";
}
leaf rx-bytes {
type uint64;
config false;
description
"Received bytes";
}
leaf tx-pkts {
type uint64;
config false;
description
"Transmitted packets";
}
leaf tx-bytes {
type uint64;
config false;
description
"Transmitted bytes";
}
leaf rx-unicast-pkts {
type uint64;
config false;
description
"Received unicast packets";
}
leaf rx-multicast-pkts {
type uint64;
config false;
description
"Received multicast packets";
}
leaf rx-broadcast-pkts {
type uint64;
config false;
description
"Received broadcast packets";
}
leaf drop-unicast-pkts {
type uint64;
config false;
description
"Dropped unicast packets";
}
leaf drop-multicast-pkts {
type uint64;
config false;
description
"Dropped multicast packets";
}
leaf drop-broadcast-pkts {
type uint64;
config false;
description
"Dropped broadcast packets";
}
leaf tx-unicast-pkts {
type uint64;
config false;
description
"Transmitted unicast packets";
}
leaf tx-multicast-pkts {
type uint64;
config false;
description
"Transmitted multicast packets";
}
leaf tx-broadcast-pkts {
type uint64;
config false;
description
"Transmitted broadcast packets";
}
} }
} leaf rx-unicast-pkts {
} type uint64;
container ipv6-vnipeer-statistics-cfgs { config false;
description
"Statistics configuration of IPv6 peers in the VNI.";
list ipv6-vnipeer-statistics-cfg {
key "vni-id ipv6-source-ip ipv6-peer-ip";
description
"Statistics configuration of an IPv6 peer in the VNI.";
leaf vni-id {
type uint32 {
range "1..16777215";
}
description description
"vni id"; "Number of received unicast packets.";
} }
leaf ipv6-source-ip { leaf rx-multicast-pkts {
type inet:ipv6-address-no-zone; type uint64;
description config false;
"Source IPv6 address"; description
"Number of received multicast packets.";
} }
leaf ipv6-peer-ip { leaf rx-broadcast-pkts {
type inet:ipv6-address-no-zone; type uint64;
description config false;
"IPv6 address of the peer"; description
"Number of received broadcast packets.";
} }
} leaf drop-unicast-pkts {
} type uint64;
container ipv6-vnipeer-statistics-infos {
config false;
description
"Statistics information of IPv6 peers in the VNI.";
list ipv6-vnipeer-statistics-info {
key "vniId ipv6-source-ip ipv6-peer-ip";
config false;
description
"Statistics information of an IPv6 peer in the VNI.";
leaf vniId {
type uint32 {
range "1..16777215";
}
config false; config false;
description description
"vni id"; "Number of discarded unicast packets.";
} }
leaf ipv6-source-ip { leaf drop-multicast-pkts {
type inet:ipv6-address-no-zone; type uint64;
config false; config false;
description description
"Source IPv6 address"; "Number of discarded multicast packets.";
} }
leaf ipv6-peer-ip { leaf drop-broadcast-pkts {
type inet:ipv6-address-no-zone; type uint64;
config false; config false;
description description
"IPv6 address of the peer"; "Number of discarded broadcast packets.";
} }
container ipv6_vnipeer_statistics { leaf tx-unicast-pkts {
type uint64;
config false; config false;
description description
"Statistics information items of an IPv6 peer in the VNI."; "Number of sent unicast packets.";
leaf rx-bits-persec { }
type uint64; leaf tx-multicast-pkts {
config false; type uint64;
description config false;
"Received bits per second"; description
} "Number of sent multicast packets.";
leaf rx-pkts-persec { }
type uint64; leaf tx-broadcast-pkts {
config false; type uint64;
description config false;
"Received packets per second"; description
} "Number of sent broadcast packets.";
leaf tx-bits-persec {
type uint64;
config false;
description
"Transmitted bits per second";
}
leaf tx-pkts-persec {
type uint64;
config false;
description
"Transmitted packets per second";
}
leaf rx-pkts {
type uint64;
config false;
description
"Received packets";
}
leaf rx-bytes {
type uint64;
config false;
description
"Received bytes";
}
leaf tx-pkts {
type uint64;
config false;
description
"Transmitted packets";
}
leaf tx-bytes {
type uint64;
config false;
description
"Transmitted bytes";
}
leaf rx-unicast-pkts {
type uint64;
config false;
description
"Received unicast packets";
}
leaf rx-multicast-pkts {
type uint64;
config false;
description
"Received multicast packets";
}
leaf rx-broadcast-pkts {
type uint64;
config false;
description
"Received broadcast packets";
}
leaf drop-unicast-pkts {
type uint64;
config false;
description
"Dropped unicast packets";
}
leaf drop-multicast-pkts {
type uint64;
config false;
description
"Dropped multicast packets";
}
leaf drop-broadcast-pkts {
type uint64;
config false;
description
"Dropped broadcast packets";
}
leaf tx-unicast-pkts {
type uint64;
config false;
description
"Transmitted unicast packets";
}
leaf tx-multicast-pkts {
type uint64;
config false;
description
"Transmitted multicast packets";
}
leaf tx-broadcast-pkts {
type uint64;
config false;
description
"Transmitted broadcast packets";
}
} }
} }
} }
} }
} }
container vnipeer-infos { }
container vni-peer-infos {
config false; config false;
description description
"Information of the peers"; "The information table of vni members.";
list vnipeer-info { container peers {
key "vni-id source-ip peer-ip";
config false; config false;
description description
"Information of a peer"; "The remote nve address in a same VNI.";
leaf vni-id { list peer {
type uint32 { key "vni-id source-ip peer-ip";
range "1..16777215";
}
config false; config false;
description description
"vni-id"; "The remote nve address list in a same VNI.";
leaf vni-id {
type uint32 {
range "1..16777215";
}
config false;
description
"The ID of VNI.";
}
leaf source-ip {
type inet:ip-address-no-zone;
config false;
description
"The source address of the NVE interface.";
}
leaf peer-ip {
type inet:ip-address-no-zone;
config false;
description
"The remote NVE address.";
}
leaf tunnel-type {
type peer-type;
config false;
description
"Tunnel type.";
}
leaf out-vni-id {
type uint32 {
range "1..16777215";
}
config false;
description
"The ID of the out VNI.";
}
} }
leaf source-ip { }
type inet:ip-address-no-zone; }
config false;
description container tunnel-infos {
"source ip"; config false;
description
"VxLAN tunnel information.";
list tunnel-info {
key "tunnel-id";
config false;
description
"VxLAN tunnel information list.";
leaf tunnel-id {
type uint32 {
range "1..4294967295";
} }
leaf peer-ip { config false;
type inet:ip-address-no-zone; description
config false; "The ID of Vxlan tunnel.";
description }
"peer ip"; leaf source-ip {
type inet:ip-address-no-zone;
config false;
description
"Local NVE interface address.";
}
leaf peer-ip {
type inet:ip-address-no-zone;
config false;
description
"Remote NVE interface address.";
}
leaf status {
type tunnel-status;
config false;
description
"Tunnel status.";
}
leaf type {
type tunnel-type;
config false;
description
"Tunnel type.";
}
leaf up-time {
type string {
length "1..10";
} }
leaf type { config false;
type peerType; description
config false; "Vxlan tunnel up time.";
description }
"peer type"; leaf vrf-name {
type leafref {
path "/ni:network-instances/ni:network-instance/ni:name";
} }
leaf out-vni-id { default "_public_";
type uint32 { config false;
range "1..16777215"; description
} "The name of VPN instance.";
config false; }
}
}
augment "/if:interfaces/if:interface" {
description
"Augment the interface, NVE as an interface.";
container nvo3-nve {
when "if:interfaces/if:interface/if:type = 'Nve'";
description
"Network virtualization edge.";
leaf source-vtep-ip {
type inet:ipv4-address-no-zone;
description
"The source address of the NVE interface.";
}
leaf source-vtep-ipv6 {
type inet:ipv6-address-no-zone;
description
"The source ipv6 address of the NVE interface.";
}
leaf bypass-vtep-ip {
type inet:ipv4-address-no-zone;
description
"The source address of bypass VXLAN tunnel.";
}
container statistics {
description
"VXLAN Tunnel Traffic Statistical Configuration Table.";
list statistic {
key "vni-id mode peer-ip direction";
description description
"out vni id"; "VXLAN Tunnel Traffic Statistics Configuration.";
leaf vni-id {
type uint32 {
range "1..16777215";
}
description
"ID of the VNI.";
}
leaf mode {
type vni-type;
description
"The type of the NVE interface.";
}
leaf peer-ip {
type inet:ipv4-address-no-zone;
description
"IP address of the remote VTEP.";
}
leaf direction {
type direction-type;
must "(./mode='l3' and ./bound!='bidirection')";
description
"Traffic statistics type about the VXLAN tunnel.";
}
container info {
config false;
description
"Traffic statistics about the peer.";
leaf rx-pkts {
type uint64;
config false;
description
"Total number of received packets.";
}
leaf rx-bytes {
type uint64;
config false;
description
"Total number of received bytes.";
}
leaf tx-pkts {
type uint64;
config false;
description
"Total number of sent packets.";
}
leaf tx-bytes {
type uint64;
config false;
description
"Total number of sent bytes.";
}
leaf rx-unicast-pkts {
type uint64;
config false;
description
"Number of received unicast packets.";
}
leaf rx-multicast-pkts {
type uint64;
config false;
description
"Number of received multicast packets.";
}
leaf rx-broadcast-pkts {
type uint64;
config false;
description
"Number of received broadcast packets.";
}
leaf tx-unicast-pkts {
type uint64;
config false;
description
"Number of sent unicast packets.";
}
leaf tx-multicast-pkts {
type uint64;
config false;
description
"Number of sent multicast packets.";
}
leaf tx-broadcast-pkts {
type uint64;
config false;
description
"Number of sent broadcast packets.";
}
leaf drop-unicast-pkts {
type uint64;
config false;
description
"Number of discarded unicast packets.";
}
leaf drop-multicast-pkts {
type uint64;
config false;
description
"Number of discarded multicast packets.";
}
leaf drop-broadcast-pkts {
type uint64;
config false;
description
"Number of discarded broadcast packets.";
}
leaf rx-bits-per-sec {
type uint64;
config false;
description
"Number of bits received per second.";
}
leaf rx-pkt-per-sec {
type uint64;
config false;
description
"Number of packets received per second.";
}
leaf tx-bits-per-sec {
type uint64;
config false;
description
"Number of bits sent per second.";
}
leaf tx-pkt-per-sec {
type uint64;
config false;
description
"Number of packets sent per second.";
}
}
} }
} }
} }
container vni-infos { container nvo3-gateway {
description when "if:interfaces/if:interface/if:type = 'Vbdif'";
"Information of the VNIs"; description
list vni_info { "Enable anycast gateway.";
leaf vxlan-anycast-gateway {
type boolean;
default "false";
description
"Enable vxlan anycast gateway.";
}
}
}
augment "/ni:network-instances/ni:network-instance/ni:ni-type" +
"/l3vpn:l3vpn/l3vpn:l3vpn" {
description "Augment for l3vpn instance";
container vni-lists {
description "Vni list for l3vpn";
list vni {
key "vni-id"; key "vni-id";
description description
"Information of a VNI"; "Vni for current l3vpn instance";
leaf vni-id { leaf vni-id {
type uint32 { type uint32 {
range "1..16777215"; range "1..16777215";
} }
description description
"vni id"; "The id of VNI.";
}
leaf statistics-enable {
type vniStatisticsEnable;
default "disable";
description
"Statistics is enabled or not";
}
leaf status {
type vniStatus;
config false;
description
"The status of the VNI";
} }
} }
} }
container tunnel-infos { }
config false;
description augment "/ni:network-instances/ni:network-instance/ni:ni-type" +
"Information of tunnels"; "/l2vpn:l2vpn" {
list tunnel-infos { description "Augment for l2vpn instance";
key "tunnel-id"; container vni-lists {
config false; description "Vni list for l2vpn";
description list vni {
"Information of a tunnel"; key "vni-id";
leaf tunnel-id { description
"Vni for current l2vpn instance";
leaf vni-id {
type uint32 { type uint32 {
range "1..4294967295"; range "1..16777215";
} }
config false;
description description
"tunnel id"; "The id of VNI.";
}
leaf source-ip {
type inet:ip-address-no-zone;
config false;
description
"source";
}
leaf peer-ip {
type inet:ip-address-no-zone;
config false;
description
"peer ip";
}
leaf status {
type tunnelStatus;
config false;
description
"tunnel status";
} }
leaf type { leaf split-horizon-mode {
type tunnelType; type vni-bind-type;
config false; default "hub-mode";
description description
"tunnel type"; "Split horizon mode.";
} }
leaf up-time { leaf split-group {
type string { type string {
length "1..10"; length "1..31";
} }
config false;
description description
"tunnel up time"; "Split group name.";
} }
leaf vrf-name { }
type vrfName; }
default "_public_"; }
config false;
description rpc reset-vni-instance-statistic {
"vrf"; description
"Clear traffic statistics about the VNI.";
input {
leaf vni-id {
type uint32 {
range "1..16777215";
} }
mandatory true;
description
"ID of the VNI.";
}
}
}
rpc reset-vni-peer-statistic {
description
"Clear traffic statistics about the VXLAN tunnel.";
input {
leaf vni-id {
type uint32 {
range "1..16777215";
}
mandatory true;
description
"ID of the VNI.";
}
leaf mode {
type vni-type;
mandatory true;
description
"The type of vni memeber statistic.";
}
leaf peer-ip {
type inet:ipv4-address-no-zone;
mandatory true;
description
"IP address of the remote NVE interface.";
}
leaf direction{
type direction-type;
must "(./mode='mode-l3' and ./bound!='bidirection')";
mandatory true;
description
"Traffic statistics type about the VXLAN tunnel.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4. Security Considerations 4. Security Considerations
This document raises no new security issues. This document raises no new security issues.
5. IANA Considerations 5. IANA Considerations
The namespace URI defined in Section 3.3 need be registered in the The namespace URI defined in Section 3.3 need be registered in the
IETF XML registry [RFC3688]. IETF XML registry [RFC3688].
skipping to change at page 27, line 6 skipping to change at page 24, line 41
This document raises no new security issues. This document raises no new security issues.
5. IANA Considerations 5. IANA Considerations
The namespace URI defined in Section 3.3 need be registered in the The namespace URI defined in Section 3.3 need be registered in the
IETF XML registry [RFC3688]. IETF XML registry [RFC3688].
This document need to register the 'ietf-nvo3-base' YANG module in This document need to register the 'ietf-nvo3-base' YANG module in
the YANG Module Names registry [RFC6020]. the YANG Module Names registry [RFC6020].
Acknowledgements 6. Contributors
Haibo Wang
Huawei
Email: rainsword.wang@huawei.com
Yuan Gao
Huawei
Email: sean.gao@huawei.com
Gang Yan
Huawei
Email: yangang@huawei.com
Mingui Zhang
Huawei
Email: zhangmingui@huawei.com
Yubao(Bob) Wang
ZTE Corporation
Email: yubao.wang2008@hotmail.com
Ruixue Wang
China Mobile
Email: wangruixue@chinamobile.com
Sijun Weng
China Mobile
Email: wengsijun@chinamobile.com
7. Acknowledgements
Authors would like to thank the comments and suggestions from Tao Authors would like to thank the comments and suggestions from Tao
Han, Weilian Jiang. Han, Weilian Jiang.
6. References 8. References
6.1. Normative References 8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC7364] T. Narten, E. Gray, et al, "Problem Statement: Overlays for [RFC7364] T. Narten, E. Gray, et al, "Problem Statement: Overlays for
Network Virtualization", draft-ietf-nvo3-overlay-problem- Network Virtualization", draft-ietf-nvo3-overlay-problem-
statement, working in progress. statement, working in progress.
[RFC7365] Marc Lasserre, Florin Balus, et al, "Framework for DC [RFC7365] Marc Lasserre, Florin Balus, et al, "Framework for DC
Network Virtualization", draft-ietf-nvo3-framework, working Network Virtualization", draft-ietf-nvo3-framework, working
skipping to change at page 27, line 47 skipping to change at page 26, line 17
January 2004. January 2004.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020, the Network Configuration Protocol (NETCONF)", RFC 6020,
October 2010. October 2010.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, June 2011. (NETCONF)", RFC 6241, June 2011.
6.2. Informative References [RFC8014] D. Black, J. Hudson, L. Kreeger, M. Lasserre, T. Narten, An
Architecture for Data-Center Network Virtualization over
Layer 3 (NVO3), RFC8014, December 2016.
8.2. Informative References
[RFC7637] M. Sridharan, A. Greenberg, et al, "NVGRE: Network [RFC7637] M. Sridharan, A. Greenberg, et al, "NVGRE: Network
Virtualization using Generic Routing Encapsulation", Virtualization using Generic Routing Encapsulation",
RFC7637, September 2015. RFC7637, September 2015.
[I-D.ietf-nvo3-vxlan-gpe] Maino, F., Kreeger, L., and U. Elzur, [I-D.ietf-nvo3-vxlan-gpe] Maino, F., Kreeger, L., and U. Elzur,
"Generic Protocol Extension for VXLAN", draft-ietf-nvo3- "Generic Protocol Extension for VXLAN", draft-ietf-nvo3-
vxlan-gpe-06 (work in progress), April 2018. vxlan-gpe-06 (work in progress), April 2018.
[RFC8014] D. Black, J. Hudson, L. Kreeger, M. Lasserre, T. Narten, An [I-D.draft-ietf-bess-evpn-inter-subnet-forwarding] A. Sajassi, S.
Architecture for Data-Center Network Virtualization over Salam, S. Thoria, J. Drake, J. Rabadan, "Integrated Routing
Layer 3 (NVO3), RFC8014, December 2016. and Bridging in EVPN", draft-ietf-bess-evpn-inter-subnet-
[I-D.ietf-nvo3-encap-02] Boutros, S., "NVO3 Encapsulation forwarding-08, March 4, 2019.
Considerations", draft-ietf-nvo3-encap-02 (work in [RFC8293] A. Ghanwani, L. Dunbar, V. Bannai, M. McBride, R. Krishnan,
progress), September, 2018. "A Framework for Multicast in Network Virtualization over
Layer 3", RFC8293, January 2018.
Author's Addresses Author's Addresses
Mingui Zhang Bing Liu
Huawei Technologies Huawei Technologies
No. 156 Beiqing Rd. Haidian District, No. 156 Beiqing Rd. Haidian District,
Beijing 100095 Beijing 100095
P.R. China P.R. China
EMail: zhangmingui@huawei.com Email: remy.liubing@huawei.com
Yuan Gao
Huawei Technologies
No. 101 Nanjing Rd. Yuhua District,
Nanjing 210012
P.R. China
EMail: sean.gao@huawei.com
Haibo Wang Ran Chen
Huawei Technologies ZTE Corporation
No. 156 Beiqing Rd. Haidian District,
Beijing 100095
P.R. China
EMail: rainsword.wang@huawei.com
Bing Liu Email: chen.ran@zte.com.cn
Huawei Technologies
No. 156 Beiqing Rd. Haidian District,
Beijing 100095
P.R. China
EMail: remy.liubing@huawei.com
Fu Qiao Fengwei Qin
China Mobile China Mobile
32 Xuanwumen West Ave, Xicheng District
Beijing, Beijing 100053
China
EMail: fuqiao@chinamobile.com Email: qinfengwei@chinamobile.com
 End of changes. 148 change blocks. 
977 lines changed or deleted 888 lines changed or added

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