huawei-bd

Definition of bridge domain in the EVC model.

  • Version: 2021-01-26

    huawei-bd@2021-01-26


    
      module huawei-bd {
    
        yang-version 1;
    
        namespace "urn:huawei:yang:huawei-bd";
    
        prefix bd;
    
        import huawei-extension {
          prefix ext;
        }
        import huawei-pub-type {
          prefix pub-type;
        }
        import huawei-ifm {
          prefix ifm;
        }
        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
          "Definition of bridge domain in the EVC model.";
    
        revision "2021-01-26" {
          description
            "Add leaf mac-learn-style.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-03-13" {
          description "Add leaf encapsulation.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-02-07" {
          description
            "Add leaf band-width-kbps.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-12-06" {
          description
            "Modify the value definition of oper-status.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-09-09" {
          description "Initial revision.";
          reference
            "Huawei private.";
    
        }
    
        ext:task-name "bdbase";
    
        typedef admin-status {
          type enumeration {
            enum "up" {
              value 0;
              description
                "BD administrative status is up.";
            }
            enum "down" {
              value 1;
              description
                "BD administrative status is down.";
            }
          }
          description
            "BD administrative status.";
        }
    
        typedef oper-status {
          type enumeration {
            enum "up" {
              value 1;
              description
                "BD operating status is up.";
            }
            enum "down" {
              value 0;
              description
                "BD operating status is down.";
            }
            enum "admin-down" {
              value 2;
              description
                "BD operating status is admin down.";
            }
            enum "invalid" {
              value 255;
              description
                "BD operating status is invalid.";
            }
          }
          description "BD operating status.";
        }
    
        typedef enable-status {
          type enumeration {
            enum "enable" {
              value 1;
              description
                "BD enable status is enable.";
            }
            enum "disable" {
              value 0;
              description
                "BD enable status is disable.";
            }
          }
          description "BD enable status.";
        }
    
        typedef mac-learn-style {
          type enumeration {
            enum "unqualify" {
              value 0;
              description
                "The MAC address learning style is unqualify.";
            }
            enum "qualify" {
              value 1;
              description
                "The MAC address learning style is qualify.";
            }
          }
          description
            "MAC address learning style.";
        }
    
        container bd {
          description
            "Bridge domain configuration.";
          container instances {
            description "List of bridge domain.";
            list instance {
              key "id";
              max-elements 32768;
              description
                "Configure BD instance.";
              leaf id {
                type uint32 {
                  range "1..16777215";
                }
                description "BD ID.";
              }
    
              leaf description {
                type string {
                  length "1..80";
                }
                description "BD description.";
              }
    
              leaf admin-status {
                type admin-status;
                default "up";
                description
                  "BD administrative status.";
              }
    
              leaf status {
                type oper-status;
                config false;
                description "BD status.";
              }
    
              leaf statistic-enable {
                type enable-status;
                default "disable";
                description
                  "Whether BD statistics measurement is enable.";
              }
    
              leaf statistic-discard {
                when
                  "../statistic-enable='enable'";
                type enable-status;
                default "disable";
                description
                  "Whether BUM discard statistics collection is enabled.";
              }
    
              leaf broadcast-discard {
                type enable-status;
                default "disable";
                description
                  "Discard broadcast packets.";
              }
    
              leaf unknown-multicast-discard {
                type enable-status;
                default "disable";
                description
                  "Discard unknown multicast packets.";
              }
    
              leaf unknown-unicast-discard {
                type enable-status;
                default "disable";
                description
                  "Discard unknown unicast packets.";
              }
    
              leaf mac-learning {
                type enable-status;
                default "enable";
                description
                  "Enable MAC address learning.";
              }
    
              leaf mac-aging-time {
                type uint32 {
                  range "0|60..1000000";
                }
                units "s";
                description
                  "MAC address aging time, 0 indicates that MAC addresses do not age.";
              }
    
              leaf split-horizon {
                type enable-status;
                default "disable";
                description
                  "Enable split horizon.";
              }
    
              leaf encapsulation {
                type enumeration {
                  enum "raw" {
                    value 1;
                    description
                      "Indicates the frame type in the bridge-domain is EthernetII.";
                  }
                  enum "tagged" {
                    value 2;
                    description
                      "Indicates the frame type in the bridge-domain is IEEE802.1Q.";
                  }
                }
                default "raw";
                description
                  "The bridge-domain encapsulation type.";
              }
    
              leaf mac-learn-style {
                type mac-learn-style;
                must
                  "(../mac-learn-style = 'unqualify') or not ((../bd:service-points/bd:service-point/bd:interface-name) and ((/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:default) or (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:untag) or ((/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:dot1q/ethernet:vlans/ethernet:vlan-list or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:dot1q/ethernet:policy-vlans/ethernet:policy-vlan/ethernet:dot1q-8021p) and (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:flow-action/ethernet:action-type = 'pop-outer')) or (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:qinqs/ethernet:qinq-vid-ce-default/ethernet:pe-vlan-list) or ((/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:qinqs/ethernet:qinq-vids/ethernet:qinq-vid/ethernet:pe-vlan-id) and (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:flow-action/ethernet:action-type = 'pop-double')) or ((/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:dot1q/ethernet:vlans/ethernet:vlan-list) and (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name = current()/../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:flow-action/ethernet:action-type = 'map-single-outbound'))))";
                default "unqualify";
                description
                  "MAC address learning style.";
              }
    
              container bind-vlan {
                description
                  "Configure VLANs bound by BD.";
                leaf vlan-list {
                  type pub-type:vlan-range;
                  description
                    "VLAN list. The VLAN is already created globally.";
                }
              }  // container bind-vlan
    
              container service-points {
                description
                  "List of EVC service points.";
                list service-point {
                  key "interface-name";
                  description
                    "Configure EVC service information.";
                  leaf interface-name {
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    must
                      "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:l2-mode-enable = 'true'";
                    description
                      "Interface name.";
                  }
    
                  leaf split-horizon {
                    type enable-status;
                    default "disable";
                    description
                      "Enable split horizon.";
                  }
    
                  container evpn {
                    description
                      "Configure the E-Tree leaf attribute of BD.";
                    leaf e-tree-leaf {
                      type boolean;
                      must
                        "(../e-tree-leaf = 'true' and ../../../../evpn:evpn/evpn:name and /evpn:evpn/evpn:instances/evpn:instance[evpn:name=current()/../../../../evpn:evpn/evpn:name]/evpn:bd-evpn/evpn:etree-enable = 'true') or (../e-tree-leaf = 'false')";
                      default "false";
                      description
                        "Enable/disable the E-Tree leaf attribute of BD.";
                    }
                  }  // container evpn
    
                  container ac-suppression {
                    config false;
                    description
                      "Statistics of the bridge domain AC suppression.";
                    leaf time {
                      type string {
                        length "1..60";
                      }
                      config false;
                      description
                        "AC suppression time.";
                    }
    
                    leaf unicast-inbound-flag {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Unicast inbound suppression flag.";
                    }
    
                    leaf unicast-inbound-pass-packets {
                      type uint64;
                      config false;
                      description
                        "Number of unknown unicast packets passed in the inbound direction of an AC interface.";
                    }
    
                    leaf unicast-inbound-pass-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of unknown unicast bytes passed in the inbound direction of an AC interface.";
                    }
    
                    leaf unicast-inbound-drop-packets {
                      type uint64;
                      config false;
                      description
                        "Number of unknown unicast packets dropped in the inbound direction of an AC interface.";
                    }
    
                    leaf unicast-inbound-drop-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of unknown unicast bytes dropped in the inbound direction of an AC interface.";
                    }
    
                    leaf unicast-outbound-flag {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Unicast outbound suppression flag.";
                    }
    
                    leaf unicast-outbound-pass-packets {
                      type uint64;
                      config false;
                      description
                        "Number of unknown unicast packets passed in the outbound direction of an AC interface.";
                    }
    
                    leaf unicast-outbound-pass-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of unknown unicast bytes passed in the outbound direction of an AC interface.";
                    }
    
                    leaf unicast-outbound-drop-packets {
                      type uint64;
                      config false;
                      description
                        "Number of unknown unicast packets dropped in the outbound direction of an AC interface.";
                    }
    
                    leaf unicast-outbound-drop-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of unknown unicast bytes dropped in the outbound direction of an AC interface.";
                    }
    
                    leaf multicast-inbound-flag {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Multicast inbound suppression flag.";
                    }
    
                    leaf multicast-inbound-pass-packets {
                      type uint64;
                      config false;
                      description
                        "Number of multicast packets passed in the inbound direction of an AC interface.";
                    }
    
                    leaf multicast-inbound-pass-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of multicast bytes passed in the inbound direction of an AC interface.";
                    }
    
                    leaf multicast-inbound-drop-packets {
                      type uint64;
                      config false;
                      description
                        "Number of multicast packets dropped in the inbound direction of an AC interface.";
                    }
    
                    leaf multicast-inbound-drop-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of multicast bytes dropped in the inbound direction of an AC interface.";
                    }
    
                    leaf multicast-outbound-flag {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Multicast outbound suppression flag.";
                    }
    
                    leaf multicast-outbound-pass-packets {
                      type uint64;
                      config false;
                      description
                        "Number of multicast packets passed in the outbound direction of an AC interface.";
                    }
    
                    leaf multicast-outbound-pass-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of multicast bytes passed in the outbound direction of an AC interface.";
                    }
    
                    leaf multicast-outbound-drop-packets {
                      type uint64;
                      config false;
                      description
                        "Number of multicast packets dropped in the outbound direction of an AC interface.";
                    }
    
                    leaf multicast-outbound-drop-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of multicast bytes dropped in the outbound direction of an AC interface.";
                    }
    
                    leaf broadcast-inbound-flag {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Broadcast inbound suppression flag.";
                    }
    
                    leaf broadcast-inbound-pass-packets {
                      type uint64;
                      config false;
                      description
                        "Number of broadcast packets passed in the inbound direction of an AC interface.";
                    }
    
                    leaf broadcast-inbound-pass-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of broadcast bytes passed in the inbound direction of an AC interface.";
                    }
    
                    leaf broadcast-inbound-drop-packets {
                      type uint64;
                      config false;
                      description
                        "Number of broadcast packets dropped in the inbound direction of an AC interface.";
                    }
    
                    leaf broadcast-inbound-drop-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of broadcast bytes dropped in the inbound direction of an AC interface.";
                    }
    
                    leaf broadcast-outbound-flag {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Broadcast outbound suppression flag.";
                    }
    
                    leaf broadcast-outbound-pass-packets {
                      type uint64;
                      config false;
                      description
                        "Number of broadcast packets passed in the outbound direction of an AC interface.";
                    }
    
                    leaf broadcast-outbound-pass-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of broadcast bytes passed in the outbound direction of an AC interface.";
                    }
    
                    leaf broadcast-outbound-drop-packets {
                      type uint64;
                      config false;
                      description
                        "Number of broadcast packets dropped in the outbound direction of an AC interface.";
                    }
    
                    leaf broadcast-outbound-drop-bytes {
                      type uint64;
                      config false;
                      description
                        "Number of broadcast bytes dropped in the outbound direction of an AC interface.";
                    }
                  }  // container ac-suppression
                }  // list service-point
              }  // container service-points
    
              container statistics {
                config false;
                description
                  "Statistics of BD information.";
                leaf inbound-packets {
                  type uint64;
                  units "packet";
                  description
                    "Number of inbound packets.";
                }
    
                leaf inbound-bytes {
                  type uint64;
                  units "Byte";
                  description
                    "Number of inbound bytes.";
                }
    
                leaf outbound-packets {
                  type uint64;
                  units "packet";
                  description
                    "Number of outbound packets.";
                }
    
                leaf outbound-bytes {
                  type uint64;
                  units "Byte";
                  description
                    "Number of outbound bytes.";
                }
    
                leaf inbound-pps {
                  type uint64;
                  units "pps";
                  description
                    "Rate of inbound packets.";
                }
    
                leaf inbound-bps {
                  type uint64;
                  units "Byte/s";
                  description
                    "Rate of inbound bytes.";
                }
    
                leaf inbound-unicasts {
                  type uint64;
                  description
                    "Number of inbound unicasts.";
                }
    
                leaf inbound-multicasts {
                  type uint64;
                  description
                    "Number of inbound multicasts.";
                }
    
                leaf inbound-broadcasts {
                  type uint64;
                  description
                    "Number of inbound broadcasts.";
                }
    
                leaf inbound-unknown-unicast-drops {
                  type uint64;
                  description
                    "Number of discarded unknown unicast packets in the inbound direction.";
                }
    
                leaf inbound-unknown-multicast-drops {
                  type uint64;
                  description
                    "Number of discarded unknown multicast packets in the inbound direction.";
                }
    
                leaf inbound-broadcast-drops {
                  type uint64;
                  description
                    "Number of discarded broadcast packets in the inbound direction.";
                }
    
                leaf outbound-unicasts {
                  type uint64;
                  description
                    "Number of outbound unicasts.";
                }
    
                leaf outbound-multicasts {
                  type uint64;
                  description
                    "Number of outbound multicasts.";
                }
    
                leaf outbound-broadcasts {
                  type uint64;
                  description
                    "Number of outbound broadcasts.";
                }
    
                leaf outbound-pps {
                  type uint64;
                  units "pps";
                  description
                    "Rate of outbound packets.";
                }
    
                leaf outbound-bps {
                  type uint64;
                  units "Byte/s";
                  description
                    "Rate of outbound bytes.";
                }
              }  // container statistics
    
              container bind-service {
                config false;
                description
                  "Statistics of BD binding Information.";
                leaf vsi-name {
                  type string {
                    length "1..31";
                  }
                  description
                    "The VSI name bound to the BD.";
                }
    
                leaf evpn-name {
                  type string {
                    length "1..31";
                  }
                  description
                    "The EVPN name bound to the BD.";
                }
    
                leaf vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "The VNI ID bound to the BD.";
                }
              }  // container bind-service
    
              container nvo3 {
                must
                  "../bd:mac-learn-style!='qualify'";
                description
                  "Configure NVO3 for a BD.";
                list vni-list {
                  key "vni";
                  max-elements 1;
                  description
                    "Configure the list of VNI that a bridge domain corresponds.";
                  leaf vni {
                    type uint32 {
                      range "1..16777215";
                    }
                    description
                      "VXLAN network identifier.";
                  }
    
                  leaf split-horizon {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable split horizon mode.";
                  }
    
                  leaf source-vtep-ip {
                    type inet:ipv4-address-no-zone;
                    description
                      "The address of VXLAN tunnel source point. When not configured, the address of interface NVE is used as default.";
                  }
                }  // list vni-list
              }  // container nvo3
    
              container evpn {
                description
                  "Configure BD bound to an EVPN instance.";
                leaf name {
                  type leafref {
                    path "/evpn:evpn/evpn:instances/evpn:instance/evpn:name";
                  }
                  must
                    "(/evpn:evpn/evpn:instances/evpn:instance[evpn:name = current()]/evpn:type='bd-evpn') and not(/bd:bd/bd:instances/bd:instance[bd:id != current()/../../bd:id]/evpn:evpn[evpn:name = current()] and /bd:bd/bd:instances/bd:instance[bd:id != current()/../../bd:id]/evpn:evpn[evpn:tag = current()/../evpn:tag])";
                  description
                    "Configure BD instances bound to an BD exclusive mode EVPN instance.";
                }
    
                leaf esi {
                  when "../name";
                  type esi {
                    length "1..24";
                  }
                  must
                    "(../../nvo3:nvo3/nvo3:vni-list/nvo3:vni[../nvo3:split-horizon='true']) or ((../umr-originate='true') and not(/evpn:evpn/evpn:site/evpn:static-esis/evpn:static-esi[evpn:esi = current()]/evpn:redundancy-mode ='single-active'))";
                  description
                    "Static ESI, in the format of 00xx.xxxx.xxxx.xxxx.xxxx, in which x ranges from 0 to F. A static ESI cannot be all 0s.";
                }
    
                leaf tag {
                  ext:operation-exclude "update";
                  when "../name";
                  type uint16 {
                    range "1..4094";
                  }
                  must
                    "../../bd:mac-learn-style!='qualify'";
                  description
                    "Specify the BD tag.";
                }
    
                leaf umr-originate {
                  when "../name";
                  type boolean;
                  must
                    "(../umr-originate='true' and not(../../nvo3:nvo3/nvo3:vni-list/nvo3:vni) and not(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpls/l2vpn:bds/l2vpn:bd[l2vpn:id=current()/../../bd:id]) and (../../bd:mac-learn-style!='qualify')) or (../umr-originate='false')";
                  default "false";
                  description
                    "Enable/disable originate Unknown-MAC-Route.";
                }
    
                leaf detail-suppressed {
                  when
                    "../umr-originate ='true'";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable suppresse detail MAC route.";
                }
    
                leaf umr-forward {
                  when "../name";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable process all-0 MAC route as Unknown-MAC-Route.";
                }
    
                leaf dci-ac-access {
                  when "../name";
                  type boolean;
                  must
                    "(../dci-ac-access='true' and ../../nvo3:nvo3/nvo3:vni-list/nvo3:vni[../nvo3:split-horizon='true']) or (../dci-ac-access='false')";
                  default "false";
                  description
                    "Enable/disable evpn-dci support ac-access.";
                }
    
                container interface-track-peers {
                  when
                    "(../name and ../../nvo3:nvo3/nvo3:vni-list/nvo3:vni[../nvo3:split-horizon='true'])";
                  description
                    "List of track peer.";
                  list interface-track-peer {
                    key "es-track-address";
                    description
                      "Configure track peer information.";
                    leaf es-track-address {
                      type leafref {
                        path "/ni:network-instance/ni:instances/ni:instance/bgp:bgp/bgp:base-process/bgp:peers/bgp:peer/bgp:address";
                      }
                      must
                        "/ni:network-instance/ni:instances/ni:instance/bgp:bgp/bgp:base-process/bgp:peers/bgp:peer[bgp:address=current()]/bgp:afs/bgp:af[bgp:type='evpn']";
                      description
                        "Track peer address.";
                    }
                  }  // list interface-track-peer
                }  // container interface-track-peers
              }  // container evpn
    
              container mac-accounting {
                description
                  "Configure BD MAC accounting.";
                leaf enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the flag of BD MAC accounting.";
                }
              }  // container mac-accounting
    
              container pipe {
                description
                  "Configure the diffserv mode of bridge domain.";
                leaf split-mode {
                  type boolean;
                  must
                    "((../split-mode='false' and not(../ingress-pipe-mode) and not(../egress-pipe-mode) and ../pipe-mode) or (../split-mode='true' and not(../pipe-mode) and ../ingress-pipe-mode and ../egress-pipe-mode and not(../ingress-pipe-mode='uniform' and ../egress-pipe-mode='uniform')))";
                  default "false";
                  description
                    "Enable/disable split mode.";
                }
    
                leaf pipe-mode {
                  when "../split-mode='false'";
                  type bd-pipe-mode;
                  must
                    "(../split-mode='false') and ((../pipe-mode='pipe' and (../service-class) and (../color)) or (../pipe-mode='shortpipe' and (../service-class) and (../color) and (../domain-name)) or (../pipe-mode='uniform'))";
                  default "uniform";
                  description "Pipe mode.";
                }
    
                leaf ingress-pipe-mode {
                  when "../split-mode='true'";
                  type bd-pipe-mode;
                  must
                    "((../split-mode='true') and (((../service-class) and (../color) and (../ingress-pipe-mode='shortpipe' or ../ingress-pipe-mode='pipe')) or (../ingress-pipe-mode='uniform' and ../egress-pipe-mode!='uniform')))";
                  default "uniform";
                  description
                    "Ingress pipe mode.";
                }
    
                leaf egress-pipe-mode {
                  when "../split-mode='true'";
                  type bd-pipe-mode;
                  must
                    "((../split-mode='true') and (((../domain-name) and (../trust-type) and (../egress-pipe-mode='shortpipe')) or (../egress-pipe-mode='pipe') or (../egress-pipe-mode='uniform' and ../ingress-pipe-mode!='uniform')))";
                  default "uniform";
                  description
                    "Egress pipe mode.";
                }
    
                leaf service-class {
                  when
                    "(../pipe-mode='pipe' or ../pipe-mode='shortpipe' or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortpipe')";
                  type bd-service-class;
                  must
                    "(../pipe-mode='pipe' or ../pipe-mode='shortpipe' or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortpipe')";
                  default "be";
                  description "Service class.";
                }
    
                leaf color {
                  when
                    "(../pipe-mode='pipe' or ../pipe-mode='shortpipe'  or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortpipe')";
                  type bd-color;
                  must
                    "(../pipe-mode='pipe' or ../pipe-mode='shortpipe' or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortpipe')";
                  default "green";
                  description "Color.";
                }
    
                leaf domain-name {
                  when
                    "(../pipe-mode='shortpipe'  or ../egress-pipe-mode='shortpipe')";
                  type leafref {
                    path "/qos:qos/qos:classifier-template/qos:diffserv-domains/qos:diffserv-domain/qos:name";
                  }
                  must
                    "(../pipe-mode='shortpipe' or ../egress-pipe-mode='shortpipe')";
                  default "default";
                  description "Domain name.";
                }
    
                leaf trust-type {
                  when
                    "../egress-pipe-mode='shortpipe'";
                  type bd-trust-type;
                  must
                    "../egress-pipe-mode='shortpipe'";
                  default "outpri";
                  description "Trust type.";
                }
              }  // container pipe
    
              container reserve-if-switch {
                description
                  "Configure BD broadcast fast switching.";
                leaf enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the flag of BD broadcast fast switching.";
                }
              }  // container reserve-if-switch
    
              container igmp-snooping {
                description
                  "Configure IGMP snooping in the BD.";
                container global {
                  when
                    "/mc:multicast/ims:igmp-snooping/ims:global-enable";
                  description
                    "Configure IGMP snooping in the BD.";
                  leaf ssm-acl {
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                    description
                      "SSM group range policy.";
                  }
    
                  leaf version {
                    type uint32 {
                      range "1..3";
                    }
                    default "2";
                    description
                      "IGMP version on an interface.";
                  }
    
                  leaf ssm-mapping-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable SSM mapping.";
                  }
    
                  leaf ssm-mapping-policy {
                    when
                      "../ssm-mapping-enable='true'";
                    type string {
                      length "1..31";
                    }
                    must
                      "not(../../ssm-mapping-groups/ssm-mapping-group)";
                    description
                      "Configure a policy for SSM Mapping.";
                  }
    
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable IGMP snooping in the bridge domain.";
                  }
    
                  leaf group-policy-acl {
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                    description
                      "IGMP group policy.";
                  }
    
                  leaf group-policy-version {
                    when "../group-policy-acl";
                    type uint32 {
                      range "1..3";
                    }
                    description
                      "A group policy applies only to a specified IGMP version.";
                  }
    
                  leaf max-response-time {
                    type uint32 {
                      range "1..25";
                    }
                    units "s";
                    default "10";
                    description
                      "Maximum response time for an IGMP Query message. This time is used to control the deadline for user hosts to send Report messages.";
                  }
    
                  leaf immediately-leave {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable prompt-leave. Prompt-Leave allows an interface to immediately delete a group record after receiving a Leave message for this group, without sending a last-member query message.";
                  }
    
                  leaf immediately-leave-acl {
                    when
                      "../immediately-leave='true'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                    description
                      "ACL used to control the applicable range of IGMP prompt-leave.";
                  }
    
                  leaf proxy-enable {
                    type boolean;
                    must
                      "../proxy-enable='false' or (../report-suppress='false' and ../querier-enable='false')";
                    default "false";
                    description
                      "Enable/disable IGMP snooping proxy.";
                  }
    
                  leaf multicast-group-model {
                    type snooping-mode;
                    default "asm-ssm";
                    description
                      "IGMP group join mode.";
                  }
    
                  leaf ip-policy-acl {
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                    description
                      "IP filter policy.";
                  }
    
                  leaf query-ip-policy-acl {
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                    description
                      "Querier IP policy.";
                  }
    
                  leaf querier-election {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable IGMP querier election.";
                  }
    
                  leaf proxy-router-protocol-pass {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable an IGMP snooping proxy-enabled device to transparently transmit IGMP Report messages.";
                  }
    
                  leaf querier-enable {
                    type boolean;
                    must
                      "(../proxy-enable='false' and not (../../../evpn:evpn/evpn:name)) or (../querier-enable='false')";
                    default "false";
                    description
                      "Enable/disable an IGMP querier.";
                  }
    
                  leaf query-interval {
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "60";
                    description
                      "Interval at which a device sends General Query messages.";
                  }
    
                  leaf require-router-alert {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable a device to permit only IGMP messages that contain the Router-Alert option in the IP header. By default, IGMP messages that do not carry the Router-Alert option are also permitted.";
                  }
    
                  leaf send-router-alert {
                    type boolean;
                    default "true";
                    description
                      "Enable/disable a device to send IGMP messages that contain the Router-Alert option in the IP header.";
                  }
    
                  leaf robustness {
                    type uint32 {
                      range "2..5";
                    }
                    default "2";
                    description
                      "Number of times for retransmitting a message to avoid packet loss.";
                  }
    
                  leaf router-aging-time {
                    type uint32 {
                      range "1..1000";
                    }
                    units "s";
                    default "180";
                    description
                      "Aging time of dynamic router ports. By default, the aging time of a dynamic router port is 180 seconds or equals the holdtime value contained in a PIM Hello packet.";
                  }
    
                  leaf router-port-learning {
                    type boolean;
                    default "true";
                    description
                      "Enable/disable dynamic router port learning.";
                  }
    
                  leaf query-suppress-time {
                    type uint32 {
                      range "0..300";
                    }
                    units "s";
                    default "10";
                    description
                      "Time during which IGMP Report messages are suppressed.";
                  }
    
                  leaf last-member-query-interval {
                    type uint32 {
                      range "1..5";
                    }
                    units "s";
                    default "1";
                    description
                      "Interval at which a last-member query message is sent.";
                  }
    
                  leaf static-group-suppress-dynamic-join {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable a Layer 2 device from sending IGMP Report and Leave messages of a group that has been configured as a static group on the upstream device.";
                  }
    
                  leaf report-suppress {
                    type boolean;
                    must
                      "(../proxy-enable='false' and not (../../../evpn:evpn/evpn:name)) or (../report-suppress='false')";
                    default "false";
                    description
                      "Enable/disable the function of suppressing IGMP Report messages.";
                  }
    
                  leaf source-life-time {
                    type uint32 {
                      range "60..1000";
                    }
                    units "s";
                    default "210";
                    description
                      "Aging time for entries triggered by multicast flows.";
                  }
    
                  leaf designated-vlan {
                    type uint32 {
                      range "1..4094";
                    }
                    must
                      "(not (../../../evpn:evpn/evpn:name)) or (not (../designated-vlan))";
                    description
                      "Specify the IGMP snooping VLAN in which multicast messages and data are transparently transmitted.";
                  }
    
                  leaf signal-smet-disable {
                    type boolean;
                    must
                      "(../../../evpn:evpn/evpn:name) or ../signal-smet-disable='false'";
                    default "false";
                    description
                      "Enable/disable the function of signal-smet.";
                  }
    
                  leaf signal-synch-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the function of signal-synch. Configuration prerequisite for the leaf: The BD instance is associated with an EVPN instance, and IGMP snooping proxy is enabled for the BD or IGMP is enabled on the VBDIF interface of the BD.";
                  }
    
                  leaf signal-ignore-df-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the function of signal-ignore-df. Configuration prerequisite for the leaf: The BD instance is associated with an EVPN instance, and IGMP snooping proxy is enabled for the BD or IGMP is enabled on the VBDIF interface of the BD.";
                  }
    
                  container evi-rts {
                    when
                      "../signal-synch-enable='true'";
                    description
                      "List of EVI-RT extended community.";
                    list evi-rt {
                      key "type";
                      description
                        "Configure EVI-RT extended community.";
                      leaf type {
                        type evi-rt-type;
                        description
                          "Specify the VPN target type. Export-extcommunity: specifies the extended community attributes carried in routing information to be sent. Import-extcommunity: receives routing information carrying specified extended community attributes.";
                      }
    
                      leaf value {
                        type string {
                          length "3..21";
                          pattern
                            '(((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}):(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0))|((6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0):(429496729[0-5]|42949672[0-8]\d|4294967[0-1]\d{2}|429496[0-6]\d{3}|42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|4[0-1]\d{8}|[1-3]\d{9}|[1-9]\d{0,8}))|((6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}):0)|((429496729[0-5]|42949672[0-8]\d|4294967[0-1]\d{2}|429496[0-6]\d{3}|42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|4[0-1]\d{8}|[1-3]\d{9}|[1-9]\d{5,8}|[7-9]\d{4}|6[6-9]\d{3}|65[6-9]\d{2}|655[4-9]\d|6553[6-9]):(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0))|((6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3})\.(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0):(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0))|(0\.(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}):(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0))|(0\.0:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}))';
                        }
                        mandatory true;
                        description
                          "Vpn-target: adds VPN target extended community attribute to the export or import VPN target extended community list. The vpn-target can be expressed in either of the following formats: (1)16-bit AS number:32-bit user-defined number. For example, 1:3. The AS number ranges from 0 to 65535. The user-defined number ranges from 0 to 4294967295. The AS number and the user-defined number cannot be 0s at the same time. That is, a VPN target cannot be 0:0. (2)32-bit IP address:16-bit user-defined number. For example, 192.168.122.15:1. The IP address ranges from 0.0.0.0 to 255.255.255.255. The user-defined number ranges from 0 to 65535. (3)32-bit AS number:16-bit user-defined number. For example, 65537:3. The AS number ranges from 65536 to 4294967295. The user-defined number ranges from 0 to 65535. (4)32-bit AS number in dotted notation:16-bit user-defined number. For example, 0.0:3 or 0.1:0. The 32-bit AS number in dotted notation is in the format of x.y, where x and y are integers that both range from 0 to 65535. The user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot both be 0s. Specifically, a VPN target cannot be 0:0.0.";
                      }
                    }  // list evi-rt
                  }  // container evi-rts
                }  // container global
    
                container interfaces {
                  when
                    "/mc:multicast/ims:igmp-snooping/ims:global-enable";
                  description
                    "List of sub-interface configuration.";
                  list interface {
                    must
                      "not(../../../nvo3:nvo3/nvo3:vni-list)";
                    must
                      "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:default)";
                    must
                      "./group-policy-acl or ./learning='false' or ./proxy-uplink-port='true'";
                    key "name";
                    description
                      "Configure sub-interface configuration.";
                    leaf name {
                      type leafref {
                        path "../../../../bd:service-points/bd:service-point/bd:interface-name";
                      }
                      description
                        "Interface name.";
                    }
    
                    leaf group-policy-acl {
                      type acl:acl4-identity;
                      must
                        "(/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance') or (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance')";
                      description
                        "Configure a policy for filtering multicast groups on an interface to control the range of multicast groups that hosts can join.";
                    }
    
                    leaf group-policy-version {
                      when "../group-policy-acl";
                      type uint32 {
                        range "1..3";
                      }
                      description
                        "A group policy applies only to a specified IGMP version.";
                    }
    
                    leaf learning {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable IGMP-snooping learning function.";
                    }
    
                    leaf proxy-uplink-port {
                      type boolean;
                      must
                        "(../proxy-uplink-port='false') or (not(../pe-vid) and not(../ce-vid) and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:untag) or ((../pe-vid) and not(../ce-vid) and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:dot1q) or ((../pe-vid) and (../ce-vid) and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:qinqs)";
                      default "false";
                      description
                        "Enable/disable IGMP proxy uplink port.";
                    }
    
                    leaf pe-vid {
                      when
                        "../proxy-uplink-port='true'";
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Outer VLAN ID.";
                    }
    
                    leaf ce-vid {
                      when
                        "../proxy-uplink-port='true'";
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Inner VLAN ID.";
                    }
                  }  // list interface
                }  // container interfaces
    
                container pw-static-router-ports {
                  when
                    "(/mc:multicast/ims:igmp-snooping/ims:global-enable or /ni:network-instance/ni:instances/ni:instance/igmp-mld:igmp/igmp-mld:interfaces/igmp-mld:interface[igmp-mld:enable='true'][igmp-mld:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:type='Vbdif'][ifm:number=string(current()/../../bd:id)]/ifm:name]) and /l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpls/l2vpn:bds/l2vpn:bd[l2vpn:id=current()/../../bd:id]";
                  description
                    "List of router port configurations of PWs.";
                  list pw-static-router-port {
                    must
                      "not(../../../nvo3:nvo3/nvo3:vni-list)";
                    must
                      "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:default)";
                    key "vsi-name remote-peer negotiation-vc-id";
                    description
                      "Configure router port configuration of a PW.";
                    leaf vsi-name {
                      type leafref {
                        path "/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:name";
                      }
                      description
                        "Name of a virtual switch instance.";
                    }
    
                    leaf remote-peer {
                      type inet:ipv4-address-no-zone {
                        pattern
                          '([1-9]|[1-9]\d|1[0-1]\d|12[0-68-9]|1[3-9]\d|2[0-1]\d|22[0-3])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                      }
                      description
                        "IP address of the peer end.";
                    }
    
                    leaf negotiation-vc-id {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Negotiation VC ID.";
                    }
                  }  // list pw-static-router-port
                }  // container pw-static-router-ports
    
                container static-router-ports {
                  when
                    "/mc:multicast/ims:igmp-snooping/ims:global-enable or /ni:network-instance/ni:instances/ni:instance/igmp-mld:igmp/igmp-mld:interfaces/igmp-mld:interface[igmp-mld:enable='true'][igmp-mld:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:type='Vbdif'][ifm:number=string(current()/../../bd:id)]/ifm:name]";
                  description
                    "List of static router port configuration of sub-interfaces.";
                  list static-router-port {
                    must
                      "not(../../../nvo3:nvo3/nvo3:vni-list)";
                    key "interface";
                    description
                      "Configure static router port configuration of sub-interfaces.";
                    leaf interface {
                      type leafref {
                        path "../../../../bd:service-points/bd:service-point/bd:interface-name";
                      }
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:untag";
                      description
                        "Interface name.";
                    }
                  }  // list static-router-port
                }  // container static-router-ports
    
                container static-dot1q-router-ports {
                  when
                    "/mc:multicast/ims:igmp-snooping/ims:global-enable or /ni:network-instance/ni:instances/ni:instance/igmp-mld:igmp/igmp-mld:interfaces/igmp-mld:interface[igmp-mld:enable='true'][igmp-mld:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:type='Vbdif'][ifm:number=string(current()/../../bd:id)]/ifm:name]";
                  description
                    "List of static router port configuration of sub-interfaces.";
                  list static-dot1q-router-port {
                    must
                      "not(../../../nvo3:nvo3/nvo3:vni-list)";
                    key "interface vid";
                    description
                      "Configure static dot1q router port configuration of sub-interfaces.";
                    leaf interface {
                      type leafref {
                        path "../../../../bd:service-points/bd:service-point/bd:interface-name";
                      }
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:dot1q/ethernet:vlans";
                      description
                        "Interface name.";
                    }
    
                    leaf vid {
                      type uint32 {
                        range "1..4094";
                      }
                      must
                        "not(../../../global/designated-vlan) or ../vid=../../../global/designated-vlan";
                      description
                        "Outer VLAN ID.";
                    }
                  }  // list static-dot1q-router-port
                }  // container static-dot1q-router-ports
    
                container static-qinq-router-ports {
                  when
                    "/mc:multicast/ims:igmp-snooping/ims:global-enable or /ni:network-instance/ni:instances/ni:instance/igmp-mld:igmp/igmp-mld:interfaces/igmp-mld:interface[igmp-mld:enable='true'][igmp-mld:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:type='Vbdif'][ifm:number=string(current()/../../bd:id)]/ifm:name]";
                  description
                    "List of static router port configuration of sub-interfaces.";
                  list static-qinq-router-port {
                    must
                      "not(../../../nvo3:nvo3/nvo3:vni-list)";
                    key "interface pe-vid ce-vid";
                    description
                      "Configure static qinq router port configuration of sub-interfaces.";
                    leaf interface {
                      type leafref {
                        path "../../../../bd:service-points/bd:service-point/bd:interface-name";
                      }
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:qinqs/ethernet:qinq-vids";
                      description
                        "Interface name.";
                    }
    
                    leaf pe-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      must
                        "not(../../../global/designated-vlan)";
                      description
                        "Outer VLAN ID.";
                    }
    
                    leaf ce-vid {
                      type uint32 {
                        range "1..4094";
                      }
                      description
                        "Inner VLAN ID.";
                    }
                  }  // list static-qinq-router-port
                }  // container static-qinq-router-ports
    
                container ssm-mapping-groups {
                  when
                    "/mc:multicast/ims:igmp-snooping/ims:global-enable";
                  description
                    "List of SSM mapping configuration of a BD.";
                  list ssm-mapping-group {
                    must
                      "not(../../../nvo3:nvo3/nvo3:vni-list)";
                    must
                      "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../bd:service-points/bd:service-point/bd:interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:default)";
                    must
                      "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../bd:service-points/bd:service-point/bd:interface-name][ifm:type='Global-VE'])";
                    must
                      "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../bd:service-points/bd:service-point/bd:interface-name][ifm:type='Virtual-Ethernet'])";
                    key "group-address mask-length source-address";
                    max-elements 128;
                    description
                      "Configure SSM mapping configuration of a BD.";
                    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
                        "Address of a multicast group.";
                    }
    
                    leaf mask-length {
                      type uint32 {
                        range "4..32";
                      }
                      description
                        "Mask length of a group address.";
                    }
    
                    leaf source-address {
                      type inet:ipv4-address-no-zone {
                        pattern
                          '([1-9]|[1-9]\d|1[0-1]\d|12[0-68-9]|1[3-9]\d|2[0-1]\d|22[0-3])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                      }
                      description
                        "Multicast source IPv4 address.";
                    }
                  }  // list ssm-mapping-group
                }  // container ssm-mapping-groups
    
                container group-ports {
                  config false;
                  description
                    "List of layer 2 multicast port information.";
                  list group-port {
                    key "group-address source-address";
                    description
                      "Layer 2 multicast port state.";
                    leaf group-address {
                      type inet:ip-address-no-zone;
                      description
                        "Address of a multicast group. In IPv4, the value ranges from 224.0.1.0 to 239.255.255.255, in dotted decimal notation.";
                    }
    
                    leaf source-address {
                      type inet:ip-address-no-zone;
                      description
                        "Multicast source address.";
                    }
    
                    leaf source-up-time {
                      type pub-type:time-tick;
                      description
                        "Time since a multicast source was discovered.";
                    }
    
                    leaf group-up-time {
                      type pub-type:time-tick;
                      description
                        "Time since a multicast group was discovered.";
                    }
    
                    leaf entry-flag {
                      type entry-flag-type;
                      description "Entity flag.";
                    }
    
                    leaf source-flag {
                      type source-flag-type;
                      description "Source flag.";
                    }
    
                    container ports {
                      description
                        "List of port state.";
                      list port {
                        key "interface";
                        description
                          "Port state.";
                        leaf interface {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          description
                            "Interface name.";
                        }
    
                        leaf up-time {
                          type pub-type:time-tick;
                          description
                            "Time since a router port was discovered.";
                        }
    
                        leaf expire-time {
                          type pub-type:time-tick {
                          }
                          description
                            "Time after which a port will be deleted from the router port record table.";
                        }
    
                        leaf port-flag {
                          type string {
                            length "0..50";
                          }
                          description
                            "Port flag. S: static; D: dynamic; M: SSM-mapping.";
                        }
    
                        leaf esi {
                          type l2mc-esi;
                          description
                            "Ethernet Segment Identifier.";
                        }
    
                        leaf df-status {
                          type df-status-type;
                          description
                            "One of the PEs may be either DF or non-DF In a redundancy mode.";
                        }
    
                        leaf remote-flag {
                          type remote-flag-type;
                          description
                            "The source of the port information. Remote: passed from other devices; local: locally generated; local remote: both.";
                        }
                      }  // list port
                    }  // container ports
                  }  // list group-port
                }  // container group-ports
              }  // container igmp-snooping
    
              container dhcp-bd {
                description
                  "Configure DHCP attributes in BDs.";
                container option82-insert-setting {
                  description
                    "Configure all interfaces in a BD to insert or forcibly insert DHCP option82 to DHCP packets.";
                  choice option82-insert-format {
                    description
                      "Specify DHCP option82 insertion format.";
                    case insert-format {
                      description
                        "Configure all interfaces in a BD to insert DHCP option82 to DHCP packets.";
                      leaf insert {
                        type empty;
                        description
                          "Configure all interfaces in a BD to insert DHCP option82 to DHCP packets.";
                      }
                    }  // case insert-format
    
                    case rebuild-format {
                      description
                        "Configure all interfaces in a BD to forcibly insert DHCP option82 to DHCP packets.";
                      leaf rebuild {
                        type empty;
                        description
                          "Configure all interfaces in a BD to forcibly insert DHCP option82 to DHCP packets.";
                      }
                    }  // case rebuild-format
                  }  // choice option82-insert-format
                }  // container option82-insert-setting
              }  // container dhcp-bd
    
              container dhcp-snooping-bd {
                description
                  "Configure information of DHCP snooping on a bridge-domain.";
                container basic-attribute {
                  when
                    "/dhcp:dhcp/dhcp:snooping/dhcp:global/dhcp:enable='true'";
                  description
                    "Configure basic attributes of DHCP snooping on bridge-domain.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable DHCP snooping in a BD. DHCP snooping cannot be enabled on both a VLANIF interface and a VLAN, DHCP snooping cannot be enabled both on a VBDIF interface and in a BD, DHCP snooping cannot be enabled on both a VBDIF interface and a Layer 2 sub-interface.";
                  }
    
                  leaf trust-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable trusted informations on a BD.";
                  }
    
                  leaf nni-trust-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable trusted network node interface.";
                  }
    
                  leaf check-arp-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable ARP check.";
                  }
    
                  leaf alarm-arp-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the ARP alarm function.";
                  }
    
                  leaf alarm-arp-threshold {
                    type uint32 {
                      range "1..1000";
                    }
                    description
                      "ARP alarm threshold.";
                  }
    
                  leaf check-ip-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable IP check.";
                  }
    
                  leaf alarm-ip-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the IP alarm function.";
                  }
    
                  leaf alarm-ip-threshold {
                    type uint32 {
                      range "1..1000";
                    }
                    description
                      "IP alarm threshold.";
                  }
    
                  leaf alarm-reply-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable alarm of dropping untrusted packet.";
                  }
    
                  leaf alarm-reply-threshold {
                    type uint32 {
                      range "1..1000";
                    }
                    description
                      "Threshold of dropping untrusted packet alarm.";
                  }
    
                  leaf check-mac-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable MAC check.";
                  }
    
                  leaf alarm-mac-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable consistency check alarm on MAC addresses.";
                  }
    
                  leaf alarm-mac-threshold {
                    type uint32 {
                      range "1..1000";
                    }
                    description
                      "Consistency check alarm threshold on MAC addresses.";
                  }
    
                  leaf check-request-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the user binding table check.";
                  }
    
                  leaf alarm-request-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the user binding table alarm function.";
                  }
    
                  leaf alarm-request-threshold {
                    type uint32 {
                      range "1..1000";
                    }
                    description
                      "User bind table alarm threshold.";
                  }
    
                  leaf max-user-number {
                    type uint32 {
                      range "1..16384";
                    }
                    description
                      "Maximum number of DHCP snooping users in a BD.";
                  }
    
                  leaf alarm-user-limit-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the user limit alarm.";
                  }
    
                  leaf alarm-user-limit-threshold {
                    type uint32 {
                      range "1..100";
                    }
                    default "100";
                    description
                      "User limit alarm threshold.";
                  }
                }  // container basic-attribute
    
                container static-binds {
                  description
                    "List of static binding tables on BDs.";
                  list static-bind {
                    must
                      "(ce-vlan!=0 and pe-vlan!=0) or (ce-vlan=0)";
                    key "ip-address pe-vlan ce-vlan";
                    description
                      "Configure a static binding table of a BD.";
                    leaf ip-address {
                      type inet:ipv4-address-no-zone;
                      description "IP address.";
                    }
    
                    leaf pe-vlan {
                      type uint16 {
                        range "0..4094";
                      }
                      description
                        "PE VLAN ID, 0 means NULL.";
                    }
    
                    leaf ce-vlan {
                      type uint16 {
                        range "0..4094";
                      }
                      description
                        "CE VLAN ID, 0 means NULL.";
                    }
    
                    leaf mac-address {
                      type pub-type:mac-address {
                        length "0..255";
                        pattern
                          '([0-9a-f][0|2|4|6|8|a|c|e][0-9a-f]{2}(-[0-9a-f]{4}){2})';
                      }
                      description "MAC address.";
                    }
                  }  // list static-bind
                }  // container static-binds
              }  // container dhcp-snooping-bd
    
              container arp-list {
                description
                  "Configure ARP bridge domain.";
                leaf l2proxy-enable {
                  type boolean;
                  must
                    "not(../../bd:mac-learn-style = 'qualify' and ../l2proxy-enable = 'true')";
                  default "false";
                  description
                    "Enable/disable L2 proxy. It's mutually exclusive with the configuration of generating redirect ARP under the corresponding VBD interface.";
                }
    
                choice broadcast-suppress {
                  description
                    "ARP broadcast suppress function.";
                  case enable {
                    description
                      "ARP broadcast suppress.";
                    leaf broadcast-suppress-enable {
                      type empty;
                      description
                        "Enable/disable ARP broadcast suppress.";
                    }
                  }  // case enable
    
                  case mismatch-discard-enable {
                    description
                      "ARP broadcast suppress mismatch discard.";
                    leaf broadcast-suppress-discard {
                      type empty;
                      description
                        "Enable/disable ARP broadcast suppress mismatch discard.";
                    }
                  }  // case mismatch-discard-enable
                }  // choice broadcast-suppress
    
                leaf l2proxy-gw-enable {
                  when
                    "../broadcast-suppress-enable or ../broadcast-suppress-discard";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable L2 proxy gateway mac.";
                }
              }  // container arp-list
    
              container qos {
                description
                  "Configure QoS application.";
                container domain-service-classs {
                  description
                    "Configure forced traffic classification.";
                  container domain-service-class {
                    presence
                      "create domain-service-classs";
                    description
                      "Enable/disable forced traffic classification.";
                    leaf service-class {
                      type qos:qos-service-class;
                      mandatory true;
                      description
                        "Class of service.";
                    }
                  }  // container domain-service-class
                }  // container domain-service-classs
    
                container domain-policy-applys {
                  description
                    "List of traffic policy applications.";
                  list domain-policy-apply {
                    key "direction policy-name layer";
                    unique "direction";
                    max-elements 2;
                    description
                      "Configure application of a traffic policy.";
                    leaf direction {
                      type qos:qos-direction-type;
                      description "Direction.";
                    }
    
                    leaf policy-name {
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:traffic-policys/qos:traffic-policy/qos:name";
                      }
                      description "Policy name.";
                    }
    
                    leaf layer {
                      type qos-policy-apply-layer;
                      description
                        "Classification based on layer 2 or layer 3 information.";
                    }
                  }  // list domain-policy-apply
                }  // container domain-policy-applys
    
                container trusts {
                  description
                    "List of trust diffserv domain or 8021p.";
                  list trust {
                    key "trust-type direction";
                    description
                      "Configure trust diffserv domain or 8021p list.";
                    leaf trust-type {
                      type qos:trust-type;
                      description
                        "To select trusting DS domain, 8021p or all.";
                    }
    
                    leaf direction {
                      type qos:trust-direction-type;
                      description "Direction.";
                    }
    
                    leaf diffserv-domain-name {
                      when
                        "../trust-type='ip-dscp'";
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:diffserv-domains/qos:diffserv-domain/qos:name";
                      }
                      mandatory true;
                      description
                        "Name of a ds domain.";
                    }
                  }  // list trust
                }  // container trusts
    
                container phb-vxlans {
                  description
                    "Configure the PHB operation.";
                  container phb-vxlan {
                    presence "create phb-vxlan ";
                    description
                      "Enable/disable PHB operation.";
                    leaf operate-type {
                      type vxlan-operate-type;
                      mandatory true;
                      description
                        "To select enable or disable phb.";
                    }
    
                    leaf diffserv-domain-name {
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:diffserv-domains/qos:diffserv-domain/qos:name";
                      }
                      description
                        "Name of a DS domain.";
                    }
                  }  // container phb-vxlan
                }  // container phb-vxlans
    
                container phbs {
                  description
                    "List of the PHB operation.";
                  list phb {
                    must
                      "(./map-type='none' and not (../phb[map-type!='none'])) or (./map-type!='none' and not (../phb[map-type='none']))";
                    must
                      "(./operate-type='enable' and not (../phb[operate-type!='enable'])) or (./operate-type!='enable' and not (../phb[operate-type='enable']))";
                    must
                      "(./operate-type!='enable') or (./operate-type='enable' and ./map-type='none')";
                    key "operate-type map-type";
                    description
                      "Configure PHB operation.";
                    leaf operate-type {
                      type operate-type;
                      description
                        "To select enable or disable phb.";
                    }
    
                    leaf map-type {
                      type qos:map-type;
                      description
                        "To select disable type.";
                    }
    
                    leaf diffserv-domain-name {
                      when
                        "not(../operate-type='disable')";
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:diffserv-domains/qos:diffserv-domain/qos:name";
                      }
                      description
                        "Name of a DS domain.";
                    }
                  }  // list phb
                }  // container phbs
    
                container car-vxlan-modes {
                  description
                    "List of the car operation.";
                  list car-vxlan-mode {
                    must
                      "((./exclude-mode='no-exclude' and not (../car-vxlan-mode[exclude-mode='exclude'])) or (./exclude-mode!='no-exclude' and not(../car-vxlan-mode[exclude-mode='no-exclude'])))";
                    key "slot";
                    description
                      "Configure CAR operation.";
                    leaf slot {
                      type string {
                        length "1..32";
                      }
                      description
                        "Car disable slot.";
                    }
    
                    leaf exclude-mode {
                      ext:operation-exclude "update" {
                        description "After the configuration is created, the node cannot be modified.";
                      }
                      type qos:exclude-type;
                      mandatory true;
                      description
                        "Exclude Mode.";
                    }
                  }  // list car-vxlan-mode
                }  // container car-vxlan-modes
    
                container vxlan-mode-policy-applys {
                  description
                    "List of traffic policy application.";
                  list vxlan-mode-policy-apply {
                    key "direction";
                    description
                      "Configure the application of a traffic policy.";
                    leaf direction {
                      type qos:qos-direction-type;
                      description "Direction.";
                    }
    
                    leaf policy-name {
                      ext:operation-exclude "update" {
                        description "After the configuration is created, the node cannot be modified.";
                      }
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:traffic-policys/qos:traffic-policy/qos:name";
                      }
                      mandatory true;
                      description "Policy name.";
                    }
    
                    leaf layer {
                      ext:operation-exclude "create|delete" {
                        description "The node cannot be created or deleted.";
                      }
                      when
                        "../direction='inbound'";
                      type qos:policy-apply-vxlan-layer-type;
                      description
                        "Classification based on Layer 2 or Layer 3 information.";
                    }
                  }  // list vxlan-mode-policy-apply
                }  // container vxlan-mode-policy-applys
    
                container vxlan-mode-trusts {
                  description
                    "List of trust diffserv domain or 8021p.";
                  list vxlan-mode-trust {
                    key "trust-type";
                    description
                      "Configure trust diffserv domain or 8021p.";
                    leaf trust-type {
                      type qos:vxlan-trust-type;
                      description
                        "To select trusting diffserv domain, 8021p.";
                    }
    
                    leaf ds-name {
                      when
                        "../trust-type='upstream'";
                      type leafref {
                        path "/qos:qos/qos:classifier-template/qos:diffserv-domains/qos:diffserv-domain/qos:name";
                      }
                      mandatory true;
                      description
                        "Name of a DS domain.";
                    }
                  }  // list vxlan-mode-trust
                }  // container vxlan-mode-trusts
              }  // container qos
    
              container mirror {
                description "Configure mirror.";
                container bd-port-mirrors {
                  description
                    "List of BD port mirror.";
                  list bd-port-mirror {
                    key "direction";
                    description
                      "Configure BD port mirror.";
                    leaf direction {
                      type direction-type;
                      description "Direction.";
                    }
    
                    leaf instance-name {
                      type leafref {
                        path "/mirror:mirror/mirror:instances/mirror:instance/mirror:instance-name";
                      }
                      mandatory true;
                      description
                        "Mirror instance name.";
                    }
    
                    leaf group-name {
                      type string {
                        length "1..31";
                      }
                      description "Group name.";
                    }
                  }  // list bd-port-mirror
                }  // container bd-port-mirrors
              }  // container mirror
    
              container mac-flapping {
                description
                  "Configure MAC flapping.";
                container loop-detect {
                  presence
                    "Loop detect configuration.";
                  description
                    "Configure BD MAC flapping entry.";
                  leaf loop-times {
                    type uint32 {
                      range "3..1000";
                    }
                    mandatory true;
                    description
                      "Number of MAC address flappings.";
                  }
    
                  leaf detect-cycle {
                    type uint32 {
                      range "3..30";
                    }
                    units "s";
                    mandatory true;
                    description
                      "Detection cycle.";
                  }
    
                  leaf cycles {
                    type uint32 {
                      range "1..15";
                    }
                    mandatory true;
                    description
                      "Number of cycles.";
                  }
    
                  leaf action {
                    type alarm-enable;
                    mandatory true;
                    description
                      "Action taken after a loop occurs. The action can be reporting an alarm or blocking an interface.";
                  }
    
                  leaf retry-times {
                    when "../action='block'";
                    type uint32 {
                      range "0..5";
                    }
                    must
                      "(../retry-times and ../block-time) or (not(../retry-times) and not(../block-time))";
                    description "Retry times.";
                  }
    
                  leaf block-time {
                    when "../action='block'";
                    type uint32 {
                      range "10..65535";
                    }
                    units "s";
                    must
                      "(../retry-times and ../block-time) or (not(../retry-times) and not(../block-time))";
                    description "Blocking time.";
                  }
                }  // container loop-detect
    
                container precise-block {
                  presence "precise-block";
                  description
                    "Configure precise blocking policy table.";
                }  // container precise-block
              }  // container mac-flapping
    
              container mac-addresss {
                description
                  "List of BD forwarding entries.";
                list mac-address {
                  must
                    "../../bd:mac-learn-style='unqualify'";
                  key "address";
                  description
                    "Configure BD forwarding entry.";
                  leaf address {
                    type pub-type:mac-address {
                      pattern
                        '[0-9a-f][0|2|4|6|8|a|c|e][0-9a-f]{2}(-[0-9a-f]{4}){2}';
                    }
                    description
                      "MAC address. Only support unicast MAC address.";
                  }
    
                  choice mac-type {
                    mandatory true;
                    description
                      "MAC type, black hole or static.";
                    case black-hole {
                      description
                        "Blackhole type.";
                      leaf black-hole {
                        type empty;
                        mandatory true;
                        description
                          "Blackhole type.";
                      }
                    }  // case black-hole
    
                    case static {
                      description "Static type.";
                      choice out-interface-type {
                        mandatory true;
                        description
                          "Outbound type.";
                        case ac {
                          description "AC type.";
                          leaf out-interface-name {
                            type leafref {
                              path "/bd:bd/bd:instances/bd:instance/bd:service-points/bd:service-point/bd:interface-name";
                            }
                            must
                              "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:untag or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:default or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:dot1q/ethernet:vlans/ethernet:vlan-list or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:dot1q/ethernet:policy-vlans/ethernet:policy-vlan or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:qinqs/ethernet:qinq-vids/ethernet:qinq-vid or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:qinqs/ethernet:qinq-vid-ce-default/ethernet:pe-vlan-list";
                            mandatory true;
                            description
                              "Outbound interface name.";
                          }
    
                          leaf untag {
                            when
                              "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../out-interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:untag";
                            type empty;
                            mandatory true;
                            description
                              "Packets without VLAN tag.";
                          }
    
                          leaf pe-default {
                            when
                              "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../out-interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:default";
                            type empty;
                            mandatory true;
                            description
                              "PE default VLAN.";
                          }
    
                          leaf vid {
                            when
                              "(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../out-interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:dot1q or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../out-interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:qinqs)";
                            type uint16 {
                              range "1..4094";
                            }
                            mandatory true;
                            description
                              "Outer VLAN tag.";
                          }
    
                          leaf ce-default {
                            when
                              "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../out-interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:qinqs/ethernet:qinq-vid-ce-default/ethernet:pe-vlan-list";
                            type empty;
                            mandatory true;
                            description
                              "CE default VLAN.";
                          }
    
                          leaf ce-vid {
                            when
                              "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../out-interface-name]/ethernet:ethernet/ethernet:l2-sub-interface/ethernet:qinqs/ethernet:qinq-vids/ethernet:qinq-vid[ethernet:pe-vlan-id=current()/../vid]/ethernet:ce-vlan-list";
                            type uint16 {
                              range "1..4094";
                            }
                            mandatory true;
                            description
                              "Inner VLAN tag.";
                          }
                        }  // case ac
    
                        case tunnel {
                          description
                            "Tunnel type.";
                          leaf source-ip {
                            type inet:ipv4-address-no-zone;
                            mandatory true;
                            description
                              "Source IP address.";
                          }
    
                          leaf peer-ip {
                            type inet:ipv4-address-no-zone;
                            mandatory true;
                            description
                              "Peer IP address.";
                          }
    
                          leaf vni {
                            type uint32 {
                              range
                                "1..16777215";
                            }
                            mandatory true;
                            description
                              "VXLAN network identifier.";
                          }
                        }  // case tunnel
                      }  // choice out-interface-type
                    }  // case static
                  }  // choice mac-type
                }  // list mac-address
              }  // container mac-addresss
    
              container mac-limit {
                presence "BD MAC address limit.";
                description
                  "Configure BD MAC address limit.";
                leaf maximum {
                  type uint32 {
                    range "0..2048000";
                  }
                  must
                    "not(../rate=0) or (../maximum>0)";
                  mandatory true;
                  description
                    "Maximum number of MAC addresses that can be learned. The value 0 means unlimited.";
                }
    
                leaf rate {
                  type uint16 {
                    range "0..1000";
                  }
                  units "ms";
                  must
                    "not(../maximum=0) or (../rate>0)";
                  default "0";
                  description
                    "Interval at which MAC addresses are learned. The value 0 indicates that no rate limit is set.";
                }
    
                leaf action {
                  type mac-limit-forward;
                  default "discard";
                  description
                    "Discard or forward after the number of learned MAC addresses reaches the maximum number.";
                }
    
                leaf up-threshold {
                  when "../maximum>0";
                  type uint8 {
                    range "1..100";
                  }
                  must
                    "(not(../up-threshold) and not(../down-threshold)) or ((../up-threshold and ../down-threshold) and (../up-threshold>=../down-threshold))";
                  description
                    "Upper limit for the number of MAC addresses.";
                }
    
                leaf down-threshold {
                  when "../maximum>0";
                  type uint8 {
                    range "1..100";
                  }
                  must
                    "(not(../up-threshold) and not(../down-threshold)) or ((../up-threshold and ../down-threshold) and (../up-threshold>=../down-threshold))";
                  description
                    "Lower limit for the number of MAC addresses.";
                }
              }  // container mac-limit
    
              container sticky-mac {
                description
                  "Configure sticky MAC in BD.";
                leaf enable {
                  type boolean;
                  must
                    "(../enable = 'false' or ((../enable = 'true') and not(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpls/l2vpn:bds/l2vpn:bd[l2vpn:id=current()/../../bd:id])))";
                  default "false";
                  description
                    "Enable/disable sticky MAC.";
                }
    
                leaf source-mac-check {
                  type boolean;
                  must
                    "(../source-mac-check = 'false' or ((../source-mac-check = 'true') and (../../bd:mac-learning = 'enable') and not(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpls/l2vpn:bds/l2vpn:bd[l2vpn:id=current()/../../bd:id])))";
                  default "false";
                  description
                    "Enable/disable source MAC check.";
                }
    
                leaf-list whitelist {
                  type pub-type:mac-address {
                    pattern
                      '[0-9a-f][0|2|4|6|8|a|c|e][0-9a-f]{2}(-[0-9a-f]{4}){2}';
                  }
                  must
                    "../../bd:mac-learn-style!='qualify'";
                  description
                    "Configure sticky MAC whitelist in BD. Multicast and broadcast addresses are not supported.";
                }
              }  // container sticky-mac
    
              container mac-hops {
                config false;
                description
                  "List of the bridge domain MAC hop info.";
                list mac-hop {
                  key "mac-address interface-name peer-ip";
                  config false;
                  description
                    "Operational data of the bridge domain MAC hop info.";
                  leaf mac-address {
                    type pub-type:mac-address {
                      length "0..255";
                    }
                    config false;
                    description "MAC address.";
                  }
    
                  leaf interface-name {
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    config false;
                    description
                      "Interface name.";
                  }
    
                  leaf peer-ip {
                    type inet:ipv4-address-no-zone;
                    config false;
                    description
                      "Remote peer IP information.";
                  }
    
                  leaf detect-time {
                    type string {
                      length "1..20";
                    }
                    config false;
                    description "Detect time.";
                  }
                }  // list mac-hop
              }  // container mac-hops
            }  // list instance
          }  // container instances
        }  // container bd
      }  // module huawei-bd
    

© 2023 YumaWorks, Inc. All rights reserved.