draft-ietf-pim-igmp-mld-snooping-yang-04.txt   draft-ietf-pim-igmp-mld-snooping-yang-05.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: February 06, 2019 Jabil Expires: April 10, 2019 Jabil
Y. Liu Y. Liu
Huawei Huawei
M. Sivakumar M. Sivakumar
Juniper Juniper
A. Peter A. Peter
Individual Individual
August 07, 2018 October 11, 2018
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-04.txt draft-ietf-pim-igmp-mld-snooping-yang-05.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 1, line 38 skipping to change at page 1, line 38
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet- other groups may also distribute working documents as Internet-
Drafts. Drafts.
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 February 06, 2019. This Internet-Draft will expire on April 10, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 30 skipping to change at page 2, line 30
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.................7 2.4. IGMP and MLD Snooping Instances Reference.................8
2.5. Augment /if:interfaces/if:interface.......................8 2.5. IGMP and MLD Snooping RPC.................................9
2.6. IGMP and MLD Snooping RPC................................10 3. IGMP and MLD Snooping YANG Module..............................9
3. IGMP and MLD Snooping YANG Module.............................10 4. Security Considerations.......................................32
4. Security Considerations.......................................36 5. IANA Considerations...........................................33
5. IANA Considerations...........................................37 6. Normative References..........................................34
6. Normative References..........................................38 Appendix A. Data Tree Example...................................36
Appendix A. Data Tree Example...................................40 Authors' Addresses...............................................42
Authors' Addresses...............................................45
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 5 skipping to change at page 5, line 5
is bridge, the igmp-snooping-instance will be referenced in the BRIDGE is bridge, the igmp-snooping-instance will be referenced in the BRIDGE
scenario. When it is l2vpn, the igmp-snooping-instance will be scenario. When it is l2vpn, the igmp-snooping-instance will be
referenced in the L2VPN scenario. referenced in the L2VPN scenario.
The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac,
l2vpn-mrouter-interface-pw are filled by snooping device dynamically. l2vpn-mrouter-interface-pw are filled by snooping device dynamically.
They are different from static-bridge-mrouter-interface, static-l2vpn- They are different from static-bridge-mrouter-interface, static-l2vpn-
mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw which are mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw which are
configured statically. configured statically.
module: ietf-igmp-mld-snooping The attributes under the statistics are read-only. They show the
+--rw igmp-snooping-instances statistics of IGMP and MLD Snooping related packets.
| +--rw igmp-snooping-instance* [name]
| +--rw name string module: ietf-igmp-mld-snooping
| +--rw type? enumeration +--rw igmp-snooping-instances
| +--rw enable? boolean | +--rw igmp-snooping-instance* [name]
| +--rw forwarding-mode? enumeration | +--rw name string
| +--rw explicit-tracking? boolean | +--rw type? enumeration
| | {explicit-tracking}? | +--rw enable? boolean
| +--rw exclude-lite? boolean | +--rw forwarding-mode? enumeration
| | {exclude-lite}? | +--rw explicit-tracking? boolean
| +--rw send-query? boolean | | {explicit-tracking}?
| +--rw immediate-leave? empty | +--rw exclude-lite? boolean
| | {immediate-leave}? | | {exclude-lite}?
| +--rw last-member-query-interval? uint16 | +--rw send-query? boolean
| +--rw query-interval? uint16 | +--rw immediate-leave? empty
| +--rw query-max-response-time? uint16 | | {immediate-leave}?
| +--rw require-router-alert? boolean | +--rw last-member-query-interval? uint16
| | {require-router-alert}? | +--rw query-interval? uint16
| +--rw robustness-variable? uint8 | +--rw query-max-response-time? uint16
| +--rw version? uint8 | +--rw require-router-alert? boolean
| +--rw static-bridge-mrouter-interface* if:interface-ref | | {require-router-alert}?
| | {static-mrouter-interface}? | +--rw robustness-variable? uint8
| +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref | +--rw version? uint8
| | {static-mrouter-interface}? | +--rw static-bridge-mrouter-interface* if:interface-ref
| +--rw static-l2vpn-mrouter-interface-pw* | | {static-mrouter-interface}?
| | l2vpn-instance-pw-ref {static-mrouter-interface}? | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref
| +--rw querier-source? inet:ipv4-address | | {static-mrouter-interface}?
| +--rw static-l2-multicast-group* [group source-addr] | +--rw static-l2vpn-mrouter-interface-pw*
| | {static-l2-multicast-group}? | | l2vpn-instance-pw-ref {static-mrouter-interface}?
| | +--rw group inet:ipv4-address | +--rw querier-source? inet:ipv4-address
| | +--rw source-addr source-ipv4-addr-type | +--rw static-l2-multicast-group* [group source-addr]
| | +--rw bridge-outgoing-interface* if:interface-ref | | {static-l2-multicast-group}?
| | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref | | +--rw group inet:ipv4-address
| | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | +--rw source-addr source-ipv4-addr-type
| +--ro entries-count? uint32 | | +--rw bridge-outgoing-interface* if:interface-ref
| +--ro bridge-mrouter-interface* if:interface-ref | | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref
| +--ro l2vpn-mrouter-interface-ac* if:interface-ref | | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref
| +--ro l2vpn-mrouter-interface-pw* | +--ro entries-count? uint32
| | l2vpn-instance-pw-ref | +--ro bridge-mrouter-interface* if:interface-ref
| +--ro group* [address] | +--ro l2vpn-mrouter-interface-ac* if:interface-ref
| +--ro address inet:ipv4-address | +--ro l2vpn-mrouter-interface-pw*
| +--ro mac-address? yang:phys-address | | l2vpn-instance-pw-ref
| +--ro expire? uint32 | +--ro group* [address]
| +--ro up-time? uint32 | | +--ro address inet:ipv4-address
| +--ro last-reporter? inet:ipv4-address | | +--ro mac-address? yang:phys-address
| +--ro source* [address] | | +--ro expire? uint32
| +--ro address inet:ipv4-address | | +--ro up-time? uint32
| +--ro bridge-outgoing-interface* if:interface-ref | | +--ro last-reporter? inet:ipv4-address
| +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref | | +--ro source* [address]
| +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | +--ro address inet:ipv4-address
| +--ro up-time? uint32 | | +--ro bridge-outgoing-interface* if:interface-ref
| +--ro expire? uint32 | | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref
| +--ro host-count? uint32 | | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref
| | {explicit-tracking}? | | +--ro up-time? uint32
| +--ro last-reporter? inet:ipv4-address | | +--ro expire? uint32
| +--ro host* [host-address] {explicit-tracking}? | | +--ro host-count? uint32
| +--ro host-address inet:ipv4-address | | | {explicit-tracking}?
| +--ro host-filter-mode? enumeration | | +--ro last-reporter? inet:ipv4-address
| | +--ro host* [host-address] {explicit-tracking}?
| | +--ro host-address inet:ipv4-address
| | +--ro host-filter-mode? enumeration
| +--ro interfaces
| +--ro interface* [name]
| +--ro name if:interface-ref
| +--ro statistics
| +--ro received
| | +--ro query? yang:counter64
| | +--ro membership-report-v1? yang:counter64
| | +--ro membership-report-v2? yang:counter64
| | +--ro membership-report-v3? yang:counter64
| | +--ro leave? yang:counter64
| | +--ro non-member-leave? yang:counter64
| | +--ro pim? yang:counter64
| +--ro sent
| +--ro query? yang:counter64
| +--ro membership-report-v1? yang:counter64
| +--ro membership-report-v2? yang:counter64
| +--ro membership-report-v3? yang:counter64
| +--ro leave? yang:counter64
| +--ro non-member-leave? yang:counter64
| +--ro pim? 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
+--rw mld-snooping-instances +--rw mld-snooping-instances
+--rw mld-snooping-instance* [name] +--rw mld-snooping-instance* [name]
+--rw name string +--rw name string
+--rw type? enumeration +--rw type? enumeration
+--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 +--rw exclude-lite? boolean
| {exclude-lite}? | {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 version? uint8 +--rw version? uint8
+--rw static-bridge-mrouter-interface* if:interface-ref +--rw static-bridge-mrouter-interface* if:interface-ref
| {static-mrouter-interface}? | {static-mrouter-interface}?
+--rw static-l2vpn-mrouter-interface-ac* if:interface-ref +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref
| {static-mrouter-interface}? | {static-mrouter-interface}?
+--rw static-l2vpn-mrouter-interface-pw* +--rw static-l2vpn-mrouter-interface-pw*
| l2vpn-instance-pw-ref {static-mrouter-interface}? | l2vpn-instance-pw-ref {static-mrouter-interface}?
+--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-group}? | {static-l2-multicast-group}?
| +--rw group inet:ipv6-address | +--rw group inet:ipv6-address
| +--rw source-addr source-ipv6-addr-type | +--rw source-addr source-ipv6-addr-type
| +--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* l2vpn-instance-ac-ref
| +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-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* +--ro l2vpn-mrouter-interface-pw*
| l2vpn-instance-pw-ref | l2vpn-instance-pw-ref
+--ro group* [address] +--ro group* [address]
+--ro address inet:ipv6-address | +--ro address inet:ipv6-address
+--ro mac-address? yang:phys-address | +--ro mac-address? yang:phys-address
+--ro expire? uint32 | +--ro expire? uint32
+--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 inet:ipv6-address | +--ro address inet:ipv6-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* l2vpn-instance-ac-ref
+--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref
+--ro up-time? uint32 | +--ro up-time? uint32
+--ro expire? uint32 | +--ro expire? uint32
+--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? enumeration | +--ro host-filter-mode? enumeration
+--ro interfaces
+--ro interface* [name]
+--ro name if:interface-ref
+--ro statistics
+--ro received
| +--ro query? yang:counter64
| +--ro report-v1? yang:counter64
| +--ro report-v2? yang:counter64
| +--ro done? yang:counter64
| +--ro pim? yang:counter64
+--ro sent
+--ro query? yang:counter64
+--ro report-v1? yang:counter64
+--ro report-v2? yang:counter64
+--ro done? yang:counter64
+--ro pim? yang:counter64
2.4. IGMP and MLD Snooping Instances Reference 2.4. IGMP and MLD Snooping Instances Reference
The igmp-snooping-instance could be referenced in the scenario of BRIDGE The igmp-snooping-instance could be referenced in the scenario of BRIDGE
or L2VPN to configure the IGMP Snooping. or L2VPN to configure the IGMP Snooping.
For the BRIDGE scenario this model augments /dot1q:bridges/dot1q:bridge For the BRIDGE scenario this model augments /dot1q:bridges/dot1q:bridge
to reference igmp-snooping-instance. It means IGMP Snooping is enabled to reference igmp-snooping-instance. It means IGMP Snooping is enabled
in the whole bridge. in the whole bridge.
skipping to change at page 8, line 25 skipping to change at page 9, line 8
instance. It means IGMP Snooping is enabled in the specified l2vpn instance. It means IGMP Snooping is enabled in the specified l2vpn
instance. instance.
augment /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn: augment /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn:
+--rw igmp-snooping-instance? igmp-snooping-instance-ref +--rw igmp-snooping-instance? igmp-snooping-instance-ref
+--rw mld-snooping-instance? mld-snooping-instance-ref +--rw mld-snooping-instance? mld-snooping-instance-ref
The mld-snooping-instance could be referenced in concurrence with igmp- The mld-snooping-instance could be referenced in concurrence with igmp-
snooping-instance to configure the MLD Snooping. snooping-instance to configure the MLD Snooping.
2.5. Augment /if:interfaces/if:interface 2.5. IGMP and MLD Snooping RPC
This model augments /if:interfaces/if:interface and then add the IGMP
and MLD Snooping related attributes under it. The attributes include
enable, version, etc.
The static-mrouter-interface and static-l2-multicast-group could be
configured statically under the /if:interfaces/if:interface/ims:igmp-
mld-snooping view. Meanwhile, you can configure them under the IGMP and
MLD Snooping instance view.
The attributes under the statistics are read-only. They show the
statistics of IGMP and MLD Snooping related packets.
augment /if:interfaces/if:interface:
+--rw igmp-mld-snooping
+--rw enable? boolean
+--rw version? uint8
+--rw type? enumeration
+--rw static-mrouter-interface
| +--rw (static-mrouter-interface)?
| +--:(bridge)
| | +--rw bridge-name? string
| | +--rw vlan-id* uint32
| +--:(l2vpn)
| +--rw l2vpn-instance-name? string
+--rw static-l2-multicast-group
| +--rw (static-l2-multicast-group)?
| +--:(bridge)
| | +--rw bridge-name? string
| | +--rw bridge-group-v4* [group source-addr]
| | | +--rw group inet:ipv4-address
| | | +--rw source-addr source-ipv4-addr-type
| | | +--rw vlan-id* uint32
| | +--rw bridge-group-v6* [group source-addr]
| | +--rw group inet:ipv6-address
| | +--rw source-addr source-ipv6-addr-type
| | +--rw vlan-id* uint32
| +--:(l2vpn)
| +--rw l2vpn-group-v4* [group source-addr]
| | +--rw group inet:ipv4-address
| | +--rw source-addr source-ipv4-addr-type
| | +--rw l2vpn-instance-name? string
| +--rw l2vpn-group-v6* [group source-addr]
| +--rw group inet:ipv6-address
| +--rw source-addr source-ipv6-addr-type
| +--rw l2vpn-instance-name? string
+--ro statistics
+--ro received
| +--ro query? yang:counter64
| +--ro membership-report-v1? yang:counter64
| +--ro membership-report-v2? yang:counter64
| +--ro membership-report-v3? yang:counter64
| +--ro leave? yang:counter64
| +--ro non-member-leave? yang:counter64
| +--ro pim? yang:counter64
+--ro sent
+--ro query? yang:counter64
+--ro membership-report-v1? yang:counter64
+--ro membership-report-v2? yang:counter64
+--ro membership-report-v3? yang:counter64
+--ro leave? yang:counter64
+--ro non-member-leave? yang:counter64
+--ro pim? yang:counter64
2.6. IGMP and MLD Snooping RPC
IGMP and MLD Snooping RPC clears the specified IGMP and MLD Snooping IGMP and MLD Snooping RPC clears the specified IGMP and MLD Snooping
group tables. group tables.
rpcs: rpcs:
+---x clear-igmp-snooping-groups {rpc-clear-groups}? +---x clear-igmp-snooping-groups {rpc-clear-groups}?
| +---w input | +---w input
| +---w name? string | +---w name? string
| +---w group? inet:ipv4-address | +---w group? inet:ipv4-address
| +---w source? inet:ipv4-address | +---w source? inet:ipv4-address
+---x clear-mld-snooping-groups {rpc-clear-groups}? +---x clear-mld-snooping-groups {rpc-clear-groups}?
+---w input +---w input
+---w name? string +---w name? string
+---w group? inet:ipv6-address +---w group? inet:ipv6-address
+---w source? inet:ipv6-address +---w source? inet:ipv6-address
3. IGMP and MLD Snooping YANG Module 3. IGMP and MLD Snooping YANG Module
<CODE BEGINS> file ietf-igmp-mld-snooping@2018-08-02.yang <CODE BEGINS> file ietf-igmp-mld-snooping@2018-10-11.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";
// replace with IANA namespace when assigned // replace with IANA namespace when assigned
prefix ims; prefix ims;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
skipping to change at page 11, line 46 skipping to change at page 10, line 53
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-08-02 { revision 2018-10-11 {
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 immediate-leave { feature immediate-leave {
description description
"Support configuration of immediate-leave."; "Support configuration of immediate-leave.";
} }
feature join-group { feature join-group {
skipping to change at page 14, line 16 skipping to change at page 13, line 20
type inet:ipv6-address; type inet:ipv6-address;
} }
description description
"Multicast source IPV6 address type."; "Multicast source IPV6 address type.";
} // source-ipv6-addr-type } // source-ipv6-addr-type
/* /*
* Groupings * Groupings
*/ */
grouping general-state-attributes {
description "General State attributes";
container received {
config false;
description "Statistics of received IGMP and MLD snooping
related packets.";
uses general-statistics-sent-received;
}
container sent {
config false;
description "Statistics of sent IGMP and MLD snooping
related packets.";
uses general-statistics-sent-received;
}
} // general-state-attributes
grouping instance-config-attributes-igmp-snooping { grouping instance-config-attributes-igmp-snooping {
description "IGMP snooping configuration for each"+ description "IGMP snooping configuration for each"+
"BRIDGE or L2VPN instance."; "BRIDGE or L2VPN instance.";
uses instance-config-attributes-igmp-mld-snooping; uses instance-config-attributes-igmp-mld-snooping;
leaf querier-source { leaf querier-source {
type inet:ipv4-address; type inet:ipv4-address;
description "Use the IGMP snooping querier to support IGMP description "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.
skipping to change at page 15, line 48 skipping to change at page 14, line 29
} // 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 {
type boolean; type boolean;
default false; default false;
description description
"Set the value to true to enable IGMP and MLD snooping in the "Set the value to true to enable IGMP & MLD snooping.";
VLAN instance.";
} }
leaf forwarding-mode { leaf forwarding-mode {
type enumeration { type enumeration {
enum "mac" { enum "mac" {
description description
"MAC-based lookup mode"; "MAC-based lookup mode";
} }
enum "ip" { enum "ip" {
description description
skipping to change at page 24, line 38 skipping to change at page 23, line 19
} }
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.";
} }
} // instance-state-source-attributes-igmp-mld-snooping } // instance-state-source-attributes-igmp-mld-snooping
grouping general-statistics-error { grouping igmp-snooping-statistics-sent-received {
description
"A grouping defining statistics attributes for errors.";
leaf checksum {
type yang:counter64;
description
"The number of checksum errors.";
}
leaf too-short {
type yang:counter64;
description
"The number of messages that are too short.";
}
} // general-statistics-error
grouping general-statistics-sent-received {
description description
"A grouping defining statistics attributes."; "The statistics attributes for IGMP snooping.";
leaf query { leaf query {
type yang:counter64; type yang:counter64;
description description
"The number of query messages."; "The number of query messages.";
} }
leaf membership-report-v1 { leaf membership-report-v1 {
type yang:counter64; type yang:counter64;
description description
"The number of membership report v1 messages."; "The number of membership report v1 messages.";
skipping to change at page 25, line 43 skipping to change at page 24, line 7
leaf non-member-leave { leaf non-member-leave {
type yang:counter64; type yang:counter64;
description description
"The number of non member leave messages."; "The number of non member leave messages.";
} }
leaf pim { leaf pim {
type yang:counter64; type yang:counter64;
description description
"The number of pim hello messages."; "The number of pim hello messages.";
} }
} // general-statistics-sent-received } // igmp-snooping-statistics-sent-received
grouping mld-snooping-statistics-sent-received {
description
"The statistics attributes for MLD snooping.";
leaf query {
type yang:counter64;
description
"The number of Multicast Listener Query messages.";
}
leaf report-v1 {
type yang:counter64;
description
"The number of Version 1 Multicast Listener Report.";
}
leaf report-v2 {
type yang:counter64;
description
"The number of Version 2 Multicast Listener Report.";
}
leaf done {
type yang:counter64;
description
"The number of Version 1 Multicast Listener Done.";
}
leaf pim {
type yang:counter64;
description
"The number of pim hello messages.";
}
} // mld-snooping-statistics-sent-received
grouping interface-endpoint-attributes-igmp-snooping { grouping interface-endpoint-attributes-igmp-snooping {
description "interface attributes for IGMP snooping"; description "interface attributes for IGMP snooping";
list host { list host {
if-feature explicit-tracking; if-feature explicit-tracking;
key "host-address"; key "host-address";
skipping to change at page 26, line 4 skipping to change at page 24, line 49
grouping interface-endpoint-attributes-igmp-snooping { grouping interface-endpoint-attributes-igmp-snooping {
description "interface attributes for IGMP snooping"; description "interface attributes for IGMP snooping";
list host { list host {
if-feature explicit-tracking; if-feature explicit-tracking;
key "host-address"; key "host-address";
config false; config false;
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 {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Multicast membership host address."; "Multicast membership host address.";
} }
leaf host-filter-mode { leaf host-filter-mode {
type enumeration { type enumeration {
enum "include" { enum "include" {
description description
skipping to change at page 27, line 21 skipping to change at page 26, line 16
"In exclude mode."; "In exclude mode.";
} }
} }
description description
"Filter mode for a multicast membership "Filter mode for a multicast membership
host may be either include or exclude."; host may be either include or exclude.";
} }
}// list host }// list host
} // interface-endpoint-attributes-mld-snooping } // interface-endpoint-attributes-mld-snooping
grouping igmp-snooping-interface-statistics-attributes {
description "Interface statistics attributes for IGMP snooping";
container interfaces {
config false;
description
"Interfaces associated with the IGMP snooping instance";
list interface {
key "name";
description
"Interfaces associated with the IGMP snooping instance";
leaf name {
type if:interface-ref;
description
"The name of interface";
}
container statistics {
description
"The interface statistics for IGMP snooping";
container received {
description
"Statistics of received IGMP snooping packets.";
uses igmp-snooping-statistics-sent-received;
}
container sent {
description
"Statistics of sent IGMP snooping packets.";
uses igmp-snooping-statistics-sent-received;
}
}
}
}
} //igmp-snooping-interface-statistics-attributes
grouping mld-snooping-interface-statistics-attributes {
description "Interface statistics attributes for MLD snooping";
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-sent-received;
}
container sent {
description
"Statistics of sent MLD snooping packets.";
uses mld-snooping-statistics-sent-received;
}
}
}
}
} //mld-snooping-interface-statistics-attributes
/* /*
* igmp-snooping-instance * igmp-snooping-instance
*/ */
container igmp-snooping-instances { container igmp-snooping-instances {
description description
"igmp-snooping-instance list"; "igmp-snooping-instance list";
list igmp-snooping-instance { list igmp-snooping-instance {
key "name"; key "name";
description description
skipping to change at page 28, line 5 skipping to change at page 28, line 37
description "L2VPN"; description "L2VPN";
} }
} }
description "The type indicates BRIDGE or L2VPN."; description "The type indicates BRIDGE or L2VPN.";
} }
uses instance-config-attributes-igmp-snooping; uses instance-config-attributes-igmp-snooping;
uses instance-state-attributes-igmp-snooping; uses instance-state-attributes-igmp-snooping;
uses igmp-snooping-interface-statistics-attributes;
} //igmp-snooping-instance } //igmp-snooping-instance
} //igmp-snooping-instances } //igmp-snooping-instances
/* /*
* mld-snooping-instance * mld-snooping-instance
*/ */
container mld-snooping-instances { container mld-snooping-instances {
description description
"mld-snooping-instance list"; "mld-snooping-instance list";
list mld-snooping-instance { list mld-snooping-instance {
key "name"; key "name";
description description
skipping to change at page 28, line 43 skipping to change at page 29, line 30
description "L2VPN"; description "L2VPN";
} }
} }
description "The type indicates BRIDGE or L2VPN."; description "The type indicates BRIDGE or L2VPN.";
} }
uses instance-config-attributes-mld-snooping; uses instance-config-attributes-mld-snooping;
uses instance-state-attributes-mld-snooping; uses instance-state-attributes-mld-snooping;
uses mld-snooping-interface-statistics-attributes;
} //mld-snooping-instance } //mld-snooping-instance
} //mld-snooping-instances } //mld-snooping-instances
/* augments */ /* augments */
augment "/dot1q:bridges/dot1q:bridge" { augment "/dot1q:bridges/dot1q:bridge" {
description description
"Reference IGMP & MLD snooping instance in BRIDGE scenario"; "Reference IGMP & MLD snooping instance in BRIDGE scenario";
leaf igmp-snooping-instance { leaf igmp-snooping-instance {
skipping to change at page 30, line 4 skipping to change at page 30, line 39
type igmp-snooping-instance-ref; type igmp-snooping-instance-ref;
description description
"Configure IGMP snooping instance in L2VPN scenario"; "Configure IGMP snooping instance in L2VPN scenario";
} }
leaf mld-snooping-instance { leaf mld-snooping-instance {
type mld-snooping-instance-ref; type mld-snooping-instance-ref;
description description
"Configure MLD snooping instance in L2VPN scenario"; "Configure MLD snooping instance in L2VPN scenario";
} }
} }
augment "/if:interfaces/if:interface" {
description
"Augment interface for referencing attributes
which only fit for interface view.";
container igmp-mld-snooping {
description
"igmp-mld-snooping related attributes under interface view";
leaf enable {
type boolean;
default false;
description
"Set the value to true to enable IGMP and MLD snooping
in the VLAN instance.";
}
leaf version {
type uint8 {
range "1..3";
}
default 2;
description "IGMP and MLD snooping version.";
}
leaf type {
type enumeration {
enum "bridge" {
description "BRIDGE";
}
enum "l2vpn" {
description "L2VPN";
}
}
description "The type indicates BRIDGE or L2VPN.";
}
container static-mrouter-interface {
description
"Container for choice static-mrouter-interface";
choice static-mrouter-interface {
description
"Configure static multicast router interface
under the interface view";
case bridge {
when "../type = 'bridge'" {
description
"Applies to BRIDGE scenario.";
}
description
"Applies to BRIDGE scenario.";
leaf bridge-name {
type string;
description
"The name for a bridge.
Each interface belongs to only one bridge.";
}
leaf-list vlan-id {
type uint32;
description
"The VLAN ids for bridge. If you don't specify
VLAN id here, the interface serves as the mrouter
interface for all the VLANs in this bridge.";
}
}
case l2vpn {
when "../type = 'l2vpn'" {
description
"Applies to L2VPN scenario.";
}
description
"Applies to L2VPN scenario.";
leaf l2vpn-instance-name {
type string;
description
"The L2VPN instance name applied in the interface";
}
}
} // choice static-mrouter-interface
} // container static-mrouter-interface
container static-l2-multicast-group {
description
"Container for static-l2-multicast-group";
choice static-l2-multicast-group {
description
"Configure static l2 multicast group
under interface view";
case bridge {
when "../type = 'bridge'" {
description
"Applies to BRIDGE scenario.";
}
description
"Applies to BRIDGE scenario.";
leaf bridge-name {
type string;
description
"bridge name.";
}
list bridge-group-v4 {
key "group source-addr";
description
"A static multicast route, (*,G) or (S,G).";
leaf group {
type inet:ipv4-address;
description
"Multicast group IPV4 address";
}
leaf source-addr {
type source-ipv4-addr-type;
description
"Multicast source IPV4 address.";
}
leaf-list vlan-id {
type uint32;
description
"VLAN id.";
}
}
list bridge-group-v6 {
key "group source-addr";
description
"A static multicast route, (*,G) or (S,G).";
leaf group {
type inet:ipv6-address;
description
"Multicast group IPV6 address";
}
leaf source-addr {
type source-ipv6-addr-type;
description
"Multicast source IPV6 address.";
}
leaf-list vlan-id {
type uint32;
description
"VLAN id.";
}
}
} // case bridge
case l2vpn {
when "../type = 'l2vpn'" {
description
"Applies to L2VPN scenario.";
}
description
"Applies to L2VPN scenario.";
list l2vpn-group-v4 {
key "group source-addr";
description
"A static multicast route, (*,G) or (S,G).";
leaf group {
type inet:ipv4-address;
description
"Multicast group IPV4 address";
}
leaf source-addr {
type source-ipv4-addr-type;
description
"Multicast source IPV4 address.";
}
leaf l2vpn-instance-name {
type string;
description
"L2VPN instance name applied in the interface";
}
}
list l2vpn-group-v6 {
key "group source-addr";
description
"A static multicast route, (*,G) or (S,G).";
leaf group {
type inet:ipv6-address;
description
"Multicast group IPV6 address";
}
leaf source-addr {
type source-ipv6-addr-type;
description
"Multicast source IPV6 address.";
}
leaf l2vpn-instance-name {
type string;
description
"L2VPN instance name applied in the interface";
}
}
}
} //choice static-l2-multicast-group
} // container static-l2-multicast-group
container statistics {
config false;
description
"A collection of interface-related statistics objects.";
uses general-state-attributes;
}
}
}
/* RPCs */ /* RPCs */
rpc clear-igmp-snooping-groups { rpc clear-igmp-snooping-groups {
if-feature rpc-clear-groups; if-feature rpc-clear-groups;
description description
"Clears the specified IGMP snooping cache tables."; "Clears the specified IGMP snooping cache tables.";
input { input {
skipping to change at page 36, line 31 skipping to change at page 32, line 35
default). These data nodes may be considered sensitive or vulnerable default). These data nodes may be considered sensitive or vulnerable
in some network environments. Write operations (e.g., edit-config) to in some network environments. Write operations (e.g., edit-config) to
these data nodes without proper protection can have a negative effect these data nodes without proper protection can have a negative effect
on network operations. These are the subtrees and data nodes and on network operations. These are the subtrees and data nodes and
their sensitivity/vulnerability: their sensitivity/vulnerability:
/ims:igmp-snooping-instances/ims:igmp-snooping-instance /ims:igmp-snooping-instances/ims:igmp-snooping-instance
/ims:mld-snooping-instances/ims:mld-snooping-instance /ims:mld-snooping-instances/ims:mld-snooping-instance
/if:interfaces/if:interface/ims:igmp-mld-snooping
Unauthorized access to any data node of these subtrees can adversely Unauthorized access to any data node of these subtrees can adversely
affect the IGMP & MLD Snooping subsystem of both the local device and affect the IGMP & MLD Snooping subsystem of both the local device and
the network. This may lead to network malfunctions, delivery of the network. This may lead to network malfunctions, delivery of
packets to inappropriate destinations, and other problems. packets to inappropriate destinations, and other problems.
Some of the readable data nodes in this YANG module may be considered Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config, or important to control read access (e.g., via get, get-config, or
notification) to these data nodes. These are the subtrees and data notification) to these data nodes. These are the subtrees and data
nodes and their sensitivity/vulnerability: nodes and their sensitivity/vulnerability:
/ims:igmp-snooping-instances/ims:igmp-snooping-instance /ims:igmp-snooping-instances/ims:igmp-snooping-instance
/ims:mld-snooping-instances/ims:mld-snooping-instance /ims:mld-snooping-instances/ims:mld-snooping-instance
/if:interfaces/if:interface/ims:igmp-mld-snooping
Unauthorized access to any data node of these subtrees can disclose Unauthorized access to any data node of these subtrees can disclose
the operational state information of IGMP & MLD Snooping on this the operational state information of IGMP & MLD Snooping on this
device. device.
Some of the RPC operations in this YANG module may be considered Some of the RPC operations in this YANG module may be considered
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. The IGMP & MLD important to control access to these operations. The IGMP & MLD
Snooping Yang module support the "clear-igmp-snooping-groups" and " Snooping Yang module support the "clear-igmp-snooping-groups" and "
clear-mld-snooping-groups" RPCs. If it meets unauthorized RPC clear-mld-snooping-groups" RPCs. If it meets unauthorized RPC
operation invocation, the IGMP and MLD Snooping group tables will be operation invocation, the IGMP and MLD Snooping group tables will be
skipping to change at page 42, line 8 skipping to change at page 38, line 8
} }
] ]
} }
] ]
} }
} }
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": "1/1",
"type": "iana-if-type:ethernetCsmacd",
"admin-status": "up",
"if-index": 214748,
"oper-status": "up",
"statistics": {
"discontinuity-time": "2018-05-23T12:34:56-05:00"
}
},
{
"name": "1/2",
"type": "iana-if-type:ethernetCsmacd",
"admin-status": "up",
"if-index": 214749,
"oper-status": "up",
"statistics": {
"discontinuity-time": "2018-05-23T12:35:06-05:02"
}
}
]
},
"ietf-igmp-mld-snooping:igmp-snooping-instances": {
"igmp-snooping-instance": [
{
"name": "ins101",
"type": "bridge",
"enable": true,
"forwarding-mode": "ip",
"explicit-tracking": false,
"exclude-lite": false,
"send-query": true,
"immediate-leave": [null],
"last-member-query-interval": 1,
"query-interval": 125,
"query-max-response-time": 10,
"require-router-alert": false,
"robustness-variable": 2,
"entries-count": 1,
"bridge-mrouter-interface": ["1/1"],
"group": [
{ {
"address": "223.0.0.1", "name": "1/1",
"mac-address": "01:00:5e:00:00:01", "type": "iana-if-type:ethernetCsmacd",
"expire": 120, "admin-status": "up",
"up-time": 180, "if-index": 214748,
"last-reporter": "100.0.0.1", "oper-status": "up",
"source": [ "statistics": {
{ "discontinuity-time": "2018-05-23T12:34:56-05:00"
"address": "192.168.0.1", }
"bridge-outgoing-interface": ["1/2"], },
"up-time": 180, {
"expire": 120, "name": "1/2",
"last-reporter": "100.0.0.1" "type": "iana-if-type:ethernetCsmacd",
} "admin-status": "up",
] "if-index": 214749,
"oper-status": "up",
"statistics": {
"discontinuity-time": "2018-05-23T12:35:06-05:02"
} }
] }
} ]
] },
}, "ietf-igmp-mld-snooping:igmp-snooping-instances": {
"ietf-igmp-mld-snooping:mld-snooping-instances": { "igmp-snooping-instance": [
"mld-snooping-instance": [ {
{ "name": "ins101",
"name": "ins102", "type": "bridge",
"type": "bridge", "enable": true,
"enable": true, "forwarding-mode": "ip",
"forwarding-mode": "ip", "explicit-tracking": false,
"explicit-tracking": false, "exclude-lite": false,
"exclude-lite": false, "send-query": true,
"send-query": true, "immediate-leave": [null],
"immediate-leave": [null], "last-member-query-interval": 1,
"last-member-query-interval": 1, "query-interval": 125,
"query-interval": 125, "query-max-response-time": 10,
"query-max-response-time": 10, "require-router-alert": false,
"require-router-alert": false, "robustness-variable": 2,
"robustness-variable": 2, "entries-count": 1,
"entries-count": 1, "bridge-mrouter-interface": ["1/1"],
"bridge-mrouter-interface": ["1/1"], "group": [
"group": [ {
{ "address": "223.0.0.1",
"address": "FF0E::1", "mac-address": "01:00:5e:00:00:01",
"mac-address": "01:00:5e:00:00:01", "expire": 120,
"up-time": 180,
"last-reporter": "100.0.0.1",
"source": [
{
"address": "192.168.0.1",
"bridge-outgoing-interface": ["1/2"],
"up-time": 180,
"expire": 120, "expire": 120,
"last-reporter": "100.0.0.1"
}
]
}
],
"interfaces": {
"interface": [
{
"name": "1/1",
"statistics": {
"received": {
"query": 5,
"membership-report-v1": 0,
"membership-report-v2": 0,
"membership-report-v3": 0,
"leave": 0,
"non-member-leave": 0,
"pim": 11
},
"sent": {
"query": 0,
"membership-report-v1": 0,
"membership-report-v2": 3,
"membership-report-v3": 0,
"leave": 0,
"non-member-leave": 0,
"pim": 0
}
}
},
{
"name": "1/2",
"statistics": {
"received": {
"query": 0,
"membership-report-v1": 0,
"membership-report-v2": 3,
"membership-report-v3": 0,
"leave": 0,
"non-member-leave": 0,
"pim": 0
},
"sent": {
"query": 5,
"membership-report-v1": 0,
"membership-report-v2": 0,
"membership-report-v3": 0,
"leave": 0,
"non-member-leave": 0,
"pim": 11
}
}
}
]
}
}
]
},
"ietf-igmp-mld-snooping:mld-snooping-instances": {
"mld-snooping-instance": [
{
"name": "ins102",
"type": "bridge",
"enable": true,
"forwarding-mode": "ip",
"explicit-tracking": false,
"exclude-lite": false,
"send-query": true,
"immediate-leave": [null],
"last-member-query-interval": 1,
"query-interval": 125,
"query-max-response-time": 10,
"require-router-alert": false,
"robustness-variable": 2,
"entries-count": 1,
"bridge-mrouter-interface": ["1/1"],
"group": [
{
"address": "FF0E::1",
"mac-address": "01:00:5e:00:00:01",
"expire": 120,
"up-time": 180,
"last-reporter": "2001::1",
"source": [
{
"address": "3001::1",
"bridge-outgoing-interface": ["1/2"],
"up-time": 180, "up-time": 180,
"last-reporter": "2001::1", "expire": 120,
"source": [ "last-reporter": "2001::1"
{ }
"address": "3001::1", ]
"bridge-outgoing-interface": ["1/2"], }
"up-time": 180, ],
"expire": 120,
"last-reporter": "2001::1"
}
]
}
] "interfaces": {
} "interface": [
] {
} "name": "1/1",
"statistics": {
"received": {
"query": 7,
"report-v1": 0,
"report-v2": 0,
"done": 0,
"pim": 15
},
"sent": {
"query": 0,
"report-v1": 0,
"report-v2": 3,
"done": 0,
"pim": 0
}
}
},
{
"name": "1/2",
"statistics": {
"received": {
"query": 0,
"report-v1": 0,
"report-v2": 3,
"done": 0,
"pim": 0
},
"sent": {
"query": 7,
"report-v1": 0,
"report-v2": 0,
"done": 0,
"pim": 15
}
}
}
]
}
}
]
} }
}
Authors' Addresses Authors' Addresses
Hongji Zhao Hongji Zhao
Ericsson (China) Communications Company Ltd. Ericsson (China) Communications Company Ltd.
Ericsson Tower, No. 5 Lize East Street, Ericsson Tower, No. 5 Lize East Street,
Chaoyang District Beijing 100102, P.R. China Chaoyang District Beijing 100102, P.R. China
Email: hongji.zhao@ericsson.com Email: hongji.zhao@ericsson.com
Xufeng Liu Xufeng Liu
skipping to change at page 45, line 36 skipping to change at page 42, line 35
China China
Email: liuyisong@huawei.com Email: liuyisong@huawei.com
Anish Peter Anish Peter
Individual Individual
EMail: anish.ietf@gmail.com EMail: anish.ietf@gmail.com
Mahesh Sivakumar Mahesh Sivakumar
Juniper Cisco Systems
510 McCarthy Boulevard 510 McCarthy Boulevard
Milpitas, California Milpitas, California
USA USA
EMail: sivakumar.mahesh@gmail.com EMail: sivakumar.mahesh@gmail.com
 End of changes. 35 change blocks. 
581 lines changed or deleted 498 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/