huawei-l3-multicast

Multicast basic service package.

  • Version: 2019-03-30

    huawei-l3-multicast@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.