rfc8652v3.txt | rfc8652.txt | |||
---|---|---|---|---|
skipping to change at line 12 ¶ | skipping to change at line 12 ¶ | |||
Internet Engineering Task Force (IETF) X. Liu | Internet Engineering Task Force (IETF) X. Liu | |||
Request for Comments: 8652 Volta Networks | Request for Comments: 8652 Volta Networks | |||
Category: Standards Track F. Guo | Category: Standards Track F. Guo | |||
ISSN: 2070-1721 Huawei | ISSN: 2070-1721 Huawei | |||
M. Sivakumar | M. Sivakumar | |||
Juniper | Juniper | |||
P. McAllister | P. McAllister | |||
Metaswitch Networks | Metaswitch Networks | |||
A. Peter | A. Peter | |||
IP Infusion India | IP Infusion India | |||
October 2019 | November 2019 | |||
A YANG Data Model for the Internet Group Management Protocol (IGMP) | A YANG Data Model for the Internet Group Management Protocol (IGMP) | |||
and Multicast Listener Discovery (MLD) | and Multicast Listener Discovery (MLD) | |||
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) devices. | Listener Discovery (MLD) devices. | |||
skipping to change at line 628 ¶ | skipping to change at line 628 ¶ | |||
+---w group-address? union | +---w group-address? union | |||
+---w source-address? | +---w source-address? | |||
rt-types:ipv6-multicast-source-address | rt-types:ipv6-multicast-source-address | |||
4. IGMP and MLD YANG Module | 4. IGMP and MLD YANG Module | |||
This module references [RFC1112], [RFC2236], [RFC2710], [RFC3376], | This module references [RFC1112], [RFC2236], [RFC2710], [RFC3376], | |||
[RFC3810], [RFC5790], [RFC6636], [RFC6991], [RFC8294], [RFC8343], | [RFC3810], [RFC5790], [RFC6636], [RFC6991], [RFC8294], [RFC8343], | |||
[RFC8344], [RFC8349], and [RFC8519]. | [RFC8344], [RFC8349], and [RFC8519]. | |||
<CODE BEGINS> file "ietf-igmp-mld@2019-09-10.yang" | <CODE BEGINS> file "ietf-igmp-mld@2019-11-01.yang" | |||
module ietf-igmp-mld { | module ietf-igmp-mld { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld"; | namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld"; | |||
prefix igmp-mld; | prefix igmp-mld; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix inet; | |||
reference "RFC 6991: Common YANG Data Types"; | reference | |||
"RFC 6991: Common YANG Data Types"; | ||||
} | } | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix "yang"; | prefix yang; | |||
reference "RFC 6991: Common YANG Data Types"; | reference | |||
"RFC 6991: Common YANG Data Types"; | ||||
} | } | |||
import ietf-routing-types { | import ietf-routing-types { | |||
prefix "rt-types"; | prefix rt-types; | |||
reference | reference | |||
"RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
} | } | |||
import ietf-access-control-list { | import ietf-access-control-list { | |||
prefix "acl"; | prefix acl; | |||
reference | reference | |||
"RFC 8519: YANG Data Model for Network Access Control Lists | "RFC 8519: YANG Data Model for Network Access Control Lists | |||
(ACLs)"; | (ACLs)"; | |||
} | } | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix rt; | |||
reference | reference | |||
"RFC 8349: A YANG Data Model for Routing Management (NMDA | "RFC 8349: A YANG Data Model for Routing Management (NMDA | |||
Version)"; | Version)"; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix "if"; | prefix if; | |||
reference "RFC 8343: A YANG Data Model for Interface Management"; | reference | |||
"RFC 8343: A YANG Data Model for Interface Management"; | ||||
} | } | |||
import ietf-ip { | import ietf-ip { | |||
prefix ip; | prefix ip; | |||
reference "RFC 8344: A YANG Data Model for IP Management"; | reference | |||
"RFC 8344: A YANG Data Model for IP Management"; | ||||
} | } | |||
organization | organization | |||
"IETF PIM Working Group"; | "IETF PIM Working Group"; | |||
contact | contact | |||
"WG Web: <http://datatracker.ietf.org/wg/pim/> | "WG Web: <http://datatracker.ietf.org/wg/pim/> | |||
WG List: <mailto:pim@ietf.org> | WG List: <mailto:pim@ietf.org> | |||
Editor: Xufeng Liu | Editor: Xufeng Liu | |||
<mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
Editor: Feng Guo | Editor: Feng Guo | |||
<mailto:guofeng@huawei.com> | <mailto:guofeng@huawei.com> | |||
skipping to change at line 720 ¶ | skipping to change at line 716 ¶ | |||
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 8652; see the | This version of this YANG module is part of RFC 8652; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
revision 2019-09-10 { | revision 2019-11-01 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC 8652: A YANG Data Model for the Internet Group Management | "RFC 8652: A YANG Data Model for the Internet Group Management | |||
Protocol (IGMP) and Multicast Listener Discovery (MLD)"; | Protocol (IGMP) and Multicast Listener Discovery (MLD)"; | |||
} | } | |||
/* | /* | |||
* Features | * Features | |||
*/ | */ | |||
skipping to change at line 834 ¶ | skipping to change at line 831 ¶ | |||
} | } | |||
feature action-clear-groups { | feature action-clear-groups { | |||
description | description | |||
"Support actions to clear groups."; | "Support actions to clear groups."; | |||
} | } | |||
/* | /* | |||
* Typedefs | * Typedefs | |||
*/ | */ | |||
typedef ssm-map-ipv4-addr-type { | typedef ssm-map-ipv4-addr-type { | |||
type union { | type union { | |||
type enumeration { | type enumeration { | |||
enum 'policy' { | enum policy { | |||
description | description | |||
"Source address is specified in SSM map policy."; | "Source address is specified in SSM map policy."; | |||
} | } | |||
} | } | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
} | } | |||
description | description | |||
"Multicast source IP address type for SSM map."; | "Multicast source IP address type for SSM map."; | |||
} // source-ipv4-addr-type | } | |||
// source-ipv4-addr-type | ||||
typedef ssm-map-ipv6-addr-type { | typedef ssm-map-ipv6-addr-type { | |||
type union { | type union { | |||
type enumeration { | type enumeration { | |||
enum 'policy' { | enum policy { | |||
description | description | |||
"Source address is specified in SSM map policy."; | "Source address is specified in SSM map policy."; | |||
} | } | |||
} | } | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
} | } | |||
description | description | |||
"Multicast source IP address type for SSM map."; | "Multicast source IP address type for SSM map."; | |||
} // source-ipv6-addr-type | } | |||
// source-ipv6-addr-type | ||||
/* | /* | |||
* Identities | * Identities | |||
*/ | */ | |||
identity igmp { | identity igmp { | |||
base "rt:control-plane-protocol"; | base rt:control-plane-protocol; | |||
if-feature feature-igmp; | if-feature "feature-igmp"; | |||
description "IGMP protocol."; | description | |||
"IGMP protocol."; | ||||
reference | reference | |||
"RFC 3376: Internet Group Management Protocol, Version 3"; | "RFC 3376: Internet Group Management Protocol, Version 3"; | |||
} | } | |||
identity mld { | identity mld { | |||
base "rt:control-plane-protocol"; | base rt:control-plane-protocol; | |||
if-feature feature-mld; | if-feature "feature-mld"; | |||
description "MLD protocol."; | description | |||
"MLD protocol."; | ||||
reference | reference | |||
"RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for | "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for | |||
IPv6"; | IPv6"; | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping global-config-attributes { | grouping global-config-attributes { | |||
description | description | |||
"This grouping is used in either IGMP schema or MLD schema. | "This grouping is used in either IGMP schema or MLD schema. | |||
When used in IGMP schema, this grouping contains the global | When used in IGMP schema, this grouping contains the global | |||
configuration for IGMP; | configuration for IGMP; | |||
when used in MLD schema, this grouping contains the global | when used in MLD schema, this grouping contains the global | |||
configuration for MLD."; | configuration for MLD."; | |||
leaf enabled { | leaf enabled { | |||
if-feature global-admin-enable; | if-feature "global-admin-enable"; | |||
type boolean; | type boolean; | |||
default true; | default "true"; | |||
description | description | |||
"When this grouping is used for IGMP, this leaf indicates | "When this grouping is used for IGMP, this leaf indicates | |||
whether IGMP is enabled ('true') or disabled ('false') | whether IGMP is enabled ('true') or disabled ('false') | |||
in the routing instance. | in the routing instance. | |||
When this grouping is used for MLD, this leaf indicates | When this grouping is used for MLD, this leaf indicates | |||
whether MLD is enabled ('true') or disabled ('false') | whether MLD is enabled ('true') or disabled ('false') | |||
in the routing instance."; | in the routing instance."; | |||
} | } | |||
leaf max-entries { | leaf max-entries { | |||
if-feature global-max-entries; | if-feature "global-max-entries"; | |||
type uint32; | type uint32; | |||
description | description | |||
"When this grouping is used for IGMP, this leaf indicates | "When this grouping is used for IGMP, this leaf indicates | |||
the maximum number of entries in the IGMP instance. | the maximum number of entries in the IGMP instance. | |||
When this grouping is used for MLD, this leaf indicates | When this grouping is used for MLD, this leaf indicates | |||
the maximum number of entries in the MLD instance. | the maximum number of entries in the MLD instance. | |||
If this leaf is not specified, the number of entries is not | If this leaf is not specified, the number of entries is not | |||
limited."; | limited."; | |||
} | } | |||
leaf max-groups { | leaf max-groups { | |||
if-feature global-max-groups; | if-feature "global-max-groups"; | |||
type uint32; | type uint32; | |||
description | description | |||
"When this grouping is used for IGMP, this leaf indicates | "When this grouping is used for IGMP, this leaf indicates | |||
the maximum number of groups in the IGMP instance. | the maximum number of groups in the IGMP instance. | |||
When this grouping is used for MLD, this leaf indicates | When this grouping is used for MLD, this leaf indicates | |||
the maximum number of groups in the MLD instance. | the maximum number of groups in the MLD instance. | |||
If this leaf is not specified, the number of groups is not | If this leaf is not specified, the number of groups is not | |||
limited."; | limited."; | |||
} | } | |||
} // global-config-attributes | } | |||
// global-config-attributes | ||||
grouping global-state-attributes { | grouping global-state-attributes { | |||
description | description | |||
"This grouping is used in either IGMP schema or MLD schema. | "This grouping is used in either IGMP schema or MLD schema. | |||
When used in IGMP schema, this grouping contains the global | When used in IGMP schema, this grouping contains the global | |||
IGMP state attributes; | IGMP state attributes; | |||
when used in MLD schema, this grouping contains the global | when used in MLD schema, this grouping contains the global | |||
MLD state attributes."; | MLD state attributes."; | |||
leaf entries-count { | leaf entries-count { | |||
type uint32; | type uint32; | |||
config false; | config false; | |||
description | description | |||
"When this grouping is used for IGMP, this leaf indicates | "When this grouping is used for IGMP, this leaf indicates | |||
the number of entries in the IGMP instance. | the number of entries in the IGMP instance. | |||
When this grouping is used for MLD, this leaf indicates | When this grouping is used for MLD, this leaf indicates | |||
the number of entries in the MLD instance."; | the number of entries in the MLD instance."; | |||
} | } | |||
leaf groups-count { | leaf groups-count { | |||
skipping to change at line 975 ¶ | skipping to change at line 978 ¶ | |||
type yang:date-and-time; | type yang:date-and-time; | |||
description | description | |||
"The time on the most recent occasion at which any one | "The time on the most recent occasion at which any one | |||
or more of the statistic counters suffered a | or more of the statistic counters suffered a | |||
discontinuity. If no such discontinuities have occurred | discontinuity. If no such discontinuities have occurred | |||
since the last re-initialization of the local | since the last re-initialization of the local | |||
management subsystem, then this node contains the time | management subsystem, then this node contains the time | |||
the local management subsystem re-initialized itself."; | the local management subsystem re-initialized itself."; | |||
} | } | |||
container error { | container error { | |||
description "Statistics of errors."; | description | |||
"Statistics of errors."; | ||||
uses global-statistics-error; | uses global-statistics-error; | |||
} | } | |||
container received { | container received { | |||
description "Statistics of received messages."; | description | |||
"Statistics of received messages."; | ||||
uses global-statistics-sent-received; | uses global-statistics-sent-received; | |||
} | } | |||
container sent { | container sent { | |||
description "Statistics of sent messages."; | description | |||
"Statistics of sent messages."; | ||||
uses global-statistics-sent-received; | uses global-statistics-sent-received; | |||
} | } | |||
} // statistics | } | |||
} // global-state-attributes | // statistics | |||
} | ||||
// global-state-attributes | ||||
grouping global-statistics-error { | grouping global-statistics-error { | |||
description | description | |||
"A grouping defining statistics attributes for errors."; | "A grouping defining statistics attributes for errors."; | |||
uses global-statistics-sent-received; | uses global-statistics-sent-received; | |||
leaf checksum { | leaf checksum { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of checksum errors."; | "The number of checksum errors."; | |||
} | } | |||
leaf too-short { | leaf too-short { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of messages that are too short."; | "The number of messages that are too short."; | |||
skipping to change at line 1004 ¶ | skipping to change at line 1012 ¶ | |||
leaf checksum { | leaf checksum { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of checksum errors."; | "The number of checksum errors."; | |||
} | } | |||
leaf too-short { | leaf too-short { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of messages that are too short."; | "The number of messages that are too short."; | |||
} | } | |||
} // global-statistics-error | } | |||
// global-statistics-error | ||||
grouping global-statistics-sent-received { | grouping global-statistics-sent-received { | |||
description | description | |||
"A grouping defining statistics attributes."; | "A grouping defining statistics attributes."; | |||
leaf total { | leaf total { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of total messages."; | "The number of total messages."; | |||
} | } | |||
leaf query { | leaf query { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of query messages."; | "The number of query messages."; | |||
} | } | |||
skipping to change at line 1030 ¶ | skipping to change at line 1039 ¶ | |||
leaf report { | leaf report { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of report messages."; | "The number of report messages."; | |||
} | } | |||
leaf leave { | leaf leave { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of leave messages."; | "The number of leave messages."; | |||
} | } | |||
} // global-statistics-sent-received | } | |||
// global-statistics-sent-received | ||||
grouping interface-global-config-attributes { | grouping interface-global-config-attributes { | |||
description | description | |||
"Configuration attributes applied to the interface-global level | "Configuration attributes applied to the interface-global level | |||
whose per-interface attributes are not configured."; | whose per-interface attributes are not configured."; | |||
leaf max-groups-per-interface { | leaf max-groups-per-interface { | |||
if-feature intf-max-groups; | if-feature "intf-max-groups"; | |||
type uint32; | type uint32; | |||
description | description | |||
"The maximum number of groups associated with each interface. | "The maximum number of groups associated with each interface. | |||
If this leaf is not specified, the number of groups is not | If this leaf is not specified, the number of groups is not | |||
limited."; | limited."; | |||
} | } | |||
} //interface-global-config-attributes | } | |||
//interface-global-config-attributes | ||||
grouping interface-common-config-attributes { | grouping interface-common-config-attributes { | |||
description | description | |||
"Configuration attributes applied to both the interface-global | "Configuration attributes applied to both the interface-global | |||
level and interface level."; | level and interface level."; | |||
leaf last-member-query-interval { | leaf last-member-query-interval { | |||
type uint16 { | type uint16 { | |||
range "1..1023"; | range "1..1023"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"When used in IGMP schema, this leaf indicates the Last | "When used in IGMP schema, this leaf indicates the Last | |||
Member Query Interval, which may be tuned to modify the | Member Query Interval, which may be tuned to modify the | |||
leave latency of the network; | leave latency of the network; | |||
when used in MLD schema, this leaf indicates the Last | when used in MLD schema, this leaf indicates the Last | |||
Listener Query Interval, which may be tuned to modify the | Listener Query Interval, which may be tuned to modify the | |||
leave latency of the network. | leave latency of the network. | |||
This leaf is not applicable for version 1 of the IGMP. For | This leaf is not applicable for version 1 of the IGMP. For | |||
version 2 and version 3 of the IGMP, and for all versions of | version 2 and version 3 of the IGMP, and for all versions of | |||
the MLD, the default value of this leaf is 1. | the MLD, the default value of this leaf is 1. | |||
skipping to change at line 1085 ¶ | skipping to change at line 1096 ¶ | |||
Version 3. | Version 3. | |||
Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD) | Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD) | |||
for IPv6. | for IPv6. | |||
Section 9.8 of RFC 3810: Multicast Listener Discovery | Section 9.8 of RFC 3810: Multicast Listener Discovery | |||
Version 2 (MLDv2) for IPv6."; | Version 2 (MLDv2) for IPv6."; | |||
} | } | |||
leaf query-interval { | leaf query-interval { | |||
type uint16 { | type uint16 { | |||
range "1..31744"; | range "1..31744"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"The Query Interval is the interval between General Queries | "The Query Interval is the interval between General Queries | |||
sent by the Querier. In RFC 3376, the Querier's Query | sent by the Querier. In RFC 3376, the Querier's Query | |||
Interval (QQI) is represented from the Querier's Query | Interval (QQI) is represented from the Querier's Query | |||
Interval Code (QQIC) in query message as follows: | Interval Code (QQIC) in query message as follows: | |||
If QQIC < 128, QQI = QQIC. | If QQIC < 128, QQI = QQIC. | |||
If QQIC >= 128, QQIC represents a floating-point value as | If QQIC >= 128, QQIC represents a floating-point value as | |||
follows: | follows: | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
skipping to change at line 1113 ¶ | skipping to change at line 1124 ¶ | |||
at the interface level. If the leaf is not configured at | at the interface level. If the leaf is not configured at | |||
either level, the default value is used."; | either level, the default value is used."; | |||
reference | reference | |||
"Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group | "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group | |||
Management Protocol, Version 3"; | Management Protocol, Version 3"; | |||
} | } | |||
leaf query-max-response-time { | leaf query-max-response-time { | |||
type uint16 { | type uint16 { | |||
range "1..1023"; | range "1..1023"; | |||
} | } | |||
units seconds; | units "seconds"; | |||
description | description | |||
"Query maximum response time specifies the maximum time | "Query maximum response time specifies the maximum time | |||
allowed before sending a responding report. | allowed before sending a responding report. | |||
The default value is 10. | The default value is 10. | |||
This leaf may be configured at the interface level or the | This leaf may be configured at the interface level or the | |||
interface-global level, with precedence given to the value | interface-global level, with precedence given to the value | |||
at the interface level. If the leaf is not configured at | at the interface level. If the leaf is not configured at | |||
either level, the default value is used."; | either level, the default value is used."; | |||
reference | reference | |||
"Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group | "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group | |||
Management Protocol, Version 3"; | Management Protocol, Version 3"; | |||
} | } | |||
leaf require-router-alert { | leaf require-router-alert { | |||
if-feature intf-require-router-alert; | if-feature "intf-require-router-alert"; | |||
type boolean; | type boolean; | |||
description | description | |||
"Protocol packets should contain the router alert IP option. | "Protocol packets should contain the router alert IP option. | |||
When this leaf is not configured, the server uses the | When this leaf is not configured, the server uses the | |||
following rules to determine the operational value of this | following rules to determine the operational value of this | |||
leaf: | leaf: | |||
if this grouping is used in IGMP schema and the value of the | if this grouping is used in IGMP schema and the value of the | |||
leaf 'version' is 1, the value 'false' is operationally used | leaf 'version' is 1, the value 'false' is operationally used | |||
by the server; | by the server; | |||
if this grouping is used in IGMP schema and the value of the | if this grouping is used in IGMP schema and the value of the | |||
skipping to change at line 1163 ¶ | skipping to change at line 1174 ¶ | |||
expected packet loss on a network. | expected packet loss on a network. | |||
The default value is 2. | The default value is 2. | |||
This leaf may be configured at the interface level or the | This leaf may be configured at the interface level or the | |||
interface-global level, with precedence given to the value | interface-global level, with precedence given to the value | |||
at the interface level. If the leaf is not configured at | at the interface level. If the leaf is not configured at | |||
either level, the default value is used."; | either level, the default value is used."; | |||
reference | reference | |||
"Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group | "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group | |||
Management Protocol, Version 3"; | Management Protocol, Version 3"; | |||
} | } | |||
} // interface-common-config-attributes | } | |||
// interface-common-config-attributes | ||||
grouping interface-common-config-attributes-igmp { | grouping interface-common-config-attributes-igmp { | |||
description | description | |||
"Configuration attributes applied to both the interface-global | "Configuration attributes applied to both the interface-global | |||
level and interface level for IGMP."; | level and interface level for IGMP."; | |||
uses interface-common-config-attributes; | uses interface-common-config-attributes; | |||
leaf version { | leaf version { | |||
type uint8 { | type uint8 { | |||
range "1..3"; | range "1..3"; | |||
} | } | |||
description | description | |||
"IGMP version. | "IGMP version. | |||
The default value is 2. | The default value is 2. | |||
This leaf may be configured at the interface level or the | This leaf may be configured at the interface level or the | |||
interface-global level, with precedence given to the value | interface-global level, with precedence given to the value | |||
skipping to change at line 1240 ¶ | skipping to change at line 1249 ¶ | |||
grouping interface-level-config-attributes { | grouping interface-level-config-attributes { | |||
description | description | |||
"This grouping is used in either IGMP schema or MLD schema. | "This grouping is used in either IGMP schema or MLD schema. | |||
When used in IGMP schema, this grouping contains the IGMP | When used in IGMP schema, this grouping contains the IGMP | |||
configuration attributes that are defined at the interface | configuration attributes that are defined at the interface | |||
level but are not defined at the interface-global level; | level but are not defined at the interface-global level; | |||
when used in MLD schema, this grouping contains the MLD | when used in MLD schema, this grouping contains the MLD | |||
configuration attributes that are defined at the interface | configuration attributes that are defined at the interface | |||
level but are not defined at the interface-global level."; | level but are not defined at the interface-global level."; | |||
leaf enabled { | leaf enabled { | |||
if-feature intf-admin-enable; | if-feature "intf-admin-enable"; | |||
type boolean; | type boolean; | |||
default true; | default "true"; | |||
description | description | |||
"When this grouping is used for IGMP, this leaf indicates | "When this grouping is used for IGMP, this leaf indicates | |||
whether IGMP is enabled ('true') or disabled ('false') | whether IGMP is enabled ('true') or disabled ('false') | |||
on the interface. | on the interface. | |||
When this grouping is used for MLD, this leaf indicates | When this grouping is used for MLD, this leaf indicates | |||
whether MLD is enabled ('true') or disabled ('false') | whether MLD is enabled ('true') or disabled ('false') | |||
on the interface."; | on the interface."; | |||
} | } | |||
leaf group-policy { | leaf group-policy { | |||
type leafref { | type leafref { | |||
skipping to change at line 1277 ¶ | skipping to change at line 1285 ¶ | |||
As specified by RFC 8519, the length of the name is between | As specified by RFC 8519, the length of the name is between | |||
1 and 64; a device MAY further restrict the length of this | 1 and 64; a device MAY further restrict the length of this | |||
name; space and special characters are not allowed. | name; space and special characters are not allowed. | |||
If this leaf is not specified, no policy is applied, and | If this leaf is not specified, no policy is applied, and | |||
all packets received from this interface are accepted."; | all packets received from this interface are accepted."; | |||
reference | reference | |||
"RFC 8519: YANG Data Model for Network Access Control Lists | "RFC 8519: YANG Data Model for Network Access Control Lists | |||
(ACLs)"; | (ACLs)"; | |||
} | } | |||
leaf immediate-leave { | leaf immediate-leave { | |||
if-feature intf-immediate-leave; | if-feature "intf-immediate-leave"; | |||
type empty; | type empty; | |||
description | description | |||
"When this grouping is used for IGMP, the presence of this | "When this grouping is used for IGMP, the presence of this | |||
leaf requests IGMP to perform an immediate leave upon | leaf requests IGMP to perform an immediate leave upon | |||
receiving an IGMPv2 leave message. | receiving an IGMPv2 leave message. | |||
If the router is IGMP-enabled, it sends an IGMP last member | If the router is IGMP-enabled, it sends an IGMP last member | |||
query with a last member query response time. However, the | query with a last member query response time. However, the | |||
router does not wait for the response time before it prunes | router does not wait for the response time before it prunes | |||
the group. | the group. | |||
When this grouping is used for MLD, the presence of this | When this grouping is used for MLD, the presence of this | |||
leaf requests MLD to perform an immediate leave upon | leaf requests MLD to perform an immediate leave upon | |||
receiving an MLDv1 leave message. | receiving an MLDv1 leave message. | |||
If the router is MLD-enabled, it sends an MLD last member | If the router is MLD-enabled, it sends an MLD last member | |||
query with a last member query response time. However, the | query with a last member query response time. However, the | |||
router does not wait for the response time before it prunes | router does not wait for the response time before it prunes | |||
the group."; | the group."; | |||
} | } | |||
leaf max-groups { | leaf max-groups { | |||
if-feature intf-max-groups; | if-feature "intf-max-groups"; | |||
type uint32; | type uint32; | |||
description | description | |||
"When this grouping is used for IGMP, this leaf indicates | "When this grouping is used for IGMP, this leaf indicates | |||
the maximum number of groups associated with the IGMP | the maximum number of groups associated with the IGMP | |||
interface. | interface. | |||
When this grouping is used for MLD, this leaf indicates | When this grouping is used for MLD, this leaf indicates | |||
the maximum number of groups associated with the MLD | the maximum number of groups associated with the MLD | |||
interface. | interface. | |||
If this leaf is not specified, the number of groups is not | If this leaf is not specified, the number of groups is not | |||
limited."; | limited."; | |||
} | } | |||
leaf max-group-sources { | leaf max-group-sources { | |||
if-feature intf-max-group-sources; | if-feature "intf-max-group-sources"; | |||
type uint32; | type uint32; | |||
description | description | |||
"The maximum number of group sources. | "The maximum number of group sources. | |||
If this leaf is not specified, the number of group sources | If this leaf is not specified, the number of group sources | |||
is not limited."; | is not limited."; | |||
} | } | |||
leaf source-policy { | leaf source-policy { | |||
if-feature intf-source-policy; | if-feature "intf-source-policy"; | |||
type leafref { | type leafref { | |||
path "/acl:acls/acl:acl/acl:name"; | path "/acl:acls/acl:acl/acl:name"; | |||
} | } | |||
description | description | |||
"Name of the access policy used to filter sources. | "Name of the access policy used to filter sources. | |||
The value space of this leaf is restricted to the existing | The value space of this leaf is restricted to the existing | |||
policy instances defined by the referenced schema in | policy instances defined by the referenced schema in | |||
RFC 8519. | RFC 8519. | |||
As specified by RFC 8519, the length of the name is between | As specified by RFC 8519, the length of the name is between | |||
1 and 64; a device MAY further restrict the length of this | 1 and 64; a device MAY further restrict the length of this | |||
name; space and special characters are not allowed. | name; space and special characters are not allowed. | |||
If this leaf is not specified, no policy is applied, and | If this leaf is not specified, no policy is applied, and | |||
all packets received from this interface are accepted."; | all packets received from this interface are accepted."; | |||
} | } | |||
leaf verify-source-subnet { | leaf verify-source-subnet { | |||
if-feature intf-verify-source-subnet; | if-feature "intf-verify-source-subnet"; | |||
type empty; | type empty; | |||
description | description | |||
"If present, the interface accepts packets with matching | "If present, the interface accepts packets with matching | |||
source IP subnet only."; | source IP subnet only."; | |||
} | } | |||
leaf explicit-tracking { | leaf explicit-tracking { | |||
if-feature intf-explicit-tracking; | if-feature "intf-explicit-tracking"; | |||
type empty; | type empty; | |||
description | description | |||
"When this grouping is used for IGMP, the presence of this | "When this grouping is used for IGMP, the presence of this | |||
leaf enables an IGMP-based explicit membership tracking | leaf enables an IGMP-based explicit membership tracking | |||
function for multicast routers and IGMP proxy devices | function for multicast routers and IGMP proxy devices | |||
supporting IGMPv3. | supporting IGMPv3. | |||
When this grouping is used for MLD, the presence of this | When this grouping is used for MLD, the presence of this | |||
leaf enables an MLD-based explicit membership tracking | leaf enables an MLD-based explicit membership tracking | |||
function for multicast routers and MLD proxy devices | function for multicast routers and MLD proxy devices | |||
supporting MLDv2. | supporting MLDv2. | |||
The explicit membership tracking function contributes to | The explicit membership tracking function contributes to | |||
saving network resources and shortening leave latency."; | saving network resources and shortening leave latency."; | |||
reference | reference | |||
"Section 3 of RFC 6636: Tuning the Behavior of the Internet | "Section 3 of RFC 6636: Tuning the Behavior of the Internet | |||
Group Management Protocol (IGMP) and Multicast Listener | Group Management Protocol (IGMP) and Multicast Listener | |||
Discovery (MLD) for Routers in Mobile and Wireless | Discovery (MLD) for Routers in Mobile and Wireless | |||
Networks"; | Networks"; | |||
} | } | |||
leaf lite-exclude-filter { | leaf lite-exclude-filter { | |||
if-feature intf-lite-exclude-filter; | if-feature "intf-lite-exclude-filter"; | |||
type empty; | type empty; | |||
description | description | |||
"When this grouping is used for IGMP, the presence of this | "When this grouping is used for IGMP, the presence of this | |||
leaf enables the support of the simplified EXCLUDE filter | leaf enables the support of the simplified EXCLUDE filter | |||
in the Lightweight IGMPv3 protocol, which simplifies the | in the Lightweight IGMPv3 protocol, which simplifies the | |||
standard versions of IGMPv3. | standard versions of IGMPv3. | |||
When this grouping is used for MLD, the presence of this | When this grouping is used for MLD, the presence of this | |||
leaf enables the support of the simplified EXCLUDE filter | leaf enables the support of the simplified EXCLUDE filter | |||
in the Lightweight MLDv2 protocol, which simplifies the | in the Lightweight MLDv2 protocol, which simplifies the | |||
standard versions of MLDv2."; | standard versions of MLDv2."; | |||
reference | reference | |||
"RFC 5790: Lightweight Internet Group Management Protocol | "RFC 5790: Lightweight Internet Group Management Protocol | |||
Version 3 (IGMPv3) and Multicast Listener Discovery | Version 3 (IGMPv3) and Multicast Listener Discovery | |||
Version 2 (MLDv2) Protocols"; | Version 2 (MLDv2) Protocols"; | |||
} | } | |||
} // interface-level-config-attributes | } | |||
// interface-level-config-attributes | ||||
grouping interface-config-attributes-igmp { | grouping interface-config-attributes-igmp { | |||
description | description | |||
"Per-interface configuration attributes for IGMP."; | "Per-interface configuration attributes for IGMP."; | |||
uses interface-common-config-attributes-igmp; | uses interface-common-config-attributes-igmp; | |||
uses interface-level-config-attributes; | uses interface-level-config-attributes; | |||
leaf-list join-group { | leaf-list join-group { | |||
if-feature intf-join-group; | if-feature "intf-join-group"; | |||
type rt-types:ipv4-multicast-group-address; | type rt-types:ipv4-multicast-group-address; | |||
description | description | |||
"The router joins this multicast group on the interface."; | "The router joins this multicast group on the interface."; | |||
} | } | |||
list ssm-map { | list ssm-map { | |||
if-feature intf-ssm-map; | if-feature "intf-ssm-map"; | |||
key "ssm-map-source-addr ssm-map-group-policy"; | key "ssm-map-source-addr ssm-map-group-policy"; | |||
description "The policy for (*,G) mapping to (S,G)."; | description | |||
"The policy for (*,G) mapping to (S,G)."; | ||||
leaf ssm-map-source-addr { | leaf ssm-map-source-addr { | |||
type ssm-map-ipv4-addr-type; | type ssm-map-ipv4-addr-type; | |||
description | description | |||
"Multicast source IPv4 address."; | "Multicast source IPv4 address."; | |||
} | } | |||
leaf ssm-map-group-policy { | leaf ssm-map-group-policy { | |||
type string; | type string; | |||
description | description | |||
"Name of the policy used to define ssm-map rules. | "Name of the policy used to define ssm-map rules. | |||
A device can restrict the length | A device can restrict the length | |||
and value of this name, possibly space and special | and value of this name, possibly space and special | |||
characters are not allowed."; | characters are not allowed."; | |||
} | } | |||
} | } | |||
list static-group { | list static-group { | |||
if-feature intf-static-group; | if-feature "intf-static-group"; | |||
key "group-addr source-addr"; | key "group-addr source-addr"; | |||
description | description | |||
"A static multicast route, (*,G) or (S,G). | "A static multicast route, (*,G) or (S,G). | |||
The version of IGMP must be 3 to support (S,G)."; | The version of IGMP must be 3 to support (S,G)."; | |||
leaf group-addr { | leaf group-addr { | |||
type rt-types:ipv4-multicast-group-address; | type rt-types:ipv4-multicast-group-address; | |||
description | description | |||
"Multicast group IPv4 address."; | "Multicast group IPv4 address."; | |||
} | } | |||
leaf source-addr { | leaf source-addr { | |||
type rt-types:ipv4-multicast-source-address; | type rt-types:ipv4-multicast-source-address; | |||
description | description | |||
"Multicast source IPv4 address."; | "Multicast source IPv4 address."; | |||
} | } | |||
skipping to change at line 1427 ¶ | skipping to change at line 1435 ¶ | |||
type rt-types:ipv4-multicast-group-address; | type rt-types:ipv4-multicast-group-address; | |||
description | description | |||
"Multicast group IPv4 address."; | "Multicast group IPv4 address."; | |||
} | } | |||
leaf source-addr { | leaf source-addr { | |||
type rt-types:ipv4-multicast-source-address; | type rt-types:ipv4-multicast-source-address; | |||
description | description | |||
"Multicast source IPv4 address."; | "Multicast source IPv4 address."; | |||
} | } | |||
} | } | |||
} // interface-config-attributes-igmp | } | |||
// interface-config-attributes-igmp | ||||
grouping interface-config-attributes-mld { | grouping interface-config-attributes-mld { | |||
description | description | |||
"Per-interface configuration attributes for MLD."; | "Per-interface configuration attributes for MLD."; | |||
uses interface-common-config-attributes-mld; | uses interface-common-config-attributes-mld; | |||
uses interface-level-config-attributes; | uses interface-level-config-attributes; | |||
leaf-list join-group { | leaf-list join-group { | |||
if-feature intf-join-group; | if-feature "intf-join-group"; | |||
type rt-types:ipv6-multicast-group-address; | type rt-types:ipv6-multicast-group-address; | |||
description | description | |||
"The router joins this multicast group on the interface."; | "The router joins this multicast group on the interface."; | |||
} | } | |||
list ssm-map { | list ssm-map { | |||
if-feature intf-ssm-map; | if-feature "intf-ssm-map"; | |||
key "ssm-map-source-addr ssm-map-group-policy"; | key "ssm-map-source-addr ssm-map-group-policy"; | |||
description "The policy for (*,G) mapping to (S,G)."; | description | |||
"The policy for (*,G) mapping to (S,G)."; | ||||
leaf ssm-map-source-addr { | leaf ssm-map-source-addr { | |||
type ssm-map-ipv6-addr-type; | type ssm-map-ipv6-addr-type; | |||
description | description | |||
"Multicast source IPv6 address."; | "Multicast source IPv6 address."; | |||
} | } | |||
leaf ssm-map-group-policy { | leaf ssm-map-group-policy { | |||
type string; | type string; | |||
description | description | |||
"Name of the policy used to define ssm-map rules. | "Name of the policy used to define ssm-map rules. | |||
A device can restrict the length | A device can restrict the length | |||
and value of this name, possibly space and special | and value of this name, possibly space and special | |||
characters are not allowed."; | characters are not allowed."; | |||
} | } | |||
} | } | |||
list static-group { | list static-group { | |||
if-feature intf-static-group; | if-feature "intf-static-group"; | |||
key "group-addr source-addr"; | key "group-addr source-addr"; | |||
description | description | |||
"A static multicast route, (*,G) or (S,G). | "A static multicast route, (*,G) or (S,G). | |||
The version of MLD must be 2 to support (S,G)."; | The version of MLD must be 2 to support (S,G)."; | |||
leaf group-addr { | leaf group-addr { | |||
type rt-types:ipv6-multicast-group-address; | type rt-types:ipv6-multicast-group-address; | |||
description | description | |||
"Multicast group IPv6 address."; | "Multicast group IPv6 address."; | |||
} | } | |||
leaf source-addr { | leaf source-addr { | |||
type rt-types:ipv6-multicast-source-address; | type rt-types:ipv6-multicast-source-address; | |||
description | description | |||
"Multicast source IPv6 address."; | "Multicast source IPv6 address."; | |||
} | } | |||
skipping to change at line 1477 ¶ | skipping to change at line 1486 ¶ | |||
type rt-types:ipv6-multicast-group-address; | type rt-types:ipv6-multicast-group-address; | |||
description | description | |||
"Multicast group IPv6 address."; | "Multicast group IPv6 address."; | |||
} | } | |||
leaf source-addr { | leaf source-addr { | |||
type rt-types:ipv6-multicast-source-address; | type rt-types:ipv6-multicast-source-address; | |||
description | description | |||
"Multicast source IPv6 address."; | "Multicast source IPv6 address."; | |||
} | } | |||
} | } | |||
} // interface-config-attributes-mld | } | |||
// interface-config-attributes-mld | ||||
grouping interface-state-attributes { | grouping interface-state-attributes { | |||
description | description | |||
"Per-interface state attributes for both IGMP and MLD."; | "Per-interface state attributes for both IGMP and MLD."; | |||
leaf oper-status { | leaf oper-status { | |||
type enumeration { | type enumeration { | |||
enum up { | enum up { | |||
description | description | |||
"Ready to pass packets."; | "Ready to pass packets."; | |||
} | } | |||
enum down { | enum down { | |||
description | description | |||
"The interface does not pass any packets."; | "The interface does not pass any packets."; | |||
} | } | |||
skipping to change at line 1500 ¶ | skipping to change at line 1510 ¶ | |||
description | description | |||
"The interface does not pass any packets."; | "The interface does not pass any packets."; | |||
} | } | |||
} | } | |||
config false; | config false; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Indicates whether the operational state of the interface | "Indicates whether the operational state of the interface | |||
is up or down."; | is up or down."; | |||
} | } | |||
} // interface-state-attributes | } | |||
// interface-state-attributes | ||||
grouping interface-state-attributes-igmp { | grouping interface-state-attributes-igmp { | |||
description | description | |||
"Per-interface state attributes for IGMP."; | "Per-interface state attributes for IGMP."; | |||
uses interface-state-attributes; | uses interface-state-attributes; | |||
leaf querier { | leaf querier { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
config false; | config false; | |||
mandatory true; | mandatory true; | |||
description "The querier address in the subnet."; | description | |||
"The querier address in the subnet."; | ||||
} | } | |||
leaf-list joined-group { | leaf-list joined-group { | |||
if-feature intf-join-group; | if-feature "intf-join-group"; | |||
type rt-types:ipv4-multicast-group-address; | type rt-types:ipv4-multicast-group-address; | |||
config false; | config false; | |||
description | description | |||
"The routers that joined this multicast group."; | "The routers that joined this multicast group."; | |||
} | } | |||
list group { | list group { | |||
key "group-address"; | key "group-address"; | |||
config false; | config false; | |||
description | description | |||
"Multicast group membership information | "Multicast group membership information | |||
skipping to change at line 1558 ¶ | skipping to change at line 1568 ¶ | |||
"Multicast source address in group record."; | "Multicast source address in group record."; | |||
} | } | |||
uses interface-state-source-attributes; | uses interface-state-source-attributes; | |||
leaf last-reporter { | leaf last-reporter { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"The IPv4 address of the last host that has sent the | "The IPv4 address of the last host that has sent the | |||
report to join the multicast source and group."; | report to join the multicast source and group."; | |||
} | } | |||
list host { | list host { | |||
if-feature intf-explicit-tracking; | if-feature "intf-explicit-tracking"; | |||
key "host-address"; | key "host-address"; | |||
description | description | |||
"List of hosts with the membership for the specific | "List of hosts with the membership for the specific | |||
multicast source-group."; | multicast source-group."; | |||
leaf host-address { | leaf host-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"The IPv4 address of the host."; | "The IPv4 address of the host."; | |||
} | } | |||
uses interface-state-host-attributes; | uses interface-state-host-attributes; | |||
}// list host | } | |||
} // list source | // list host | |||
} // list group | } | |||
} // interface-state-attributes-igmp | // list source | |||
} | ||||
// list group | ||||
} | ||||
// interface-state-attributes-igmp | ||||
grouping interface-state-attributes-mld { | grouping interface-state-attributes-mld { | |||
description | description | |||
"Per-interface state attributes for MLD."; | "Per-interface state attributes for MLD."; | |||
uses interface-state-attributes; | uses interface-state-attributes; | |||
leaf querier { | leaf querier { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
config false; | config false; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The querier address in the subnet."; | "The querier address in the subnet."; | |||
} | } | |||
leaf-list joined-group { | leaf-list joined-group { | |||
if-feature intf-join-group; | if-feature "intf-join-group"; | |||
type rt-types:ipv6-multicast-group-address; | type rt-types:ipv6-multicast-group-address; | |||
config false; | config false; | |||
description | description | |||
"The routers that joined this multicast group."; | "The routers that joined this multicast group."; | |||
} | } | |||
list group { | list group { | |||
key "group-address"; | key "group-address"; | |||
config false; | config false; | |||
description | description | |||
"Multicast group membership information | "Multicast group membership information | |||
skipping to change at line 1631 ¶ | skipping to change at line 1642 ¶ | |||
"Multicast source address in group record."; | "Multicast source address in group record."; | |||
} | } | |||
uses interface-state-source-attributes; | uses interface-state-source-attributes; | |||
leaf last-reporter { | leaf last-reporter { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"The IPv6 address of the last host that has sent the | "The IPv6 address of the last host that has sent the | |||
report to join the multicast source and group."; | report to join the multicast source and group."; | |||
} | } | |||
list host { | list host { | |||
if-feature intf-explicit-tracking; | if-feature "intf-explicit-tracking"; | |||
key "host-address"; | key "host-address"; | |||
description | description | |||
"List of hosts with the membership for the specific | "List of hosts with the membership for the specific | |||
multicast source-group."; | multicast source-group."; | |||
leaf host-address { | leaf host-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"The IPv6 address of the host."; | "The IPv6 address of the host."; | |||
} | } | |||
uses interface-state-host-attributes; | uses interface-state-host-attributes; | |||
}// list host | } | |||
} // list source | // list host | |||
} // list group | } | |||
} // interface-state-attributes-mld | // list source | |||
} | ||||
// list group | ||||
} | ||||
// interface-state-attributes-mld | ||||
grouping interface-state-group-attributes { | grouping interface-state-group-attributes { | |||
description | description | |||
"Per-interface state attributes for both IGMP and MLD | "Per-interface state attributes for both IGMP and MLD | |||
groups."; | groups."; | |||
leaf expire { | leaf expire { | |||
type uint32; | type uint32; | |||
units seconds; | units "seconds"; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The time left before the multicast group state expires."; | "The time left before the multicast group state expires."; | |||
} | } | |||
leaf filter-mode { | leaf filter-mode { | |||
type enumeration { | type enumeration { | |||
enum "include" { | enum include { | |||
description | description | |||
"In include mode, reception of packets sent | "In include mode, reception of packets sent | |||
to the specified multicast address is requested | to the specified multicast address is requested | |||
only from those IP source addresses listed in the | only from those IP source addresses listed in the | |||
source-list parameter"; | source-list parameter"; | |||
} | } | |||
enum "exclude" { | enum exclude { | |||
description | description | |||
"In exclude mode, reception of packets sent | "In exclude mode, reception of packets sent | |||
to the given multicast address is requested | to the given multicast address is requested | |||
from all IP source addresses except those | from all IP source addresses except those | |||
listed in the source-list parameter."; | listed in the source-list parameter."; | |||
} | } | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Filter mode for a multicast group, | "Filter mode for a multicast group, | |||
may be either include or exclude."; | may be either include or exclude."; | |||
} | } | |||
leaf up-time { | leaf up-time { | |||
type uint32; | type uint32; | |||
units seconds; | units "seconds"; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The elapsed time since the device created multicast group | "The elapsed time since the device created multicast group | |||
record."; | record."; | |||
} | } | |||
} // interface-state-group-attributes | } | |||
// interface-state-group-attributes | ||||
grouping interface-state-source-attributes { | grouping interface-state-source-attributes { | |||
description | description | |||
"Per-interface state attributes for both IGMP and MLD | "Per-interface state attributes for both IGMP and MLD | |||
source-group records."; | source-group records."; | |||
leaf expire { | leaf expire { | |||
type uint32; | type uint32; | |||
units seconds; | units "seconds"; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The time left before multicast source-group state expires."; | "The time left before multicast source-group state expires."; | |||
} | } | |||
leaf up-time { | leaf up-time { | |||
type uint32; | type uint32; | |||
units seconds; | units "seconds"; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The elapsed time since the device created multicast | "The elapsed time since the device created multicast | |||
source-group record."; | source-group record."; | |||
} | } | |||
leaf host-count { | leaf host-count { | |||
if-feature intf-explicit-tracking; | if-feature "intf-explicit-tracking"; | |||
type uint32; | type uint32; | |||
description | description | |||
"The number of host addresses."; | "The number of host addresses."; | |||
} | } | |||
} // interface-state-source-attributes | } | |||
// interface-state-source-attributes | ||||
grouping interface-state-host-attributes { | grouping interface-state-host-attributes { | |||
description | description | |||
"Per-interface state attributes for both IGMP and MLD | "Per-interface state attributes for both IGMP and MLD | |||
hosts of source-group records."; | hosts of source-group records."; | |||
leaf host-filter-mode { | leaf host-filter-mode { | |||
type enumeration { | type enumeration { | |||
enum "include" { | enum include { | |||
description | description | |||
"In include mode."; | "In include mode."; | |||
} | } | |||
enum "exclude" { | enum exclude { | |||
description | description | |||
"In exclude mode."; | "In exclude mode."; | |||
} | } | |||
} | } | |||
mandatory true; | mandatory true; | |||
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."; | |||
} | } | |||
} // interface-state-host-attributes | } | |||
// interface-state-host-attributes | ||||
/* | /* | |||
* Configuration and Operational state data nodes (NMDA version) | * Configuration and Operational state data nodes (NMDA version) | |||
*/ | */ | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol" { | + "rt:control-plane-protocol" { | |||
when "derived-from-or-self(rt:type, 'igmp-mld:igmp')" { | when "derived-from-or-self(rt:type, 'igmp-mld:igmp')" { | |||
description | description | |||
"This augmentation is only valid for a control-plane | "This augmentation is only valid for a control-plane | |||
protocol instance of IGMP (type 'igmp')."; | protocol instance of IGMP (type 'igmp')."; | |||
} | } | |||
description | description | |||
"IGMP augmentation to routing control-plane protocol | "IGMP augmentation to routing control-plane protocol | |||
configuration and state."; | configuration and state."; | |||
container igmp { | container igmp { | |||
if-feature feature-igmp; | if-feature "feature-igmp"; | |||
description | description | |||
"IGMP configuration and operational state data."; | "IGMP configuration and operational state data."; | |||
container global { | container global { | |||
description | description | |||
"Global attributes."; | "Global attributes."; | |||
uses global-config-attributes; | uses global-config-attributes; | |||
uses global-state-attributes; | uses global-state-attributes; | |||
} | } | |||
container interfaces { | container interfaces { | |||
description | description | |||
"Containing a list of interfaces."; | "Containing a list of interfaces."; | |||
uses interfaces-config-attributes-igmp { | uses interfaces-config-attributes-igmp { | |||
if-feature interface-global-config; | if-feature "interface-global-config"; | |||
refine query-interval { | refine "query-interval" { | |||
default 125; | default "125"; | |||
} | } | |||
refine query-max-response-time { | refine "query-max-response-time" { | |||
default 10; | default "10"; | |||
} | } | |||
refine robustness-variable { | refine "robustness-variable" { | |||
default 2; | default "2"; | |||
} | } | |||
refine version { | refine "version" { | |||
default 2; | default "2"; | |||
} | } | |||
} | } | |||
list interface { | list interface { | |||
key "interface-name"; | key "interface-name"; | |||
description | description | |||
"List of IGMP interfaces."; | "List of IGMP interfaces."; | |||
leaf interface-name { | leaf interface-name { | |||
type if:interface-ref; | type if:interface-ref; | |||
must "/if:interfaces/if:interface[if:name = current()]/" | must | |||
+ "ip:ipv4" { | '/if:interfaces/if:interface[if:name = current()]/' | |||
+ 'ip:ipv4' { | ||||
error-message | error-message | |||
"The interface must have IPv4 configured, either " | "The interface must have IPv4 configured, either " | |||
+ "enabled or disabled."; | + "enabled or disabled."; | |||
} | } | |||
description | description | |||
"Reference to an entry in the global interface list."; | "Reference to an entry in the global interface list."; | |||
} | } | |||
uses interface-config-attributes-igmp { | uses interface-config-attributes-igmp { | |||
if-feature per-interface-config; | if-feature "per-interface-config"; | |||
refine last-member-query-interval { | refine "last-member-query-interval" { | |||
must "../version != 1 or " | must '../version != 1 or ' | |||
+ "(not(../version) and " | + '(not(../version) and ' | |||
+ "(../../version != 1 or not(../../version)))" { | + '(../../version != 1 or not(../../version)))' { | |||
error-message | error-message "IGMPv1 does not support " | |||
"IGMPv1 does not support " | + "last-member-query-interval."; | |||
+ "last-member-query-interval."; | ||||
} | } | |||
} | } | |||
refine max-group-sources { | refine "max-group-sources" { | |||
must "../version = 3 or " | must '../version = 3 or ' | |||
+ "(not(../version) and (../../version = 3))" { | + '(not(../version) and (../../version = 3))' { | |||
error-message | error-message | |||
"The version of IGMP must be 3 to support the " | "The version of IGMP must be 3 to support the " | |||
+ "source-specific parameters."; | + "source-specific parameters."; | |||
} | } | |||
} | } | |||
refine source-policy { | refine "source-policy" { | |||
must "../version = 3 or " | must '../version = 3 or ' | |||
+ "(not(../version) and (../../version = 3))" { | + '(not(../version) and (../../version = 3))' { | |||
error-message | error-message | |||
"The version of IGMP must be 3 to support the " | "The version of IGMP must be 3 to support the " | |||
+ "source-specific parameters."; | + "source-specific parameters."; | |||
} | } | |||
} | } | |||
refine explicit-tracking { | refine "explicit-tracking" { | |||
must "../version = 3 or " | must '../version = 3 or ' | |||
+ "(not(../version) and (../../version = 3))" { | + '(not(../version) and (../../version = 3))' { | |||
error-message | error-message | |||
"The version of IGMP must be 3 to support the " | "The version of IGMP must be 3 to support the " | |||
+ "explicit tracking function."; | + "explicit tracking function."; | |||
} | } | |||
} | } | |||
refine lite-exclude-filter { | refine "lite-exclude-filter" { | |||
must "../version = 3 or " | must '../version = 3 or ' | |||
+ "(not(../version) and (../../version = 3))" { | + '(not(../version) and (../../version = 3))' { | |||
error-message | error-message | |||
"The version of IGMP must be 3 to support the " | "The version of IGMP must be 3 to support the " | |||
+ "simplified EXCLUDE filter in the Lightweight " | + "simplified EXCLUDE filter in the Lightweight " | |||
+ "IGMPv3 protocol."; | + "IGMPv3 protocol."; | |||
} | } | |||
} | } | |||
} | } | |||
uses interface-state-attributes-igmp; | uses interface-state-attributes-igmp; | |||
} // interface | } | |||
} // interfaces | // interface | |||
} | ||||
// interfaces | ||||
/* | /* | |||
* Actions | * Actions | |||
*/ | */ | |||
action clear-groups { | action clear-groups { | |||
if-feature action-clear-groups; | if-feature "action-clear-groups"; | |||
description | description | |||
"Clears the specified IGMP cache entries."; | "Clears the specified IGMP cache entries."; | |||
input { | input { | |||
choice interface { | choice interface { | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Indicates the interface(s) from which the cache | "Indicates the interface(s) from which the cache | |||
entries are cleared."; | entries are cleared."; | |||
case name { | case name { | |||
leaf interface-name { | leaf interface-name { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
skipping to change at line 1871 ¶ | skipping to change at line 1885 ¶ | |||
input { | input { | |||
choice interface { | choice interface { | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Indicates the interface(s) from which the cache | "Indicates the interface(s) from which the cache | |||
entries are cleared."; | entries are cleared."; | |||
case name { | case name { | |||
leaf interface-name { | leaf interface-name { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/" | + "rt:control-plane-protocol/" | |||
+ "igmp-mld:igmp/igmp-mld:interfaces/" | + "igmp-mld:igmp/igmp-mld:interfaces/" | |||
+ "igmp-mld:interface/igmp-mld:interface-name"; | + "igmp-mld:interface/igmp-mld:interface-name"; | |||
} | } | |||
description | description | |||
"Name of the IGMP interface."; | "Name of the IGMP interface."; | |||
} | } | |||
} | } | |||
case all { | case all { | |||
leaf all-interfaces { | leaf all-interfaces { | |||
type empty; | type empty; | |||
description | description | |||
"IGMP groups from all interfaces are cleared."; | "IGMP groups from all interfaces are cleared."; | |||
} | } | |||
} | } | |||
} | } | |||
leaf group-address { | leaf group-address { | |||
type union { | type union { | |||
type enumeration { | type enumeration { | |||
enum '*' { | enum * { | |||
description | description | |||
"Any group address."; | "Any group address."; | |||
} | } | |||
} | } | |||
type rt-types:ipv4-multicast-group-address; | type rt-types:ipv4-multicast-group-address; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Multicast group IPv4 address. | "Multicast group IPv4 address. | |||
If the value '*' is specified, all IGMP group entries | If the value '*' is specified, all IGMP group entries | |||
skipping to change at line 1912 ¶ | skipping to change at line 1926 ¶ | |||
} | } | |||
leaf source-address { | leaf source-address { | |||
type rt-types:ipv4-multicast-source-address; | type rt-types:ipv4-multicast-source-address; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Multicast source IPv4 address. | "Multicast source IPv4 address. | |||
If the value '*' is specified, all IGMP source-group | If the value '*' is specified, all IGMP source-group | |||
entries are cleared."; | entries are cleared."; | |||
} | } | |||
} | } | |||
} // action clear-groups | } | |||
} // igmp | // action clear-groups | |||
} //augment | } | |||
// igmp | ||||
} | ||||
//augment | ||||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol" { | + "rt:control-plane-protocol" { | |||
when "derived-from-or-self(rt:type, 'igmp-mld:mld')" { | when "derived-from-or-self(rt:type, 'igmp-mld:mld')" { | |||
description | description | |||
"This augmentation is only valid for a control-plane | "This augmentation is only valid for a control-plane | |||
protocol instance of IGMP (type 'mld')."; | protocol instance of IGMP (type 'mld')."; | |||
} | } | |||
description | description | |||
"MLD augmentation to routing control-plane protocol | "MLD augmentation to routing control-plane protocol | |||
configuration and state."; | configuration and state."; | |||
container mld { | container mld { | |||
if-feature feature-mld; | if-feature "feature-mld"; | |||
description | description | |||
"MLD configuration and operational state data."; | "MLD configuration and operational state data."; | |||
container global { | container global { | |||
description | description | |||
"Global attributes."; | "Global attributes."; | |||
uses global-config-attributes; | uses global-config-attributes; | |||
uses global-state-attributes; | uses global-state-attributes; | |||
} | } | |||
container interfaces { | container interfaces { | |||
description | description | |||
"Containing a list of interfaces."; | "Containing a list of interfaces."; | |||
uses interfaces-config-attributes-mld { | uses interfaces-config-attributes-mld { | |||
if-feature interface-global-config; | if-feature "interface-global-config"; | |||
refine last-member-query-interval { | refine "last-member-query-interval" { | |||
default 1; | default "1"; | |||
} | } | |||
refine query-interval { | refine "query-interval" { | |||
default 125; | default "125"; | |||
} | } | |||
refine query-max-response-time { | refine "query-max-response-time" { | |||
default 10; | default "10"; | |||
} | } | |||
refine require-router-alert { | refine "require-router-alert" { | |||
default true; | default "true"; | |||
} | } | |||
refine robustness-variable { | refine "robustness-variable" { | |||
default 2; | default "2"; | |||
} | } | |||
refine version { | refine "version" { | |||
default 2; | default "2"; | |||
} | } | |||
} | } | |||
list interface { | list interface { | |||
key "interface-name"; | key "interface-name"; | |||
description | description | |||
"List of MLD interfaces."; | "List of MLD interfaces."; | |||
leaf interface-name { | leaf interface-name { | |||
type if:interface-ref; | type if:interface-ref; | |||
must "/if:interfaces/if:interface[if:name = current()]/" | must | |||
+ "ip:ipv6" { | '/if:interfaces/if:interface[if:name = current()]/' | |||
+ 'ip:ipv6' { | ||||
error-message | error-message | |||
"The interface must have IPv6 configured, either " | "The interface must have IPv6 configured, either " | |||
+ "enabled or disabled."; | + "enabled or disabled."; | |||
} | } | |||
description | description | |||
"Reference to an entry in the global interface list."; | "Reference to an entry in the global interface list."; | |||
} | } | |||
uses interface-config-attributes-mld { | uses interface-config-attributes-mld { | |||
if-feature per-interface-config; | if-feature "per-interface-config"; | |||
refine max-group-sources { | refine "max-group-sources" { | |||
must "../version = 2 or " | must '../version = 2 or ' | |||
+ "(not(../version) and " | + '(not(../version) and ' | |||
+ "(../../version = 2 or not(../../version)))" { | + '(../../version = 2 or not(../../version)))' { | |||
error-message | error-message | |||
"The version of MLD must be 2 to support the " | "The version of MLD must be 2 to support the " | |||
+ "source-specific parameters."; | + "source-specific parameters."; | |||
} | } | |||
} | } | |||
refine source-policy { | refine "source-policy" { | |||
must "../version = 2 or " | must '../version = 2 or ' | |||
+ "(not(../version) and " | + '(not(../version) and ' | |||
+ "(../../version = 2 or not(../../version)))" { | + '(../../version = 2 or not(../../version)))' { | |||
error-message | error-message | |||
"The version of MLD must be 2 to support the " | "The version of MLD must be 2 to support the " | |||
+ "source-specific parameters."; | + "source-specific parameters."; | |||
} | } | |||
} | } | |||
refine explicit-tracking { | refine "explicit-tracking" { | |||
must "../version = 2 or " | must '../version = 2 or ' | |||
+ "(not(../version) and " | + '(not(../version) and ' | |||
+ "(../../version = 2 or not(../../version)))" { | + '(../../version = 2 or not(../../version)))' { | |||
error-message | error-message | |||
"The version of MLD must be 2 to support the " | "The version of MLD must be 2 to support the " | |||
+ "explicit tracking function."; | + "explicit tracking function."; | |||
} | } | |||
} | } | |||
refine lite-exclude-filter { | refine "lite-exclude-filter" { | |||
must "../version = 2 or " | must '../version = 2 or ' | |||
+ "(not(../version) and " | + '(not(../version) and ' | |||
+ "(../../version = 2 or not(../../version)))" { | + '(../../version = 2 or not(../../version)))' { | |||
error-message | error-message | |||
"The version of MLD must be 2 to support the " | "The version of MLD must be 2 to support the " | |||
+ "simplified EXCLUDE filter in the Lightweight " | + "simplified EXCLUDE filter in the Lightweight " | |||
+ "MLDv2 protocol."; | + "MLDv2 protocol."; | |||
} | } | |||
} | } | |||
} | } | |||
uses interface-state-attributes-mld; | uses interface-state-attributes-mld; | |||
} // interface | } | |||
} // interfaces | // interface | |||
} | ||||
// interfaces | ||||
/* | /* | |||
* Actions | * Actions | |||
*/ | */ | |||
action clear-groups { | action clear-groups { | |||
if-feature action-clear-groups; | if-feature "action-clear-groups"; | |||
description | description | |||
"Clears the specified MLD cache entries."; | "Clears the specified MLD cache entries."; | |||
input { | input { | |||
choice interface { | choice interface { | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Indicates the interface(s) from which the cache | "Indicates the interface(s) from which the cache | |||
entries are cleared."; | entries are cleared."; | |||
case name { | case name { | |||
leaf interface-name { | leaf interface-name { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
skipping to change at line 2042 ¶ | skipping to change at line 2057 ¶ | |||
input { | input { | |||
choice interface { | choice interface { | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Indicates the interface(s) from which the cache | "Indicates the interface(s) from which the cache | |||
entries are cleared."; | entries are cleared."; | |||
case name { | case name { | |||
leaf interface-name { | leaf interface-name { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "rt:control-plane-protocol/" | + "rt:control-plane-protocol/" | |||
+ "igmp-mld:mld/igmp-mld:interfaces/" | + "igmp-mld:mld/igmp-mld:interfaces/" | |||
+ "igmp-mld:interface/igmp-mld:interface-name"; | + "igmp-mld:interface/igmp-mld:interface-name"; | |||
} | } | |||
description | description | |||
"Name of the MLD interface."; | "Name of the MLD interface."; | |||
} | } | |||
} | } | |||
case all { | case all { | |||
leaf all-interfaces { | leaf all-interfaces { | |||
type empty; | type empty; | |||
description | description | |||
"MLD groups from all interfaces are cleared."; | "MLD groups from all interfaces are cleared."; | |||
} | } | |||
} | } | |||
} | } | |||
leaf group-address { | leaf group-address { | |||
type union { | type union { | |||
type enumeration { | type enumeration { | |||
enum '*' { | enum * { | |||
description | description | |||
"Any group address."; | "Any group address."; | |||
} | } | |||
} | } | |||
type rt-types:ipv6-multicast-group-address; | type rt-types:ipv6-multicast-group-address; | |||
} | } | |||
description | description | |||
"Multicast group IPv6 address. | "Multicast group IPv6 address. | |||
If the value '*' is specified, all MLD group entries | If the value '*' is specified, all MLD group entries | |||
are cleared."; | are cleared."; | |||
} | } | |||
leaf source-address { | leaf source-address { | |||
type rt-types:ipv6-multicast-source-address; | type rt-types:ipv6-multicast-source-address; | |||
description | description | |||
"Multicast source IPv6 address. | "Multicast source IPv6 address. | |||
If the value '*' is specified, all MLD source-group | If the value '*' is specified, all MLD source-group | |||
entries are cleared."; | entries are cleared."; | |||
} | } | |||
} | } | |||
} // action clear-mld-groups | } | |||
} // mld | // action clear-mld-groups | |||
} // augment | } | |||
// mld | ||||
} | ||||
// augment | ||||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
5. Security Considerations | 5. Security Considerations | |||
The YANG module specified in this document defines a schema for data | The YANG module specified in this document defines a schema for data | |||
that is designed to be accessed via network management protocols such | that is designed to be accessed via network management protocols such | |||
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | |||
is the secure transport layer, and the mandatory-to-implement secure | is the secure transport layer, and the mandatory-to-implement secure | |||
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | |||
skipping to change at line 2413 ¶ | skipping to change at line 2432 ¶ | |||
Metaswitch Networks | Metaswitch Networks | |||
100 Church Street | 100 Church Street | |||
Enfield | Enfield | |||
EN2 6BQ | EN2 6BQ | |||
United Kingdom | United Kingdom | |||
Email: pete.mcallister@metaswitch.com | Email: pete.mcallister@metaswitch.com | |||
Anish Peter | Anish Peter | |||
IP Infusion India | IP Infusion India | |||
RMZ Centennial, Block D 401, Kundanahalli Main Road, Mahadevapura Post | RMZ Centennial, Block D 401 | |||
Kundanahalli Main Road, Mahadevapura Post | ||||
Bangalore | Bangalore | |||
India | India | |||
Email: anish.ietf@gmail.com | Email: anish.ietf@gmail.com | |||
End of changes. 163 change blocks. | ||||
228 lines changed or deleted | 257 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |