INTERNET-DRAFTNVO3 B. Liu, Ed. Internet-Draft Huawei Technologies IntendedStatus:status: Standards TrackHuaweiR. Chen Expires: March 3, 2021 ZTE Corporation F. Qin China Mobile R. Rahman CiscoExpires: September 10, 2020 March 9,Systems August 30, 2020 Base YANG Data Model for NVO3 Protocolsdraft-ietf-nvo3-yang-cfg-02.txtdraft-ietf-nvo3-yang-cfg-03 Abstract This document describes the base YANG data model that can be used by operators to configure and manage Network Virtualization Overlay protocols. The model is focused on the common configuration requirement of various encapsulation options, such as VXLAN, NVGRE, GENEVE and VXLAN-GPE. Using this model as a starting point, incremental work can be done to satisfy the requirement of a specific encapsulation. Status ofthisThis Memo This Internet-Draft is submittedto IETFin full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force(IETF), its areas, and its working groups.(IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."The list of current Internet-Drafts can be accessed at http://www.ietf.org/1id-abstracts.html The list ofThis Internet-DraftShadow Directories can be accessed at http://www.ietf.org/shadow.htmlwill expire on March 3, 2021. Copyrightand LicenseNotice Copyright (c)20192020 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents(http://trustee.ietf.org/license-info)(https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . .. 32 2. Acronyms and Terminology . . . . . . . . . . . . . . . . . ..3 2.1. Acronyms . . . . . . . . . . . . . . . . . . . . . . . ..3 2.2. Terminology . . . . . . . . . . . . . . . . . . . . . . ..3 3. The YANG Data Model for NVO3 . . . . . . . . . . . . . . . ..33.13.1. Mapping to the NVO3 architecture . . . . . . . . . . . .. . 43 3.2. The Configuration Parameters . . . . . . . . . . . . . ..4 3.2.1. NVE as an interface . . . . . . . . . . . . . . . . ..4 3.2.2. Virtual Network Instance . . . . . . . . . . . . . .. 54 3.2.3. BUM Mode . . . . . . . . . . . . . . . . . . . . . ..5 3.3. Statistics . . . . . . . . . . . . . . . . . . . . . . ..53.3.3.4. Model Structure . . . . . . . . . . . . . . . . . . . . ..53.4.3.5. YANG Module . . . . . . . . . . . . . . . . . . . . . . ..8 4. Security Considerations . . . . . . . . . . . . . . . . . . .. 2422 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . .. 2422 6. Contributors . . . . . . . . . . . . . . . . . . . . . . . .. 2422 7.Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 25 8.References . . . . . . . . . . . . . . . . . . . . . . . . .. 25 8.1.23 7.1. Normative References . . . . . . . . . . . . . . . . . .. 25 8.2.23 7.2. Informative References . . . . . . . . . . . . . . . . .. 26 Author's24 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . .. 2725 1. Introduction Network Virtualization Overlays (NVO3), such asVXLAN, NVGRE,VXLAN [RFC7348], NVGRE [RFC7637], GENEVE [I-D.ietf-nvo3-geneve] andVXLAN-GPE,VXLAN-GPE [I-D.ietf-nvo3-vxlan-gpe], enable network virtualization for data center networks environment that assumes an IP-based underlay. YANG [RFC6020] is a data definition language that was introduced to define the contents of a conceptual data store that allows networked devices to be managed using NETCONF [RFC6241]. This document specifies a YANG data model that can be used to configure and manage NVO3 protocols. The model covers the configuration of NVO3 instances as well as their operation states, which are the basic common requirements of the different tunnel encapsulations. Thus it is called "the base model for NVO3" in this document. As the Network Virtualization Overlay evolves, newly defined tunnel encapsulation may require extra configuration. For example, GENEVE may require configuration of TLVs at the NVE. The base module can be augmented to accommodate these new solutions. 2. Acronyms and Terminology 2.1. AcronymsNVO3:NVO: Network Virtualization Overlays VNI: Virtual Network Instance BUM: Broadcast, Unknown Unicast, Multicast traffic 2.2. Terminology The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALLNOT", "SHOULD",NOT","SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described inRFC 2119 [RFC2119].BCP14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. Familiarity with [RFC7348], [RFC7348], [RFC7364], [RFC7365] and [RFC8014] is assumed in this document. 3. The YANG Data Model for NVO3 The NVO3 base YANG model defined in this document is used to configure the NVEs. It is divided into three containers. The first container contains the configuration of the virtual network instances, e.g. the VNI, the NVE that the instance is mounted, the 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.13.1. Mapping to the NVO3 architecture The NVO3 base YANG model is defined according to the NVO3 architecture [RFC8014]. As shown in Figure3.1,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. +-----------------------------------------+ | Data-Center Network (IP) || |+-----------------------------------------+ | | | 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| +---+ +---+ +---+ +---+ +---+ +---+ Figure3.1.1: NVE Reference model inRFC 8014RFC8014 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 NVE [RFC7365]. At each NVE, a Tenant System is connect to VNIs through Virtual Access Points (VAP). VAPs can be physical ports or virtual ports identified by the bridge domain Identifier ('bdId'). The mapping between VNI and bdId is managed by the operator. As defined in[draft-ietf-bess-evpn-inter-subnet-forwarding],[I-D.ietf-bess-evpn-inter-subnet-forwarding], a tenant can have multiple bridge domains, and each domain has its own VNI. Thus these VNIs are used as L2VPN. Besides, a dedicated VNI can be used for routing between the bridge domains, i.e. used as L3VPN. The mapping relationship between VNI and L2VPN (respectively, L3VPN) is given by augmenting the IETF YANG of L2VPN (respectively L3VPN). 3.2.3. BUM Mode An NVE SHOULD support either ingress replication, or multicast proxy, or point to multipoint tunnels on a per-VNI basis. It is possible that both modes be used simultaneously in one NVO3 network by different NVEs. If ingress replication is used, the receiver addresses are listed in 'peers'. If multicast proxy [RFC8293] is used, the proxy's address is given in "flood-proxy". If the choice is point to multipoint tunnels, the multicast address is given as 'multiAddr'. 3.3. Statistics Operators can determine whether a NVE should gather statistic values on a per-VNI basis. An enabler is contained in the 'static' list as 'statistic-enable' leaf. If the gathering for a VNI is enabled, the statistical information about the local NVEs, the remote NVEs, the flows and the MAC addresses will be collected by the NVEs in this VNI.3.3.3.4. Model Structure module: ietf-nvo3-base +--rw nvo3 | +--rw vni-instances | +--rw vni-instance* [vni-id] | +--rw vni-id uint32 | +--rw vni-mode? vni-modeenumeration| +--rw source-nve if:interface-ref | +--rw protocol-bgp? boolean | +--ro status? vni-status-type | +--rw static-ipv4-peers | | +--rw static-peer* [peer-ip] | | +--rw peer-ip inet:ipv4-address-no-zone | | +--rw out-vni-id? uint32 | +--rw static-ipv6-peers | | +--rw static-ipv6-peer* [peer-ip] | | +--rw peer-ip inet:ipv6-address-no-zone | | +--rw out-vni-id? uint32 | +--rw flood-proxys | | +--rw flood-proxy* [peer-ip] | | +--rw peer-ipinet:ipv4-address-no-zoneinet:ip-address-no-zone | +--rw mcast-groups | | +--rw mcast-group* [mcast-ip] | | +--rw mcast-ipinet:ipv4-address-no-zoneinet:ip-address-no-zone | +--rw statistic | +--rwstatistic-enable?enable? boolean | +--rostatistic-infoinfo | +--rorx-bits-per-sec?send-bits-rate? uint64 | +--rorx-pkt-per-sec?send-pkts-rate? uint64 | +--rotx-bits-per-sec?send-unicast-pkts? uint64 | +--rotx-pkt-per-sec?send-multicast-pkts? uint64 | +--rorx-pkts?send-broadcast-pkts? uint64 | +--rorx-bytes?send-total-bytes? uint64 | +--rotx-pkts?send-total-pkts? uint64 | +--rotx-bytes?receive-bits-rate? uint64 | +--rorx-unicast-pkts?receive-pkts-rate? uint64 | +--rorx-multicast-pkts?receive-unicast-pkts? uint64 | +--rorx-broadcast-pkts?receive-multicast-pkts? uint64 | +--rodrop-unicast-pkts?receive-broadcast-pkts? uint64 | +--rodrop-multicast-pkts?receive-total-bytes? uint64 | +--rodrop-broadcast-pkts?receive-total-pkts? uint64 | +--rotx-unicast-pkts?drop-unicast-pkts? uint64 | +--rotx-multicast-pkts?drop-multicast-pkts? uint64 | +--rotx-broadcast-pkts?drop-broadcast-pkts? uint64 +--ro vni-peer-infos | +--ro peers | +--ro peer* [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 | +--rotunnel-type? peer-typetype? tunnel-type | +--ro out-vni-id? uint32 +--ro tunnel-infos +--ro tunnel-info* [tunnel-id] +--ro tunnel-id uint32 +--ro source-ip? inet:ip-address-no-zone +--ro peer-ip? inet:ip-address-no-zone +--ro status? tunnel-status +--ro type? tunnel-type +--ro up-time? string +--ro vrf-name? -> /ni:network-instances/network-instance/name augment /if:interfaces/if:interface: +--rw nvo3-nve +--rwnvo3-config +--rw source-vtep-ip?nve-ip? inet:ipv4-address-no-zone +--rwsource-vtep-ipv6?nve-ipv6? inet:ipv6-address-no-zone +--rwbypass-vtep-ip?bypass-nve-ip? inet:ipv4-address-no-zone +--rw bypass-nve-ipv6? inet:ipv6-address-no-zone +--rw statistics +--rw statistic* [vni-id peer-ip direction] +--rw vni-id uint32 +--rwmode vni-type +--rwpeer-ipinet:ipv4-address-no-zoneinet:ip-address-no-zone +--rw direction direction-type +--ro info +--rorx-pkts?send-bits-rate? uint64 +--rorx-bytes?send-pkts-rate? uint64 +--rotx-pkts?send-unicast-pkts? uint64 +--rotx-bytes?send-multicast-pkts? uint64 +--rorx-unicast-pkts?send-broadcast-pkts? uint64 +--rorx-multicast-pkts?send-total-bytes? uint64 +--rorx-broadcast-pkts?send-total-pkts? uint64 +--rotx-unicast-pkts?receive-bits-rate? uint64 +--rotx-multicast-pkts?receive-pkts-rate? uint64 +--rotx-broadcast-pkts?receive-unicast-pkts? uint64 +--rodrop-unicast-pkts?receive-multicast-pkts? uint64 +--rodrop-multicast-pkts?receive-broadcast-pkts? uint64 +--rodrop-broadcast-pkts?receive-total-bytes? uint64 +--rorx-bits-per-sec?receive-total-pkts? uint64 +--rorx-pkt-per-sec?drop-unicast-pkts? uint64 +--rotx-bits-per-sec?drop-multicast-pkts? uint64 +--rotx-pkt-per-sec?drop-broadcast-pkts? uint64 augment /ni:network-instances/ni:network-instance/ni:ni-type/l3vpn:l3vpn/l3vpn:l3vpn: +--rwvni-listsvnis +--rw vni* [vni-id] +--rw vni-id uint32 augment /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn: +--rwvni-listsvnis +--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 +---wmode vni-type +---wpeer-ipinet:ipv4-address-no-zoneinet:ip-address-no-zone +---w direction direction-typeFigure 3.2. The tree structure of YANG module for NVO3 configuration 3.4.3.5. YANG Module <CODE BEGINS> file"ietf-nvo3-base@2020-03-09.yang""ietf-nvo3-base@2020-08-26.yang" module ietf-nvo3-base { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-nvo3-base"; prefix "nvo3"; import ietf-network-instance { prefix "ni"; } import ietf-interfaces { prefix "if"; } import ietf-inet-types { prefix "inet"; } import ietf-l2vpn { prefix "l2vpn"; } import ietf-bgp-l3vpn { prefix "l3vpn"; } import iana-if-type { prefix ianaift; } organization "ietf"; contact "ietf"; description "Yang model forNVO3";NVO3."; revision 2020-08-26 { description "Clean non ietf-bgp-l3vpn & ietf-l2vpn related errors."; reference ""; } revision 2020-07-22 { description "Solve syntax and norms issues."; reference ""; } revision 2020-03-09 { description "Revise some design in thestatitics";statitics."; reference ""; } revision 2019-11-04 { description "Cleaning non ietf-bgp-l3vpn relatederrors";errors."; reference ""; } revision 2019-04-01 { description "Initrevision";revision."; reference ""; } typedef vni-status-type { type enumeration { enum "up" { description"Vni status"The state is up."; } enum "down" { description"Vni status"The state is down."; } } description"Vni status"; } typedef vni-type { type enumeration { enum "l2" { description "layer 2 mode"; } enum "l3" { description "layer 3 mode"; } } description "vni type"; } typedef peer-type { type enumeration { enum "static" { description "Static."; } enum "dynamic" { description "Dynamic."; } } description "Peer type";"The state for VNI."; } typedef tunnel-status { type enumeration { enum "up" { description "The tunnel is up."; } enum "down" { description "The tunnel is down."; } } description"Tunnel status";"The status of NVO3 Tunnel."; } typedef tunnel-type { type enumeration { enum "dynamic" { description "The tunnel is dynamic."; } enum "static" { description "The tunnel is static."; } enum "invalid" { description "The tunnel is invalid."; } } description"Tunnel type";"The type of NVO3 Tunnel."; } typedef direction-type { type enumeration { enum "inbound" { description "Inbound."; } enum "outbound" { description "Outbound."; } enum "bidirection" { description "Bidirection."; } } description "Bounddirection";direction."; } typedef vni-bind-type { type enumeration { enum "hub-mode" { description "Hub mode. The vni instancecan’tcan't communicate with other hub mode vni instances."; } enum "spoke-mode" { description "Spoke mode."; } enum "split-group-mode" { description "Split group mode."; } } description"bdBindVniType";"The binding type of VNI."; } typedef vni-mode { type enumeration { enum "local" { description "Local mode."; } enum "global" { description "Global mode."; } } description "The mode of VNI."; } grouping nvo3-traffic-statistics { description "NVO3 tunnel traffic statistics collection."; leaf send-bits-rate { type uint64; units bit/s; description "Number of send bits per second."; } leaf send-pkts-rate { type uint64; units pps; description "Number of send packets per second."; } leaf send-unicast-pkts { type uint64; units packet; description "Number of send unicast packets."; } leaf send-multicast-pkts { type uint64; units packet; description "Number of send multicast packets."; } leaf send-broadcast-pkts { type uint64; units packet; description "Number of send broadcast packets."; } leaf send-total-bytes { type uint64; units Byte; description "Total number of send bytes."; } leaf send-total-pkts { type uint64; units packet; description "Total number of send packets."; } leaf receive-bits-rate { type uint64; units bit/s; description "Number of receive bits per second."; } leaf receive-pkts-rate { type uint64; units pps; description "Number of receive packets per second."; } leaf receive-unicast-pkts { type uint64; units packet; description "Number of receive unicast packets."; } leaf receive-multicast-pkts { type uint64; units packet; description "Number of receive multicast packets."; } leaf receive-broadcast-pkts { type uint64; units packet; description "Number of receive broadcast packets."; } leaf receive-total-bytes { type uint64; units Byte; description "Total number of receive bytes."; } leaf receive-total-pkts { type uint64; units packet; description "Total number of receive packets."; } leaf drop-unicast-pkts { type uint64; units packet; description "Number of discarded unicast packets."; } leaf drop-multicast-pkts { type uint64; units packet; description "Number of discarded multicast packets."; } leaf drop-broadcast-pkts { type uint64; units packet; description "Number of discarded broadcast packets."; } } container nvo3 { description "Management of NVO3."; container vni-instances { description"The confiuration and information table"List ofthe VNI.";virtual network instances."; list vni-instance { key "vni-id";must "(if:interfaces/if:interface[if:name=current()/source-nve]/if:type='Nve')";description"The confiuration and"Configure the information oftheVNI."; leaf vni-id { type uint32 { range "1..16777215"; } description "The id of VNI."; } leaf vni-mode { typeenumeration { enum "Local" { description "Local mode"; } enum "Global" { description "Global mode"; } }vni-mode; default "local"; description "The mode ofthe VNI instance.";VNI."; } leaf source-nve { type if:interface-ref; mandatory true; must "(/if:interfaces/if:interface[if:name=current()]/if:type='Nve')"; description "The name of thenve interface .";local NVE."; } leaf protocol-bgp { type boolean; default "false"; description"Whether use bgp as vxlan's protocol.";"Learn remote NVEs in the same VNI via BGP."; } leaf status { type vni-status-type; config false; description "The status of the VNI."; } container static-ipv4-peers { description"The"List of remote NVE addresstablecreated by users in asameVNI."; list static-peer { key "peer-ip"; description"The"Configure remote NVE address in a same VNI."; leaf peer-ip { type inet:ipv4-address-no-zone; description "The address of the remote NVE."; } leaf out-vni-id { type uint32 { range "1..16777215"; } description "The ID ofthe out VNI.VNI for outbound. Do not support separate deletion."; } } } container static-ipv6-peers { description"The"List of remote NVEipv6IPv6 addresstablecreated by users in asameVNI."; list static-ipv6-peer { key "peer-ip"; description"The"Configure remote NVEipv6IPv6 address in a same VNI."; leaf peer-ip { type inet:ipv6-address-no-zone; description "Theipv6IPv6 address of the remote NVE."; } leaf out-vni-id { type uint32 { range "1..16777215"; } description "The ID of VNI for outbound. Do not support separate deletion."; } } } container flood-proxys { description"The"List of flood proxys forthis VNI";the VNI."; list flood-proxy { key "peer-ip"; description "Configure flood proxys for the VNI."; leaf peer-ip { typeinet:ipv4-address-no-zone; description "peer ip address"; }inet:ip-address-no-zone; description"List"The address ofthefloodproxys";proxy."; } } } container mcast-groups { description"The mcast"List of multicast addresstable.";for the VNI."; list mcast-group { key "mcast-ip"; description"The mcast address.";"Configure multicast address in a same VNI."; leaf mcast-ip { typeinet:ipv4-address-no-zone;inet:ip-address-no-zone; description "The mcast address of NVO3."; } } } container statistic { description"The"Configure VNImember in a same NVE.";traffic statistics."; leafstatistic-enableenable { type boolean; default "false"; description"To determine whether to enable the statistics for a VNI.";"Enable/disable VNI traffic statistics."; } containerstatistic-infoinfo { when "../enable='true'"; config false; description "The information of vni instance trafficstatistics information."; 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."; } 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 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 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."; }statistics."; uses nvo3-traffic-statistics; } } } } } container vni-peer-infos { config false; description"The information table"List ofvni members.";remote NVE addresses."; container peers { config false; description"The"Operational data of remotenveNVE address in asameVNI."; list peer { key "vni-id source-ip peer-ip"; config false; description"The"Operational data of remotenve address listNVE addresses in asameVNI."; 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"Local NVEinterface.";address, as NVO3 tunnel source point."; } leaf peer-ip { type inet:ip-address-no-zone; config false; description"The remote"Remote NVEaddress.";address, as NVO3 tunnel end point."; } leaftunnel-typetype { typepeer-type;tunnel-type; config false; description "Tunnel type."; } leaf out-vni-id { type uint32 { range "1..16777215"; } config false; description "The ID ofthe out VNI.";VNI for outbound."; } } } } container tunnel-infos { config false; description"VxLAN"List of NVO3 tunnel information."; list tunnel-info { key "tunnel-id"; config false; description"VxLAN"Operational data of NVO3 tunnelinformation list.";information."; leaf tunnel-id { type uint32 { range "1..4294967295"; } config false; description "The ID ofVxlanNVO3 tunnel."; } leaf source-ip { type inet:ip-address-no-zone; config false; description "Local NVEinterface address.";address, as NVO3 tunnel source point."; } leaf peer-ip { type inet:ip-address-no-zone; config false; description "Remote NVEinterface address.";address, as NVO3 tunnel end point."; } 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"; } config false; description"Vxlan"The continuous time as NVO3 tunnelup time.";is reachable."; } leaf vrf-name { type leafref { path "/ni:network-instances/ni:network-instance/ni:name"; } default "_public_"; config false; description "The name of VPN instance."; } } }augment "/ianaift"identity Nve { base ianaift:iana-interface-type; description "A new interface type to be registered to IANA";identity Nve { base iana-interface-type; }} augment "/if:interfaces/if:interface" { when "(/if:interfaces/if:interface/if:type = 'nvo3:Nve')"; description "Augment the interface, NVE as an interface.";when "(/if:interfaces/if:interface/if:type = 'Nve')";container nvo3-nve { description"Network virtualization edge.";"Local NVE."; leafsource-vtep-ipnve-ip { type inet:ipv4-address-no-zone; description "Thesourceaddress ofthe NVE interface.";local NVE."; } leafsource-vtep-ipv6nve-ipv6 { type inet:ipv6-address-no-zone; description "Thesource ipv6IPv6 address of theNVE interface.";local NVE."; } leafbypass-vtep-ipbypass-nve-ip { type inet:ipv4-address-no-zone; description "Thesourceaddress ofbypass VXLAN tunnel.";local NVE as bypass."; } leaf bypass-nve-ipv6 { type inet:ipv6-address-no-zone; description "The IPv6 address of local NVE as bypass."; } container statistics { description"VXLAN Tunnel Traffic Statistical Configuration Table.";"List of NVO3 tunnel statistics."; list statistic { key "vni-idmodepeer-ip direction"; description"VXLAN Tunnel Traffic Statistics Configuration.";"Configure NVO3 tunnel statistics information."; leaf vni-id { type uint32 { range "1..16777215"; } description"ID of the VNI."; } leaf mode { type vni-type; description"ThetypeID of theNVE interface.";VNI."; } leaf peer-ip { typeinet:ipv4-address-no-zone;inet:ip-address-no-zone; description"IP"The address oftheremoteVTEP.";NVE."; } leaf direction { type direction-type; description "Traffic statisticstype aboutdirection for theVXLANtunnel."; } 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"The information ofpackets sent per second."; }tunnel traffic statistics."; uses nvo3-traffic-statistics; } } } } } augment "/ni:network-instances/ni:network-instance/ni:ni-type" + "/l3vpn:l3vpn/l3vpn:l3vpn" { description "Augment for l3vpn instance"; containervni-listsvnis { description "Vni list forl3vpn";l3vpn."; list vni { key "vni-id"; description "Vni for current l3vpninstance";instance."; leaf vni-id { type uint32 { range "1..16777215"; } description "TheidID of the VNI."; } } } } augment "/ni:network-instances/ni:network-instance/ni:ni-type" + "/l2vpn:l2vpn" { description "Augment for l2vpninstance";instance."; containervni-listsvnis { description "Vni list forl2vpn";l2vpn."; list vni { key "vni-id"; description "Vni for current l2vpninstance";instance."; leaf vni-id { type uint32 { range "1..16777215"; } description "TheidID of the VNI."; } container split-horizon { description "Configure NVO3 split-horizon information."; leaf split-horizon-mode { type vni-bind-type; default "hub-mode"; description "Split horizon mode."; } leaf split-group {must "(vni-bind-type='split-group-mode')";when "(../split-horizon-mode='split-group-mode')"; type string { length "1..31"; } description "Split group name."; } } } } } rpc reset-vni-instance-statistic { description "Clear traffic statistics about the VNI."; input { leaf vni-id { type uint32 { range "1..16777215"; } mandatory true; description"ID"The 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"The ID of the VNI."; } leaf peer-ip { typeinet:ipv4-address-no-zone;inet:ip-address-no-zone; mandatory true; description"IP"The address of the remoteNVE interface.";NVE."; } leaf direction{ type direction-type; mandatory true; description "Traffic statisticstype aboutdirection for theVXLANtunnel."; } } } } <CODE ENDS> 4. Security Considerations This document raises no new security issues. 5. IANA Considerations The namespace URI defined in Section3.33.4 need to be registered in the IETF XML registry [RFC3688]. This document need to register the 'ietf-nvo3-base' YANG module in the YANG Module Names registry [RFC6020]. 6. Contributors Haibo Wang Huawei Email: rainsword.wang@huawei.com Yuan Gao Huawei Email: sean.gao@huawei.com Guannan Shi Huawei Email: shiguannan1@huawei.com Gang Yan Huawei Email: yangang@huawei.com Mingui Zhang Huawei Email: zhangmingui@huawei.comYubao(Bob)Yubao Wang ZTE Corporation Email: yubao.wang2008@hotmail.com Ruixue Wang China Mobile Email: wangruixue@chinamobile.com Sijun Weng China Mobile Email: wengsijun@chinamobile.com7. Acknowledgements Authors would likeThis document is part of a plan tothank the comments and suggestions from Tao Han, Weilian Jiang. 8.make xml2rfc indispensable. 7. References8.1.7.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March1997. [RFC7364] T. Narten, E. Gray, et al, "Problem Statement: Overlays for Network Virtualization", draft-ietf-nvo3-overlay-problem- statement, working in progress. [RFC7365] Marc Lasserre, Florin Balus, et al, "Framework for DC Network Virtualization", draft-ietf-nvo3-framework, working in progress. [RFC7348] Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger, L., Sridhar, T., Bursell, M., and C. Wright, "Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks", RFC 7348, August 2014. [I-D.ietf-nvo3-geneve] Gross, J., Ganga, I., and T. Sridhar, "Geneve: Generic Network Virtualization Encapsulation", draft-ietf- nvo3-geneve-10 (work in progress), March 2019.1997, <https://www.rfc-editor.org/info/rfc2119>. [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, January2004.2004, <https://www.rfc-editor.org/info/rfc3688>. [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, October2010.2010, <https://www.rfc-editor.org/info/rfc6020>. [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June2011.2011, <https://www.rfc-editor.org/info/rfc6241>. [RFC7348] Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger, L., Sridhar, T., Bursell, M., and C. Wright, "Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks", RFC 7348, DOI 10.17487/RFC7348, August 2014, <https://www.rfc-editor.org/info/rfc7348>. [RFC7364] Narten, T., Ed., Gray, E., Ed., Black, D., Fang, L., Kreeger, L., and M. Napierala, "Problem Statement: Overlays for Network Virtualization", RFC 7364, DOI 10.17487/RFC7364, October 2014, <https://www.rfc-editor.org/info/rfc7364>. [RFC7365] Lasserre, M., Balus, F., Morin, T., Bitar, N., and Y. Rekhter, "Framework for Data Center (DC) Network Virtualization", RFC 7365, DOI 10.17487/RFC7365, October 2014, <https://www.rfc-editor.org/info/rfc7365>. [RFC8014]D.Black,J.D., Hudson,L.J., Kreeger,M.L., Lasserre, M., and T. Narten,An"An Architecture for Data-Center Network Virtualization over Layer 3(NVO3), RFC8014,(NVO3)", RFC 8014, DOI 10.17487/RFC8014, December2016. 8.2.2016, <https://www.rfc-editor.org/info/rfc8014>. [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>. [RFC8365] Sajassi, A., Ed., Drake, J., Ed., Bitar, N., Shekhar, R., Uttaro, J., and W. Henderickx, "A Network Virtualization Overlay Solution Using Ethernet VPN (EVPN)", RFC 8365, DOI 10.17487/RFC8365, March 2018, <https://www.rfc-editor.org/info/rfc8365>. 7.2. Informative References[RFC7637] M. Sridharan, A. Greenberg, et al, "NVGRE:[I-D.ietf-bess-evpn-inter-subnet-forwarding] Sajassi, A., Salam, S., Thoria, S., Drake, J., and J. Rabadan, "Integrated Routing and Bridging in EVPN", draft- ietf-bess-evpn-inter-subnet-forwarding-09 (work in progress), June 2020. [I-D.ietf-nvo3-geneve] Gross, J., Ganga, I., and T. Sridhar, "Geneve: Generic Network Virtualizationusing Generic RoutingEncapsulation",RFC7637, September 2015.draft-ietf- nvo3-geneve-16 (work in progress), March 2020. [I-D.ietf-nvo3-vxlan-gpe] Maino, F., Kreeger, L., and U. Elzur, "Generic Protocol Extension forVXLAN", draft-ietf-nvo3- vxlan-gpe-06VXLAN (VXLAN-GPE)", draft-ietf-nvo3-vxlan- gpe-10 (work in progress),April 2018. [I-D.draft-ietf-bess-evpn-inter-subnet-forwarding] A. Sajassi, S. Salam, S. Thoria, J. Drake, J. Rabadan, "Integrated RoutingJuly 2020. [RFC7637] Garg, P., Ed. andBridging in EVPN", draft-ietf-bess-evpn-inter-subnet- forwarding-08, March 4, 2019.Y. Wang, Ed., "NVGRE: Network Virtualization Using Generic Routing Encapsulation", RFC 7637, DOI 10.17487/RFC7637, September 2015, <https://www.rfc-editor.org/info/rfc7637>. [RFC8293]A.Ghanwani,L.A., Dunbar,V. Bannai, M.L., McBride, M., Bannai, V., and R. Krishnan, "A Framework for Multicast in Network Virtualization over Layer 3",RFC8293,RFC 8293, DOI 10.17487/RFC8293, January2018. Author's2018, <https://www.rfc-editor.org/info/rfc8293>. Authors' Addresses Bing Liu (editor) Huawei Technologies No. 156 Beiqing Rd. HaidianDistrict,District Beijing 100095P.R.China Email: remy.liubing@huawei.com Ran Chen ZTE Corporation Email: chen.ran@zte.com.cn Fengwei Qin China Mobile 32 Xuanwumen West Ave, Xicheng DistrictBeijing,Beijing 100053 China Email: qinfengwei@chinamobile.com Reshad Rahman Cisco Systems Email: rrahman@cisco.com