module ietf-igmp-mld-proxy {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-proxy";
// replace with IANA namespace when assigned
prefix imp;
import ietf-inet-types {
prefix inet;
}
import ietf-interfaces {
prefix if;
}
import ietf-routing {
prefix rt;
}
import ietf-pim-base {
prefix pim-base;
}
organization
"IETF PIM Working Group";
contact
"WG Web:
WG List:
Editors: Hongji Zhao
Xufeng Liu
Yisong Liu
Mani Panchanathan
Mahesh Sivakumar
";
description
"The module defines a collection of YANG definitions common for
all Internet Group Management Protocol (IGMP) and Multicast
Listener Discovery (MLD) Proxy devices.
Copyright (c) 2019 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices.";
revision 2019-11-01 {
description
"Initial revision.";
reference
"RFC XXXX: A YANG Data Model for IGMP and MLD Proxy";
}
/*
* Features
*/
feature feature-igmp-proxy {
description
"Support IGMP Proxy protocol.";
reference
"RFC 4605";
}
feature feature-mld-proxy {
description
"Support MLD Proxy protocol.";
reference
"RFC 4605";
}
/*
* Identities
*/
identity igmp-proxy {
base rt:control-plane-protocol;
description
"IGMP Proxy protocol";
}
identity mld-proxy {
base rt:control-plane-protocol;
description
"MLD Proxy protocol";
}
/*
* Typedefs
*/
/*
* Groupings
*/
grouping per-interface-config-attributes {
description "Config attributes under interface view";
leaf enable {
type boolean;
default false;
description
"Set the value to true to enable IGMP/MLD proxy";
}
} // per-interface-config-attributes
grouping state-group-attributes {
description
"State group attributes";
leaf up-time {
type uint32;
units seconds;
description
"The elapsed time for (S,G) or (*,G).";
}
leaf filter-mode {
type enumeration {
enum "include" {
description
"In include mode, reception of packets sent
to the specified multicast address is requested
only from those IP source addresses 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.";
}
}
description
"Filter mode for a multicast group,
may be either include or exclude.";
}
} // state-group-attributes
/* augments */
augment "/rt:routing/rt:control-plane-protocols"+
"/rt:control-plane-protocol" {
description
"IGMP Proxy augmentation to routing control plane protocol
configuration and state.";
container igmp-proxy {
when 'derived-from-or-self(../rt:type, "imp:igmp-proxy")' {
description
"This container is only valid for IGMP Proxy protocol.";
}
if-feature feature-igmp-proxy;
description "IGMP proxy";
container interfaces {
description
"Containing a list of upstream interfaces.";
list interface {
key "interface-name";
description
"List of upstream interfaces.";
leaf interface-name {
type if:interface-ref;
must "not( current() = /rt:routing"+
"/rt:control-plane-protocols/pim-base:pim"+
"/pim-base:interfaces/pim-base:interface"+
"/pim-base:name )" {
description
"The upstream interface for IGMP proxy
should not be configured PIM.";
}
description "The upstream interface name.";
}
leaf version {
type uint8 {
range "1..3";
}
default 2;
description "IGMP version.";
}
uses per-interface-config-attributes;
leaf sender-source-address {
type inet:ipv4-address;
description
"The sender source address of
IGMP memembership report or leave.";
}
list group {
key "group-address";
config false;
description
"Multicast group membership information
that joined on the interface.";
leaf group-address {
type inet:ipv4-address;
description
"Multicast group address.";
}
uses state-group-attributes;
list source {
key "source-address";
description
"List of multicast source information
of the multicast group.";
leaf source-address {
type inet:ipv4-address;
description
"Multicast source address";
}
leaf up-time {
type uint32;
units seconds;
description
"The elapsed time for (S,G) or (*,G).";
}
list downstream-interface {
key "interface-name";
description "The downstream interfaces list.";
leaf interface-name {
type if:interface-ref;
description
"Downstream interfaces for each upstream-interface";
}
}
} // list source
} // list group
} // interface
} // interfaces
}
}
augment "/rt:routing/rt:control-plane-protocols"+
"/rt:control-plane-protocol" {
description
"MLD Proxy augmentation to routing control plane protocol
configuration and state.";
container mld-proxy {
when 'derived-from-or-self(../rt:type, "imp:mld-proxy")' {
description
"This container is only valid for MLD Proxy protocol.";
}
if-feature feature-mld-proxy;
description "MLD proxy";
container interfaces {
description
"Containing a list of upstream interfaces.";
list interface {
key "interface-name";
description
"List of upstream interfaces.";
leaf interface-name {
type if:interface-ref;
must "not( current() = /rt:routing"+
"/rt:control-plane-protocols/pim-base:pim"+
"/pim-base:interfaces/pim-base:interface"+
"/pim-base:name )" {
description
"The upstream interface for MLD proxy
should not be configured PIM.";
}
description "The upstream interface name.";
}
leaf version {
type uint8 {
range "1..2";
}
default 2;
description "MLD version.";
}
uses per-interface-config-attributes;
leaf sender-source-address {
type inet:ipv6-address;
description
"The sender source address of
MLD memembership report or leave.";
}
list group {
key "group-address";
config false;
description
"Multicast group membership information
that joined on the interface.";
leaf group-address {
type inet:ipv6-address;
description
"Multicast group address.";
}
uses state-group-attributes;
list source {
key "source-address";
description
"List of multicast source information
of the multicast group.";
leaf source-address {
type inet:ipv6-address;
description
"Multicast source address";
}
leaf up-time {
type uint32;
units seconds;
description
"The elapsed time for (S,G) or (*,G).";
}
list downstream-interface {
key "interface-name";
description "The downstream interfaces list.";
leaf interface-name {
type if:interface-ref;
description
"Downstream interfaces for each upstream-interface";
}
}
} // list source
} // list group
} // interface
} // interfaces
}
}
/* RPCs */
}