Network Working Group Y. Liu Internet-Draft F. Guo Intended status: Standards Track Huawei Expires: October 19, 2015 April 17, 2015 Yang Data Model for Multicast in MPLS/BGP IP VPNs draft-liu-bess-mvpn-yang-00 Abstract This document defines a YANG data model that can be used to configure and manage MVPN. Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119]. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://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." This Internet-Draft will expire on October 19, 2015. Copyright Notice Copyright (c) 2015 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) 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 Liu & Guo Expires October 19, 2015 [Page 1] Internet-Draft MVPN YANG Data Model April 2015 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 3. Design of Data Model . . . . . . . . . . . . . . . . . . . . 3 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 3.2. MVPN Per-instance Configuration . . . . . . . . . . . . . 5 3.2.1. Per-instance Parameters . . . . . . . . . . . . . . . 5 3.2.2. Per-vpn-target Configuration of MVPN Instance . . . . 5 3.2.3. Per-tunnel-interface Configuration of MVPN Instance . 6 3.2.4. Per-share-mdt Configuration of MVPN Instance . . . . 6 3.2.5. Per-ipmsi-tunnel Configuration of MVPN Instance . . . 6 3.2.6. Per-switch-mdt Configuration of MVPN Instance . . . . 7 3.2.7. Per-spmsi-tunnel Configuration of MVPN Instance . . . 7 3.3. MVPN Operation State . . . . . . . . . . . . . . . . . . 8 4. MVPN Yang Module . . . . . . . . . . . . . . . . . . . . . . 10 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 34 6. Security Considerations . . . . . . . . . . . . . . . . . . . 35 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 35 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 35 8.1. Normative References . . . . . . . . . . . . . . . . . . 35 8.2. Informative References . . . . . . . . . . . . . . . . . 35 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 1. Introduction 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]. YANG is proving relevant beyond its initial confines, as bindings to other interfaces(e.g. REST) and encoding other than XML (e.g. JSON) are being defined. Furthermore, YANG data models can be used as the basis of implementation for other interface, such as CLI and Programmatic APIs. This document defines a YANG data model that can be used to configure and manage MVPN. It includes Cisco systems' solution [RFC6037], BGP MVPN [RFC6513][RFC6514] etc. In addition, features described in MVPN standards other than mentioned above RFC in future version. Liu & Guo Expires October 19, 2015 [Page 2] Internet-Draft MVPN YANG Data Model April 2015 2. Terminology o PIM: Protocol Independent Multicast o SM: Sparse Mode o SSM: Source-specific Multicast o PMSI: P-Multicast Service Interface o MDT: Multicast Distribution Tree o P2MP: Point to Multipoint o TE: Traffic Engineering o MLDP: Multipoint Label Distribution Protocol 3. Design of Data Model 3.1. Overview MVPN includes two types of configuration objects and operation states for MD MVPN and NG MVPN. The MVPN Yang module is divided into five main containers, one contains the writable parameters, while the others contain the operational states. o mvpn-instances: that contains per-instance writable configuration objects. o mvpn-share-grp-infos: provide share group states information for MD MVPN instances. o mvpn-swt-grp-send-infos: provide switch group states sending information for MD MVPN instances. o mvpn-swt-grp-recv-infos: provide switch group states received information for MD MVPN instances. o mvpn-pmsi-infos: provide i-pmsi and s-pmsi states information for NG MVPN instances. The figure below describes the overall structure of the MVPN Yang module : module: mvpn +--rw mvpn-instances | +--rw mvpn-instance* [vrf-name address-family] Liu & Guo Expires October 19, 2015 [Page 3] Internet-Draft MVPN YANG Data Model April 2015 | +--... | +--rw mvpn-vpn-targets | | +--rw mvpn-vpn-target* [rt-type vpn-tar-val] | | +--... | +--rw mvpn-tunnel-interfaces | | +--rw mvpn-tunnel-interface* [mtunnel-num] | | +--... | +--rw mvpn-share-mdts | | +--rw mvpn-share-mdt | | +--... | +--rw mvpn-ipmsi-tunnels | | +--rw mvpn-ipmsi-tunnel* [tunnel-mode] | | +--... | +--rw mvpn-switch-mdts | | +--rw mvpn-switch-mdt | | +--... | +--rw mvpn-spmsi-tunnels | +--rw mvpn-spmsi-tunnel | +--... +--ro mvpn-share-grp-infos | +--ro mvpn-share-grp-info* [vrf-name address-family] | +--... +--ro mvpn-swt-grp-send-infos | +--ro mvpn-swt-grp-send-info* [vrf-name address-family] | +--... | +--ro mvpn-swt-sg-send-infos | +--ro mvpn-swt-sg-send-info* [ipv4-src-address ipv4-grp-address] | +--... +--ro mvpn-swt-grp-recv-infos | +--ro mvpn-swt-grp-recv-info* [vrf-name address-family] | +--... | +--ro sender-infos | +--ro sender-info* [ipv4-sender-address] | +--... | +--ro swt-sg-infos | +--ro swt-sg-info* [ipv4-src-address ipv4-grp-address] | +--... +--ro mvpn-pmsi-infos +--ro mvpn-pmsi-info* [vrf-name address-family] +--... +--ro mvpn-ipmsi-tnl-infos | +--ro mvpn-ipmsi-tnl-info* [tunnel-address] | +--... +--ro mvpn-spmsi-sg-infos +--ro mvpn-spmsi-sg-info* [ipv4-src-address ipv4-grp-address] +--... Figure 1 The overview of MVPN YANG data model Liu & Guo Expires October 19, 2015 [Page 4] Internet-Draft MVPN YANG Data Model April 2015 3.2. MVPN Per-instance Configuration MVPN per-instance configuration container includes parameters of the MVPN instance binding a specific VRF. MVPN per-instance configuration container is divided into: o Per-instance parameters. o Per-vpn-target configuration of the MVPN instance. o Per-tunnel-interface configuration of the MVPN instance. o Per-share-mdt configuration of the MVPN instance. o Per-ipmsi-tunnel configuration of the MVPN instance. o Per-switch-mdt configuration of the MVPN instance. o Per-spmsi-tunnel configuration of the MVPN instance. 3.2.1. Per-instance Parameters The per-instance parameter includes the name of the VRF bound by the MVPN instance, and signal mode or auto discovery mode etc. +--rw mvpn-instances | +--rw mvpn-instance* [vrf-name address-family] | +--rw vrf-name string | +--rw address-family enumeration | +--rw signaling-mode? enumeration | +--rw auto-discovery-mode? enumeration | +--rw config-type? enumeration | +--rw is-sender-site? boolean | +--rw rpt-spt-mode? boolean Figure 2 The YANG data model of MVPN instance configuration 3.2.2. Per-vpn-target Configuration of MVPN Instance The vpn-target of mvpn can be configured differently from unicast vpn. By default, unicast vpn-targets are always used for multicast vpn. Liu & Guo Expires October 19, 2015 [Page 5] Internet-Draft MVPN YANG Data Model April 2015 | +--rw mvpn-vpn-targets | | +--rw mvpn-vpn-target* [rt-type vpn-tar-val] | | +--rw rt-type enumeration | | +--rw vpn-tar-val string Figure 3 The YANG data model of MVPN vpn-target configuration 3.2.3. Per-tunnel-interface Configuration of MVPN Instance The tunnel interface configuration includes interface number or name, and address for ipv4 or ipv6 etc. It can borrow address from other interfaces. | +--rw mvpn-tunnel-interfaces | | +--rw mvpn-tunnel-interface* [mtunnel-num] | | +--rw mtunnel-num uint16 | | +--rw mtunnel-name? string | | +--rw is-unnumbered? boolean | | +--rw unnumbered-if-name? if-name | | +--rw mtunnel-if-ipv4-address? inet:ipv4-address | | +--rw mtunnel-if-ipv6-address? inet:ipv6-address | | +--rw mtunnel-if-ipv4-masklength? uint8 | | +--rw mtunnel-if-ipv6-masklength? uint8 Figure 4 The YANG data model of MVPN tunnel-interface configuration 3.2.4. Per-share-mdt Configuration of MVPN Instance For MD MVPN, every vpn instance has only one share mdt, and it can be configured pim mode and group address of the multicast tree in public net. | +--rw mvpn-share-mdts | | +--rw mvpn-share-mdt | | +--rw share-mdt-mode enumeration | | +--rw ipv4-share-grp-addr inet:ipv4-address | | +--rw ipv6-share-grp-addr inet:ipv6-address Figure 5 The YANG data model of MVPN share-mdt configuration 3.2.5. Per-ipmsi-tunnel Configuration of MVPN Instance For NG MVPN, every vpn instance has only one i-pmsi tunnel, and it can be configured tunnel mode, and especially specified template for p2mp te. Liu & Guo Expires October 19, 2015 [Page 6] Internet-Draft MVPN YANG Data Model April 2015 | +--rw mvpn-ipmsi-tunnels | | +--rw mvpn-ipmsi-tunnel* [tunnel-mode] | | +--rw tunnel-mode enumeration | | +--rw te-p2mp-template? string Figure 6 The YANG data model of MVPN ipmsi-tunnel configuration 3.2.6. Per-switch-mdt Configuration of MVPN Instance For MD MVPN, every vpn instance can be configured switch group address pool for forwarding multicast data from share mdt to switch mdt. It can be also specified switch threshold value, group policies etc. | +--rw mvpn-switch-mdts | | +--rw mvpn-switch-mdt | | +--rw mdt-limit? uint16 | | +--rw switch-mdt-mode enumeration | | +--rw ipv4-group-pool-addr inet:ipv4-address | | +--rw ipv4-group-pool-masklength uint8 | | +--rw ipv6-group-pool-addr inet:ipv6-address | | +--rw ipv6-group-pool-masklength uint8 | | +--rw switch-threshold? uint32 | | +--rw switch-delay-time? uint8 | | +--rw hold-down-time? uint8 | | +--rw group-acl-name? string | | +--rw group-acl-ipv6-name? string | | +--rw is-switch-group-reuse-log? boolean Figure 7 The YANG data model of MVPN switch-mdt configuration 3.2.7. Per-spmsi-tunnel Configuration of MVPN Instance For NG MVPN, every vpn instance can be configured s-pmsi tunnels for forwarding multicast data from i-pmsi tunnel to s-pmsi tunnel. It can be also specified group and source address in private net, and switch threshold value etc. Liu & Guo Expires October 19, 2015 [Page 7] Internet-Draft MVPN YANG Data Model April 2015 | +--rw mvpn-spmsi-tunnels | +--rw mvpn-spmsi-tunnel | +--rw ipv4-group-addr inet:ipv4-address | +--rw ipv6-group-addr inet:ipv6-address | +--rw ipv4-group-masklength uint8 | +--rw ipv6-groupmasklength uint8 | +--rw ipv4-source-addr inet:ipv4-address | +--rw ipv6-source-addr inet:ipv6-address | +--rw ipv4-source-masklength uint8 | +--rw ipv6-source-masklength uint8 | +--rw tunnel-mode enumeration | +--rw p2mp-te-template? string | +--rw threshold? uint32 | +--rw tunnel-limit? uint8 Figure 8 The YANG data model of MVPN spmsi-tunnel configuration 3.3. MVPN Operation State MVPN container provides operational states for MD MVPN and NG MVPN instances. This container is divided in four components: o mvpn-share-grp-infos: provide share group states information for MD MVPN instances. o mvpn-swt-grp-send-infos: provide switch group states sending information for MD MVPN instances. o mvpn-swt-grp-recv-infos: provide switch group states received information for MD MVPN instances. o mvpn-pmsi-infos: provide i-pmsi and s-pmsi states information for NG MVPN instances. +--ro mvpn-share-grp-infos | +--ro mvpn-share-grp-info* [vrf-name address-family] | +--ro vrf-name string | +--ro address-family enumeration | +--ro ipv4-share-grp-address? inet:ipv4-address | +--ro ipv6-share-grp-address? inet:ipv6-address | +--ro ipv4-mtunnel-address? inet:ipv4-address | +--ro ipv6-mtunnel-address? inet:ipv6-address Figure 9 The YANG data model of MVPN share group information Liu & Guo Expires October 19, 2015 [Page 8] Internet-Draft MVPN YANG Data Model April 2015 +--ro mvpn-swt-grp-send-infos | +--ro mvpn-swt-grp-send-info* [vrf-name address-family] | +--ro vrf-name string | +--ro address-family enumeration | +--ro ipv4-swt-grp-address? inet:ipv4-address | +--ro ipv6-swt-grp-address? inet:ipv6-address | +--ro reference-count? uint32 | +--ro mvpn-swt-sg-send-infos | +--ro mvpn-swt-sg-send-info* [ipv4-src-address ipv4-grp-address] | +--ro ipv4-src-address inet:ipv4-address | +--ro ipv6-src-address? inet:ipv6-address | +--ro ipv4-grp-address inet:ipv4-address | +--ro ipv6-grp-address? inet:ipv6-address | +--ro swt-time? uint32 Figure 10 The YANG data model of MVPN switch group sending information +--ro mvpn-swt-grp-recv-infos | +--ro mvpn-swt-grp-recv-info* [vrf-name address-family] | +--ro vrf-name string | +--ro address-family enumeration | +--ro ipv4-swt-grp-address? inet:ipv4-address | +--ro ipv6-swt-grp-address? inet:ipv6-address | +--ro reference-count? uint32 | +--ro active-count? uint32 | +--ro sender-infos | +--ro sender-info* [ipv4-sender-address] | +--ro ipv4-sender-address inet:ipv4-address | +--ro ipv6-sender-address? inet:ipv6-address | +--ro sender-active-cnt? uint32 | +--ro swt-sg-infos | +--ro swt-sg-info* [ipv4-src-address ipv4-grp-address] | +--ro ipv4-src-address inet:ipv4-address | +--ro ipv6-src-address? inet:ipv6-address | +--ro ipv4-grp-address inet:ipv4-address | +--ro ipv6-grp-address? inet:ipv6-address | +--ro expire-time? uint32 | +--ro is-active? boolean Figure 11 The YANG data model of MVPN switch group received information Liu & Guo Expires October 19, 2015 [Page 9] Internet-Draft MVPN YANG Data Model April 2015 +--ro mvpn-pmsi-infos +--ro mvpn-pmsi-info* [vrf-name address-family] +--ro vrf-name string +--ro address-family enumeration +--ro mvpn-pmsi-type enumeration +--ro tunnel-mode enumeration +--ro te-p2mp-id? uint16 +--ro te-tunnel-id? uint16 +--ro te-extend-tunnel-id? uint16 +--ro mldp-root-addr? inet:ipv4-address +--ro mldp-lsp-id? string +--ro mvpn-ipmsi-tnl-infos | +--ro mvpn-ipmsi-tnl-info* [tunnel-address] | +--ro tunnel-address inet:ipv4-address | +--ro tunnel-role? enumeration +--ro mvpn-spmsi-sg-infos +--ro mvpn-spmsi-sg-info* [ipv4-src-address ipv4-grp-address] +--ro ipv4-src-address inet:ipv4-address +--ro ipv6-src-address? inet:ipv6-address +--ro ipv4-grp-address inet:ipv4-address +--ro ipv6-grp-address? inet:ipv6-address Figure 12 The YANG data model of MVPN i-pmsi and s-pmsi information 4. MVPN Yang Module module mvpn { namespace "urn:huawei:params:xml:ns:yang:mvpn"; // replace with IANA namespace when assigned - // urn:ietf:params:xml:ns:yang:1 prefix "mvpn"; import ietf-inet-types { prefix inet; } organization "IETF BESS(BGP Enabled Services) Working Group"; contact "liuyisong@huawei.com guofeng@huawei.com"; description "This YANG module defines the generic configuration data for mvpn, which is common across all of the vendor implementations of the protocol. It is intended that the module will be extended by vendors to define vendor-specific mvpn configuration parameters."; revision 2015-04-30 { description "Initial revision."; Liu & Guo Expires October 19, 2015 [Page 10] Internet-Draft MVPN YANG Data Model April 2015 } typedef if-name { description "if-name is like ethernet1/1/1/1"; type string { length "1..63"; } } container mvpn-instances { list mvpn-instance { key "vrf-name address-family"; config "true"; leaf vrf-name { description "Name of a vpn instance. "; config "true"; type string { length "0..32"; } } leaf address-family { config "true"; mandatory "true"; type enumeration { enum ipv4unicast { value "0"; description "ipv4unicast:"; } enum ipv6unicast { value "1"; description "ipv6unicast:"; } } } leaf signaling-mode { description "Signaling mode."; config "true"; default "invalid"; type enumeration { enum invalid { value "0"; description "invalid:invalid"; Liu & Guo Expires October 19, 2015 [Page 11] Internet-Draft MVPN YANG Data Model April 2015 } enum bgp { value "1"; description "bgp:bgp"; } enum pim { value "2"; description "pim:pim"; } } } leaf auto-discovery-mode { description "Auto discovery mode."; config "true"; default "none"; type enumeration { enum none { value "0"; description "none:none"; } enum ad { value "1"; description "ad:ad"; } } } leaf config-type { description "Mvpn type, which can be md or ng."; config "true"; default "md"; type enumeration { enum md { value "0"; description "md:md"; } enum ng { value "1"; description "ng:ng"; } } } leaf is-sender-site { description "Configure the current PE as a sender PE."; config "true"; default "false"; type boolean{ } } Liu & Guo Expires October 19, 2015 [Page 12] Internet-Draft MVPN YANG Data Model April 2015 leaf rpt-spt-mode { description "Rpt and spt mode in private net."; config "true"; default "false"; type boolean{ } } container mvpn-vpn-targets { list mvpn-vpn-target { key "rt-type vpn-tar-val"; leaf rt-type { description "rt types are as follows: export-extcommunity: specifies the value of the extended community attribute of the route from an outbound interface to the destination vpn. import-extcommunity: receives routes that carry the specified extended community attribute"; config "true"; mandatory "true"; type enumeration { enum export-extcommunity { value "0"; description "export-extcommunity"; } enum import-extcommunity { value "1"; description "import-extcommunity"; } } } leaf vpn-tar-val { description "the available mvpn target formats are as follows: - 16-bit as number:32-bit user-defined number, for example, 1:3. an as number ranges from 0 to 65535, and a user-defined number ranges from 0 to 4294967295. The as number and user-defined number cannot be both 0s. That is, a vpn target cannot be 0:0. - 32-bit ip address:16-bit user-defined Liu & Guo Expires October 19, 2015 [Page 13] Internet-Draft MVPN YANG Data Model April 2015 number, for example, 192.168.122.15:1. The ip address ranges from 0.0.0.0 to 255.255.255.255, and the user-defined number ranges from 0 to 65535."; config "true"; type string { length "3..21"; } } } } container mvpn-tunnel-interfaces { list mvpn-tunnel-interface { key "mtunnel-num"; leaf mtunnel-num { description "Mti id."; config "true"; type uint16 { range "0..4095"; } } leaf mtunnel-name { description "Mti name."; config "true"; type string { length "1..48"; } } leaf is-unnumbered { description "Configure the ip address of a specified interface as the default ip address of an mti."; config "true"; default "false"; type boolean{ } } leaf unnumbered-if-name { description "Interface whose ip address is used as the default ip address of an mti."; config "true"; Liu & Guo Expires October 19, 2015 [Page 14] Internet-Draft MVPN YANG Data Model April 2015 type if-name; } leaf mtunnel-if-ipv4-address { description "Mti ipv4 address."; config "true"; type inet:ipv4-address; } leaf mtunnel-if-ipv6-address { description "Mti ipv6 address."; config "true"; type inet:ipv6-address; } leaf mtunnel-if-ipv4-masklength { description "Mask length of the mti ipv4 address."; config "true"; type uint8 { range "0..32"; } } leaf mtunnel-if-ipv6-masklength { description "Mask length of the mti ipv6 address."; config "true"; type uint8 { range "0..128"; } } } } container mvpn-share-mdts { container mvpn-share-mdt { leaf share-mdt-mode { description "Share mdt mode."; config "true"; mandatory "true"; type enumeration { enum invalid { value "0"; description "invalid:invalid"; } enum pim-ssm { value "1"; description "pim-ssm:pim-ssm"; } enum pim-sm { Liu & Guo Expires October 19, 2015 [Page 15] Internet-Draft MVPN YANG Data Model April 2015 value "2"; description "pim-sm:pim-sm"; } enum pim-dm { value "3"; description "pim-dm:pim-dm"; } enum bidir-pim { value "4"; description "bidir-pim:bidir-pim"; } } } leaf ipv4-share-grp-addr { description "share-group ipv4 address."; config "true"; mandatory "true"; type inet:ipv4-address; } leaf ipv6-share-grp-addr { description "share-group ipv6 address."; config "true"; mandatory "true"; type inet:ipv6-address; } } } container mvpn-ipmsi-tunnels { list mvpn-ipmsi-tunnel { key "tunnel-mode"; leaf tunnel-mode { description "I-PMSI tunnel mode."; config "true"; type enumeration { enum invalid { value "0"; description "invalid:invalid"; } enum p2mp-te { value "1"; description "p2mp-te:p2mp-te"; } Liu & Guo Expires October 19, 2015 [Page 16] Internet-Draft MVPN YANG Data Model April 2015 enum p2mp-mldp { value "2"; description "p2mp-mldp:p2mp-mldp"; } enum pim-ssm { value "3"; description "pim-ssm:pim-ssm"; } enum pim-sm { value "4"; description "pim-sm:pim-sm"; } enum bidir-pim { value "5"; description "bidir-pim:bidir-pim"; } enum ingress-replication { value "6"; description "ingress-replication: ingress-replication"; } enum mp2mp-mldp { value "7"; description "mp2mp-mldp:mp2mp-mldp"; } } } leaf te-p2mp-template { description "P2mp te tunnel template"; config "true"; type string { length "1..31"; } } } } container mvpn-switch-mdts { container mvpn-switch-mdt { leaf mdt-limit { description "maximum number of switch mdts allowed."; config "true"; default "0"; type uint16 { Liu & Guo Expires October 19, 2015 [Page 17] Internet-Draft MVPN YANG Data Model April 2015 range "0..256"; } } leaf switch-mdt-mode { description "Switch mdt mode."; config "true"; mandatory "true"; type enumeration { enum invalid { value "0"; description "invalid:invalid"; } enum pim-ssm { value "1"; description "pim-ssm:pim-ssm"; } enum pim-sm { value "2"; description "pim-sm:pim-sm"; } enum pim-dm { value "3"; description "pim-dm:pim-dm"; } enum bidir-pim { value "4"; description "bidir-pim:bidir-pim"; } } } leaf ipv4-group-pool-addr { description "Start and end ipv4 addresses of the switch-group address pool. The value is in dotted decimal notation and ranges from 224.0.1.0 to 239.255.255.255."; config "true"; mandatory "true"; type inet:ipv4-address; } leaf ipv4-group-pool-masklength { description "Mask length for ipv4 addresses in the switch-group address pool."; config "true"; mandatory "true"; type uint8 { range "24..32"; Liu & Guo Expires October 19, 2015 [Page 18] Internet-Draft MVPN YANG Data Model April 2015 } } leaf ipv6-group-pool-addr { description "Start and end ipv6 addresses of the switch-group address pool. "; config "true"; mandatory "true"; type inet:ipv6-address; } leaf ipv6-group-pool-masklength { description "Mask length for ipv6 addresses in the switch-group address pool."; config "true"; mandatory "true"; type uint8 { range "96..128"; } } leaf switch-threshold { description "Multicast packet rate threshold for triggering the switching from the share-mdt to the switch-mdt. The value is an integer ranging from 0 to 4194304, in kbit/s. The default value is 0."; config "true"; default "0"; type uint32 { range "0..4194304"; } } leaf switch-delay-time { description "Delay for switching from the share-mdt to the switch-mdt. The value is an integer ranging from 3 to 60, in seconds. "; config "true"; default "5"; type uint8 { range "3..60"; } } leaf hold-down-time { description "Delay for switching from the switch-mdt to the share-mdt. The value is an integer Liu & Guo Expires October 19, 2015 [Page 19] Internet-Draft MVPN YANG Data Model April 2015 ranging from 0 to 512, in seconds. "; config "true"; default "60"; type uint8 { range "0..180"; } } leaf group-acl-name { description "Specify the (s, g) entry on which the switch-group address pool takes effect. The value is an integer ranging from 3000 to 3999 or a string of 32 case-sensitive characters. If no value is specified, the switch-group address pool takes effect on all (s, g)."; config "true"; type string { length "1..32"; } } leaf group-acl-ipv6-name { description "Specify the (s, g) entry on which the switch-group address pool takes effect. The value is an integer ranging from 3000 to 3999 or a string of 32 case-sensitive characters. If no value is specified, the switch-group address pool takes effect on all (s, g)."; config "true"; type string { length "1..32"; } } leaf is-switch-group-reuse-log { description "Enable the function to record switch-group address reuse information."; config "true"; default "false"; type boolean{ } } } } Liu & Guo Expires October 19, 2015 [Page 20] Internet-Draft MVPN YANG Data Model April 2015 container mvpn-spmsi-tunnels { container mvpn-spmsi-tunnel { leaf ipv4-group-addr { description "Start and end ipv4 addresses of the group address in private net. The value is in dotted decimal notation and ranges from 224.0.1.0 to 239.255.255.255."; config "true"; mandatory "true"; type inet:ipv4-address; } leaf ipv6-group-addr { description "Start and end ipv6 addresses of the group address in private net."; config "true"; mandatory "true"; type inet:ipv6-address; } leaf ipv4-group-masklength { description "Group mask length for ipv4 addresses in the group address pool in private net."; config "true"; mandatory "true"; type uint8 { range "4..32"; } } leaf ipv6-groupmasklength { description "Group mask length for ipv6 addresses in the group address pool in private net."; config "true"; mandatory "true"; type uint8 { range "8..128"; } } leaf ipv4-source-addr { description "Start and end ipv4 addresses of the source address in private net."; config "true"; mandatory "true"; Liu & Guo Expires October 19, 2015 [Page 21] Internet-Draft MVPN YANG Data Model April 2015 type inet:ipv4-address; } leaf ipv6-source-addr { description "Start and end ipv6 addresses of the source address in private net."; config "true"; mandatory "true"; type inet:ipv6-address; } leaf ipv4-source-masklength { description "Source mask length for ipv4 addresses in the group address pool in private net."; config "true"; mandatory "true"; type uint8 { range "0..32"; } } leaf ipv6-source-masklength { description "Source mask length for ipv6 addresses in the group address pool in private net."; config "true"; mandatory "true"; type uint8 { range "0..128"; } } leaf tunnel-mode { description "S-pmsi tunnel mode."; config "true"; mandatory "true"; type enumeration { enum invalid { value "0"; description "invalid:invalid"; } enum p2mp-te { value "1"; description "p2mp-te:p2mp-te"; } enum p2mp-mldp { value "2"; description "p2mp-mldp:p2mp-mldp"; } enum pim-ssm { Liu & Guo Expires October 19, 2015 [Page 22] Internet-Draft MVPN YANG Data Model April 2015 value "3"; description "pim-ssm:pim-ssm"; } enum pim-sm { value "4"; description "pim-sm:pim-sm"; } enum bidir-pim { value "5"; description "bidir-pim:bidir-pim"; } enum ingress-replication { value "6"; description "ingress-replication: ingress-replication"; } enum mp2mp-mldp { value "7"; description "mp2mp-mldp:mp2mp-mldp"; } } } leaf p2mp-te-template { description "P2mp te tunnel template"; config "true"; type string { length "1..31"; } } leaf threshold { description "Multicast packet rate threshold for triggering the switching from the i-pmsi to the s-pmsi. The value is an integer ranging from 0 to 4194304, in kbit/s. The default value is 0."; config "true"; type uint32 { range "0..4194304"; } } leaf tunnel-limit { description "Maximum number of s-pmsi tunnels allowed."; config "true"; type uint8 { range "1..16"; Liu & Guo Expires October 19, 2015 [Page 23] Internet-Draft MVPN YANG Data Model April 2015 } } } } } } container mvpn-share-grp-infos { config "false"; list mvpn-share-grp-info { key "vrf-name address-family"; config "false"; leaf vrf-name { description "Name of a vpn instance. "; config "false"; type string { length "0..32"; } } leaf address-family { description "Ipv4 or ipv6 address family."; config "false"; type enumeration { enum ipv4unicast { value "0"; description "ipv4unicast:"; } enum ipv6unicast { value "1"; description "ipv6unicast:"; } } } leaf ipv4-share-grp-address { description "Share-group address for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-share-grp-address { Liu & Guo Expires October 19, 2015 [Page 24] Internet-Draft MVPN YANG Data Model April 2015 description "Share-group address for ipv6."; config "false"; type inet:ipv6-address; } leaf ipv4-mtunnel-address { description "Mti ip address for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-mtunnel-address { description "Mti ip address for ipv6."; config "false"; type inet:ipv6-address; } } } container mvpn-swt-grp-send-infos { config "false"; list mvpn-swt-grp-send-info { key "vrf-name address-family"; config "false"; description "Switch-group information sent by a specified vpn instance."; leaf vrf-name { description "Name of a vpn instance. "; config "false"; type string { length "0..32"; } } leaf address-family { description "Ipv4 or ipv6 address family."; config "false"; type enumeration { enum ipv4unicast { value "0"; description "ipv4unicast:"; } enum ipv6unicast { value "1"; Liu & Guo Expires October 19, 2015 [Page 25] Internet-Draft MVPN YANG Data Model April 2015 description "ipv6unicast:"; } } } leaf ipv4-swt-grp-address { description "Switch-group address for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-swt-grp-address { description "Switch-group address for ipv6."; config "false"; type inet:ipv6-address; } leaf reference-count { description "Number of vpn multicast groups joining a switch-group."; config "false"; type uint32 { range "1..4294967295"; } } container mvpn-swt-sg-send-infos { list mvpn-swt-sg-send-info { key "ipv4-src-address ipv4-grp-address"; config "false"; leaf ipv4-src-address { description "Source address on the mvpn for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-src-address { description "Source address on the mvpn for ipv6."; config "false"; type inet:ipv6-address; } leaf ipv4-grp-address { description "Group address on the mvpn for ipv4."; config "false"; type inet:ipv4-address; Liu & Guo Expires October 19, 2015 [Page 26] Internet-Draft MVPN YANG Data Model April 2015 } leaf ipv6-grp-address { description "Group address on the mvpn for ipv6."; config "false"; type inet:ipv6-address; } leaf swt-time { description "Switching duration of the vpn multicast (s, g) entry joining the switch-group. "; config "false"; type uint32 { range "1..4294967295"; } } } } } } container mvpn-swt-grp-recv-infos { config "false"; list mvpn-swt-grp-recv-info { key "vrf-name address-family"; config "false"; description "Switch-group information received by a specified vpn instance."; leaf vrf-name { description "Name of a vpn instance. "; config "false"; type string { length "0..32"; } } leaf address-family { description "Ipv4 or ipv6 address family."; config "false"; type enumeration { Liu & Guo Expires October 19, 2015 [Page 27] Internet-Draft MVPN YANG Data Model April 2015 enum ipv4unicast { value "0"; description "ipv4unicast:"; } enum ipv6unicast { value "1"; description "ipv6unicast:"; } } } leaf ipv4-swt-grp-address { description "Switch-group address for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-swt-grp-address { description "Switch-group address for ipv6."; config "false"; type inet:ipv6-address; } leaf reference-count { description "Number of vpn multicast groups joining the switch-group."; config "false"; type uint32 { range "1..4294967295"; } } leaf active-count { description "Number of active vpn multicast groups (with receivers) joining a switch-group."; config "false"; type uint32 { range "1..4294967295"; } } container sender-infos { list sender-info { key "ipv4-sender-address"; config "false"; leaf ipv4-sender-address { description "Bgp peer address of the PE that sends Liu & Guo Expires October 19, 2015 [Page 28] Internet-Draft MVPN YANG Data Model April 2015 switch-group information for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-sender-address { description "Bgp peer address of the PE that sends switch-group information for ipv6."; config "false"; type inet:ipv6-address; } leaf sender-active-cnt { description "Number of active vpn multicast groups (with receivers) referenced by a sender."; config "false"; type uint32 { range "1..4294967295"; } } container swt-sg-infos { list swt-sg-info { key "ipv4-src-address ipv4-grp-address"; config "false"; leaf ipv4-src-address { description "Mvpn source address for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-src-address { description "Mvpn source address for ipv6."; config "false"; type inet:ipv6-address; } leaf ipv4-grp-address { description "Mvpn group address for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-grp-address { description "Mvpn group address for ipv6."; Liu & Guo Expires October 19, 2015 [Page 29] Internet-Draft MVPN YANG Data Model April 2015 config "false"; type inet:ipv6-address; } leaf expire-time { description "Timeout duration of vpn (s, g) entries."; config "false"; type uint32 { range "1..4294967295"; } } leaf is-active { description "Flag indicating whether a vpn (s, g) entry is active."; config "false"; type boolean{ } } } } } } } } container mvpn-pmsi-infos { config "false"; list mvpn-pmsi-info { key "vrf-name address-family"; config "false"; description "i-pmsi & s-pmsi information."; leaf vrf-name { description "Name of a vpn instance. "; config "false"; type string { length "0..32"; } Liu & Guo Expires October 19, 2015 [Page 30] Internet-Draft MVPN YANG Data Model April 2015 } leaf address-family { description "ipv4 or ipv6 address family."; config "false"; type enumeration { enum ipv4unicast { value "0"; description "ipv4unicast:"; } enum ipv6unicast { value "1"; description "ipv6unicast:"; } } } leaf mvpn-pmsi-type { description "Type of mvpn pmsi"; config "false"; mandatory "true"; type enumeration { enum i-pmsi{ value "0"; description "i-pmsi information"; } enum s-pmsi{ value "1"; description "s-pmsi information"; } } } leaf tunnel-mode { description "Tunnel mode."; config "false"; mandatory "true"; type enumeration { enum invalid { value "0"; description "invalid:invalid"; } enum p2mp-te { value "1"; description "p2mp-te:p2mp-te"; } enum p2mp-mldp { value "2"; description "p2mp-mldp:p2mp-mldp"; } enum pim-ssm { Liu & Guo Expires October 19, 2015 [Page 31] Internet-Draft MVPN YANG Data Model April 2015 value "3"; description "pim-ssm:pim-ssm"; } enum pim-sm { value "4"; description "pim-sm:pim-sm"; } enum bidir-pim { value "5"; description "bidir-pim:bidir-pim"; } enum ingress-replication { value "6"; description "ingress-replication: ingress-replication"; } enum mp2mp-mldp { value "7"; description "mp2mp-mldp:mp2mp-mldp"; } } } leaf te-p2mp-id { description "P2mp id of the p2mp tunnel."; config "false"; default "0"; type uint16 { range "0..65535"; } } leaf te-tunnel-id { description "Id of the p2mp tunnel."; config "false"; type uint16 { range "1..65535"; } } leaf te-extend-tunnel-id { description "P2mp extended tunnel interface id."; config "false"; type uint16 { range "1..65535"; } } leaf mldp-root-addr { description "Ip address of the root of a p2mp ldp lsp."; config "false"; type inet:ipv4-address; Liu & Guo Expires October 19, 2015 [Page 32] Internet-Draft MVPN YANG Data Model April 2015 } leaf mldp-lsp-id { description "P2mp ldp lsp id."; config "false"; type string { length "1..256"; } } container mvpn-ipmsi-tnl-infos { list mvpn-ipmsi-tnl-info { key "tunnel-address"; config "false"; leaf tunnel-address { description "Tunnel node address."; config "false"; type inet:ipv4-address; } leaf tunnel-role { description "Role of a tunnel node."; config "false"; type enumeration { enum none { value "0"; description "none:nome"; } enum root { value "1"; description "root:root"; } enum leaf { value "2"; description "leaf:leaf"; } enum root-and-leaf { value "3"; description "root-and-leaf: root-and-leaf"; } } } } } container mvpn-spmsi-sg-infos { Liu & Guo Expires October 19, 2015 [Page 33] Internet-Draft MVPN YANG Data Model April 2015 list mvpn-spmsi-sg-info { key "ipv4-src-address ipv4-grp-address"; config "false"; leaf ipv4-src-address { description "Source address in s-pmsi for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-src-address { description "Source address in s-pmsi for ipv6."; config "false"; type inet:ipv6-address; } leaf ipv4-grp-address { description "Group address in s-pmsi for ipv4."; config "false"; type inet:ipv4-address; } leaf ipv6-grp-address { description "Group address in s-pmsi for ipv6."; config "false"; type inet:ipv6-address; } } } } } } 5. IANA Considerations This draft includes no request to IANA. Liu & Guo Expires October 19, 2015 [Page 34] Internet-Draft MVPN YANG Data Model April 2015 6. Security Considerations The data model defined does not create any security implications. This draft does not change any underlying security issues inherent in [I-D.ietf-netmod-routing-cfg]. 7. Acknowledgements TBD 8. References 8.1. Normative References [I-D.ietf-netmod-routing-cfg] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing Management", draft-ietf-netmod-routing-cfg-17 (work in progress), March 2015. [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, October 2010. [RFC6037] Rosen, E., Cai, Y., and IJ. Wijnands, "Cisco Systems' Solution for Multicast in BGP/MPLS IP VPNs", RFC 6037, October 2010. [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. Bierman, "Network Configuration Protocol (NETCONF)", RFC 6241, June 2011. [RFC6513] Rosen, E. and R. Aggarwal, "Multicast in MPLS/BGP IP VPNs", RFC 6513, February 2012. [RFC6514] Aggarwal, R., Rosen, E., Morin, T., and Y. Rekhter, "BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs", RFC 6514, February 2012. 8.2. Informative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. Authors' Addresses Liu & Guo Expires October 19, 2015 [Page 35] Internet-Draft MVPN YANG Data Model April 2015 Yisong Liu Huawei Huawei Bld., No.156 Beiqing Rd. Beijing 100095 China Email: liuyisong@huawei.com Feng Guo Huawei Huawei Bld., No.156 Beiqing Rd. Beijing 100095 China Email: guofeng@huawei.com Liu & Guo Expires October 19, 2015 [Page 36]