| ietf-igmp-mld-proxy@2023-04-25.yang | ietf-igmp-mld-proxy@2023-04-25.yang.formatted.yang | |||
|---|---|---|---|---|
| module ietf-igmp-mld-proxy { | module ietf-igmp-mld-proxy { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-proxy"; | namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-proxy"; | |||
| prefix igmp-mld-proxy; | prefix igmp-mld-proxy; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix inet; | prefix inet; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix if; | prefix if; | |||
| reference | reference | |||
| "RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
| } | } | |||
| 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-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-pim-base { | import ietf-pim-base { | |||
| prefix pim-base; | prefix pim-base; | |||
| reference | reference | |||
| "RFC 9128: YANG Data Model for Protocol Independent Multicast | "RFC 9128: YANG Data Model for Protocol Independent Multicast | |||
| (PIM)"; | (PIM)"; | |||
| } | } | |||
| organization | ||||
| "IETF PIM Working Group"; | ||||
| contact | ||||
| "WG Web: <https://datatracker.ietf.org/wg/pim/> | ||||
| WG List: <mailto:pim@ietf.org> | ||||
| Editors: Hongji Zhao | organization | |||
| <mailto:hongji.zhao@ericsson.com> | "IETF PIM Working Group"; | |||
| contact | ||||
| "WG Web: <https://datatracker.ietf.org/wg/pim/> | ||||
| WG List: <mailto:pim@ietf.org> | ||||
| Xufeng Liu | Editors: Hongji Zhao | |||
| <mailto:xufeng.liu.ietf@gmail.com> | <mailto:hongji.zhao@ericsson.com> | |||
| Yisong Liu | Xufeng Liu | |||
| <mailto:liuyisong@chinamobile.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
| Mani Panchanathan | Yisong Liu | |||
| <mailto:mapancha@cisco.com> | <mailto:liuyisong@chinamobile.com> | |||
| Mahesh Sivakumar | Mani Panchanathan | |||
| <mailto:sivakumar.mahesh@gmail.com>"; | <mailto:mapancha@cisco.com> | |||
| description | Mahesh Sivakumar | |||
| "This module defines a collection of YANG definitions common for | <mailto:sivakumar.mahesh@gmail.com>"; | |||
| all Internet Group Management Protocol (IGMP) and Multicast | description | |||
| Listener Discovery (MLD) Proxy devices. | "This module defines a collection of YANG definitions common for | |||
| all Internet Group Management Protocol (IGMP) and Multicast | ||||
| Listener Discovery (MLD) Proxy devices. | ||||
| Copyright (c) 2023 IETF Trust and the persons identified as | Copyright (c) 2023 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised 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 | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC 9398; see the | This version of this YANG module is part of RFC 9398; see the | |||
| RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
| revision 2023-04-25 { | revision 2023-04-25 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC 9398: A YANG Data Model for IGMP and Multicast Listener | "RFC 9398: A YANG Data Model for IGMP and Multicast Listener | |||
| Discovery (MLD) Proxy Devices"; | Discovery (MLD) Proxy Devices"; | |||
| } | } | |||
| /* | /* | |||
| * Features | * Features | |||
| */ | */ | |||
| feature igmp-proxy { | feature igmp-proxy { | |||
| description | description | |||
| "Support for the IGMP Proxy protocol."; | "Support for the IGMP Proxy protocol."; | |||
| reference | reference | |||
| "RFC 4605: Internet Group Management Protocol (IGMP) / | "RFC 4605: Internet Group Management Protocol (IGMP) / | |||
| Multicast Listener Discovery (MLD)-Based Multicast Forwarding | Multicast Listener Discovery (MLD)-Based Multicast Forwarding | |||
| ('IGMP/MLD Proxying')"; | ('IGMP/MLD Proxying')"; | |||
| } | } | |||
| feature mld-proxy { | feature mld-proxy { | |||
| description | description | |||
| "Support for the MLD Proxy protocol."; | "Support for the MLD Proxy protocol."; | |||
| reference | reference | |||
| "RFC 4605: Internet Group Management Protocol (IGMP) / | "RFC 4605: Internet Group Management Protocol (IGMP) / | |||
| Multicast Listener Discovery (MLD)-Based Multicast Forwarding | Multicast Listener Discovery (MLD)-Based Multicast Forwarding | |||
| ('IGMP/MLD Proxying')"; | ('IGMP/MLD Proxying')"; | |||
| } | } | |||
| /* | /* | |||
| * Identities | * Identities | |||
| */ | */ | |||
| identity igmp-proxy { | identity igmp-proxy { | |||
| base rt:control-plane-protocol; | base rt:control-plane-protocol; | |||
| description | description | |||
| "IGMP Proxy protocol."; | "IGMP Proxy protocol."; | |||
| } | } | |||
| identity mld-proxy { | identity mld-proxy { | |||
| base rt:control-plane-protocol; | base rt:control-plane-protocol; | |||
| description | description | |||
| "MLD Proxy protocol."; | "MLD Proxy protocol."; | |||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| grouping per-interface-config-attributes { | grouping per-interface-config-attributes { | |||
| description | ||||
| "'config' attributes under interface view."; | ||||
| leaf enabled { | ||||
| type boolean; | ||||
| default true; | ||||
| description | description | |||
| "Set the value to 'true' to enable the IGMP/MLD Proxy."; | "'config' attributes under interface view."; | |||
| } | leaf enabled { | |||
| } // per-interface-config-attributes | type boolean; | |||
| grouping state-group-attributes { | default "true"; | |||
| description | description | |||
| "State group attributes."; | "Set the value to 'true' to enable the IGMP/MLD Proxy."; | |||
| leaf up-time { | } | |||
| type uint32; | } // per-interface-config-attributes | |||
| units seconds; | ||||
| grouping state-group-attributes { | ||||
| description | description | |||
| "The elapsed time for (S,G) or (*,G)."; | "State group attributes."; | |||
| } | leaf up-time { | |||
| leaf filter-mode { | type uint32; | |||
| type enumeration { | units "seconds"; | |||
| enum "include" { | description | |||
| description | "The elapsed time for (S,G) or (*,G)."; | |||
| "In 'include' mode, reception of packets sent | } | |||
| to the specified multicast address is requested | leaf filter-mode { | |||
| only from those IP source addresses listed in the | type enumeration { | |||
| source-list parameter."; | enum include { | |||
| } | description | |||
| enum "exclude" { | "In 'include' mode, reception of packets sent | |||
| description | to the specified multicast address is requested | |||
| "In 'exclude' mode, reception of packets sent | only from those IP source addresses listed in the | |||
| to the given multicast address is requested | source-list parameter."; | |||
| from all IP source addresses except those | } | |||
| listed in the source-list parameter."; | enum exclude { | |||
| description | ||||
| "In 'exclude' mode, reception of packets sent | ||||
| to the given multicast address is requested | ||||
| from all IP source addresses except those | ||||
| listed in the source-list parameter."; | ||||
| } | ||||
| } | } | |||
| mandatory true; | ||||
| description | ||||
| "Filter mode for a multicast group. | ||||
| May be either 'include' or 'exclude'."; | ||||
| } | } | |||
| mandatory true; | } // state-group-attributes | |||
| description | ||||
| "Filter mode for a multicast group. | ||||
| May be either 'include' or 'exclude'."; | ||||
| } | ||||
| } // state-group-attributes | ||||
| /* augments */ | /* augments */ | |||
| augment "/rt:routing/rt:control-plane-protocols"+ | augment "/rt:routing/rt:control-plane-protocols" | |||
| "/rt:control-plane-protocol" { | + "/rt:control-plane-protocol" { | |||
| when | when "derived-from-or-self(rt:type, 'igmp-mld-proxy:igmp-proxy')" { | |||
| "derived-from-or-self(rt:type, 'igmp-mld-proxy:igmp-proxy')" { | description | |||
| description | "This augmentation is only valid for IGMP Proxies."; | |||
| "This augmentation is only valid for IGMP Proxies."; | } | |||
| } | description | |||
| description | "IGMP Proxy augmentation to routing control plane protocol | |||
| "IGMP Proxy augmentation to routing control plane protocol | configuration and state."; | |||
| configuration and state."; | container igmp-proxy { | |||
| container igmp-proxy { | if-feature "igmp-proxy"; | |||
| if-feature "igmp-proxy"; | presence "IGMP Proxy configuration."; | |||
| presence "IGMP Proxy configuration."; | description | |||
| description | "IGMP Proxy instance configuration."; | |||
| "IGMP Proxy instance configuration."; | container interfaces { | |||
| container interfaces { | description | |||
| description | "Contains a list of upstream interfaces."; | |||
| "Contains a list of upstream interfaces."; | list interface { | |||
| list interface { | key "name"; | |||
| key "name"; | description | |||
| description | "List of upstream interfaces."; | |||
| "List of upstream interfaces."; | leaf name { | |||
| leaf name { | type if:interface-ref; | |||
| type if:interface-ref; | must 'not( current() = /rt:routing' | |||
| must "not( current() = /rt:routing"+ | + '/rt:control-plane-protocols/pim-base:pim' | |||
| "/rt:control-plane-protocols/pim-base:pim"+ | + '/pim-base:interfaces/pim-base:interface' | |||
| "/pim-base:interfaces/pim-base:interface"+ | + '/pim-base:name )' { | |||
| "/pim-base:name )" { | description | |||
| description | "The upstream interface for the IGMP Proxy | |||
| "The upstream interface for the IGMP Proxy | must not be configured to use PIM."; | |||
| must not be configured to use PIM."; | } | |||
| } | description | |||
| description | "The upstream interface name."; | |||
| "The upstream interface name."; | } | |||
| } | leaf igmp-version { | |||
| leaf igmp-version { | type uint8 { | |||
| type uint8 { | range "1..3"; | |||
| range "1..3"; | } | |||
| } | default "2"; | |||
| default 2; | description | |||
| description | "IGMP version."; | |||
| "IGMP version."; | } | |||
| } | uses per-interface-config-attributes; | |||
| uses per-interface-config-attributes; | leaf sender-source-address { | |||
| leaf sender-source-address { | type inet:ipv4-address-no-zone; | |||
| type inet:ipv4-address-no-zone; | description | |||
| description | "The sender source address of an | |||
| "The sender source address of an | IGMP membership report message or leave message."; | |||
| IGMP membership report message or leave message."; | } | |||
| } | list group { | |||
| list group { | key "group-address"; | |||
| key "group-address"; | config false; | |||
| config false; | description | |||
| description | "Multicast group membership information | |||
| "Multicast group membership information | that joined on the interface."; | |||
| that joined on the interface."; | leaf group-address { | |||
| leaf group-address { | type rt-types:ipv4-multicast-group-address; | |||
| type rt-types:ipv4-multicast-group-address; | description | |||
| description | "Multicast group address."; | |||
| "Multicast group address."; | } | |||
| } | uses state-group-attributes; | |||
| uses state-group-attributes; | list source { | |||
| list source { | key "source-address"; | |||
| key "source-address"; | description | |||
| description | "Multicast source information | |||
| "Multicast source information | for the multicast group."; | |||
| for the multicast group."; | leaf source-address { | |||
| leaf source-address { | type inet:ipv4-address-no-zone; | |||
| type inet:ipv4-address-no-zone; | description | |||
| description | "Multicast source address."; | |||
| "Multicast source address."; | } | |||
| } | leaf up-time { | |||
| leaf up-time { | type uint32; | |||
| type uint32; | units "seconds"; | |||
| units seconds; | description | |||
| description | "The elapsed time for (S,G) or (*,G)."; | |||
| "The elapsed time for (S,G) or (*,G)."; | } | |||
| } | list downstream-interface { | |||
| list downstream-interface { | key "name"; | |||
| key "name"; | description | |||
| description | "List of downstream interfaces."; | |||
| "List of downstream interfaces."; | leaf name { | |||
| leaf name { | type if:interface-ref; | |||
| type if:interface-ref; | description | |||
| description | "Downstream interfaces | |||
| "Downstream interfaces | for each upstream interface."; | |||
| for each upstream interface."; | } | |||
| } | } | |||
| } | } // list source | |||
| } // list source | } // list group | |||
| } // list group | } // interface | |||
| } // interface | } // interfaces | |||
| } // interfaces | } | |||
| } | } | |||
| } | ||||
| augment "/rt:routing/rt:control-plane-protocols"+ | augment "/rt:routing/rt:control-plane-protocols" | |||
| "/rt:control-plane-protocol" { | + "/rt:control-plane-protocol" { | |||
| when | when "derived-from-or-self(rt:type, 'igmp-mld-proxy:mld-proxy')" { | |||
| "derived-from-or-self(rt:type, 'igmp-mld-proxy:mld-proxy')" { | description | |||
| description | "This augmentation is only valid for MLD Proxies."; | |||
| "This augmentation is only valid for MLD Proxies."; | } | |||
| } | description | |||
| description | "MLD Proxy augmentation to routing control plane protocol | |||
| "MLD Proxy augmentation to routing control plane protocol | configuration and state."; | |||
| configuration and state."; | container mld-proxy { | |||
| container mld-proxy { | if-feature "mld-proxy"; | |||
| if-feature "mld-proxy"; | presence "MLD Proxy configuration."; | |||
| presence "MLD Proxy configuration."; | description | |||
| description | "MLD Proxy instance configuration."; | |||
| "MLD Proxy instance configuration."; | container interfaces { | |||
| container interfaces { | description | |||
| description | "Contains a list of upstream interfaces."; | |||
| "Contains a list of upstream interfaces."; | list interface { | |||
| list interface { | key "name"; | |||
| key "name"; | description | |||
| description | "List of upstream interfaces."; | |||
| "List of upstream interfaces."; | leaf name { | |||
| leaf name { | type if:interface-ref; | |||
| type if:interface-ref; | must 'not( current() = /rt:routing' | |||
| must "not( current() = /rt:routing"+ | + '/rt:control-plane-protocols/pim-base:pim' | |||
| "/rt:control-plane-protocols/pim-base:pim"+ | + '/pim-base:interfaces/pim-base:interface' | |||
| "/pim-base:interfaces/pim-base:interface"+ | + '/pim-base:name )' { | |||
| "/pim-base:name )" { | description | |||
| description | "The upstream interface for the MLD Proxy | |||
| "The upstream interface for the MLD Proxy | must not be configured to use PIM."; | |||
| must not be configured to use PIM."; | } | |||
| } | description | |||
| description | "The upstream interface name."; | |||
| "The upstream interface name."; | } | |||
| } | leaf mld-version { | |||
| leaf mld-version { | type uint8 { | |||
| type uint8 { | range "1..2"; | |||
| range "1..2"; | } | |||
| } | default "2"; | |||
| default 2; | description | |||
| description | "MLD version."; | |||
| "MLD version."; | } | |||
| } | uses per-interface-config-attributes; | |||
| uses per-interface-config-attributes; | leaf sender-source-address { | |||
| leaf sender-source-address { | type inet:ipv6-address-no-zone; | |||
| type inet:ipv6-address-no-zone; | description | |||
| description | "The sender source address of an | |||
| "The sender source address of an | MLD membership report message or leave message."; | |||
| MLD membership report message or leave message."; | } | |||
| } | list group { | |||
| list group { | key "group-address"; | |||
| key "group-address"; | config false; | |||
| config false; | description | |||
| description | "Multicast group membership information | |||
| "Multicast group membership information | that joined on the interface."; | |||
| that joined on the interface."; | leaf group-address { | |||
| leaf group-address { | type rt-types:ipv6-multicast-group-address; | |||
| type rt-types:ipv6-multicast-group-address; | description | |||
| description | "Multicast group address."; | |||
| "Multicast group address."; | } | |||
| } | uses state-group-attributes; | |||
| uses state-group-attributes; | list source { | |||
| list source { | key "source-address"; | |||
| key "source-address"; | description | |||
| description | "Multicast source information | |||
| "Multicast source information | for the multicast group."; | |||
| for the multicast group."; | leaf source-address { | |||
| leaf source-address { | type inet:ipv6-address-no-zone; | |||
| type inet:ipv6-address-no-zone; | description | |||
| description | "Multicast source address."; | |||
| "Multicast source address."; | } | |||
| } | leaf up-time { | |||
| leaf up-time { | type uint32; | |||
| type uint32; | units "seconds"; | |||
| units seconds; | description | |||
| description | "The elapsed time for (S,G) or (*,G)."; | |||
| "The elapsed time for (S,G) or (*,G)."; | } | |||
| } | list downstream-interface { | |||
| list downstream-interface { | key "name"; | |||
| key "name"; | description | |||
| description | "List of downstream interfaces."; | |||
| "List of downstream interfaces."; | leaf name { | |||
| leaf name { | type if:interface-ref; | |||
| type if:interface-ref; | description | |||
| description | "Downstream interfaces | |||
| "Downstream interfaces | for each upstream interface."; | |||
| for each upstream interface."; | ||||
| } | } | |||
| } | } | |||
| } // list source | } // list source | |||
| } // list group | } // list group | |||
| } // interface | } // interface | |||
| } // interfaces | } // interfaces | |||
| } | } | |||
| } | } | |||
| } | } | |||
| End of changes. 26 change blocks. | ||||
| 320 lines changed or deleted | 317 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||