ietf-igmp-mld@2019-09-10.yang | ietf-igmp-mld@2019-09-10-formatted2.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 206 ¶ | skipping to change at line 203 ¶ | |||
} | } | |||
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 347 ¶ | skipping to change at line 350 ¶ | |||
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 376 ¶ | skipping to change at line 384 ¶ | |||
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 402 ¶ | skipping to change at line 411 ¶ | |||
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 457 ¶ | skipping to change at line 468 ¶ | |||
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 485 ¶ | skipping to change at line 496 ¶ | |||
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 535 ¶ | skipping to change at line 546 ¶ | |||
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 612 ¶ | skipping to change at line 621 ¶ | |||
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 649 ¶ | skipping to change at line 657 ¶ | |||
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 799 ¶ | skipping to change at line 807 ¶ | |||
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 849 ¶ | skipping to change at line 858 ¶ | |||
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 872 ¶ | skipping to change at line 882 ¶ | |||
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 930 ¶ | skipping to change at line 940 ¶ | |||
"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 1003 ¶ | skipping to change at line 1014 ¶ | |||
"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 1243 ¶ | skipping to change at line 1256 ¶ | |||
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 1284 ¶ | skipping to change at line 1297 ¶ | |||
} | } | |||
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 1414 ¶ | skipping to change at line 1427 ¶ | |||
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 | ||||
} | } | |||
End of changes. 161 change blocks. | ||||
226 lines changed or deleted | 252 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/ |