Multicast basic service package.
Version: 2019-03-30
module huawei-l3-multicast { yang-version 1; namespace "urn:huawei:yang:huawei-l3-multicast"; prefix l3mc; import huawei-ifm { prefix ifm; } import huawei-network-instance { prefix ni; } import huawei-l3vpn { prefix l3vpn; } import ietf-inet-types { prefix inet; } import huawei-extension { prefix ext; } import huawei-routing { prefix rt; } import huawei-ethernet { prefix ethernet; } organization "Huawei Technologies Co., Ltd."; contact "Huawei Industrial Base Bantian, Longgang Shenzhen 518129 People's Republic of China Website: http://www.huawei.com Email: support@huawei.com"; description "Multicast basic service package."; revision "2019-03-30" { description "Initial revision."; reference "Huawei private."; } ext:task-name "mcast-base"; typedef load-splitting-type { type enumeration { enum "none" { value 0; description "Disable load splitting for multicast routes."; } enum "source" { value 1; description "Specify the multicast source-based load splitting mode. This mode applies to a scenario in which multiple sources provide services for one group."; } enum "group" { value 2; description "Specify the multicast group-based multicast load splitting mode. This mode applies to a scenario in which one source provides services for multiple groups."; } enum "source-group" { value 3; description "Specify the multicast source-based and group-based load splitting mode. This mode applies to a scenario in which multiple sources provide services for multiple groups."; } enum "balance" { value 4; description "Specify the stable-preferred load splitting. This mode enables a device to automatically adjust and balance entries on equal-cost routes when equal-cost routes are added or deleted, when multicast routing entries are deleted, or when load splitting weights are changed on interfaces. This mode applies to a scenario in which hosts frequently join or leave groups and automatic load splitting adjustment is required."; } enum "balance-ucmp" { value 5; description "Specify the balance-ucmp load splitting."; } } description "Load splitting type."; } typedef limit-type { type enumeration { enum "pim-sm-star-group" { value 1; description "PIM-SM (*, g)."; } enum "pim-sm-source-group" { value 2; description "PIM-SM (s, g)."; } enum "pim-dm-star-group" { value 3; description "PIM-DM (*, g)."; } enum "pim-dm-source-group" { value 4; description "PIM-DM (s, g)."; } enum "bidir-pim-star-group" { value 5; description "BIDIRPIM (*, g)."; } } description "Limit type."; } container l3-multicast { description "Configure l3-multicast."; container ipv4 { description "Configure IPv4."; container limits { description "List of multicast route limit."; list limit { must "l3mc:upper-threshold>l3mc:lower-threshold"; key "type"; description "Configure multicast route limit."; leaf type { type limit-type; description "Limit type."; } leaf value { type uint32 { range "1..16384"; } mandatory true; description "Limit value."; } leaf upper-threshold { type uint32 { range "1..100"; } default "80"; description "Upper threshold."; } leaf lower-threshold { type uint32 { range "1..100"; } default "70"; description "Lower threshold."; } leaf current-count { type uint32 { range "0..4294967295"; } config false; description "Current entry count."; } } // list limit } // container limits } // container ipv4 container ipv6 { description "Configure IPv6."; container limits { description "List of multicast route limit."; list limit { must "l3mc:upper-threshold>l3mc:lower-threshold"; key "type"; description "Configure multicast route limit."; leaf type { type limit-type; description "Limit type."; } leaf value { type uint32 { range "1..16384"; } mandatory true; description "Limit value."; } leaf upper-threshold { type uint32 { range "1..100"; } default "80"; description "Upper threshold."; } leaf lower-threshold { type uint32 { range "1..100"; } default "70"; description "Lower threshold."; } leaf current-count { type uint32 { range "0..4294967295"; } config false; description "Current entry count."; } } // list limit } // container limits } // container ipv6 } // container l3-multicast augment /ni:network-instance/ni:instances/ni:instance { description "Add mcastbase configuration to the l3vpn module."; container multicast { description "Configure multicast in the instance."; container ipv4 { when "(../../ni:name='_public_' and ../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']) or ../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']/l3vpn:route-distinguisher or (../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast'] and /ni:network-instance/ni:global/ni:route-distinguisher-auto-ip)"; presence "Create mcastbaseAf4."; description "Enable/disable multicast in the instance."; container global { description "Configure global multicast configurations."; leaf longest-match { type boolean; default "false"; description "Enable/disable the function of selecting an RPF route based on the longest matching rule. By default, the route with the highest preference is selected as the RPF route."; } leaf load-splitting { type load-splitting-type; default "none"; description "Configure a multicast load splitting policy."; } leaf cpu-fwd-disable { type boolean; default "false"; description "Enable/disable CPU forwarding. By default, CPU forwarding is enabled."; } leaf recursive-lookup-local-mt-enable { when "../../../../ni:name='_public_'"; type boolean; default "false"; description "Enable/disable multicast recursive lookup local mt."; } } // container global container interface-min-ttls { description "List of multicast interface minimum TTL."; list interface-min-ttl { must "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name"; must "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name][ifm:type='Global-VE']/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination)"; must "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name][ifm:type='Global-VE']/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination)"; key "name"; description "Configure multicast interface minimum TTL."; leaf name { type leafref { path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name"; } description "Name of an interface."; } leaf minimum-ttl { type uint32 { range "1..255"; } default "1"; description "Specify the minimum TTL value for multicast packets to be forwarded on an interface."; } } // list interface-min-ttl } // container interface-min-ttls container interface-track-vrrps { description "List of multicast track VRRP."; list interface-track-vrrp { must "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name"; key "name"; description "Configure multicast track VRRP."; leaf name { type leafref { path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name"; } description "Name of an interface."; } leaf vrrp-id { type uint8 { range "1..255"; } mandatory true; description "VRRP ID."; } leaf is-admin { type boolean; default "false"; description "Enable/disable a device to track admin VRRP. The value false indicates that it tracks normal VRRP, The value true indicates that it tracks admin VRRP."; } leaf track-interface { when "../is-admin='true'"; type leafref { path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name"; } mandatory true; description "Name of the interface associated with the VRRP backup group."; } } // list interface-track-vrrp } // container interface-track-vrrps container interface-boundarys { description "List of multicast boundaries."; list interface-boundary { must "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name"; key "name group-address mask-length"; description "Configure multicast boundaries."; leaf name { type leafref { path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name"; } description "Name of an interface."; } leaf group-address { type inet:ipv4-address-no-zone { pattern '(22[4-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}'; } description "Indicate a multicast group address. In IPv4, the value ranges from 224.0.0.0 to 239.255.255.255, in dotted decimal notation."; } leaf mask-length { type uint32 { range "4..32"; } description "Specify the mask length of a multicast group address. In IPv4, the value ranges from 4 to 32."; } } // list interface-boundary } // container interface-boundarys container rpf-multi-topology { when "../../../ni:name='_public_'"; must "../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name='multicast']"; presence "Enable multicast services to run in a specified multicast topology instance."; description "Enable/disable the multicast multi-topology function. By default, the multicast multi-topology function is disabled. Before enabling a multicast multi-topology, you must create it globally first."; container topology-rule-list { description "Configure multicast multi-topology rules. Advanced multicast multi-topology and base topology names are supported."; leaf-list name { type leafref { path "../../../../../l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name"; } must "../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv4-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name=current()]"; description "Configure name of a multicast multi-topology. The value is a string of case-sensitive characters."; } } // container topology-rule-list } // container rpf-multi-topology container limits { description "List of multicast vrf route limit."; list limit { must "not(../../../../ni:name='_public_')"; must "l3mc:upper-threshold>l3mc:lower-threshold"; key "type"; description "Configure multicast vrf route limit."; leaf type { type limit-type; description "Limit type."; } leaf value { type uint32 { range "1..16384"; } mandatory true; description "Limit value."; } leaf upper-threshold { type uint32 { range "1..100"; } default "80"; description "Upper threshold."; } leaf lower-threshold { type uint32 { range "1..100"; } default "70"; description "Lower threshold."; } leaf current-count { type uint32 { range "0..4294967295"; } config false; description "Current entry count."; } } // list limit } // container limits } // container ipv4 container ipv6 { when "(../../ni:name='_public_' and ../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']) or ../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']/l3vpn:route-distinguisher or (../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast'] and /ni:network-instance/ni:global/ni:route-distinguisher-auto-ip)"; presence "Create mcastbase-af6."; description "Enable/disable multicast IPv6 in the instance."; container global { description "Configure global IPv6 multicast configurations."; leaf load-splitting { type load-splitting-type; default "none"; description "Configure a multicast load splitting policy."; } leaf cpu-fwd-disable { type boolean; default "false"; description "Enable/disable CPU forwarding. By default, CPU forwarding is enabled."; } } // container global container interface-min-ttls { description "List of multicast IPv6 interface minimum TTL."; list interface-min-ttl { must "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name"; must "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name][ifm:type='Global-VE']/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination)"; must "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name][ifm:type='Global-VE']/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination)"; key "name"; description "Configure multicast IPv6 interface minimum TTL."; leaf name { type leafref { path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name"; } description "Name of an interface."; } leaf minimum-ttl { type uint32 { range "1..255"; } default "1"; description "Specify the minimum TTL value for multicast packets to be forwarded on an interface. The value is an integer ranging from 1 to 255. The default value is 1."; } } // list interface-min-ttl } // container interface-min-ttls container interface-boundarys { description "List of multicast IPv6 boundaries."; list interface-boundary { must "../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name"; key "name group-address mask-length"; description "Configure multicast IPv6 boundaries."; leaf name { type leafref { path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name"; } description "Name of an interface."; } leaf group-address { type inet:ipv6-address-no-zone { pattern '[Ff]{2}[0-9A-Fa-f]{2}.+'; } description "Indicate a multicast group address. In IPv6, the value is in hexadecimal notation and in the format of FFxx:xxxx:xxxx::xxxx."; } leaf mask-length { type uint32 { range "8..128"; } description "Specify the mask length of a multicast group address. In IPv6, the value ranges from 8 to 128."; } } // list interface-boundary } // container interface-boundarys container rpf-multi-topology { when "../../../ni:name='_public_'"; must "../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name='multicast']"; presence "Enable multicast services to run in a specified multicast topology instance."; description "Enable/disable the multicast multi-topology function. By default, the multicast multi-topology function is disabled. Before enabling a multicast multi-topology, you must create it globally first."; container topology-rule-list { description "Configure multicast multi-topology rules. Advanced multicast multi-topology and base topology names are supported."; leaf-list name { type leafref { path "../../../../../l3vpn:afs/l3vpn:af/rt:routing/rt:routing-manage/rt:topologys/rt:topology/rt:name"; } must "../../../../../l3vpn:afs/l3vpn:af[l3vpn:type='ipv6-unicast']/rt:routing/rt:routing-manage/rt:topologys/rt:topology[rt:name=current()]"; description "Configure name of a multicast multi-topology. The value is a string of case-sensitive characters."; } } // container topology-rule-list } // container rpf-multi-topology container limits { description "List of multicast vrf route limit."; list limit { must "not(../../../../ni:name='_public_')"; must "l3mc:upper-threshold>l3mc:lower-threshold"; key "type"; description "Configure multicast vrf route limit."; leaf type { type limit-type; description "Limit type."; } leaf value { type uint32 { range "1..16384"; } mandatory true; description "Limit value."; } leaf upper-threshold { type uint32 { range "1..100"; } default "80"; description "Upper threshold."; } leaf lower-threshold { type uint32 { range "1..100"; } default "70"; description "Lower threshold."; } leaf current-count { type uint32 { range "0..4294967295"; } config false; description "Current entry count."; } } // list limit } // container limits } // container ipv6 } // container multicast } } // module huawei-l3-multicast
© 2023 YumaWorks, Inc. All rights reserved.