draft-ietf-pim-igmp-mld-snooping-yang-13.txt   draft-ietf-pim-igmp-mld-snooping-yang-14.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: December 17, 2020 Volta Networks Expires: December 22, 2020 Volta Networks
Y. Liu Y. Liu
China Mobile China Mobile
M. Sivakumar M. Sivakumar
Juniper Juniper
A. Peter A. Peter
Individual Individual
June 18, 2020 June 23, 2020
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-13.txt draft-ietf-pim-igmp-mld-snooping-yang-14.txt
Abstract Abstract
This document defines a YANG data model that can be used to configure This document defines a YANG data model that can be used to configure
and manage Internet Group Management Protocol (IGMP) and Multicast and manage Internet Group Management Protocol (IGMP) and Multicast
Listener Discovery (MLD) Snooping devices. The YANG module in this Listener Discovery (MLD) Snooping devices. The YANG module in this
document conforms to Network Management Datastore Architecture (NMDA). document conforms to Network Management Datastore Architecture (NMDA).
Status of this Memo Status of this Memo
skipping to change at page 1, line 46 skipping to change at page 1, line 46
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 December 17, 2020. This Internet-Draft will expire on December 22, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2020 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 3, line 7 skipping to change at page 3, line 7
7. References....................................................36 7. References....................................................36
7.1. Normative References.....................................36 7.1. Normative References.....................................36
7.2. Informative References...................................38 7.2. Informative References...................................38
Appendix A. Data Tree Example...................................39 Appendix A. Data Tree Example...................................39
A.1 Bridge scenario...........................................39 A.1 Bridge scenario...........................................39
A.2 L2VPN scenario............................................42 A.2 L2VPN scenario............................................42
Authors' Addresses...............................................46 Authors' Addresses...............................................46
1. Introduction 1. Introduction
This document defines a YANG [RFC6020] data model for the management of This document defines a YANG [RFC7950] 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 [RFC4541] devices. Discovery (MLD) Snooping [RFC4541] 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
operational values for configuration, allowing clients to use identical operational values for configuration, allowing clients to use identical
paths for retrieving the configured values and the operational values. paths for retrieving the configured values and the operational values.
1.1. Terminology 1.1. Terminology
skipping to change at page 7, line 6 skipping to change at page 7, line 6
| +--rw name | +--rw name
| +--rw igmp-snooping-instance <= Augmented by this Model | +--rw igmp-snooping-instance <= Augmented by this Model
... ...
| +--rw mld-snooping-instance <= Augmented by this Model | +--rw mld-snooping-instance <= Augmented by this Model
... ...
The "igmp-snooping-instance" container instantiates an IGMP Snooping The "igmp-snooping-instance" container instantiates an IGMP Snooping
Instance. The "mld-snooping-instance" container instantiates an MLD Instance. The "mld-snooping-instance" container instantiates an MLD
Snooping Instance. Snooping Instance.
The YANG data model defined in this document conforms to the Network The YANG data model defined in this document conforms to the Network
Management Datastore Architecture (NMDA) [RFC8342]. The operational Management Datastore Architecture (NMDA) [RFC8342]. The operational
state data is combined with the associated configuration data in the state data is combined with the associated configuration data in the
same hierarchy [RFC8407]. same hierarchy [RFC8407].
A configuration data node is marked as mandatory only when its value A configuration data node is marked as mandatory only when its value
must be provided by the user. Where nodes are not essential to protocol must be provided by the user. Where nodes are not essential to protocol
operation, they are marked as optional. Some other nodes are essential operation, they are marked as optional. Some other nodes are essential
but have a default specified, so that they are also optional and need but have a default specified, so that they are also optional and need
not be configured explicitly. not be configured explicitly.
3.1. IGMP Snooping Instances 3.1. IGMP Snooping Instances
The YANG module defines igmp-snooping-instance which augments The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control-
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol. plane-protocols/rt:control-plane-protocol to add the igmp-snooping-
instance container.
All the IGMP Snooping related attributes have been defined in the igmp- All the IGMP Snooping related attributes have been defined in the igmp-
snooping-instance. The read-write attribute represents configurable snooping-instance. The read-write attributes represent configurable
data. The read-only attribute represents state data. data. The read-only attributes represent state data.
One igmp-snooping-instance could be used in one BRIDGE [dot1Qcp] One igmp-snooping-instance could be used in one BRIDGE [dot1Qcp]
instance or L2VPN [draft-ietf-bess-l2vpn-yang] instance. One igmp- instance or L2VPN [draft-ietf-bess-l2vpn-yang] instance. One igmp-
snooping-instance corresponds to one BRIDGE instance or one L2VPN snooping-instance corresponds to one BRIDGE instance or one L2VPN
instance. instance.
The value of scenario in igmp-snooping-instance is bridge or l2vpn. When The value of scenario in igmp-snooping-instance is bridge or l2vpn. When
it is bridge, igmp-snooping-instance will be used in the BRIDGE it is bridge, igmp-snooping-instance will be used in the BRIDGE
scenario. When it is l2vpn, igmp-snooping-instance will be used in the scenario. When it is l2vpn, igmp-snooping-instance will be used in the
L2VPN scenario. L2VPN scenario.
The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, The values of bridge-mrouter-interface, l2vpn-mrouter-interface-ac,
l2vpn-mrouter-interface-pw are filled by the snooping device l2vpn-mrouter-interface-pw are filled by the snooping device
dynamically. They are different from static-bridge-mrouter-interface, dynamically. They are different from static-bridge-mrouter-interface,
static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw
which are configured statically. which are configured.
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.
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol: /rt:control-plane-protocol:
+--rw igmp-snooping-instance {igmp-snooping}? +--rw igmp-snooping-instance {igmp-snooping}?
+--rw scenario? +--rw scenario?
| snooping-scenario-type | snooping-scenario-type
+--rw enable? boolean +--rw enable? boolean
skipping to change at page 9, line 12 skipping to change at page 9, line 13
+--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
| +--ro num-membership-report-v1? yang:counter64 | +--ro num-membership-report-v1? yang:counter64
| +--ro num-membership-report-v2? yang:counter64 | +--ro num-membership-report-v2? yang:counter64
| +--ro num-membership-report-v3? yang:counter64 | +--ro num-membership-report-v3? yang:counter64
| +--ro num-leave? yang:counter64 | +--ro num-leave? yang:counter64
| +--ro num-non-member-leave? yang:counter64
| +--ro num-pim-hello? yang:counter64 | +--ro num-pim-hello? yang:counter64
+--ro sent +--ro sent
+--ro num-query? yang:counter64 +--ro num-query? yang:counter64
+--ro num-membership-report-v1? yang:counter64 +--ro num-membership-report-v1? yang:counter64
+--ro num-membership-report-v2? yang:counter64 +--ro num-membership-report-v2? yang:counter64
+--ro num-membership-report-v3? yang:counter64 +--ro num-membership-report-v3? yang:counter64
+--ro num-leave? yang:counter64 +--ro num-leave? yang:counter64
+--ro num-non-member-leave? yang:counter64
+--ro num-pim-hello? yang:counter64 +--ro num-pim-hello? yang:counter64
3.2. MLD Snooping Instances 3.2. MLD Snooping Instances
The YANG module defines mld-snooping-instance which could be used in the The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control-
plane-protocols/rt:control-plane-protocol to add the mld-snooping-
instance container. The mld-snooping-instance could be used in the
BRIDGE [dot1Qcp] or L2VPN [draft-ietf-bess-l2vpn-yang] scenario to BRIDGE [dot1Qcp] or L2VPN [draft-ietf-bess-l2vpn-yang] scenario to
enable MLD Snooping. enable MLD Snooping.
All the MLD Snooping related attributes have been defined in the mld- All the MLD Snooping related attributes have been defined in the mld-
snooping-instance. The read-write attribute represents configurable snooping-instance. The read-write attributes represent configurable
data. The read-only attribute represents state data. data. The read-only attributes represent state data.
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. One mld-snooping-instance could be IPv4 addresses to IPv6 addresses. One mld-snooping-instance could be
used in one BRIDGE instance or L2VPN instance. One mld-snooping-instance used in one BRIDGE instance or L2VPN instance. One mld-snooping-instance
corresponds to one BRIDGE instance or L2VPN instance. corresponds to one BRIDGE instance or L2VPN instance.
The value of scenario in mld-snooping-instance is bridge or l2vpn. When The value of scenario in mld-snooping-instance is bridge or l2vpn. When
it is bridge, mld-snooping-instance will be used in the BRIDGE scenario. it is bridge, mld-snooping-instance will be used in the BRIDGE scenario.
When it is l2vpn, mld-snooping-instance will be used in the L2VPN When it is l2vpn, mld-snooping-instance will be used in the L2VPN
scenario. scenario.
The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, The values of bridge-mrouter-interface, l2vpn-mrouter-interface-ac,
l2vpn-mrouter-interface-pw are filled by the snooping device l2vpn-mrouter-interface-pw are filled by the snooping device
dynamically. They are different from static-bridge-mrouter-interface, dynamically. They are different from static-bridge-mrouter-interface,
static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw
which are configured statically. which are configured.
The attributes under the interfaces show the statistics of MLD Snooping The attributes under the interfaces show the statistics of MLD Snooping
related packets. related packets.
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol: /rt:control-plane-protocol:
+--rw mld-snooping-instance {mld-snooping}? +--rw mld-snooping-instance {mld-snooping}?
+--rw scenario? +--rw scenario?
| snooping-scenario-type | snooping-scenario-type
+--rw enable? boolean +--rw enable? boolean
skipping to change at page 12, line 18 skipping to change at page 12, line 21
/l2vpn:l2vpn: /l2vpn:l2vpn:
+--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref
+--rw mld-snooping-instance? igmp-mld-snooping-instance-ref +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref
The mld-snooping-instance could be used in concurrence with igmp- The mld-snooping-instance could be used in concurrence with igmp-
snooping-instance to configure the MLD Snooping. snooping-instance to configure the MLD Snooping.
3.4. IGMP and MLD Snooping Actions 3.4. IGMP and MLD Snooping Actions
IGMP and MLD Snooping actions clear the specified IGMP and MLD Snooping IGMP and MLD Snooping actions clear the specified IGMP and MLD Snooping
group tables. group tables. If both source X and group Y are specified, only source X
from group Y in that specific instance will be cleared.
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol: /rt:control-plane-protocol:
+--rw igmp-snooping-instance {igmp-snooping}? +--rw igmp-snooping-instance {igmp-snooping}?
+---x clear-igmp-snooping-groups {action-clear-groups}? +---x clear-igmp-snooping-groups {action-clear-groups}?
+---w input +---w input
+---w group union +---w group union
+---w source rt-types:ipv4-multicast-source-address +---w source rt-types:ipv4-multicast-source-address
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol: /rt:control-plane-protocol:
+--rw mld-snooping-instance {mld-snooping}? +--rw mld-snooping-instance {mld-snooping}?
+---x clear-mld-snooping-groups {action-clear-groups}? +---x clear-mld-snooping-groups {action-clear-groups}?
+---w input +---w input
+---w group union +---w group union
+---w source rt-types:ipv6-multicast-source-address +---w source rt-types:ipv6-multicast-source-address
4. IGMP and MLD Snooping YANG Module 4. IGMP and MLD Snooping YANG Module
This module references [RFC3376],[RFC4541],[RFC5790],[RFC6636], This module references [RFC1112],[RFC2236],[RFC2710],[RFC3376],
[RFC6991],[RFC8343],[RFC8529],[dot1Qcp],[draft-ietf-bess-l2vpn-yang]. [RFC3810],[RFC4541],[RFC5790],[RFC6636],[RFC6991],[RFC7761],
[RFC8343],[RFC8529],[dot1Qcp], and [draft-ietf-bess-l2vpn-yang].
<CODE BEGINS> file ietf-igmp-mld-snooping@2020-06-16.yang <CODE BEGINS> file ietf-igmp-mld-snooping@2020-06-19.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";
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
skipping to change at page 14, line 46 skipping to change at page 14, line 51
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 2020-06-16 { revision 2020-06-19 {
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
*/ */
feature igmp-snooping { feature igmp-snooping {
description description
"Support IGMP snooping."; "Support IGMP snooping.";
reference
"RFC 4541";
} }
feature mld-snooping { feature mld-snooping {
description description
"Support MLD snooping."; "Support MLD snooping.";
reference
"RFC 4541";
} }
feature immediate-leave { feature immediate-leave {
description description
"Support configuration of immediate-leave."; "Support configuration of fast leave. The fast leave feature
does not send last member query messages to hosts.";
reference
"RFC 3376";
} }
feature static-l2-multicast-group { feature static-l2-multicast-group {
description description
"Support configuration of L2 multicast static-group."; "Support configuration of L2 multicast static-group.";
} }
feature static-mrouter-interface { feature static-mrouter-interface {
description description
"Support configuration of mrouter interface."; "Support multicast router interface explicitly configured
by management";
reference
"RFC 4541";
} }
feature action-clear-groups { feature action-clear-groups {
description description
"Support clearing statistics by action for IGMP & MLD snooping."; "Support clearing statistics by action for IGMP & MLD snooping.";
} }
feature require-router-alert { feature require-router-alert {
description description
"Support configuration of require-router-alert."; "Support configuration of require-router-alert.";
reference reference
"RFC 3376, Section 5.2"; "RFC 3376";
} }
feature exclude-lite { feature exclude-lite {
description description
"Support configuration of per instance exclude-lite."; "Support configuration of per instance exclude-lite.";
reference reference
"RFC 5790, Section 3"; "RFC 5790";
} }
feature explicit-tracking { feature explicit-tracking {
description description
"Support configuration of per instance explicit-tracking."; "Support configuration of per instance explicit-tracking.";
reference reference
"RFC 6636, Section 3"; "RFC 6636";
} }
/* identities */ /* identities */
identity scenario-type { identity scenario-type {
description description
"Base identity for scenario type in IGMP & MLD snooping"; "Base identity for scenario type in IGMP & MLD snooping";
} }
identity bridge { identity bridge {
base scenario-type; base scenario-type;
description description
skipping to change at page 17, line 33 skipping to change at page 17, line 48
} }
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.";
} }
/* /*
* Groupings * Groupings
*/ */
grouping instance-config-attributes-igmp-snooping {
description
"IGMP snooping configuration for each BRIDGE or L2VPN instance.";
uses instance-config-attributes-igmp-mld-snooping;
leaf igmp-version {
type uint8 {
range "1..3";
}
default 2;
description "IGMP version.";
}
leaf querier-source {
type inet:ipv4-address;
description
"Use the IGMP snooping querier to support IGMP
snooping in a VLAN where PIM and IGMP are not configured.
The IPv4 address is used as source address in messages.";
}
list static-l2-multicast-group {
if-feature static-l2-multicast-group;
key "group source-addr";
description
"A static multicast route, (*,G) or (S,G).";
leaf group {
type rt-types:ipv4-multicast-group-address;
description
"Multicast group IPv4 address";
}
leaf source-addr {
type rt-types:ipv4-multicast-source-address;
description
"Multicast source IPv4 address.";
}
leaf-list bridge-outgoing-interface {
when 'derived-from-or-self(../../scenario,"ims:bridge")';
type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding";
}
leaf-list l2vpn-outgoing-ac {
when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type if:interface-ref;
description "Outgoing Attachment Circuit (AC) in L2VPN
forwarding";
}
leaf-list l2vpn-outgoing-pw {
when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type pw:pseudowire-ref;
description "Outgoing Pseudo Wire (PW) in L2VPN forwarding";
}
} // static-l2-multicast-group
} // 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 {
type boolean; type boolean;
default false; default false;
description description
"Set the value to true to enable IGMP & MLD snooping."; "Set the value to true to enable IGMP & MLD snooping.";
} }
skipping to change at page 21, line 28 skipping to change at page 20, line 35
leaf-list static-l2vpn-mrouter-interface-pw { leaf-list static-l2vpn-mrouter-interface-pw {
when 'derived-from-or-self(../scenario,"ims:l2vpn")'; when 'derived-from-or-self(../scenario,"ims:l2vpn")';
if-feature static-mrouter-interface; if-feature static-mrouter-interface;
type pw:pseudowire-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 {
description "MLD snooping configuration of each VLAN.";
uses instance-config-attributes-igmp-mld-snooping;
leaf mld-version {
type uint8 {
range "1..2";
}
default 2;
description "MLD version.";
}
leaf querier-source {
type inet:ipv6-address;
description
"Use the MLD snooping querier to support MLD snooping where
PIM and MLD are not configured. The IPv6 address is used as
the source address in messages.";
}
list static-l2-multicast-group {
if-feature static-l2-multicast-group;
key "group source-addr";
description
"A static multicast route, (*,G) or (S,G).";
leaf group {
type rt-types:ipv6-multicast-group-address;
description
"Multicast group IPv6 address";
}
leaf source-addr {
type rt-types:ipv6-multicast-source-address;
description
"Multicast source IPv6 address.";
}
leaf-list bridge-outgoing-interface {
when 'derived-from-or-self(../../scenario,"ims:bridge")';
type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding";
}
leaf-list l2vpn-outgoing-ac {
when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type if:interface-ref;
description "Outgoing Attachment Circuit (AC) in L2VPN
forwarding";
}
leaf-list l2vpn-outgoing-pw {
when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type pw:pseudowire-ref;
description "Outgoing Pseudo Wire (PW) in L2VPN forwarding";
}
} // static-l2-multicast-group
} // 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 {
skipping to change at page 23, line 9 skipping to change at page 21, line 8
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.";
} }
} // instance-state-group-attributes-igmp-mld-snooping } // instance-state-group-attributes-igmp-mld-snooping
grouping instance-state-attributes-igmp-snooping {
description
"State attributes for IGMP snooping for each instance.";
uses instance-state-attributes-igmp-mld-snooping;
list group {
key "address";
config false;
description "IGMP snooping information";
leaf address {
type rt-types:ipv4-multicast-group-address;
description
"Multicast group IPv4 address";
}
uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter {
type inet:ipv4-address;
description
"Address of the last host which has sent report to join
the multicast group.";
}
list source {
key "address";
description "Source IPv4 address for multicast stream";
leaf address {
type rt-types:ipv4-multicast-source-address;
description "Source IPv4 address for multicast stream";
}
uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter {
type inet:ipv4-address;
description
"Address of the last host which has sent report
to join the multicast group.";
}
list host {
if-feature explicit-tracking;
key "host-address";
description
"List of multicast membership hosts
of the specific multicast source-group.";
leaf host-address {
type inet:ipv4-address;
description
"Multicast membership host address.";
}
leaf host-filter-mode {
type filter-mode-type;
mandatory true;
description
"Filter mode for a multicast membership
host may be either include or exclude.";
}
}// list host
} // list source
} // list group
} // instance-state-attributes-igmp-snooping
grouping instance-state-attributes-igmp-mld-snooping { grouping instance-state-attributes-igmp-mld-snooping {
description description
"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 'derived-from-or-self(../scenario,"ims: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
"The mrouter interface in BRIDGE forwarding. When switch
receives IGMP/MLD queries from multicast router on an
interface, this interface will become mrouter interface
for IGMP/MLD snooping.";
} }
leaf-list l2vpn-mrouter-interface-ac { leaf-list l2vpn-mrouter-interface-ac {
when 'derived-from-or-self(../scenario,"ims: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 "The mrouter interface whose type is interface in L2VPN
in L2VPN forwarding"; forwarding. When switch receives IGMP/MLD queries from
multicast router on an interface, this interface will
become mrouter interface for IGMP/MLD snooping.";
} }
leaf-list l2vpn-mrouter-interface-pw { leaf-list l2vpn-mrouter-interface-pw {
when 'derived-from-or-self(../scenario,"ims:l2vpn")'; when 'derived-from-or-self(../scenario,"ims:l2vpn")';
type pw:pseudowire-ref; type pw:pseudowire-ref;
config false; config false;
description description
"mrouter interface whose type is PW in L2VPN forwarding"; "The mrouter interface whose type is PW in L2VPN forwarding.
When switch receives IGMP/MLD queries from multicast router
on a PW, this PW will become mrouter interface for IGMP/MLD
snooping.";
} }
} // instance-config-attributes-igmp-mld-snooping } // instance-config-attributes-igmp-mld-snooping
grouping instance-state-attributes-mld-snooping {
description
"State attributes for MLD snooping of each VLAN.";
uses instance-state-attributes-igmp-mld-snooping;
list group {
key "address";
config false;
description "MLD snooping statistics information";
leaf address {
type rt-types:ipv6-multicast-group-address;
description
"Multicast group IPv6 address";
}
uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter {
type inet:ipv6-address;
description
"Address of the last host which has sent report
to join the multicast group.";
}
list source {
key "address";
description "Source IPv6 address for multicast stream";
leaf address {
type rt-types:ipv6-multicast-source-address;
description "Source IPv6 address for multicast stream";
}
uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter {
type inet:ipv6-address;
description
"Address of the last host which has sent report
to join the multicast group.";
}
list host {
if-feature explicit-tracking;
key "host-address";
description
"List of multicast membership hosts
of the specific multicast source-group.";
leaf host-address {
type inet:ipv6-address;
description
"Multicast membership host address.";
}
leaf host-filter-mode {
type filter-mode-type;
mandatory true;
description
"Filter mode for a multicast membership
host may be either include or exclude.";
}
}// list host
} // list source
} // list group
} // 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 'derived-from-or-self(../../../scenario,"ims: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 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; when 'derived-from-or-self(../../../scenario,"ims:l2vpn")';
type if:interface-ref; type if:interface-ref;
description "Outgoing Attachment Circuit (AC) in L2VPN description "Outgoing Attachment Circuit (AC) in L2VPN";
forwarding";
} }
leaf-list l2vpn-outgoing-pw { leaf-list l2vpn-outgoing-pw {
when 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; when 'derived-from-or-self(../../../scenario,"ims:l2vpn")';
type pw:pseudowire-ref; type pw:pseudowire-ref;
description "Outgoing Pseudo Wire (PW) in L2VPN forwarding"; description "Outgoing Pseudo Wire (PW) in L2VPN";
} }
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 27, line 33 skipping to change at page 22, line 55
} }
} // instance-state-source-attributes-igmp-mld-snooping } // instance-state-source-attributes-igmp-mld-snooping
grouping igmp-snooping-statistics { grouping igmp-snooping-statistics {
description description
"The statistics attributes for IGMP snooping."; "The statistics attributes for IGMP snooping.";
leaf num-query { leaf num-query {
type yang:counter64; type yang:counter64;
description description
"The number of query messages."; "The number of Membership Query messages.";
reference
"RFC 2236";
} }
leaf num-membership-report-v1 { leaf num-membership-report-v1 {
type yang:counter64; type yang:counter64;
description description
"The number of membership report v1 messages."; "The number of Version 1 Membership Report messages.";
reference
"RFC 1112";
} }
leaf num-membership-report-v2 { leaf num-membership-report-v2 {
type yang:counter64; type yang:counter64;
description description
"The number of membership report v2 messages."; "The number of Version 2 Membership Report messages.";
reference
"RFC 2236";
} }
leaf num-membership-report-v3 { leaf num-membership-report-v3 {
type yang:counter64; type yang:counter64;
description description
"The number of membership report v3 messages."; "The number of Version 3 Membership Report messages.";
reference
"RFC 3376";
} }
leaf num-leave { leaf num-leave {
type yang:counter64; type yang:counter64;
description description
"The number of leave messages."; "The number of Leave Group messages.";
} reference
leaf num-non-member-leave { "RFC 2236";
type yang:counter64;
description
"The number of non member leave messages.";
} }
leaf num-pim-hello { leaf num-pim-hello {
type yang:counter64; type yang:counter64;
description description
"The number of PIM hello messages."; "The number of PIM hello messages.";
reference
"RFC 7761";
} }
} // igmp-snooping-statistics } // igmp-snooping-statistics
grouping mld-snooping-statistics { grouping mld-snooping-statistics {
description description
"The statistics attributes for MLD snooping."; "The statistics attributes for MLD snooping.";
leaf num-query { leaf num-query {
type yang:counter64; type yang:counter64;
description description
"The number of Multicast Listener Query messages."; "The number of Multicast Listener Query messages.";
reference
"RFC 3810";
} }
leaf num-report-v1 { leaf num-report-v1 {
type yang:counter64; type yang:counter64;
description description
"The number of Version 1 Multicast Listener Report."; "The number of Version 1 Multicast Listener Report.";
reference
"RFC 2710";
} }
leaf num-report-v2 { leaf num-report-v2 {
type yang:counter64; type yang:counter64;
description description
"The number of Version 2 Multicast Listener Report."; "The number of Version 2 Multicast Listener Report.";
reference
"RFC 3810";
} }
leaf num-done { leaf num-done {
type yang:counter64; type yang:counter64;
description description
"The number of Version 1 Multicast Listener Done."; "The number of Version 1 Multicast Listener Done.";
reference
"RFC 2710";
} }
leaf num-pim-hello { leaf num-pim-hello {
type yang:counter64; type yang:counter64;
description description
"The number of PIM hello messages."; "The number of PIM hello messages.";
reference
"RFC 7761";
} }
} // mld-snooping-statistics } // mld-snooping-statistics
grouping igmp-snooping-interface-statistics-attributes { augment "/rt:routing/rt:control-plane-protocols"+
"/rt:control-plane-protocol" {
when 'derived-from-or-self(../rt:type, "ims:igmp-snooping")' {
description
"This container is only valid for IGMP snooping.";
}
description
"IGMP snooping augmentation to control plane protocol
configuration and state.";
description "Interface statistics attributes for IGMP snooping"; container igmp-snooping-instance {
if-feature igmp-snooping;
description
"IGMP snooping instance to configure igmp-snooping.";
container interfaces { leaf scenario {
config false; type snooping-scenario-type;
default bridge;
description
"The scenario indicates BRIDGE or L2VPN.";
}
description uses instance-config-attributes-igmp-mld-snooping;
"Interfaces associated with the IGMP snooping instance"; leaf igmp-version {
type uint8 {
range "1..3";
}
default 2;
description "IGMP version.";
}
list interface { leaf querier-source {
key "name"; type inet:ipv4-address;
description
"Use the IGMP snooping querier to support IGMP
snooping in a VLAN where PIM and IGMP are not configured.
The IPv4 address is used as source address in messages.";
}
description list static-l2-multicast-group {
"Interfaces associated with the IGMP snooping instance"; if-feature static-l2-multicast-group;
key "group source-addr";
description
"A static multicast route, (*,G) or (S,G).";
leaf name { leaf group {
type if:interface-ref; type rt-types:ipv4-multicast-group-address;
description description
"The name of interface"; "Multicast group IPv4 address";
}
} leaf source-addr {
type rt-types:ipv4-multicast-source-address;
description
"Multicast source IPv4 address.";
}
container statistics { leaf-list bridge-outgoing-interface {
description when 'derived-from-or-self(../../scenario,"ims:bridge")';
"The interface statistics for IGMP snooping"; type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding";
}
container received { leaf-list l2vpn-outgoing-ac {
description when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
"Statistics of received IGMP snooping packets."; type if:interface-ref;
description "Outgoing Attachment Circuit (AC) in L2VPN";
}
uses igmp-snooping-statistics; leaf-list l2vpn-outgoing-pw {
} when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
container sent { type pw:pseudowire-ref;
description description "Outgoing Pseudo Wire (PW) in L2VPN";
"Statistics of sent IGMP snooping packets."; }
uses igmp-snooping-statistics; } // static-l2-multicast-group
}
}
}
}
}//igmp-snooping-interface-statistics-attributes
grouping mld-snooping-interface-statistics-attributes { uses instance-state-attributes-igmp-mld-snooping;
description "Interface statistics attributes for MLD snooping"; list group {
container interfaces { key "address";
config false;
description config false;
"Interfaces associated with the MLD snooping instance";
list interface { description "IGMP snooping information";
key "name";
description leaf address {
"Interfaces associated with the MLD snooping instance"; type rt-types:ipv4-multicast-group-address;
description
"Multicast group IPv4 address";
}
leaf name { uses instance-state-group-attributes-igmp-mld-snooping;
type if:interface-ref;
description
"The name of interface";
} leaf last-reporter {
type inet:ipv4-address;
description
"Address of the last host which has sent report to join
the multicast group.";
}
list source {
key "address";
description "Source IPv4 address for multicast stream";
leaf address {
type rt-types:ipv4-multicast-source-address;
description "Source IPv4 address for multicast stream";
}
uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter {
type inet:ipv4-address;
description
"Address of the last host which has sent report
to join the multicast group.";
}
list host {
if-feature explicit-tracking;
key "host-address";
description
"List of multicast membership hosts
of the specific multicast source-group.";
leaf host-address {
type inet:ipv4-address;
description
"Multicast membership host address.";
}
leaf host-filter-mode {
type filter-mode-type;
mandatory true;
description
"Filter mode for a multicast membership
host may be either include or exclude.";
}
}// list host
} // list source
} // list group
container interfaces {
config false;
description
"Interfaces associated with the IGMP snooping instance";
list interface {
key "name";
container statistics {
description description
"The interface statistics for MLD snooping"; "Interfaces associated with the IGMP snooping instance";
container received { leaf name {
type if:interface-ref;
description description
"Statistics of received MLD snooping packets."; "The name of interface";
uses mld-snooping-statistics;
} }
container sent {
container statistics {
description description
"Statistics of sent MLD snooping packets."; "The interface statistics for IGMP snooping";
uses mld-snooping-statistics; container received {
} description
} "Statistics of received IGMP snooping packets.";
}
}
}//mld-snooping-interface-statistics-attributes
augment "/rt:routing/rt:control-plane-protocols"+ uses igmp-snooping-statistics;
"/rt:control-plane-protocol" { }
when 'derived-from-or-self(../rt:type, "ims:igmp-snooping")' { container sent {
description description
"This container is only valid for IGMP snooping."; "Statistics of sent IGMP snooping packets.";
}
description
"IGMP snooping augmentation to control plane protocol
configuration and state.";
container igmp-snooping-instance { uses igmp-snooping-statistics;
if-feature igmp-snooping; }
description
"IGMP snooping instance to configure igmp-snooping.";
leaf scenario { }
type snooping-scenario-type; }
default bridge;
description
"The scenario indicates BRIDGE or L2VPN.";
} }
uses instance-config-attributes-igmp-snooping;
uses instance-state-attributes-igmp-snooping;
uses igmp-snooping-interface-statistics-attributes;
action clear-igmp-snooping-groups { action clear-igmp-snooping-groups {
if-feature action-clear-groups; if-feature action-clear-groups;
description description
"Clear IGMP snooping cache tables."; "Clear IGMP snooping cache tables.";
input { input {
leaf group { leaf group {
type union { type union {
type enumeration { type enumeration {
enum 'all-groups' { enum 'all-groups' {
skipping to change at page 32, line 12 skipping to change at page 29, line 12
description description
"MLD snooping instance to configure mld-snooping."; "MLD snooping instance to configure mld-snooping.";
leaf scenario { leaf scenario {
type snooping-scenario-type; type snooping-scenario-type;
default bridge; default bridge;
description description
"The scenario indicates BRIDGE or L2VPN."; "The scenario indicates BRIDGE or L2VPN.";
} }
uses instance-config-attributes-mld-snooping; uses instance-config-attributes-igmp-mld-snooping;
uses instance-state-attributes-mld-snooping; leaf mld-version {
type uint8 {
range "1..2";
}
default 2;
description "MLD version.";
}
uses mld-snooping-interface-statistics-attributes; leaf querier-source {
type inet:ipv6-address;
description
"Use the MLD snooping querier to support MLD snooping where
PIM and MLD are not configured. The IPv6 address is used as
the source address in messages.";
}
list static-l2-multicast-group {
if-feature static-l2-multicast-group;
key "group source-addr";
description
"A static multicast route, (*,G) or (S,G).";
leaf group {
type rt-types:ipv6-multicast-group-address;
description
"Multicast group IPv6 address";
}
leaf source-addr {
type rt-types:ipv6-multicast-source-address;
description
"Multicast source IPv6 address.";
}
leaf-list bridge-outgoing-interface {
when 'derived-from-or-self(../../scenario,"ims:bridge")';
type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding";
}
leaf-list l2vpn-outgoing-ac {
when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type if:interface-ref;
description "Outgoing Attachment Circuit (AC) in L2VPN";
}
leaf-list l2vpn-outgoing-pw {
when 'derived-from-or-self(../../scenario,"ims:l2vpn")';
type pw:pseudowire-ref;
description "Outgoing Pseudo Wire (PW) in L2VPN";
}
} // static-l2-multicast-group
uses instance-state-attributes-igmp-mld-snooping;
list group {
key "address";
config false;
description "MLD snooping statistics information";
leaf address {
type rt-types:ipv6-multicast-group-address;
description
"Multicast group IPv6 address";
}
uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter {
type inet:ipv6-address;
description
"Address of the last host which has sent report
to join the multicast group.";
}
list source {
key "address";
description "Source IPv6 address for multicast stream";
leaf address {
type rt-types:ipv6-multicast-source-address;
description "Source IPv6 address for multicast stream";
}
uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter {
type inet:ipv6-address;
description
"Address of the last host which has sent report
to join the multicast group.";
}
list host {
if-feature explicit-tracking;
key "host-address";
description
"List of multicast membership hosts
of the specific multicast source-group.";
leaf host-address {
type inet:ipv6-address;
description
"Multicast membership host address.";
}
leaf host-filter-mode {
type filter-mode-type;
mandatory true;
description
"Filter mode for a multicast membership
host may be either include or exclude.";
}
}// list host
} // list source
} // list group
container interfaces {
config false;
description
"Interfaces associated with the MLD snooping instance";
list interface {
key "name";
description
"Interfaces associated with the MLD snooping instance";
leaf name {
type if:interface-ref;
description
"The name of interface";
}
container statistics {
description
"The interface statistics for MLD snooping";
container received {
description
"Statistics of received MLD snooping packets.";
uses mld-snooping-statistics;
}
container sent {
description
"Statistics of sent MLD snooping packets.";
uses mld-snooping-statistics;
}
}
}
}
action clear-mld-snooping-groups { action clear-mld-snooping-groups {
if-feature action-clear-groups; if-feature action-clear-groups;
description description
"Clear MLD snooping cache tables."; "Clear MLD snooping cache tables.";
input { input {
leaf group { leaf group {
type union { type union {
type enumeration { type enumeration {
skipping to change at page 35, line 28 skipping to change at page 35, line 25
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control access to these operations. These are the important to control access to these operations. These are the
operations and their sensitivity/vulnerability: operations and their sensitivity/vulnerability:
Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/
ims:igmp-snooping-instance/ims:clear-igmp-snooping-groups ims:igmp-snooping-instance/ims:clear-igmp-snooping-groups
ims:mld-snooping-instance/ims:clear-mld-snooping-groups ims:mld-snooping-instance/ims:clear-mld-snooping-groups
The IGMP & MLD Snooping YANG module supports the "clear-igmp-snooping- Some of the actions in this YANG module may be considered sensitive or
groups" and "clear-mld-snooping-groups" actions. If it meets vulnerable in some network environments. The IGMP & MLD Snooping YANG
unauthorized action operation invocation, the IGMP and MLD Snooping module supports the "clear-igmp-snooping-groups" and "clear-mld-
group tables will be cleared unexpectedly. snooping-groups" actions. If unauthorized action is invoked, the IGMP
and MLD Snooping group tables will be cleared unexpectedly. Especially
when using wildcard on group and source, the impact will be dramatic.
6. IANA Considerations 6. IANA Considerations
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the RFC Ed.: In this section, replace all occurrences of 'XXXX' with the
actual RFC number (and remove this note). actual RFC number (and remove this note).
This document registers the following namespace URIs in the IETF XML This document registers the following namespace URIs in the IETF XML
registry [RFC3688]: registry [RFC3688]:
skipping to change at page 37, line 19 skipping to change at page 37, line 19
[RFC6241] R. Enns, Ed., M. Bjorklund, Ed., J. Schoenwaelder, Ed., A. [RFC6241] R. Enns, Ed., M. Bjorklund, Ed., J. Schoenwaelder, Ed., A.
Bierman, Ed., "Network Configuration Protocol (NETCONF)", Bierman, Ed., "Network Configuration Protocol (NETCONF)",
RFC 6241, June 2011. RFC 6241, June 2011.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, June 2011. Shell (SSH)", RFC 6242, June 2011.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991,
July 2013. July 2013.
[RFC7761] B. Fenner, M. Handley, H. Holbrook, I. Kouvelas, R. Parekh,
Z. Zhang, L. Zheng, "Protocol Independent Multicast -
Sparse Mode (PIM-SM): Protocol Specification (Revised)",
RFC 7761, March 2016.
[RFC7950] M. Bjorklund, Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] M. Bjorklund, Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, August 2016. RFC 7950, August 2016.
[RFC8040] A. Bierman, M. Bjorklund, K. Watsen, "RESTCONF Protocol", [RFC8040] A. Bierman, M. Bjorklund, K. Watsen, "RESTCONF Protocol",
RFC 8040, January 2017. RFC 8040, January 2017.
[RFC8294] X. Liu, Y. Qu, A. Lindem, C. Hopps, L. Berger, "Common YANG [RFC8294] X. Liu, Y. Qu, A. Lindem, C. Hopps, L. Berger, "Common YANG
Data Types for the Routing Area", RFC 8294, December 2017. Data Types for the Routing Area", RFC 8294, December 2017.
[RFC8340] M. Bjorklund, and L. Berger, Ed., "YANG Tree Diagrams", RFC [RFC8340] M. Bjorklund, and L. Berger, Ed., "YANG Tree Diagrams", RFC
skipping to change at page 42, line 4 skipping to change at page 41, line 37
"ietf-igmp-mld-snooping:igmp-snooping-instance": "bis1" "ietf-igmp-mld-snooping:igmp-snooping-instance": "bis1"
} }
] ]
} }
} }
] ]
} }
] ]
} }
} }
The following action is to clear all the entries whose group address is
225.1.1.1 for igmp-snooping-instance bis1.
POST /restconf/operations/ietf-routing:routing/\
control-plane-protocols/control-plane-protocol=igmp-snooping,bis1/\
ietf-igmp-mld-snooping:igmp-snooping/igmp-snooping-instance\
/clear-igmp-snooping-groups HTTP/1.1
Host: example.com
Content-Type: application/yang-data+json
{
"ietf-igmp-mld-snooping:input" : {
"group": "225.1.1.1",
"source": "*"
}
}
A.2 L2VPN scenario A.2 L2VPN scenario
This section contains an example for L2VPN scenario in the JSON encoding This section contains an example for L2VPN scenario in the JSON encoding
[RFC7951], containing both configuration and state data. [RFC7951], containing both configuration and state data.
+-----------+ +-----------+
+ Source + + Source +
+-----+-----+ +-----+-----+
| |
-----------------+---------------------------- -----------------+----------------------------
skipping to change at page 42, line 31 skipping to change at page 42, line 31
| \ | \
| \ | \
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",
 End of changes. 89 change blocks. 
399 lines changed or deleted 423 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/