Definition of bridge domain in the EVC model.
Version: 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.