draft-ietf-bess-mvpn-yang-00.txt   draft-ietf-bess-mvpn-yang-01.txt 
BESS Working Group Y. Liu BESS Working Group Y. Liu
Internet Draft F. Guo Internet Draft F. Guo
Intended status: Standards Track Huawei Technologies Intended status: Standards Track Huawei Technologies
Expires: July 23, 2019 S. Litkowski Expires: September 6, 2019 S. Litkowski
Orange Orange
X. Liu X. Liu
Volta Networks Volta Networks
R. Kebler R. Kebler
M. Sivakumar M. Sivakumar
Juniper Networks Juniper Networks
January 23, 2019 March 6, 2019
Yang Data Model for Multicast in MPLS/BGP IP VPNs Yang Data Model for Multicast in MPLS/BGP IP VPNs
draft-ietf-bess-mvpn-yang-00 draft-ietf-bess-mvpn-yang-01
Status of this Memo Status of this Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet- other groups may also distribute working documents as Internet-
Drafts. Drafts.
skipping to change at page 1, line 38 skipping to change at page 1, line 38
months and may be updated, replaced, or obsoleted by other documents months and may be updated, replaced, or obsoleted by other documents
at any time. It is inappropriate to use Internet-Drafts as at any time. It is inappropriate to use Internet-Drafts as
reference material or to cite them other than as "work in progress." reference material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html http://www.ietf.org/shadow.html
This Internet-Draft will expire on July 23, 2019. This Internet-Draft will expire on September 6, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 18 skipping to change at page 2, line 18
Abstract Abstract
This document defines a YANG data model that can be used to This document defines a YANG data model that can be used to
configure and manage multicast in MPLS/BGP IP VPNs. configure and manage multicast in MPLS/BGP IP VPNs.
Table of Contents Table of Contents
1. Introduction ................................................ 2 1. Introduction ................................................ 2
1.1. Terminology ............................................ 3 1.1. Terminology ............................................ 3
1.2. Tree Diagrams .......................................... 3 1.2. Tree Diagrams .......................................... 4
1.3. Prefixes in Data Node Names ............................ 3 1.3. Prefixes in Data Node Names ............................ 4
2. Design of Data model......................................... 4 2. Design of Data model......................................... 4
2.1. Scope of model ......................................... 4 2.1. Scope of model ......................................... 4
2.2. Optional capabilities .................................. 4 2.2. Optional capabilities .................................. 5
2.3. Position of address family in hierarchy ................ 5 2.3. Position of address family in hierarchy ................ 5
3. Module Structure ............................................ 5 3. Module Structure ............................................ 5
4. MVPN YANG Modules .......................................... 11 4. MVPN YANG Modules .......................................... 12
5. Security Considerations .................................... 28 5. Security Considerations .................................... 32
6. IANA Considerations ........................................ 28 6. IANA Considerations ........................................ 32
7. References ................................................. 29 7. References ................................................. 32
7.1. Normative References .................................. 29 7.1. Normative References .................................. 32
7.2. Informative References ................................ 30 7.2. Informative References ................................ 33
8. Acknowledgments ............................................ 30 8. Acknowledgments ............................................ 34
1. Introduction 1. Introduction
YANG [RFC6020] [RFC7950] is a data definition language that was YANG [RFC6020] [RFC7950] is a data definition language that was
introduced to define the contents of a conceptual data store that introduced to define the contents of a conceptual data store that
allows networked devices to be managed using NETCONF [RFC6241]. allows networked devices to be managed using NETCONF [RFC6241].
YANG is proving relevant beyond its initial confines, as bindings to YANG is proving relevant beyond its initial confines, as bindings to
other interfaces (e.g. REST) and encoding other than XML (e.g. JSON) 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 are being defined. Furthermore, YANG data models can be used as the
basis of implementation for other interface, such as CLI and basis of implementation for other interface, such as CLI and
skipping to change at page 3, line 37 skipping to change at page 3, line 37
Sparse Mode [RFC7761]. Sparse Mode [RFC7761].
SSM: SSM:
Source Specific Multicast [RFC4607]. Source Specific Multicast [RFC4607].
BIDIR-PIM: BIDIR-PIM:
Bidirectional Protocol Independent Multicast [RFC5015]. Bidirectional Protocol Independent Multicast [RFC5015].
MLDP: MLDP P2MP:
Multipoint Label Distribution Protocol [RFC6388]. Multipoint Label Distribution Protocol for Point to Multipoint
[RFC6388].
P2MP TE: MLDP MP2MP:
Point to Multipoint Traffic Engineering [RFC4875]. Multipoint Label Distribution Protocol for Multipoint to
Multipoint [RFC6388].
RSVP TE P2MP:
Resource Reservation Protocol - Traffic Engineering for Point to
Multipoint [RFC4875].
BIER:
Bit Index Explicit Replication [RFC8279].
1.2. Tree Diagrams 1.2. Tree Diagrams
Tree diagrams used in this document follow the notation defined in Tree diagrams used in this document follow the notation defined in
[RFC8340]. [RFC8340].
1.3. Prefixes in Data Node Names 1.3. Prefixes in Data Node Names
In this document, names of data nodes, actions, and other data model In this document, names of data nodes, actions, and other data model
objects are often used without a prefix, as long as it is clear from objects are often used without a prefix, as long as it is clear from
the context in which YANG module each name is defined. Otherwise, the context in which YANG module each name is defined. Otherwise,
names are prefixed using the standard prefix associated with the names are prefixed using the standard prefix associated with the
corresponding YANG module, as shown in Table 1
+----------+------------------------+-------------------------+ +----------+---------------------------+----------------------------+
| Prefix | YANG module | Reference | | Prefix | YANG module | Reference |
+-----------+--------------------------+----------------------------+ +-----------+--------------------------+----------------------------+
| ni | ietf-network-instance | [I-D.ietf-ni-model] | | ni | ietf-network-instance | [I-D.ietf-ni-model] |
| l3vpn | ietf-bgp-l3vpn | [I-D.ietf-l3vpn-yang] | | l3vpn | ietf-bgp-l3vpn | [I-D.ietf-l3vpn-yang] |
| inet | ietf-inet-types | [RFC6991] | | inet | ietf-inet-types | [RFC6991] |
skipping to change at page 6, line 11 skipping to change at page 6, line 23
Where fields are not genuinely essential to protocol operation, they Where fields are not genuinely essential to protocol operation, they
are marked as optional. Some fields will be essential but have a are marked as optional. Some fields will be essential but have a
default specified, so that they need not be configured explicitly. default specified, so that they need not be configured explicitly.
This MVPN model augments "/ni:network-instances/ni:network- This MVPN model augments "/ni:network-instances/ni:network-
instance/ni:ni-type/l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv4:" for IPv4 instance/ni:ni-type/l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv4:" for IPv4
MVPN service and "/ni:network-instances/ni:network-instance/ni:ni- MVPN service and "/ni:network-instances/ni:network-instance/ni:ni-
type/l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv6" for IPv6 MVPN service type/l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv6" for IPv6 MVPN service
specified in [I-D.ietf-l3vpn-yang]. specified in [I-D.ietf-l3vpn-yang].
augment /ni:network-instances/ni:network-instance/ni:ni-type augment /ni:network-instances/ni:network-instance/ni:ni-type
/l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv4: /l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv4:
+--rw multicast +--rw multicast
+--rw signaling-mode? enumeration +--rw signaling-mode? enumeration
+--rw auto-discovery-mode? enumeration +--rw auto-discovery-mode? enumeration
+--rw mvpn-type? enumeration +--rw mvpn-type? enumeration
+--rw is-sender-site? boolean {mvpn-sender}? +--rw is-sender-site? boolean {mvpn-sender}?
+--rw rpt-spt-mode? enumeration +--rw rpt-spt-mode? enumeration
+--rw ecmp-load-balance-mode?
| enumeration {mvpn-ecmp-load-balance}?
+--rw mvpn-route-targets {mvpn-separate-rt}? +--rw mvpn-route-targets {mvpn-separate-rt}?
| +--rw mvpn-route-target* [mvpn-rt-type mvpn-rt-value] | +--rw mvpn-route-target* [mvpn-rt-type mvpn-rt-value]
| +--rw mvpn-rt-type enumeration | +--rw mvpn-rt-type enumeration
| +--rw mvpn-rt-value string | +--rw mvpn-rt-value string
+--rw mvpn-ipmsi-tunnel-ipv4 +--rw mvpn-ipmsi-tunnel-ipv4
| +--rw tunnel-type? enumeration | +--rw tunnel-type? p-tunnel
| +--rw (ipmsi-tunnel-attribute)? | +--rw (ipmsi-tunnel-attribute)?
| | +--:(p2mp-te) | | +--:(rsvp-te-p2mp)
| | | +--rw te-p2mp-template? string | | | +--rw rsvp-te-p2mp-template? string
| | +--:(p2mp-mldp) | | +--:(mldp-p2mp)
| | +--:(pim-ssm) | | +--:(pim-ssm)
| | | +--rw ssm-default-group-addr? | | | +--rw ssm-default-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(pim-sm) | | +--:(pim-sm)
| | | +--rw sm-default-group-addr? | | | +--rw sm-default-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(bidir-pim) | | +--:(bidir-pim)
| | | +--rw bidir-default-group-addr? | | | +--rw bidir-default-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(ingress-replication) | | +--:(ingress-replication)
| | +--:(mp2mp-mldp) | | +--:(mldp-mp2mp)
| | +--:(bier)
| | +--rw inclusive-sub-domain-id? uint8
| | +--rw inclusive-bitstring-length? uint16
| +--ro (pmsi-tunnel-state-attribute)? | +--ro (pmsi-tunnel-state-attribute)?
| | +--:(p2mp-te) | | +--:(rsvp-te-p2mp)
| | | +--ro te-p2mp-id? uint16 | | | +--ro p2mp-id? uint16
| | | +--ro te-tunnel-id? uint16 | | | +--ro tunnel-id? uint16
| | | +--ro te-extend-tunnel-id? uint16 | | | +--ro extend-tunnel-id? uint16
| | +--:(p2mp-mldp) | | +--:(mldp-p2mp)
| | | +--ro mldp-root-addr? inet:ip-address | | | +--ro mldp-root-addr? inet:ip-address
| | | +--ro mldp-lsp-id? string | | | +--ro mldp-lsp-id? string
| | +--:(pim-ssm) | | +--:(pim-ssm)
| | | +--ro ssm-group-addr? | | | +--ro ssm-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(pim-sm) | | +--:(pim-sm)
| | | +--ro sm-group-addr? | | | +--ro sm-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(bidir-pim) | | +--:(bidir-pim)
| | | +--ro bidir-group-addr? | | | +--ro bidir-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(ingress-replication) | | +--:(ingress-replication)
| | +--:(mp2mp-mldp) | | +--:(mldp-mp2mp)
| +--ro tunnel-role? enumeration | | +--:(bier)
| | +--ro sub-domain-id? uint8
| | +--ro bitstring-length? uint16
| | +--ro bfir-id? uint16
| +--ro tunnel-role? enumeration
| +--ro upstream-vpn-label?
| | rt-types:mpls-label {mvpn-aggregation-tunnel}?
| +--ro mvpn-pmsi-ipv4-ref-sg-entries | +--ro mvpn-pmsi-ipv4-ref-sg-entries
| +--ro mvpn-pmsi-ipv4-ref-sg-entries* | +--ro mvpn-pmsi-ipv4-ref-sg-entries*
| [ipv4-source-address ipv4-group-address] | [ipv4-source-address ipv4-group-address]
| +--ro ipv4-source-address inet:ipv4-address | +--ro ipv4-source-address inet:ipv4-address
| +--ro ipv4-group-address | +--ro ipv4-group-address
| rt-types:ipv4-multicast-group-address | rt-types:ipv4-multicast-group-address
+--rw mvpn-spmsi-tunnels-ipv4 +--rw mvpn-spmsi-tunnels-ipv4
+--rw switch-delay-time? uint8 +--rw switch-delay-time? uint8
+--rw switch-back-holddown-time? uint16 +--rw switch-back-holddown-time? uint16
+--rw tunnel-limit? uint16 +--rw tunnel-limit? uint16
+--rw mvpn-spmsi-tunnel-ipv4* [tunnel-type] +--rw mvpn-spmsi-tunnel-ipv4* [tunnel-type]
+--rw tunnel-type enumeration +--rw tunnel-type p-tunnel
+--rw (spmsi-tunnel-attribute)? +--rw (spmsi-tunnel-attribute)?
| +--:(p2mp-te) | +--:(rsvp-te-p2mp)
| | +--rw te-p2mp-template? string | | +--rw rsvp-te-p2mp-template? string
| +--:(p2mp-mldp) | +--:(p2mp-mldp)
| +--:(pim-ssm) | +--:(pim-ssm)
| | +--rw ssm-group-pool-addr? | | +--rw ssm-group-pool-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--rw ssm-group-pool-masklength? uint8 | | +--rw ssm-group-pool-masklength? uint8
| +--:(pim-sm) | +--:(pim-sm)
| | +--rw sm-group-pool-addr? | | +--rw sm-group-pool-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--rw sm-group-pool-masklength? uint8 | | +--rw sm-group-pool-masklength? uint8
| +--:(bidir-pim) | +--:(bidir-pim)
| | +--rw bidir-group-pool-addr? | | +--rw bidir-group-pool-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--rw bidir-group-pool-masklength? uint8 | | +--rw bidir-group-pool-masklength? uint8
| +--:(ingress-replication) | +--:(ingress-replication)
| +--:(mp2mp-mldp) | +--:(mldp-mp2mp)
| +--:(bier)
| +--rw selective-sub-domain-id? uint8
| +--rw selective-bitstring-length? uint16
+--rw switch-threshold? uint32 +--rw switch-threshold? uint32
+--rw per-item-tunnel-limit? uint16 +--rw per-item-tunnel-limit? uint16
+--rw switch-wildcard-mode? enumeration +--rw switch-wildcard-mode?
| {mvpn-switch-wildcard-mode}? | enumeration {mvpn-switch-wildcard}?
+--rw explicit-tracking-mode?
| enumeration {mvpn-explicit-tracking}?
+--rw (address-mask-or-acl)? +--rw (address-mask-or-acl)?
| +--:(address-mask) | +--:(address-mask)
| | +--rw ipv4-group-addr? | | +--rw ipv4-group-addr?
| | | rt-types:ipv4-multicast-group-address | | | rt-types:ipv4-multicast-group-address
| | +--rw ipv4-group-masklength? uint8 | | +--rw ipv4-group-masklength? uint8
| | +--rw ipv4-source-addr? | | +--rw ipv4-source-addr?
| | | inet:ipv4-address | | | inet:ipv4-address
| | +--rw ipv4-source-masklength? uint8 | | +--rw ipv4-source-masklength? uint8
| +--:(acl-name) | +--:(acl-name)
| +--rw group-acl-ipv4? | +--rw group-acl-ipv4?
| -> /acl:acls/acl/name | -> /acl:acls/acl/name
+--ro (pmsi-tunnel-state-attribute)? +--ro (pmsi-tunnel-state-attribute)?
| +--:(p2mp-te) | +--:(rsvp-te-p2mp)
| | +--ro te-p2mp-id? uint16 | | +--ro p2mp-id? uint16
| | +--ro te-tunnel-id? uint16 | | +--ro tunnel-id? uint16
| | +--ro te-extend-tunnel-id? uint16 | | +--ro extend-tunnel-id? uint16
| +--:(p2mp-mldp) | +--:(mldp-p2mp)
| | +--ro mldp-root-addr? inet:ip-address | | +--ro mldp-root-addr? inet:ip-address
| | +--ro mldp-lsp-id? string | | +--ro mldp-lsp-id? string
| +--:(pim-ssm) | +--:(pim-ssm)
| | +--ro ssm-group-addr? | | +--ro ssm-group-addr?
| | rt-types:ip-multicast-group-address | | rt-types:ip-multicast-group-address
| +--:(pim-sm) | +--:(pim-sm)
| | +--ro sm-group-addr? | | +--ro sm-group-addr?
| | rt-types:ip-multicast-group-address | | rt-types:ip-multicast-group-address
| +--:(bidir-pim) | +--:(bidir-pim)
| | +--ro bidir-group-addr? | | +--ro bidir-group-addr?
| | rt-types:ip-multicast-group-address | | rt-types:ip-multicast-group-address
| +--:(ingress-replication) | +--:(ingress-replication)
| +--:(mp2mp-mldp) | +--:(mldp-mp2mp)
| +--:(bier)
| +--ro sub-domain-id? uint8
| +--ro bitstring-length? uint16
| +--ro bfir-id? uint16
+--ro tunnel-role? enumeration +--ro tunnel-role? enumeration
+--ro upstream-vpn-label?
| rt-types:mpls-label {mvpn-aggregation-tunnel}?
+--ro mvpn-pmsi-ipv4-ref-sg-entries +--ro mvpn-pmsi-ipv4-ref-sg-entries
+--ro mvpn-pmsi-ipv4-ref-sg-entries* +--ro mvpn-pmsi-ipv4-ref-sg-entries*
[ipv4-source-address ipv4-group-address] [ipv4-source-address ipv4-group-address]
+--ro ipv4-source-address inet:ipv4-address +--ro ipv4-source-address inet:ipv4-address
+--ro ipv4-group-address +--ro ipv4-group-address
rt-types:ipv4-multicast-group-address rt-types:ipv4-multicast-group-address
augment /ni:network-instances/ni:network-instance/ni:ni-type augment /ni:network-instances/ni:network-instance/ni:ni-type
/l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv6: /l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv6:
+--rw multicast +--rw multicast
+--rw signaling-mode? enumeration +--rw signaling-mode? enumeration
+--rw auto-discovery-mode? enumeration +--rw auto-discovery-mode? enumeration
+--rw mvpn-type? enumeration +--rw mvpn-type? enumeration
+--rw is-sender-site? boolean {mvpn-sender}? +--rw is-sender-site? boolean {mvpn-sender}?
+--rw rpt-spt-mode? enumeration +--rw rpt-spt-mode? enumeration
+--rw ecmp-load-balance-mode?
| enumeration {mvpn-ecmp-load-balance}?
+--rw mvpn-route-targets {mvpn-separate-rt}? +--rw mvpn-route-targets {mvpn-separate-rt}?
| +--rw mvpn-route-target* [mvpn-rt-type mvpn-rt-value] | +--rw mvpn-route-target* [mvpn-rt-type mvpn-rt-value]
| +--rw mvpn-rt-type enumeration | +--rw mvpn-rt-type enumeration
| +--rw mvpn-rt-value string | +--rw mvpn-rt-value string
+--rw mvpn-ipmsi-tunnel-ipv6 +--rw mvpn-ipmsi-tunnel-ipv6
| +--rw tunnel-type? enumeration | +--rw tunnel-type? p-tunnel
| +--rw (ipmsi-tunnel-attribute)? | +--rw (ipmsi-tunnel-attribute)?
| | +--:(p2mp-te) | | +--:(rsvp-te-p2mp)
| | | +--rw te-p2mp-template? string | | | +--rw rsvp-te-p2mp-template? string
| | +--:(p2mp-mldp) | | +--:(mldp-p2mp)
| | +--:(pim-ssm) | | +--:(pim-ssm)
| | | +--rw ssm-default-group-addr? | | | +--rw ssm-default-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(pim-sm) | | +--:(pim-sm)
| | | +--rw sm-default-group-addr? | | | +--rw sm-default-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(bidir-pim) | | +--:(bidir-pim)
| | | +--rw bidir-default-group-addr? | | | +--rw bidir-default-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(ingress-replication) | | +--:(ingress-replication)
| | +--:(mp2mp-mldp) | | +--:(mldp-mp2mp)
| | +--:(bier)
| | +--rw inclusive-sub-domain-id? uint8
| | +--rw inclusive-bitstring-length? uint16
| +--ro (pmsi-tunnel-state-attribute)? | +--ro (pmsi-tunnel-state-attribute)?
| | +--:(p2mp-te) | | +--:(rsvp-te-p2mp)
| | | +--ro te-p2mp-id? uint16 | | | +--ro p2mp-id? uint16
| | | +--ro te-tunnel-id? uint16 | | | +--ro tunnel-id? uint16
| | | +--ro te-extend-tunnel-id? uint16 | | | +--ro extend-tunnel-id? uint16
| | +--:(p2mp-mldp) | | +--:(mldp-p2mp)
| | | +--ro mldp-root-addr? inet:ip-address | | | +--ro mldp-root-addr? inet:ip-address
| | | +--ro mldp-lsp-id? string | | | +--ro mldp-lsp-id? string
| | +--:(pim-ssm) | | +--:(pim-ssm)
| | | +--ro ssm-group-addr? | | | +--ro ssm-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(pim-sm) | | +--:(pim-sm)
| | | +--ro sm-group-addr? | | | +--ro sm-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(bidir-pim) | | +--:(bidir-pim)
| | | +--ro bidir-group-addr? | | | +--ro bidir-group-addr?
| | | rt-types:ip-multicast-group-address | | | rt-types:ip-multicast-group-address
| | +--:(ingress-replication) | | +--:(ingress-replication)
| | +--:(mp2mp-mldp) | | +--:(mldp-mp2mp)
| +--ro tunnel-role? enumeration | | +--:(bier)
| | +--ro sub-domain-id? uint8
| | +--ro bitstring-length? uint16
| | +--ro bfir-id? uint16
| +--ro tunnel-role? enumeration
| +--ro upstream-vpn-label?
| | rt-types:mpls-label {mvpn-aggregation-tunnel}?
| +--ro mvpn-pmsi-ipv6-ref-sg-entries | +--ro mvpn-pmsi-ipv6-ref-sg-entries
| +--ro mvpn-pmsi-ipv6-ref-sg-entries* | +--ro mvpn-pmsi-ipv6-ref-sg-entries*
| [ipv6-source-address ipv6-group-address] | [ipv6-source-address ipv6-group-address]
| +--ro ipv6-source-address inet:ipv6-address | +--ro ipv6-source-address inet:ipv6-address
| +--ro ipv6-group-address | +--ro ipv6-group-address
| rt-types:ipv6-multicast-group-address | rt-types:ipv6-multicast-group-address
+--rw mvpn-spmsi-tunnels-ipv6 +--rw mvpn-spmsi-tunnels-ipv6
+--rw switch-delay-time? uint8 +--rw switch-delay-time? uint8
+--rw switch-back-holddown-time? uint16 +--rw switch-back-holddown-time? uint16
+--rw tunnel-limit? uint16 +--rw tunnel-limit? uint16
+--rw mvpn-spmsi-tunnel-ipv6* [tunnel-type] +--rw mvpn-spmsi-tunnel-ipv6* [tunnel-type]
+--rw tunnel-type enumeration +--rw tunnel-type p-tunnel
+--rw (spmsi-tunnel-attribute)? +--rw (spmsi-tunnel-attribute)?
| +--:(p2mp-te) | +--:(rsvp-te-p2mp)
| | +--rw te-p2mp-template? string | | +--rw rsvp-te-p2mp-template? string
| +--:(p2mp-mldp) | +--:(p2mp-mldp)
| +--:(pim-ssm) | +--:(pim-ssm)
| | +--rw ssm-group-pool-addr? | | +--rw ssm-group-pool-addr?
| | rt-types:ip-multicast-group-address | | rt-types:ip-multicast-group-address
| | +--rw ssm-group-pool-masklength? uint8 | | +--rw ssm-group-pool-masklength? uint8
| +--:(pim-sm) | +--:(pim-sm)
| | +--rw sm-group-pool-addr? | | +--rw sm-group-pool-addr?
| | rt-types:ip-multicast-group-address | | rt-types:ip-multicast-group-address
| | +--rw sm-group-pool-masklength? uint8 | | +--rw sm-group-pool-masklength? uint8
| +--:(bidir-pim) | +--:(bidir-pim)
| | +--rw bidir-group-pool-addr? | | +--rw bidir-group-pool-addr?
| | rt-types:ip-multicast-group-address | | rt-types:ip-multicast-group-address
| | +--rw bidir-group-pool-masklength? uint8 | | +--rw bidir-group-pool-masklength? uint8
| +--:(ingress-replication) | +--:(ingress-replication)
| +--:(mp2mp-mldp) | +--:(mldp-mp2mp)
| +--:(bier)
| +--rw selective-sub-domain-id? uint8
| +--rw selective-bitstring-length? uint16
+--rw switch-threshold? uint32 +--rw switch-threshold? uint32
+--rw per-item-tunnel-limit? uint16 +--rw per-item-tunnel-limit? uint16
+--rw switch-wildcard-mode? enumeration +--rw switch-wildcard-mode?
| {mvpn-switch-wildcard-mode}? | enumeration {mvpn-switch-wildcard}?
+--rw explicit-tracking-mode?
| enumeration {mvpn-explicit-tracking}?
+--rw (address-mask-or-acl)? +--rw (address-mask-or-acl)?
| +--:(address-mask) | +--:(address-mask)
| | +--rw ipv6-group-addr? | | +--rw ipv6-group-addr?
| | | rt-types:ipv6-multicast-group-address | | | rt-types:ipv6-multicast-group-address
| | +--rw ipv6-groupmasklength? uint8 | | +--rw ipv6-groupmasklength? uint8
| | +--rw ipv6-source-addr? | | +--rw ipv6-source-addr?
| | | inet:ipv6-address | | | inet:ipv6-address
| | +--rw ipv6-source-masklength? uint8 | | +--rw ipv6-source-masklength? uint8
| +--:(acl-name) | +--:(acl-name)
| +--rw group-acl-ipv6? | +--rw group-acl-ipv6?
| -> /acl:acls/acl/name | -> /acl:acls/acl/name
+--ro (pmsi-tunnel-state-attribute)? +--ro (pmsi-tunnel-state-attribute)?
| +--:(p2mp-te) | +--:(rsvp-te-p2mp)
| | +--ro te-p2mp-id? uint16 | | +--ro p2mp-id? uint16
| | +--ro te-tunnel-id? uint16 | | +--ro tunnel-id? uint16
| | +--ro te-extend-tunnel-id? uint16 | | +--ro extend-tunnel-id? uint16
| +--:(p2mp-mldp) | +--:(mldp-p2mp)
| | +--ro mldp-root-addr? inet:ip-address | | +--ro mldp-root-addr? inet:ip-address
| | +--ro mldp-lsp-id? string | | +--ro mldp-lsp-id? string
| +--:(pim-ssm) | +--:(pim-ssm)
| | +--ro ssm-group-addr? | | +--ro ssm-group-addr?
| | rt-types:ip-multicast-group-address | | rt-types:ip-multicast-group-address
| +--:(pim-sm) | +--:(pim-sm)
| | +--ro sm-group-addr? | | +--ro sm-group-addr?
| | rt-types:ip-multicast-group-address | | rt-types:ip-multicast-group-address
| +--:(bidir-pim) | +--:(bidir-pim)
| | +--ro bidir-group-addr? | | +--ro bidir-group-addr?
| | rt-types:ip-multicast-group-address | | rt-types:ip-multicast-group-address
| +--:(ingress-replication) | +--:(ingress-replication)
| +--:(mp2mp-mldp) | +--:(mldp-mp2mp)
| +--:(bier)
| +--ro sub-domain-id? uint8
| +--ro bitstring-length? uint16
| +--ro bfir-id? uint16
+--ro tunnel-role? enumeration +--ro tunnel-role? enumeration
+--ro upstream-vpn-label?
| rt-types:mpls-label {mvpn-aggregation-tunnel}?
+--ro mvpn-pmsi-ipv6-ref-sg-entries +--ro mvpn-pmsi-ipv6-ref-sg-entries
+--ro mvpn-pmsi-ipv6-ref-sg-entries* +--ro mvpn-pmsi-ipv6-ref-sg-entries*
[ipv6-source-address ipv6-group-address] [ipv6-source-address ipv6-group-address]
+--ro ipv6-source-address inet:ipv6-address +--ro ipv6-source-address inet:ipv6-address
+--ro ipv6-group-address +--ro ipv6-group-address
rt-types:ipv6-multicast-group-address rt-types:ipv6-multicast-group-address
4. MVPN YANG Modules 4. MVPN YANG Modules
<CODE BEGINS> file "ietf-mvpn@2018-11-08.yang" <CODE BEGINS> file "ietf-mvpn@2019-03-05.yang"
module ietf-mvpn { module ietf-mvpn {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-mvpn"; namespace "urn:ietf:params:xml:ns:yang:ietf-mvpn";
prefix mvpn; prefix mvpn;
import ietf-network-instance { import ietf-network-instance {
prefix ni; prefix ni;
} }
import ietf-bgp-l3vpn { import ietf-bgp-l3vpn {
skipping to change at page 12, line 9 skipping to change at page 13, line 16
<mailto:rkebler@juniper.net> <mailto:rkebler@juniper.net>
Mahesh Sivakumar Mahesh Sivakumar
<mailto:sivakumar.mahesh@gmail.com>"; <mailto:sivakumar.mahesh@gmail.com>";
description description
"This YANG module defines the generic configuration "This YANG module defines the generic configuration
and operational state data for mvpn, which is common across and operational state data for mvpn, which is common across
all of the vendor implementations of the protocol. It is all of the vendor implementations of the protocol. It is
intended that the module will be extended by vendors to intended that the module will be extended by vendors to
define vendor-specific mvpn parameters."; define vendor-specific mvpn parameters.";
revision 2019-03-05 {
description
"Add bier as a type of P-Tunnel and Errata.";
reference
"RFC XXXX: A YANG Data Model for MVPN";
}
revision 2018-11-08 { revision 2018-11-08 {
description description
"Update for leaf type and reference."; "Update for leaf type and reference.";
reference reference
"RFC XXXX: A YANG Data Model for MVPN"; "RFC XXXX: A YANG Data Model for MVPN";
} }
revision 2018-05-10 { revision 2018-05-10 {
description description
"Update for Model structure and errata."; "Update for Model structure and errata.";
reference reference
skipping to change at page 12, line 39 skipping to change at page 14, line 4
"Update S-PMSI configuration and errata."; "Update S-PMSI configuration and errata.";
reference reference
"RFC XXXX: A YANG Data Model for MVPN"; "RFC XXXX: A YANG Data Model for MVPN";
} }
revision 2016-10-28 { revision 2016-10-28 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for MVPN"; "RFC XXXX: A YANG Data Model for MVPN";
} }
/* Features */ /* Features */
feature mvpn-sender { feature mvpn-sender {
description description
"Support configuration to specify the current PE as the sender PE"; "Support configuration to specify the current PE as the
sender PE";
} }
feature mvpn-separate-rt { feature mvpn-separate-rt {
description description
"Support route-targets configuration of MVPN when they are "Support route-targets configuration of MVPN when they are
different from the route-targets of unicast L3VPN."; different from the route-targets of unicast L3VPN.";
} }
feature mvpn-switch-wildcard-mode { feature mvpn-switch-wildcard {
description description
"Support configuration to use wildcard mode when multicast "Support configuration to use wildcard mode when multicast
packets switch from I-PMSI to S-PMSI."; packets switch from I-PMSI to S-PMSI.";
} }
feature mvpn-explicit-tracking {
description
"Support configuration to use explicit tracking for leaf PEs
when multicast packets forward by I-PMSI or S-PMSI.";
}
feature mvpn-aggregation-tunnel {
description
"Support more than one VPN multicast service to use the same
p-tunnel.";
}
feature mvpn-ecmp-load-balance {
description
"Support multicast entries in the private network to be
distributed on the ECMP path of bier in the public network.";
}
typedef p-tunnel {
type enumeration {
enum no-tunnel-present {
value 0;
description "No tunnel information present";
}
enum rsvp-te-p2mp {
value 1;
description "RSVP TE P2MP tunnel";
}
enum mldp-p2mp {
value 2;
description "MLDP P2MP tunnel";
}
enum pim-ssm {
value 3;
description "PIM SSM tree in public net";
}
enum pim-sm {
value 4;
description "PIM SM tree in public net";
}
enum bidir-pim {
value 5;
description "BIDIR-PIM tree in public net";
}
enum ingress-replication {
value 6;
description "Ingress Replication p2p tunnel.";
}
enum mldp-mp2mp {
value 7;
description "MLDP MP2MP tunnel";
}
enum bier {
value 11;
description "bier underlay";
}
}
description "Provider tunnel type definition.";
}
grouping mvpn-instance-config { grouping mvpn-instance-config {
description "Mvpn basic configuration per instance."; description "Mvpn basic configuration per instance.";
leaf signaling-mode { leaf signaling-mode {
type enumeration { type enumeration {
enum invalid { enum none {
value "0"; value 0;
description "invalid"; description "No signaling";
} }
enum bgp { enum bgp {
value "1"; value 1;
description "bgp"; description "bgp signaling";
} }
enum pim { enum pim {
value "2"; value 2;
description "pim"; description "pim signaling";
} }
enum mldp { enum mldp-in-band {
value "3"; value 3;
description "mldp"; description "mldp in-band signaling";
} }
} }
default "invalid"; default "none";
description "Signaling mode for C-multicast route."; description "Signaling mode for C-multicast route.";
} }
leaf auto-discovery-mode { leaf auto-discovery-mode {
type enumeration { type enumeration {
enum invalid { enum none {
value "0"; value 0;
description "no auto-discovery"; description "no auto-discovery signaling";
} }
enum pim { enum pim {
value "1"; value 1;
description "auto-discovery by PIM signaling"; description "auto-discovery by PIM signaling";
} }
enum bgp { enum bgp {
value "2"; value 2;
description "auto-discovery by BGP signaling"; description "auto-discovery by BGP signaling";
} }
} }
default "invalid"; default "none";
description "Auto discovery mode."; description "Auto discovery mode of MVPN PE members.";
} }
leaf mvpn-type { leaf mvpn-type {
type enumeration { type enumeration {
enum rosen-mvpn { enum rosen-mvpn {
value "0"; value 0;
description "Rosen mvpn mode referenced RFC6037"; description "Rosen mvpn mode referenced RFC6037";
} }
enum ng-mvpn { enum ng-mvpn {
value "1"; value 1;
description "BGP/MPLS mvpn mode referenced RFC6513&RFC6514"; description
"BGP/MPLS mvpn mode referenced RFC6513&RFC6514";
} }
} }
default "ng-mvpn"; default "ng-mvpn";
description description
"Mvpn type, which can be rosen mvpn mode or ng mvpn mode."; "Mvpn type, which can be rosen mvpn mode or ng mvpn mode.";
} }
leaf is-sender-site { leaf is-sender-site {
if-feature mvpn-sender; if-feature mvpn-sender;
type boolean; type boolean;
default false; default false;
description "Configure the current PE as a sender PE."; description "Configure the current PE as a sender PE.";
} }
leaf rpt-spt-mode { leaf rpt-spt-mode {
type enumeration { type enumeration {
enum spt-only { enum spt-only {
value "0"; value 0;
description description
"Only spt mode for crossing public net."; "Only spt entries can cross the public net.";
} }
enum rpt-spt { enum rpt-spt {
value "1"; value 1;
description description
"Both rpt and spt mode for corssing public net."; "Both rpt and spt entries can corss the public net.";
} }
} }
description description
"ASM mode in multicast private net for crossing public net."; "ASM mode in multicast private network for crossing
public net.";
}
leaf ecmp-load-balance-mode {
if-feature mvpn-ecmp-load-balance;
type enumeration {
enum none {
value 0;
description
"No load balancing for multicast entries.";
}
enum source {
value 1;
description
"Load balancing based on multicast source address.";
}
enum group {
value 2;
description
"Load balancing based on multicast group address.";
}
enum source-group {
value 3;
description
"Load balancing based on multicast source and group
address.";
}
}
description
"Distribution mode of multicast entries in the private
network on the ECMP path of bier in the public network.";
} }
}/* mvpn-instance-config */ }/* mvpn-instance-config */
grouping mvpn-rts { grouping mvpn-rts {
description "May be different from l3vpn unicast route-targets"; description
"May be different from l3vpn unicast route-targets.";
container mvpn-route-targets{ container mvpn-route-targets{
if-feature mvpn-separate-rt; if-feature mvpn-separate-rt;
description "Multicast vpn route-targets"; description "Multicast vpn route-targets";
list mvpn-route-target { list mvpn-route-target {
key "mvpn-rt-type mvpn-rt-value" ; key "mvpn-rt-type mvpn-rt-value" ;
description description
"List of multicast route-targets" ; "List of multicast route-targets" ;
leaf mvpn-rt-type { leaf mvpn-rt-type {
type enumeration { type enumeration {
enum export-extcommunity { enum export-extcommunity {
value "0"; value 0;
description "export-extcommunity"; description "export-extcommunity";
} }
enum import-extcommunity { enum import-extcommunity {
value "1"; value 1;
description "import-extcommunity"; description "import-extcommunity";
} }
} }
description description
"rt types are as follows: "rt types are as follows:
export-extcommunity: specifies the value of export-extcommunity: specifies the value of
the extended community attribute of the the extended community attribute of the
route from an outbound interface to the route from an outbound interface to the
destination vpn. destination vpn.
import-extcommunity: receives routes that import-extcommunity: receives routes that
skipping to change at page 15, line 50 skipping to change at page 19, line 6
} }
} }
} }
grouping mvpn-ipmsi-tunnel-config { grouping mvpn-ipmsi-tunnel-config {
description description
"Configuration of default mdt for rosen mvpn "Configuration of default mdt for rosen mvpn
and I-PMSI for ng mvpn"; and I-PMSI for ng mvpn";
leaf tunnel-type { leaf tunnel-type {
type enumeration { type p-tunnel;
enum no-tunnel {
value "0";
description "no tunnel information present";
}
enum p2mp-te {
value "1";
description "p2mp-te";
}
enum p2mp-mldp {
value "2";
description "p2mp-mldp";
}
enum pim-ssm {
value "3";
description "pim-ssm";
}
enum pim-sm {
value "4";
description "pim-sm";
}
enum bidir-pim {
value "5";
description "bidir-pim";
}
enum ingress-replication {
value "6";
description "ingress-replication";
}
enum mp2mp-mldp {
value "7";
description "mp2mp-mldp";
}
}
description "I-PMSI tunnel type."; description "I-PMSI tunnel type.";
} }
choice ipmsi-tunnel-attribute { choice ipmsi-tunnel-attribute {
description "I-PMSI tunnel attributes configuration"; description "I-PMSI tunnel attributes configuration";
case p2mp-te { case rsvp-te-p2mp {
description "P2mp TE tunnel"; description "RSVP TE P2MP tunnel";
leaf te-p2mp-template { leaf rsvp-te-p2mp-template {
type string { type string {
length "1..31"; length "1..31";
} }
description "P2mp te tunnel template"; description "RSVP TE P2MP tunnel template";
} }
} }
case p2mp-mldp { case mldp-p2mp {
description "Mldp tunnel"; description "MLDP P2MP tunnel";
} }
case pim-ssm { case pim-ssm {
description "Pim ssm tunnel"; description "PIM SSM tree in the public net";
leaf ssm-default-group-addr { leaf ssm-default-group-addr {
type rt-types:ip-multicast-group-address; type rt-types:ip-multicast-group-address;
description "Default mdt or I-PMSI group address."; description
"Default mdt or I-PMSI group address for SSM mode.";
} }
} }
case pim-sm { case pim-sm {
description "Pim sm tunnel"; description "PIM SM tree in the public net";
leaf sm-default-group-addr { leaf sm-default-group-addr {
type rt-types:ip-multicast-group-address; type rt-types:ip-multicast-group-address;
description "Default mdt or I-PMSI group address."; description
"Default mdt or I-PMSI group address for SM mode.";
} }
} }
case bidir-pim { case bidir-pim {
description "Bidir pim tunnel"; description "BIDIR PIM tree in the public net";
leaf bidir-default-group-addr { leaf bidir-default-group-addr {
type rt-types:ip-multicast-group-address; type rt-types:ip-multicast-group-address;
description "Default mdt or I-PMSI group address."; description
"Default mdt or I-PMSI group address for BIDIR mode.";
} }
} }
case ingress-replication { case ingress-replication {
description "Ingress replication p2p tunnel"; description "Ingress replication p2p tunnel";
} }
case mp2mp-mldp { case mldp-mp2mp {
description "Mp2mp mldp tunnel"; description "MLDP MP2MP tunnel";
}
case bier {
description "bier underlay";
leaf inclusive-sub-domain-id {
type uint8;
description "Subdomain ID of bier.";
}
leaf inclusive-bitstring-length {
type uint16 {
range "64|128|256|512|1024|2048|4096";
}
description "BitString length of bier underlay.";
}
} }
} }
}/* mvpn-ipmsi-tunnel-config */ }/* mvpn-ipmsi-tunnel-config */
grouping mvpn-spmsi-tunnel-per-item-config { grouping mvpn-spmsi-tunnel-per-item-config {
description "S-PMSI tunnel basic configuration"; description "S-PMSI tunnel basic configuration";
leaf tunnel-type { leaf tunnel-type {
type enumeration { type p-tunnel;
enum no-tunnel {
value "0";
description "no tunnel information present";
}
enum p2mp-te {
value "1";
description "p2mp-te";
}
enum p2mp-mldp {
value "2";
description "p2mp-mldp";
}
enum pim-ssm {
value "3";
description "pim-ssm";
}
enum pim-sm {
value "4";
description "pim-sm";
}
enum bidir-pim {
value "5";
description "bidir-pim";
}
enum ingress-replication {
value "6";
description "ingress-replication";
}
enum mp2mp-mldp {
value "7";
description "mp2mp-mldp";
}
}
description "S-PMSI tunnel type."; description "S-PMSI tunnel type.";
} }
choice spmsi-tunnel-attribute { choice spmsi-tunnel-attribute {
description "S-PMSI tunnel attributes configuration"; description "S-PMSI tunnel attributes configuration";
case p2mp-te { case rsvp-te-p2mp {
description "P2mp te tunnel"; description "RSVP TE P2MP tunnel";
leaf te-p2mp-template { leaf rsvp-te-p2mp-template {
type string { type string {
length "1..31"; length "1..31";
} }
description "P2mp te tunnel template"; description "RSVP TE P2MP tunnel template";
} }
} }
case p2mp-mldp { case p2mp-mldp {
description "Mldp tunnel"; description "MLDP P2MP tunnel";
} }
case pim-ssm { case pim-ssm {
description "Pim ssm tunnel"; description "PIM SSM tree in the public net";
leaf ssm-group-pool-addr { leaf ssm-group-pool-addr {
type rt-types:ip-multicast-group-address; type rt-types:ip-multicast-group-address;
description "Group pool address for data mdt or pim s-pmsi."; description
"Group pool address for data mdt or s-pmsi in SSM mode";
} }
leaf ssm-group-pool-masklength { leaf ssm-group-pool-masklength {
type uint8 { type uint8 {
range "8..128"; range "8..128";
} }
description "Group pool mask for data mdt or pim s-pmsi"; description
"Group pool mask length for data mdt or s-pmsi in
SSM mode";
} }
} }
case pim-sm { case pim-sm {
description "Pim sm tunnel"; description "PIM SM tree in the public net";
leaf sm-group-pool-addr { leaf sm-group-pool-addr {
type rt-types:ip-multicast-group-address; type rt-types:ip-multicast-group-address;
description "Group pool address for data mdt or pim s-pmsi."; description
"Group pool address for data mdt or s-pmsi in SM mode";
} }
leaf sm-group-pool-masklength { leaf sm-group-pool-masklength {
type uint8 { type uint8 {
range "8..128"; range "8..128";
} }
description "Group pool mask for data mdt or pim s-pmsi"; description
"Group pool mask length for data mdt or s-pmsi in
SM mode";
} }
} }
case bidir-pim { case bidir-pim {
description "Bidir pim tunnel"; description "BIDIR PIM tree in the public net";
leaf bidir-group-pool-addr { leaf bidir-group-pool-addr {
type rt-types:ip-multicast-group-address; type rt-types:ip-multicast-group-address;
description "Group pool address for data mdt or pim s-pmsi."; description
"Group pool address for data mdt or s-pmsi in
BIDIR mode";
} }
leaf bidir-group-pool-masklength { leaf bidir-group-pool-masklength {
type uint8 { type uint8 {
range "8..128"; range "8..128";
} }
description "Group pool mask for data mdt or pim s-pmsi"; description
"Group pool mask length for data mdt or s-pmsi in
BIDIR mode";
} }
} }
case ingress-replication { case ingress-replication {
description "Ingress replication p2p tunnel"; description "Ingress replication p2p tunnel";
} }
case mp2mp-mldp { case mldp-mp2mp {
description "Mp2mp mldp tunnel"; description "MLDP MP2MP tunnel";
}
case bier {
description "bier underlay";
leaf selective-sub-domain-id {
type uint8;
description "Subdomain ID of bier.";
}
leaf selective-bitstring-length {
type uint16 {
range "64|128|256|512|1024|2048|4096";
}
description "BitString length of bier underlay.";
}
} }
} }
leaf switch-threshold { leaf switch-threshold {
type uint32 { type uint32 {
range "0..4194304"; range "0..4194304";
} }
units "kbps"; units kbps;
default "0"; default 0;
description description
"Multicast packet rate threshold for "Multicast packet rate threshold for
triggering the switching from the triggering the switching from the
I-PMSI to the S-PMSI. The value is I-PMSI to the S-PMSI. The value is
an integer ranging from 0 to 4194304, in an integer ranging from 0 to 4194304, in
kbps. The default value is 0."; kbps. The default value is 0.";
} }
leaf per-item-tunnel-limit { leaf per-item-tunnel-limit {
type uint16 { type uint16 {
range "1..1024"; range "1..1024";
skipping to change at page 20, line 4 skipping to change at page 22, line 31
an integer ranging from 0 to 4194304, in an integer ranging from 0 to 4194304, in
kbps. The default value is 0."; kbps. The default value is 0.";
} }
leaf per-item-tunnel-limit { leaf per-item-tunnel-limit {
type uint16 { type uint16 {
range "1..1024"; range "1..1024";
} }
description description
"Maximum number of S-PMSI tunnels allowed "Maximum number of S-PMSI tunnels allowed
per S-PMSI configuration item per mvpn instance."; per S-PMSI configuration item per mvpn instance.";
} }
leaf switch-wildcard-mode { leaf switch-wildcard-mode {
if-feature mvpn-switch-wildcard-mode; if-feature mvpn-switch-wildcard;
type enumeration { type enumeration {
enum source-group { enum source-group {
value "0"; value 0;
description description
"Wildcard neither for source or group address."; "Wildcard neither for source or group address.";
} }
enum star-star { enum star-star {
value "1"; value 1;
description description
"Wildcard for both source and group address."; "Wildcard for both source and group address.";
} }
enum star-group { enum star-group {
value "2"; value 2;
description description
"Wildcard only for source address."; "Wildcard only for source address.";
} }
enum source-star { enum source-star {
value "3"; value 3;
description description
"Wildcard only for group address."; "Wildcard only for group address.";
} }
} }
default "source-group";
description description
"I-PMSI switching to S-PMSI mode for private net "I-PMSI switching to S-PMSI mode for private net
wildcard mode, which including (*,*), (*,G), (S,*), wildcard mode, which including (*,*), (*,G), (S,*),
(S,G) four modes."; (S,G) four modes.";
} }
leaf explicit-tracking-mode {
if-feature mvpn-explicit-tracking;
type enumeration {
enum no-leaf-info-required {
value 0;
description "No need to track leaf information.";
}
enum leaf-info-required {
value 1;
description "Need to track leaf information.";
}
enum leaf-info-required-per-flow {
value 2;
description
"Need to track leaf information based on
per multicast flow.";
}
}
description "Tracking mode for leaf information.";
}
}/* mvpn-spmsi-tunnel-per-item-config */ }/* mvpn-spmsi-tunnel-per-item-config */
grouping mvpn-spmsi-tunnel-common-config { grouping mvpn-spmsi-tunnel-common-config {
description description
"Data mdt for rosen mvpn or S-PMSI for ng mvpn configuration "Data mdt for rosen mvpn or S-PMSI for ng mvpn configuration
attributes for both IPv4 and IPv6 private network"; attributes for both IPv4 and IPv6 private network";
leaf switch-delay-time { leaf switch-delay-time {
type uint8 { type uint8 {
range "3..60"; range "3..60";
} }
units seconds; units seconds;
default "5"; default 5;
description description
"Delay for switching from the I-PMSI to "Delay for switching from the I-PMSI to
the S-PMSI. The value is an integer the S-PMSI. The value is an integer
ranging from 3 to 60, in seconds. "; ranging from 3 to 60, in seconds. ";
} }
leaf switch-back-holddown-time { leaf switch-back-holddown-time {
type uint16 { type uint16 {
range "0..512"; range "0..512";
} }
units seconds; units seconds;
default "60"; default 60;
description description
"Delay for switching back from the S-PMSI "Delay for switching back from the S-PMSI
to the I-PMSI. The value is an integer to the I-PMSI. The value is an integer
ranging from 0 to 512, in seconds. "; ranging from 0 to 512, in seconds. ";
} }
leaf tunnel-limit { leaf tunnel-limit {
type uint16 { type uint16 {
range "1..8192"; range "1..8192";
} }
description description
skipping to change at page 21, line 31 skipping to change at page 24, line 28
} }
}/* mvpn-spmsi-tunnel-common-config */ }/* mvpn-spmsi-tunnel-common-config */
grouping mvpn-pmsi-state { grouping mvpn-pmsi-state {
description "PMSI tunnel operational state information"; description "PMSI tunnel operational state information";
choice pmsi-tunnel-state-attribute { choice pmsi-tunnel-state-attribute {
config false; config false;
description description
"PMSI tunnel operational state information for each type"; "PMSI tunnel operational state information for each type";
case p2mp-te { case rsvp-te-p2mp {
description "P2mp te tunnel"; description "RSVP TE P2MP tunnel";
leaf te-p2mp-id { leaf p2mp-id {
type uint16 { type uint16 {
range "0..65535"; range "0..65535";
} }
default "0"; description "P2MP ID of the RSVP TE P2MP tunnel";
description "P2mp id of the p2mp tunnel.";
} }
leaf te-tunnel-id { leaf tunnel-id {
type uint16 { type uint16 {
range "1..65535"; range "1..65535";
} }
description "Id of the p2mp tunnel."; description "Tunnel ID of the RSVP TE P2MP tunnel";
} }
leaf te-extend-tunnel-id { leaf extend-tunnel-id {
type uint16 { type uint16 {
range "1..65535"; range "1..65535";
} }
description "P2mp extended tunnel interface id."; description
"Extended tunnel ID of the RSVP TE P2MP Tunnel";
} }
} }
case p2mp-mldp { case mldp-p2mp {
description "P2mp mldp tunnel"; description "MLDP P2MP tunnel";
leaf mldp-root-addr { leaf mldp-root-addr {
type inet:ip-address; type inet:ip-address;
description "Ip address of the root of a p2mp ldp lsp."; description "IP address of the root of a MLDP P2MP lsp.";
} }
leaf mldp-lsp-id { leaf mldp-lsp-id {
type string { type string {
length "1..256"; length "1..256";
} }
description "P2mp ldp lsp id."; description "MLDP P2MP lsp ID.";
} }
} }
case pim-ssm { case pim-ssm {
description "Pim ssm tunnel"; description "PIM SSM tree in the public net";
leaf ssm-group-addr { leaf ssm-group-addr {
type rt-types:ip-multicast-group-address; type rt-types:ip-multicast-group-address;
description "Group address for pim ssm"; description "Group address for pim ssm";
} }
} }
case pim-sm { case pim-sm {
description "Pim sm tunnel"; description "PIM SM tree in the public net";
leaf sm-group-addr { leaf sm-group-addr {
type rt-types:ip-multicast-group-address; type rt-types:ip-multicast-group-address;
description "Group address for pim sm"; description "Group address for pim sm";
} }
} }
case bidir-pim { case bidir-pim {
description "Bidir pim tunnel"; description "BIDIR PIM tree in the public net";
leaf bidir-group-addr { leaf bidir-group-addr {
type rt-types:ip-multicast-group-address; type rt-types:ip-multicast-group-address;
description "Group address for bidir-pim"; description "Group address for bidir-pim";
} }
} }
case ingress-replication { case ingress-replication {
description "Ingress replication p2p tunnel"; description "Ingress replication p2p tunnel";
} }
case mp2mp-mldp { case mldp-mp2mp {
description "mp2mp mldp tunnel"; description "MLDP MP2MP tunnel";
}
case bier {
description "bier underlay";
leaf sub-domain-id {
type uint8;
description "Subdomain ID of bier.";
}
leaf bitstring-length {
type uint16 {
range "64|128|256|512|1024|2048|4096";
}
description "BitString length of bier underlay.";
}
leaf bfir-id {
type uint16;
description "ID of BIER sender PE of MVPN.";
}
} }
} }
leaf tunnel-role { leaf tunnel-role {
type enumeration { type enumeration {
enum none { enum none {
value "0"; value 0;
description "none"; description "none";
} }
enum root { enum root {
value "1"; value 1;
description "root"; description "root";
} }
enum leaf { enum leaf {
value "2"; value 2;
description "leaf"; description "leaf";
} }
enum root-and-leaf { enum root-and-leaf {
value "3"; value 3;
description "root-and-leaf"; description "root-and-leaf";
} }
} }
config false; config false;
description "Role of a node for a p-tunnel."; description "Role of a node for a p-tunnel.";
} }
leaf upstream-vpn-label {
if-feature mvpn-aggregation-tunnel;
type rt-types:mpls-label;
config false;
description
"VPN context label for the multicast data of the VPN instance
in an aggregation P-tunnel.";
}
}/* mvpn-pmsi-state */ }/* mvpn-pmsi-state */
grouping mvpn-pmsi-ipv4-entry { grouping mvpn-pmsi-ipv4-entry {
description description
"Multicast entries in ipv4 mvpn referenced the pmsi tunnel"; "Multicast entries in ipv4 mvpn referenced the pmsi tunnel";
container mvpn-pmsi-ipv4-ref-sg-entries { container mvpn-pmsi-ipv4-ref-sg-entries {
config false; config false;
description description
"Multicast entries in ipv4 mvpn referenced the pmsi tunnel"; "Multicast entries in ipv4 mvpn referenced the pmsi tunnel";
list mvpn-pmsi-ipv4-ref-sg-entries { list mvpn-pmsi-ipv4-ref-sg-entries {
skipping to change at page 25, line 24 skipping to change at page 28, line 47
list mvpn-spmsi-tunnel-ipv4 { list mvpn-spmsi-tunnel-ipv4 {
key "tunnel-type"; key "tunnel-type";
description description
"S-PMSI tunnel attributes configuration and "S-PMSI tunnel attributes configuration and
operational state information."; operational state information.";
uses mvpn-spmsi-tunnel-per-item-config; uses mvpn-spmsi-tunnel-per-item-config;
choice address-mask-or-acl { choice address-mask-or-acl {
description description
"Type of definition of private net multicast address range"; "Type of definition of private network
multicast address range";
case address-mask { case address-mask {
description "Use the type of address and mask"; description "Use the type of address and mask";
leaf ipv4-group-addr { leaf ipv4-group-addr {
type rt-types:ipv4-multicast-group-address; type rt-types:ipv4-multicast-group-address;
description description
"Start address of the IPv4 group "Start address of the IPv4 group
address range in private net. "; address range in private net. ";
} }
leaf ipv4-group-masklength { leaf ipv4-group-masklength {
type uint8 { type uint8 {
skipping to change at page 26, line 51 skipping to change at page 30, line 24
list mvpn-spmsi-tunnel-ipv6 { list mvpn-spmsi-tunnel-ipv6 {
key "tunnel-type"; key "tunnel-type";
description description
"S-PMSI tunnel attributes configuration and "S-PMSI tunnel attributes configuration and
operational state information."; operational state information.";
uses mvpn-spmsi-tunnel-per-item-config; uses mvpn-spmsi-tunnel-per-item-config;
choice address-mask-or-acl { choice address-mask-or-acl {
description description
"Type of definition of private net multicast address range"; "Type of definition of private network
multicast address range";
case address-mask { case address-mask {
description "Use the type of address and mask"; description "Use the type of address and mask";
leaf ipv6-group-addr { leaf ipv6-group-addr {
type rt-types:ipv6-multicast-group-address; type rt-types:ipv6-multicast-group-address;
description description
"Start address of the IPv6 group "Start address of the IPv6 group
address range in private net. "; address range in private net. ";
} }
leaf ipv6-groupmasklength { leaf ipv6-groupmasklength {
skipping to change at page 28, line 16 skipping to change at page 31, line 41
}/* container mvpn-spmsi-tunnels-ipv6 */ }/* container mvpn-spmsi-tunnels-ipv6 */
}/* grouping mvpn-spmsi-tunnel-info-ipv6 */ }/* grouping mvpn-spmsi-tunnel-info-ipv6 */
augment "/ni:network-instances/ni:network-instance/ni:ni-type/" augment "/ni:network-instances/ni:network-instance/ni:ni-type/"
+"l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv4" { +"l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv4" {
description description
"Augment l3vpn ipv4 container for per multicast VRF "Augment l3vpn ipv4 container for per multicast VRF
configuration and operational state."; configuration and operational state.";
container multicast { container multicast {
description description
"Configuration of multicast IPv4 vpn specific parameters and "Configuration and operational state of multicast IPv4 vpn
operational state of multicast IPv4 vpn specific parameters"; specific parameters";
uses mvpn-instance-config; uses mvpn-instance-config;
uses mvpn-rts; uses mvpn-rts;
uses mvpn-ipmsi-tunnel-info-ipv4; uses mvpn-ipmsi-tunnel-info-ipv4;
uses mvpn-spmsi-tunnel-info-ipv4; uses mvpn-spmsi-tunnel-info-ipv4;
} }
} }
augment "/ni:network-instances/ni:network-instance/ni:ni-type/" augment "/ni:network-instances/ni:network-instance/ni:ni-type/"
+"l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv6" { +"l3vpn:l3vpn/l3vpn:l3vpn/l3vpn:ipv6" {
description description
"Augment l3vpn ipv6 container for per multicast VRF "Augment l3vpn ipv6 container for per multicast VRF
configuration and operational state."; configuration and operational state.";
container multicast { container multicast {
description description
"Configuration of multicast IPv6 vpn specific parameters and "Configuration and operational state of multicast IPv6 vpn
operational state of multicast IPv6 vpn specific parameters"; specific parameters";
uses mvpn-instance-config; uses mvpn-instance-config;
uses mvpn-rts; uses mvpn-rts;
uses mvpn-ipmsi-tunnel-info-ipv6; uses mvpn-ipmsi-tunnel-info-ipv6;
uses mvpn-spmsi-tunnel-info-ipv6; uses mvpn-spmsi-tunnel-info-ipv6;
} }
} }
} }
<CODE ENDS> <CODE ENDS>
5. Security Considerations 5. Security Considerations
skipping to change at page 29, line 43 skipping to change at page 33, line 17
Protocol In-Band Signaling in a Virtual Routing and Protocol In-Band Signaling in a Virtual Routing and
Forwarding (VRF) Table Context ", RFC 7246, June 2014. Forwarding (VRF) Table Context ", RFC 7246, June 2014.
[RFC7900] Y. Rekhter, E. Rosen, R. Aggarwal, Arktan, Y. Cai and T. [RFC7900] Y. Rekhter, E. Rosen, R. Aggarwal, Arktan, Y. Cai and T.
Morin, " Extranet Multicast in BGP/IP MPLS VPNs ", RFC Morin, " Extranet Multicast in BGP/IP MPLS VPNs ", RFC
7900, June 2016. 7900, June 2016.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, August 2016 RFC 7950, August 2016
[RFC8279] Wijnands, IJ., Ed., Rosen, E., Ed., Dolganow, A.,
Przygienda, T., and S. Aldrin, "Multicast Using Bit Index
Explicit Replication (BIER)", RFC 8279, November 2017
[RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger,
"Common YANG Data Types for the Routing Area", RFC 8294, "Common YANG Data Types for the Routing Area", RFC 8294,
December 2017 December 2017
[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
and R. Wilton, "Network Management Datastore Architecture and R. Wilton, "Network Management Datastore Architecture
(NMDA)", RFC 8342, March 2018 (NMDA)", RFC 8342, March 2018
[I-D.ietf-acl-yang] M. Jethanandani, L. Huang, S. Agarwal and D. [I-D.ietf-acl-yang] M. Jethanandani, L. Huang, S. Agarwal and D.
Blair, "Network Access Control List (ACL) YANG Data Blair, "Network Access Control List (ACL) YANG Data
 End of changes. 125 change blocks. 
242 lines changed or deleted 417 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/