draft-ietf-pim-igmp-mld-snooping-yang-06.txt   draft-ietf-pim-igmp-mld-snooping-yang-07.txt 
PIM Working Group H. Zhao PIM Working Group H. Zhao
Internet Draft Ericsson Internet Draft Ericsson
Intended status: Standards Track X. Liu Intended status: Standards Track X. Liu
Expires: June 09, 2019 Volta Networks Expires: July 07, 2019 Volta Networks
Y. Liu Y. Liu
Huawei Huawei
M. Sivakumar M. Sivakumar
Juniper Juniper
A. Peter A. Peter
Individual Individual
December 10, 2018 January 8, 2019
A Yang Data Model for IGMP and MLD Snooping A Yang Data Model for IGMP and MLD Snooping
draft-ietf-pim-igmp-mld-snooping-yang-06.txt draft-ietf-pim-igmp-mld-snooping-yang-07.txt
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 Internet Group Management Protocol (IGMP) and configure and manage Internet Group Management Protocol (IGMP) and
Multicast Listener Discovery (MLD) Snooping devices. The YANG module in Multicast Listener Discovery (MLD) Snooping devices. The YANG module in
this document conforms to Network Management Datastore Architecture this document conforms to Network Management Datastore Architecture
(NMDA). (NMDA).
Status of this Memo Status of this Memo
skipping to change at page 2, line 4 skipping to change at page 2, line 4
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." 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 June 09, 2019. This Internet-Draft will expire on July 07, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2018 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
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
skipping to change at page 2, line 31 skipping to change at page 2, line 31
Table of Contents Table of Contents
1. Introduction...................................................3 1. Introduction...................................................3
1.1. Terminology...............................................3 1.1. Terminology...............................................3
1.2. Tree Diagrams.............................................3 1.2. Tree Diagrams.............................................3
2. Design of Data Model...........................................3 2. Design of Data Model...........................................3
2.1. Overview..................................................4 2.1. Overview..................................................4
2.2. IGMP Snooping Instances...................................4 2.2. IGMP Snooping Instances...................................4
2.3. MLD Snooping Instances....................................6 2.3. MLD Snooping Instances....................................6
2.4. IGMP and MLD Snooping Instances Reference.................8 2.4. IGMP and MLD Snooping Instances Reference.................8
2.5. IGMP and MLD Snooping RPC.................................9 2.5. IGMP and MLD Snooping RPC.................................8
3. IGMP and MLD Snooping YANG Module..............................9 3. IGMP and MLD Snooping YANG Module..............................9
4. Security Considerations.......................................31 4. Security Considerations.......................................31
5. IANA Considerations...........................................33 5. IANA Considerations...........................................32
6. Normative References..........................................34 6. Normative References..........................................33
Appendix A. Data Tree Example...................................36 Appendix A. Data Tree Example...................................35
A.1 Bridge scenario...........................................36 A.1 Bridge scenario...........................................35
A.2 L2VPN scenario............................................39 A.2 L2VPN scenario............................................38
Authors' Addresses...............................................43 Authors' Addresses...............................................42
1. Introduction 1. Introduction
This document defines a YANG [RFC6020] data model for the management of This document defines a YANG [RFC6020] data model for the management of
Internet Group Management Protocol (IGMP) and Multicast Listener Internet Group Management Protocol (IGMP) and Multicast Listener
Discovery (MLD) Snooping devices. Discovery (MLD) Snooping devices.
The YANG module in this document conforms to the Network Management The YANG module in this document conforms to the Network Management
Datastore Architecture defined in [RFC8342]. The "Network Management Datastore Architecture defined in [RFC8342]. The "Network Management
Datastore Architecture" (NMDA) adds the ability to inspect the current Datastore Architecture" (NMDA) adds the ability to inspect the current
skipping to change at page 5, line 11 skipping to change at page 5, line 11
The attributes under the interfaces show the statistics of IGMP Snooping The attributes under the interfaces show the statistics of IGMP Snooping
related packets. related packets.
module: ietf-igmp-mld-snooping module: ietf-igmp-mld-snooping
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
+--rw igmp-snooping-instance {feature-igmp-snooping}? +--rw igmp-snooping-instance {feature-igmp-snooping}?
| +--rw scenario? snooping-scenario-type | +--rw scenario? snooping-scenario-type
| +--rw enable? boolean | +--rw enable? boolean
| +--rw forwarding-mode? enumeration | +--rw forwarding-mode? enumeration
| +--rw explicit-tracking? boolean | +--rw explicit-tracking? boolean {explicit-tracking}?
| | {explicit-tracking}? | +--rw exclude-lite? boolean {exclude-lite}?
| +--rw exclude-lite? boolean
| | {exclude-lite}?
| +--rw send-query? boolean | +--rw send-query? boolean
| +--rw immediate-leave? empty | +--rw immediate-leave? empty {immediate-leave}?
| | {immediate-leave}?
| +--rw last-member-query-interval? uint16 | +--rw last-member-query-interval? uint16
| +--rw query-interval? uint16 | +--rw query-interval? uint16
| +--rw query-max-response-time? uint16 | +--rw query-max-response-time? uint16
| +--rw require-router-alert? boolean | +--rw require-router-alert? boolean {require-router-alert}?
| | {require-router-alert}?
| +--rw robustness-variable? uint8 | +--rw robustness-variable? uint8
| +--rw static-bridge-mrouter-interface* if:interface-ref | +--rw static-bridge-mrouter-interface* if:interface-ref {static-mrouter-
| | {static-mrouter-interface}? interface}?
| +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref {static-mrouter-
| | {static-mrouter-interface}? interface}?
| +--rw static-l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref | +--rw static-l2vpn-mrouter-interface-pw* pw:pseudowire-ref {static-mrouter-
| | {static-mrouter-interface}? interface}?
| +--rw version? uint8 | +--rw version? uint8
| +--rw querier-source? inet:ipv4-address | +--rw querier-source? inet:ipv4-address
| +--rw static-l2-multicast-group* [group source-addr] | +--rw static-l2-multicast-group* [group source-addr] {static-l2-multicast-
| | {static-l2-multicast-group}? group}?
| | +--rw group | | +--rw group rt-types:ipv4-multicast-group-address
| | | rt-types:ipv4-multicast-group-address | | +--rw source-addr rt-types:ipv4-multicast-source-address
| | +--rw source-addr
| | | rt-types:ipv4-multicast-source-address
| | +--rw bridge-outgoing-interface* if:interface-ref | | +--rw bridge-outgoing-interface* if:interface-ref
| | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref | | +--rw l2vpn-outgoing-ac* if:interface-ref
| | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | +--rw l2vpn-outgoing-pw* pw:pseudowire-ref
| +--ro entries-count? uint32 | +--ro entries-count? uint32
| +--ro bridge-mrouter-interface* if:interface-ref | +--ro bridge-mrouter-interface* if:interface-ref
| +--ro l2vpn-mrouter-interface-ac* if:interface-ref | +--ro l2vpn-mrouter-interface-ac* if:interface-ref
| +--ro l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref | +--ro l2vpn-mrouter-interface-pw* pw:pseudowire-ref
| +--ro group* [address] | +--ro group* [address]
| | +--ro address rt-types:ipv4-multicast-group-address | | +--ro address rt-types:ipv4-multicast-group-address
| | +--ro mac-address? yang:phys-address | | +--ro mac-address? yang:phys-address
| | +--ro expire uint32 | | +--ro expire? rt-types:timer-value-seconds16
| | +--ro up-time uint32 | | +--ro up-time uint32
| | +--ro last-reporter? inet:ipv4-address | | +--ro last-reporter? inet:ipv4-address
| | +--ro source* [address] | | +--ro source* [address]
| | +--ro address | | +--ro address rt-types:ipv4-multicast-source-address
| | | rt-types:ipv4-multicast-source-address
| | +--ro bridge-outgoing-interface* if:interface-ref | | +--ro bridge-outgoing-interface* if:interface-ref
| | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref | | +--ro l2vpn-outgoing-ac* if:interface-ref
| | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | +--ro l2vpn-outgoing-pw* pw:pseudowire-ref
| | +--ro up-time uint32 | | +--ro up-time uint32
| | +--ro expire uint32 | | +--ro expire? rt-types:timer-value-seconds16
| | +--ro host-count? uint32 | | +--ro host-count? uint32 {explicit-tracking}?
| | | {explicit-tracking}?
| | +--ro last-reporter? inet:ipv4-address | | +--ro last-reporter? inet:ipv4-address
| | +--ro host* [host-address] {explicit-tracking}? | | +--ro host* [host-address] {explicit-tracking}?
| | +--ro host-address inet:ipv4-address | | +--ro host-address inet:ipv4-address
| | +--ro host-filter-mode filter-mode-type | | +--ro host-filter-mode filter-mode-type
| +--ro interfaces | +--ro interfaces
| +--ro interface* [name] | +--ro interface* [name]
| +--ro name if:interface-ref | +--ro name if:interface-ref
| +--ro statistics | +--ro statistics
| +--ro received | +--ro received
| | +--ro num-query? yang:counter64 | | +--ro num-query? yang:counter64
skipping to change at page 6, line 40 skipping to change at page 6, line 31
| +--ro num-leave? yang:counter64 | +--ro num-leave? yang:counter64
| +--ro num-non-member-leave? yang:counter64 | +--ro num-non-member-leave? yang:counter64
| +--ro num-pim-hello? yang:counter64 | +--ro num-pim-hello? yang:counter64
2.3. MLD Snooping Instances 2.3. MLD Snooping Instances
The YANG module defines mld-snooping-instance which could be referenced The YANG module defines mld-snooping-instance which could be referenced
in the BRIDGE or L2VPN scenario to enable MLD Snooping. in the BRIDGE or L2VPN scenario to enable MLD Snooping.
The mld-snooping-instance is the same as IGMP snooping except changing The mld-snooping-instance is the same as IGMP snooping except changing
IPV4 addresses to IPV6 addresses. IPv4 addresses to IPv6 addresses.
module: ietf-igmp-mld-snooping module: ietf-igmp-mld-snooping
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
+--rw igmp-snooping-instance {feature-igmp-snooping}? +--rw igmp-snooping-instance {feature-igmp-snooping}?
| ... | ...
+--rw mld-snooping-instance {feature-mld-snooping}? +--rw mld-snooping-instance {feature-mld-snooping}?
+--rw scenario? snooping-scenario-type +--rw scenario? snooping-scenario-type
+--rw enable? boolean +--rw enable? boolean
+--rw forwarding-mode? enumeration +--rw forwarding-mode? enumeration
+--rw explicit-tracking? boolean +--rw explicit-tracking? boolean {explicit-tracking}?
| {explicit-tracking}? +--rw exclude-lite? boolean {exclude-lite}?
+--rw exclude-lite? boolean
| {exclude-lite}?
+--rw send-query? boolean +--rw send-query? boolean
+--rw immediate-leave? empty +--rw immediate-leave? empty {immediate-leave}?
| {immediate-leave}?
+--rw last-member-query-interval? uint16 +--rw last-member-query-interval? uint16
+--rw query-interval? uint16 +--rw query-interval? uint16
+--rw query-max-response-time? uint16 +--rw query-max-response-time? uint16
+--rw require-router-alert? boolean +--rw require-router-alert? boolean {require-router-alert}?
| {require-router-alert}?
+--rw robustness-variable? uint8 +--rw robustness-variable? uint8
+--rw static-bridge-mrouter-interface* if:interface-ref +--rw static-bridge-mrouter-interface* if:interface-ref {static-mrouter-
| {static-mrouter-interface}? interface}?
+--rw static-l2vpn-mrouter-interface-ac* if:interface-ref +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref {static-mrouter-
| {static-mrouter-interface}? interface}?
+--rw static-l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref +--rw static-l2vpn-mrouter-interface-pw* pw:pseudowire-ref {static-mrouter-
| {static-mrouter-interface}? interface}?
+--rw version? uint8 +--rw version? uint8
+--rw querier-source? inet:ipv6-address +--rw querier-source? inet:ipv6-address
+--rw static-l2-multicast-group* [group source-addr] +--rw static-l2-multicast-group* [group source-addr] {static-l2-multicast-
| {static-l2-multicast-group}? group}?
| +--rw group | +--rw group rt-types:ipv6-multicast-group-address
| | rt-types:ipv6-multicast-group-address | +--rw source-addr rt-types:ipv6-multicast-source-address
| +--rw source-addr
| | rt-types:ipv6-multicast-source-address
| +--rw bridge-outgoing-interface* if:interface-ref | +--rw bridge-outgoing-interface* if:interface-ref
| +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref | +--rw l2vpn-outgoing-ac* if:interface-ref
| +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref | +--rw l2vpn-outgoing-pw* pw:pseudowire-ref
+--ro entries-count? uint32 +--ro entries-count? uint32
+--ro bridge-mrouter-interface* if:interface-ref +--ro bridge-mrouter-interface* if:interface-ref
+--ro l2vpn-mrouter-interface-ac* if:interface-ref +--ro l2vpn-mrouter-interface-ac* if:interface-ref
+--ro l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref +--ro l2vpn-mrouter-interface-pw* pw:pseudowire-ref
+--ro group* [address] +--ro group* [address]
| +--ro address rt-types:ipv6-multicast-group-address | +--ro address rt-types:ipv6-multicast-group-address
| +--ro mac-address? yang:phys-address | +--ro mac-address? yang:phys-address
| +--ro expire uint32 | +--ro expire? rt-types:timer-value-seconds16
| +--ro up-time uint32 | +--ro up-time uint32
| +--ro last-reporter? inet:ipv6-address | +--ro last-reporter? inet:ipv6-address
| +--ro source* [address] | +--ro source* [address]
| +--ro address | +--ro address rt-types:ipv6-multicast-source-address
| | rt-types:ipv6-multicast-source-address
| +--ro bridge-outgoing-interface* if:interface-ref | +--ro bridge-outgoing-interface* if:interface-ref
| +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref | +--ro l2vpn-outgoing-ac* if:interface-ref
| +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref | +--ro l2vpn-outgoing-pw* pw:pseudowire-ref
| +--ro up-time uint32 | +--ro up-time uint32
| +--ro expire uint32 | +--ro expire? rt-types:timer-value-seconds16
| +--ro host-count? uint32 | +--ro host-count? uint32 {explicit-tracking}?
| | {explicit-tracking}?
| +--ro last-reporter? inet:ipv6-address | +--ro last-reporter? inet:ipv6-address
| +--ro host* [host-address] {explicit-tracking}? | +--ro host* [host-address] {explicit-tracking}?
| +--ro host-address inet:ipv6-address | +--ro host-address inet:ipv6-address
| +--ro host-filter-mode filter-mode-type | +--ro host-filter-mode filter-mode-type
+--ro interfaces +--ro interfaces
+--ro interface* [name] +--ro interface* [name]
+--ro name if:interface-ref +--ro name if:interface-ref
+--ro statistics +--ro statistics
+--ro received +--ro received
| +--ro num-query? yang:counter64 | +--ro num-query? yang:counter64
skipping to change at page 9, line 29 skipping to change at page 9, line 21
| +---w source? rt-types:ipv4-multicast-source-address | +---w source? rt-types:ipv4-multicast-source-address
+---x clear-mld-snooping-groups {rpc-clear-groups}? +---x clear-mld-snooping-groups {rpc-clear-groups}?
+---w input +---w input
+---w name? igmp-mld-snooping-instance-ref +---w name? igmp-mld-snooping-instance-ref
| {feature-mld-snooping}? | {feature-mld-snooping}?
+---w group? rt-types:ipv6-multicast-group-address +---w group? rt-types:ipv6-multicast-group-address
+---w source? rt-types:ipv6-multicast-source-address +---w source? rt-types:ipv6-multicast-source-address
3. IGMP and MLD Snooping YANG Module 3. IGMP and MLD Snooping YANG Module
<CODE BEGINS> file ietf-igmp-mld-snooping@2018-11-28.yang <CODE BEGINS> file ietf-igmp-mld-snooping@2019-01-08.yang
module ietf-igmp-mld-snooping { module ietf-igmp-mld-snooping {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping"; namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping";
prefix ims; prefix ims;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
skipping to change at page 10, line 14 skipping to change at page 10, line 4
prefix "rt-types"; prefix "rt-types";
} }
import ietf-l2vpn { import ietf-l2vpn {
prefix "l2vpn"; prefix "l2vpn";
} }
import ietf-network-instance { import ietf-network-instance {
prefix "ni"; prefix "ni";
} }
import ietf-pseudowires {
prefix "pw";
}
import ieee802-dot1q-bridge { import ieee802-dot1q-bridge {
prefix "dot1q"; prefix "dot1q";
} }
organization organization
"IETF PIM Working Group"; "IETF PIM Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/pim/> "WG Web: <http://tools.ietf.org/wg/pim/>
skipping to change at page 10, line 48 skipping to change at page 10, line 41
Mahesh Sivakumar Mahesh Sivakumar
<mailto:sivakumar.mahesh@gmail.com> <mailto:sivakumar.mahesh@gmail.com>
"; ";
description description
"The module defines a collection of YANG definitions common for "The module defines a collection of YANG definitions common for
all Internet Group Management Protocol (IGMP) and Multicast all Internet Group Management Protocol (IGMP) and Multicast
Listener Discovery (MLD) Snooping devices. Listener Discovery (MLD) Snooping devices.
Copyright (c) 2018 IETF Trust and the persons identified as Copyright (c) 2019 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices."; RFC itself for full legal notices.";
revision 2018-11-28 { revision 2019-01-08 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping";
} }
/* /*
* Features * Features
*/ */
skipping to change at page 14, line 4 skipping to change at page 13, line 43
type identityref { type identityref {
base "filter-mode"; base "filter-mode";
} }
description "The host filter mode"; description "The host filter mode";
} }
typedef igmp-mld-snooping-instance-ref { typedef igmp-mld-snooping-instance-ref {
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols"+ path "/rt:routing/rt:control-plane-protocols"+
"/rt:control-plane-protocol/rt:name"; "/rt:control-plane-protocol/rt:name";
} }
description description
"This type is used by data models which need to "This type is used by data models which need to
reference IGMP & MLD snooping instance."; reference IGMP & MLD snooping instance.";
} }
typedef l2vpn-instance-ac-ref {
type leafref {
path "/ni:network-instances/ni:network-instance"+
"/l2vpn:endpoint/l2vpn:name";
}
description "l2vpn-instance-ac-ref";
}
typedef l2vpn-instance-pw-ref {
type leafref {
path "/ni:network-instances/ni:network-instance"+
"/l2vpn:endpoint/l2vpn:name";
}
description "l2vpn-instance-pw-ref";
}
/* /*
* Groupings * Groupings
*/ */
grouping instance-config-attributes-igmp-snooping { grouping instance-config-attributes-igmp-snooping {
description description
"IGMP snooping configuration for each BRIDGE or L2VPN instance."; "IGMP snooping configuration for each BRIDGE or L2VPN instance.";
uses instance-config-attributes-igmp-mld-snooping; uses instance-config-attributes-igmp-mld-snooping;
skipping to change at page 14, line 50 skipping to change at page 14, line 22
} }
default 2; default 2;
description "IGMP snooping version."; description "IGMP snooping version.";
} }
leaf querier-source { leaf querier-source {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Use the IGMP snooping querier to support IGMP "Use the IGMP snooping querier to support IGMP
snooping in a VLAN where PIM and IGMP are not configured. snooping in a VLAN where PIM and IGMP are not configured.
The IPV4 address is used as source address in messages."; The IPv4 address is used as source address in messages.";
} }
list static-l2-multicast-group { list static-l2-multicast-group {
if-feature static-l2-multicast-group; if-feature static-l2-multicast-group;
key "group source-addr"; key "group source-addr";
description description
"A static multicast route, (*,G) or (S,G)."; "A static multicast route, (*,G) or (S,G).";
leaf group { leaf group {
type rt-types:ipv4-multicast-group-address; type rt-types:ipv4-multicast-group-address;
description description
"Multicast group IPV4 address"; "Multicast group IPv4 address";
} }
leaf source-addr { leaf source-addr {
type rt-types:ipv4-multicast-source-address; type rt-types:ipv4-multicast-source-address;
description description
"Multicast source IPV4 address."; "Multicast source IPv4 address.";
} }
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when "../../scenario = 'bridge'"; when 'derived-from-or-self(../../scenario,"ims:bridge")';
type if:interface-ref; type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding"; description "Outgoing interface in BRIDGE forwarding";
} }
leaf-list l2vpn-outgoing-ac { leaf-list l2vpn-outgoing-ac {
when "../../scenario = 'l2vpn'"; when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type l2vpn-instance-ac-ref; type if:interface-ref;
description "Outgoing AC in L2VPN forwarding"; description "Outgoing AC in L2VPN forwarding";
} }
leaf-list l2vpn-outgoing-pw { leaf-list l2vpn-outgoing-pw {
when "../../scenario = 'l2vpn'"; when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type l2vpn-instance-pw-ref; type pw:pseudowire-ref;
description "Outgoing PW in L2VPN forwarding"; description "Outgoing PW in L2VPN forwarding";
} }
} // static-l2-multicast-group } // static-l2-multicast-group
} // instance-config-attributes-igmp-snooping } // instance-config-attributes-igmp-snooping
grouping instance-config-attributes-igmp-mld-snooping { grouping instance-config-attributes-igmp-mld-snooping {
description description
"IGMP and MLD snooping configuration of each VLAN."; "IGMP and MLD snooping configuration of each VLAN.";
leaf enable { leaf enable {
skipping to change at page 17, line 52 skipping to change at page 17, line 22
range "1..7"; range "1..7";
} }
default 2; default 2;
description description
"Querier's Robustness Variable allows tuning for the "Querier's Robustness Variable allows tuning for the
expected packet loss on a network."; expected packet loss on a network.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
} }
leaf-list static-bridge-mrouter-interface { leaf-list static-bridge-mrouter-interface {
when "../scenario = 'bridge'"; when 'derived-from-or-self(../scenario,"ims:bridge")';
if-feature static-mrouter-interface; if-feature static-mrouter-interface;
type if:interface-ref; type if:interface-ref;
description "static mrouter interface in BRIDGE forwarding"; description "static mrouter interface in BRIDGE forwarding";
} }
leaf-list static-l2vpn-mrouter-interface-ac { leaf-list static-l2vpn-mrouter-interface-ac {
when "../scenario = 'l2vpn'"; when 'derived-from-or-self(../scenario,"ims:l2vpn")';
if-feature static-mrouter-interface; if-feature static-mrouter-interface;
type if:interface-ref; type if:interface-ref;
description description
"static mrouter interface whose type is interface "static mrouter interface whose type is interface
in L2VPN forwarding"; in L2VPN forwarding";
} }
leaf-list static-l2vpn-mrouter-interface-pw { leaf-list static-l2vpn-mrouter-interface-pw {
when "../scenario = 'l2vpn'"; when 'derived-from-or-self(../scenario,"ims:l2vpn")';
if-feature static-mrouter-interface; if-feature static-mrouter-interface;
type l2vpn-instance-pw-ref; type pw:pseudowire-ref;
description description
"static mrouter interface whose type is PW "static mrouter interface whose type is PW
in L2VPN forwarding"; in L2VPN forwarding";
} }
} // instance-config-attributes-igmp-mld-snooping } // instance-config-attributes-igmp-mld-snooping
grouping instance-config-attributes-mld-snooping { grouping instance-config-attributes-mld-snooping {
description "MLD snooping configuration of each VLAN."; description "MLD snooping configuration of each VLAN.";
uses instance-config-attributes-igmp-mld-snooping; uses instance-config-attributes-igmp-mld-snooping;
skipping to change at page 18, line 43 skipping to change at page 18, line 12
range "1..2"; range "1..2";
} }
default 2; default 2;
description "MLD snooping version."; description "MLD snooping version.";
} }
leaf querier-source { leaf querier-source {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Use the MLD snooping querier to support MLD snooping where "Use the MLD snooping querier to support MLD snooping where
PIM and MLD are not configured. The IPV6 address is used as PIM and MLD are not configured. The IPv6 address is used as
the source address in messages."; the source address in messages.";
} }
list static-l2-multicast-group { list static-l2-multicast-group {
if-feature static-l2-multicast-group; if-feature static-l2-multicast-group;
key "group source-addr"; key "group source-addr";
description description
"A static multicast route, (*,G) or (S,G)."; "A static multicast route, (*,G) or (S,G).";
leaf group { leaf group {
type rt-types:ipv6-multicast-group-address; type rt-types:ipv6-multicast-group-address;
description description
"Multicast group IPV6 address"; "Multicast group IPv6 address";
} }
leaf source-addr { leaf source-addr {
type rt-types:ipv6-multicast-source-address; type rt-types:ipv6-multicast-source-address;
description description
"Multicast source IPV6 address."; "Multicast source IPv6 address.";
} }
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when "../../scenario = 'bridge'"; when 'derived-from-or-self(../../scenario,"ims:bridge")';
type if:interface-ref; type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding"; description "Outgoing interface in BRIDGE forwarding";
} }
leaf-list l2vpn-outgoing-ac { leaf-list l2vpn-outgoing-ac {
when "../../scenario = 'l2vpn'"; when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type l2vpn-instance-ac-ref; type if:interface-ref;
description "Outgoing AC in L2VPN forwarding"; description "Outgoing AC in L2VPN forwarding";
} }
leaf-list l2vpn-outgoing-pw { leaf-list l2vpn-outgoing-pw {
when "../../scenario = 'l2vpn'"; when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type l2vpn-instance-pw-ref; type pw:pseudowire-ref;
description "Outgoing PW in L2VPN forwarding"; description "Outgoing PW in L2VPN forwarding";
} }
} // static-l2-multicast-group } // static-l2-multicast-group
} // instance-config-attributes-mld-snooping } // instance-config-attributes-mld-snooping
grouping instance-state-group-attributes-igmp-mld-snooping { grouping instance-state-group-attributes-igmp-mld-snooping {
description description
"Attributes for both IGMP and MLD snooping groups."; "Attributes for both IGMP and MLD snooping groups.";
leaf mac-address { leaf mac-address {
type yang:phys-address; type yang:phys-address;
description "Destination MAC address for L2 multicast."; description "Destination MAC address for L2 multicast.";
} }
leaf expire { leaf expire {
type uint32; type rt-types:timer-value-seconds16;
units seconds; units seconds;
mandatory true;
description description
"The time left before multicast group timeout."; "The time left before multicast group timeout.";
} }
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units seconds;
mandatory true; mandatory true;
description description
"The time elapsed since L2 multicast record created."; "The time elapsed since L2 multicast record created.";
skipping to change at page 20, line 26 skipping to change at page 19, line 44
key "address"; key "address";
config false; config false;
description "IGMP snooping information"; description "IGMP snooping information";
leaf address { leaf address {
type rt-types:ipv4-multicast-group-address; type rt-types:ipv4-multicast-group-address;
description description
"Multicast group IPV4 address"; "Multicast group IPv4 address";
} }
uses instance-state-group-attributes-igmp-mld-snooping; uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Address of the last host which has sent report to join "Address of the last host which has sent report to join
the multicast group."; the multicast group.";
} }
skipping to change at page 20, line 37 skipping to change at page 20, line 4
} }
uses instance-state-group-attributes-igmp-mld-snooping; uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Address of the last host which has sent report to join "Address of the last host which has sent report to join
the multicast group."; the multicast group.";
} }
list source { list source {
key "address"; key "address";
description "Source IPV4 address for multicast stream"; description "Source IPv4 address for multicast stream";
leaf address { leaf address {
type rt-types:ipv4-multicast-source-address; type rt-types:ipv4-multicast-source-address;
description "Source IPV4 address for multicast stream"; description "Source IPv4 address for multicast stream";
} }
uses instance-state-source-attributes-igmp-mld-snooping; uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Address of the last host which has sent report "Address of the last host which has sent report
to join the multicast group."; to join the multicast group.";
} }
list host { list host {
if-feature explicit-tracking; if-feature explicit-tracking;
key "host-address"; key "host-address";
description description
"List of multicast membership hosts "List of multicast membership hosts
of the specific multicast source-group."; of the specific multicast source-group.";
leaf host-address { leaf host-address {
skipping to change at page 21, line 45 skipping to change at page 21, line 9
"State attributes for IGMP & MLD snooping instance."; "State attributes for IGMP & MLD snooping instance.";
leaf entries-count { leaf entries-count {
type uint32; type uint32;
config false; config false;
description description
"The number of L2 multicast entries in IGMP & MLD snooping"; "The number of L2 multicast entries in IGMP & MLD snooping";
} }
leaf-list bridge-mrouter-interface { leaf-list bridge-mrouter-interface {
when "../scenario = 'bridge'"; when 'derived-from-or-self(../scenario,"ims:bridge")';
type if:interface-ref; type if:interface-ref;
config false; config false;
description "mrouter interface in BRIDGE forwarding"; description "mrouter interface in BRIDGE forwarding";
} }
leaf-list l2vpn-mrouter-interface-ac { leaf-list l2vpn-mrouter-interface-ac {
when "../scenario = 'l2vpn'"; when 'derived-from-or-self(../scenario,"ims:l2vpn")';
type if:interface-ref; type if:interface-ref;
config false; config false;
description description
"mrouter interface whose type is interface "mrouter interface whose type is interface
in L2VPN forwarding"; in L2VPN forwarding";
} }
leaf-list l2vpn-mrouter-interface-pw { leaf-list l2vpn-mrouter-interface-pw {
when "../scenario = 'l2vpn'"; when 'derived-from-or-self(../scenario,"ims:l2vpn")';
type l2vpn-instance-pw-ref; type pw:pseudowire-ref;
config false; config false;
description description
"mrouter interface whose type is PW in L2VPN forwarding"; "mrouter interface whose type is PW in L2VPN forwarding";
} }
} // instance-config-attributes-igmp-mld-snooping } // instance-config-attributes-igmp-mld-snooping
grouping instance-state-attributes-mld-snooping { grouping instance-state-attributes-mld-snooping {
description description
"State attributes for MLD snooping of each VLAN."; "State attributes for MLD snooping of each VLAN.";
uses instance-state-attributes-igmp-mld-snooping; uses instance-state-attributes-igmp-mld-snooping;
list group { list group {
key "address"; key "address";
config false; config false;
description "MLD snooping statistics information"; description "MLD snooping statistics information";
leaf address { leaf address {
type rt-types:ipv6-multicast-group-address; type rt-types:ipv6-multicast-group-address;
description description
"Multicast group IPV6 address"; "Multicast group IPv6 address";
} }
uses instance-state-group-attributes-igmp-mld-snooping; uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Address of the last host which has sent report "Address of the last host which has sent report
to join the multicast group."; to join the multicast group.";
} }
list source { list source {
key "address"; key "address";
description "Source IPV6 address for multicast stream"; description "Source IPv6 address for multicast stream";
leaf address { leaf address {
type rt-types:ipv6-multicast-source-address; type rt-types:ipv6-multicast-source-address;
description "Source IPV6 address for multicast stream"; description "Source IPv6 address for multicast stream";
} }
uses instance-state-source-attributes-igmp-mld-snooping; uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Address of the last host which has sent report "Address of the last host which has sent report
to join the multicast group."; to join the multicast group.";
} }
list host { list host {
if-feature explicit-tracking; if-feature explicit-tracking;
key "host-address"; key "host-address";
skipping to change at page 23, line 40 skipping to change at page 22, line 55
}// list host }// list host
} // list source } // list source
} // list group } // list group
} // instance-state-attributes-mld-snooping } // instance-state-attributes-mld-snooping
grouping instance-state-source-attributes-igmp-mld-snooping { grouping instance-state-source-attributes-igmp-mld-snooping {
description description
"State attributes for IGMP & MLD snooping instance."; "State attributes for IGMP & MLD snooping instance.";
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when "../../../scenario = 'bridge'"; when 'derived-from-or-self(../../../scenario,"ims:bridge")';
type if:interface-ref; type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding"; description "Outgoing interface in BRIDGE forwarding";
} }
leaf-list l2vpn-outgoing-ac { leaf-list l2vpn-outgoing-ac {
when "../../../scenario = 'l2vpn'"; when 'derived-from-or-self(../../../scenario,"ims:l2vpn")';
type l2vpn-instance-ac-ref; type if:interface-ref;
description "Outgoing AC in L2VPN forwarding"; description "Outgoing AC in L2VPN forwarding";
} }
leaf-list l2vpn-outgoing-pw { leaf-list l2vpn-outgoing-pw {
when "../../../scenario = 'l2vpn'"; when 'derived-from-or-self(../../../scenario,"ims:l2vpn")';
type l2vpn-instance-pw-ref; type pw:pseudowire-ref;
description "Outgoing PW in L2VPN forwarding"; description "Outgoing PW in L2VPN forwarding";
} }
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units seconds;
mandatory true; mandatory true;
description description
"The time elapsed since L2 multicast record created"; "The time elapsed since L2 multicast record created";
} }
skipping to change at page 24, line 16 skipping to change at page 23, line 29
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units seconds;
mandatory true; mandatory true;
description description
"The time elapsed since L2 multicast record created"; "The time elapsed since L2 multicast record created";
} }
leaf expire { leaf expire {
type uint32; type rt-types:timer-value-seconds16;
units seconds; units seconds;
mandatory true;
description description
"The time left before multicast group timeout."; "The time left before multicast group timeout.";
} }
leaf host-count { leaf host-count {
if-feature explicit-tracking; if-feature explicit-tracking;
type uint32; type uint32;
description description
"The number of host addresses."; "The number of host addresses.";
} }
skipping to change at page 28, line 23 skipping to change at page 27, line 31
description description
"IGMP & MLD snooping augmentation to control plane protocol "IGMP & MLD snooping augmentation to control plane protocol
configuration and state."; configuration and state.";
/* /*
* igmp-snooping-instance * igmp-snooping-instance
*/ */
container igmp-snooping-instance { container igmp-snooping-instance {
when "derived-from-or-self(../rt:type, 'ims:igmp-snooping')" { when 'derived-from-or-self(../rt:type, "ims:igmp-snooping")' {
description description
"This container is only valid for IGMP snooping protocol."; "This container is only valid for IGMP snooping protocol.";
} }
if-feature feature-igmp-snooping; if-feature feature-igmp-snooping;
description description
"IGMP snooping instance to configure the igmp-snooping."; "IGMP snooping instance to configure the igmp-snooping.";
leaf scenario { leaf scenario {
type snooping-scenario-type; type snooping-scenario-type;
default bridge; default bridge;
skipping to change at page 28, line 51 skipping to change at page 28, line 8
uses igmp-snooping-interface-statistics-attributes; uses igmp-snooping-interface-statistics-attributes;
} //igmp-snooping-instance } //igmp-snooping-instance
/* /*
* mld-snooping-instance * mld-snooping-instance
*/ */
container mld-snooping-instance { container mld-snooping-instance {
when "derived-from-or-self(../rt:type, 'ims:mld-snooping')" { when 'derived-from-or-self(../rt:type, "ims:mld-snooping")' {
description description
"This container is only valid for MLD snooping protocol."; "This container is only valid for MLD snooping protocol.";
} }
if-feature feature-mld-snooping; if-feature feature-mld-snooping;
description description
"MLD snooping instance to configure the mld-snooping."; "MLD snooping instance to configure the mld-snooping.";
leaf scenario { leaf scenario {
type snooping-scenario-type; type snooping-scenario-type;
default bridge; default bridge;
skipping to change at page 36, line 42 skipping to change at page 35, line 42
---------------+----------+------------------- ---------------+----------+-------------------
| | | |
| | | |
+--------+--+ +---+--------+ +--------+--+ +---+--------+
+ Receiver1 + + Receiver2 + + Receiver1 + + Receiver2 +
+-----------+ +------------+ +-----------+ +------------+
The configuration data for R1 in the above figure could be as follows: The configuration data for R1 in the above figure could be as follows:
{ {
"ietf-interfaces:interfaces":{ "ietf-interfaces:interfaces":{
"interface":[ "interface":[
{ {
"name":"eth1/1", "name":"eth1/1",
"type":"iana-if-type:ethernetCsmacd" "type":"iana-if-type:ethernetCsmacd"
} }
] ]
}, },
"ietf-routing:routing":{ "ietf-routing:routing":{
"control-plane-protocols":{ "control-plane-protocols":{
"control-plane-protocol":[ "control-plane-protocol":[
skipping to change at page 39, line 24 skipping to change at page 38, line 24
|eth1/1 |eth1/1
+---+---+ +---+---+
+ R1 + + R1 +
+-+---+-+ +-+---+-+
eth1/2 | \ eth1/3 eth1/2 | \ eth1/3
| \ | \
| \ | \
| \ | \
| \ | \
eth2/1 | \ eth3/1 eth2/1 | \ eth3/1
+-----+-+ +-+---+ +---+---+ +-+---+
+ R2 +------+ R3 + + R2 +----+ R3 +
+-----+-+ +-+---+ +---+---+ +-+---+
eth2/2 | | eth3/2 eth2/2 | | eth3/2
| | | |
---------------+----------+------------------- ---------------+----------+-------------------
| | | |
| | | |
+--------+--+ +--+--------+ +--------+--+ +---+--------+
+ Receiver1 + + Receiver2 + + Receiver1 + + Receiver2 +
+-----------+ +-----------+ +-----------+ +------------+
The configuration data for R1 in the above figure could be as follows: The configuration data for R1 in the above figure could be as follows:
{ {
"ietf-interfaces:interfaces":{ "ietf-interfaces:interfaces":{
"interface":[ "interface":[
{ {
"name":"eth1/1", "name":"eth1/1",
"type":"iana-if-type:ethernetCsmacd" "type":"iana-if-type:ethernetCsmacd"
} }
] ]
}, },
"ietf-pseudowires:pseudowires": { "ietf-pseudowires:pseudowires": {
"pseudowire": [ "pseudowire": [
{ {
skipping to change at page 40, line 17 skipping to change at page 39, line 17
}, },
"ietf-network-instance:network-instances": { "ietf-network-instance:network-instances": {
"network-instance": [ "network-instance": [
{ {
"name": "vpls1", "name": "vpls1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1", "ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1",
"ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type", "ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type",
"ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling", "ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling",
"ietf-l2vpn:endpoint": [ "ietf-l2vpn:endpoint": [
{ {
"name": "ac1", "name": "acs",
"primary-ac": { "ac": [
"name": "eth1/1" {
} "name": "eth1/1"
}, }
{
"name": "pw2",
"primary-pw": [
{
"name": "pw2"
}
] ]
}, },
{ {
"name": "pw3", "name": "pws",
"primary-pw": [ "pw": [
{ {
"name": "pw3" "name": "pw2"
} },
{
"name": "pw3"
}
] ]
} }
] ]
} }
] ]
}, },
"ietf-routing:routing": { "ietf-routing:routing": {
"control-plane-protocols": { "control-plane-protocols": {
"control-plane-protocol": [ "control-plane-protocol": [
{ {
skipping to change at page 41, line 4 skipping to change at page 39, line 52
{ {
"type": "ietf-igmp-mld-snooping:igmp-snooping", "type": "ietf-igmp-mld-snooping:igmp-snooping",
"name": "vis1", "name": "vis1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": { "ietf-igmp-mld-snooping:igmp-snooping-instance": {
"scenario": "ietf-igmp-mld-snooping:l2vpn", "scenario": "ietf-igmp-mld-snooping:l2vpn",
"enable": true "enable": true
} }
} }
] ]
} }
} }
} }
The corresponding operational state data for R1 could be as follows: The corresponding operational state data for R1 could be as follows:
{ {
"ietf-interfaces:interfaces":{ "ietf-interfaces:interfaces":{
"interface":[ "interface":[
{ {
"name":"eth1/1", "name":"eth1/1",
"type":"iana-if-type:ethernetCsmacd", "type":"iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2018-05-23T12:34:56-05:00" "discontinuity-time": "2018-05-23T12:34:56-05:00"
} }
} }
] ]
skipping to change at page 41, line 42 skipping to change at page 40, line 38
}, },
"ietf-network-instance:network-instances": { "ietf-network-instance:network-instances": {
"network-instance": [ "network-instance": [
{ {
"name": "vpls1", "name": "vpls1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1", "ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1",
"ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type", "ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type",
"ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling", "ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling",
"ietf-l2vpn:endpoint": [ "ietf-l2vpn:endpoint": [
{ {
"name": "ac1", "name": "acs",
"primary-ac": { "ac": [
"name": "eth1/1" {
} "name": "eth1/1"
}, }
{
"name": "pw2",
"primary-pw": [
{
"name": "pw2"
}
] ]
}, },
{ {
"name": "pw3", "name": "pws",
"primary-pw": [ "pw": [
{ {
"name": "pw3" "name": "pw2"
} },
{
"name": "pw3"
}
] ]
} }
] ]
} }
] ]
}, },
"ietf-routing:routing": { "ietf-routing:routing": {
"control-plane-protocols": { "control-plane-protocols": {
"control-plane-protocol": [ "control-plane-protocol": [
{ {
"type": "ietf-igmp-mld-snooping:igmp-snooping", "type": "ietf-igmp-mld-snooping:igmp-snooping",
"name": "vis1", "name": "vis1",
 End of changes. 86 change blocks. 
182 lines changed or deleted 141 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/