Model for Bit Index Explicit Replication (BIER).
Version: 2021-07-29
module huawei-bier { yang-version 1; namespace "urn:huawei:yang:huawei-bier"; prefix bier; import ietf-inet-types { prefix inet; } import huawei-extension { prefix ext; } import huawei-pub-type { prefix pub-type; } import huawei-ifm { prefix ifm; } import huawei-ip { prefix ip; } import huawei-if-ip { prefix if-ip; } import huawei-srv6 { prefix srv6; } import huawei-network-instance { prefix ni; } 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 "Model for Bit Index Explicit Replication (BIER)."; revision "2021-07-29" { description "Modify prefixs container to bier-prefixs."; reference "Huawei private."; } revision "2020-12-16" { description "Add BIER IPv6 models."; reference "Huawei private."; } revision "2020-02-21" { description "Modify prefixs container to bier; Modify description."; reference "Huawei private."; } revision "2019-09-06" { description "Init revision."; reference "Huawei private."; } ext:task-name "bier"; typedef underlay-protocol-type { type enumeration { enum "isis" { value 2; description "IS-IS."; } enum "static-bift" { value 3; description "Static BIFT."; } } description "BIER underlay protocol type."; } typedef bit-string-length { type enumeration { enum "64-bit" { value 1; description "64-bit BitString."; } enum "128-bit" { value 2; description "128-bit BitString."; } enum "256-bit" { value 3; description "256-bit BitString."; } } description "Enumerated values of the BitString length."; } typedef igp-algorithm-type { type enumeration { enum "SPF" { value 0; description "Shortest Path First (SPF) algorithm based on link metric."; } enum "SSPF" { value 1; description "Strict Shortest Path First (SPF) algorithm based on link metric."; } } description "IGP algorithm type."; } typedef bier-algorithm-type { type enumeration { enum "no-specific" { value 0; description "No BIER-specific algorithm is used."; } } description "BIER algorithm type."; } typedef bier-encapsulation-type { type enumeration { enum "mpls" { value 1; description "MPLS encapsulation for BIER."; } enum "ipv6" { value 2; description "IPv6 encapsulation for BIER."; } } description "Encapsulation types for BIER."; } typedef address-family-type { type enumeration { enum "ipv4-unicast" { value 1; description "IPv4 address family."; } enum "ipv6-unicast" { value 2; description "IPv6 address family."; } } description "Address family."; } typedef birt-nexthop-invalid-type { type enumeration { enum "none" { value 0; description "Valid nexthop."; } enum "missing-neighbor" { value 1; description "Invalid sub-domain configuration."; } enum "lack-label" { value 2; description "The packet encapsulation configuration of the next-hop device does not support the BFR-ID of the target device."; } enum "exceed-load-balance-number" { value 3; description "The value is larger than the maximum number of load balancing paths."; } enum "invalid-nexthop-type" { value 4; description "The next hop type is invalid."; } enum "miss-end-bier" { value 5; description "The next-hop device is not configured with an End.BIER address."; } enum "miss-bsl" { value 6; description "The BSL is not configured for the next hop device."; } } description "Reason for the invalid nexthop."; } typedef end-bier-address-type { type enumeration { enum "srv6-locator" { value 1; description "End-bier addresses using SRv6 locator."; } } description "The end-bier addresses type."; } container bier { presence "BIER enable."; description "BIER configuration."; container sub-domains { description "List of BIER sub-domain."; list sub-domain { must "not(./bfr-id) or (not(./encapsulations/encapsulation[bsl='64-bit'][encapsulation-type='mpls']/max-si) or (./bfr-id <= (./encapsulations/encapsulation[bsl='64-bit'][encapsulation-type='mpls']/max-si + 1) * 64))"; must "not(./bfr-id) or (not(./encapsulations/encapsulation[bsl='128-bit'][encapsulation-type='mpls']/max-si) or (./bfr-id <= (./encapsulations/encapsulation[bsl='128-bit'][encapsulation-type='mpls']/max-si + 1) * 128))"; must "not(./bfr-id) or (not(./encapsulations/encapsulation[bsl='256-bit'][encapsulation-type='mpls']/max-si) or (./bfr-id <= (./encapsulations/encapsulation[bsl='256-bit'][encapsulation-type='mpls']/max-si + 1) * 256))"; key "address-family sub-domain-id"; description "Configure BIER sub-domain."; leaf address-family { type address-family-type; description "IPv4 or IPv6 address family."; } leaf sub-domain-id { type uint16 { range "0..255"; } description "BIER sub-domain ID."; } leaf bfr-prefix-interface { type leafref { path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name"; } must "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:type='LoopBack' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name='_public_'"; description "BFR prefix interface."; } leaf ipv6-specified-address { when "../bfr-prefix-interface and ../address-family='ipv6-unicast'"; type inet:ipv6-address-no-zone; must "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:vrf-name='_public_'][current()/../bfr-prefix-interface=ifm:name]/ip:ipv6/ip:addresses/ip:address[ip:ip=current()]/ip:type='global' or /ni:network-instance/ni:instances/ni:instance[ni:name='_public_']/if-ip:ipv6-ifs/if-ip:ipv6-if[current()/../bfr-prefix-interface=if-ip:name]/if-ip:addresses/if-ip:address[if-ip:ip=current()]/if-ip:type='global'"; must "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:vrf-name='_public_'][current()/../bfr-prefix-interface=ifm:name]/ip:ipv6/ip:addresses/ip:address[ip:ip=current()]/ip:prefix-length=128 or /ni:network-instance/ni:instances/ni:instance[ni:name='_public_']/if-ip:ipv6-ifs/if-ip:ipv6-if[current()/../bfr-prefix-interface=if-ip:name]/if-ip:addresses/if-ip:address[if-ip:ip=current()]/if-ip:prefix-length=128"; description "Specified IPv6 BFR prefix."; } choice end-bier-address { description "The end-bier address of BIER IPv6 for current SD."; case srv6-locator { description "Srv6 locator."; container srv6-locator { when "../address-family='ipv6-unicast'"; description "Configure Srv6 locator."; leaf locator { type leafref { path "/ni:network-instance/ni:instances/ni:instance/srv6:srv6/srv6:locators/srv6:locator/srv6:name"; } mandatory true; description "SRv6 locator."; } leaf auto-sid { type boolean; must "../auto-sid='false'"; default "false"; description "Enable/disable Auto sid."; } leaf sid { type inet:ipv6-address-no-zone; mandatory true; description "End-bier-sid for SD."; } } // container srv6-locator } // case srv6-locator } // choice end-bier-address leaf underlay-protocol { type underlay-protocol-type; must "(../underlay-protocol='isis') or (../address-family='ipv6-unicast' and ../underlay-protocol='static-bift')"; description "BIER underlay protocol."; } leaf bfr-id { type uint16 { range "1..65535"; } description "BFR-ID."; } leaf load-balance-num { type uint8 { range "1..16"; } default "1"; description "Maximum number of paths for multicast load balancing."; } leaf mt-id { type uint16; config false; description "Multi-topology type identifier."; } leaf igp-algorithm { type igp-algorithm-type; config false; description "IGP algorithm type."; } leaf bier-algorithm { type bier-algorithm-type; config false; description "BIER algorithm type."; } container encapsulations { description "List of BIER encapsulation."; list encapsulation { key "bsl encapsulation-type"; description "Configure BIER encapsulation."; leaf bsl { type bit-string-length; description "BIER BitString length, which is 64/128/256 bits. Multiple devices in a subdomain must have the same BSL."; } leaf encapsulation-type { type bier-encapsulation-type; must "(../../../address-family='ipv4-unicast' and ../encapsulation-type='mpls') or (../../../address-family='ipv6-unicast' and ../encapsulation-type='ipv6')"; description "BIER encapsulation type configuration."; } leaf max-si { type uint16 { range "0..255"; } mandatory true; description "Maximum set identifier."; } leaf bift-id { type uint32 { range "0..4294967295"; } config false; description "BIFT ID base."; } } // list encapsulation } // container encapsulations container static-bifts { when "../address-family='ipv6-unicast'"; description "List of BIER static BIFTs."; list static-bift { must "../../underlay-protocol='static-bift'"; must "not(../bier:static-bift[bier:end-bier!=current()/bier:end-bier][bier:bfr-id-start>=current()/bier:bfr-id-start][bier:bfr-id-start<=current()/bier:bfr-id-end])"; must "not(../bier:static-bift[bier:end-bier=current()/bier:end-bier][bier:bfr-id-start!=current()/bier:bfr-id-start][bier:bfr-id-start>=current()/bier:bfr-id-start]/bier:bfr-id-start<=current()/bier:bfr-id-end)"; must "bier:bfr-id-end>=bier:bfr-id-start"; must "bier:bfr-id-end<=bier:bfr-id-start+255"; must "bier:end-bier!=../../bier:srv6-locator/bier:sid"; must "not(bier:bfr-id-start<=../../bfr-id and bier:bfr-id-end>=../../bfr-id)"; must "not(../../bier:encapsulations/bier:encapsulation[bier:bsl='64-bit'][(bier:max-si+1)*64<current()/bier:bfr-id-end])"; must "not(../../bier:encapsulations/bier:encapsulation[bier:bsl='128-bit'][(bier:max-si+1)*128<current()/bier:bfr-id-end])"; must "not(../../bier:encapsulations/bier:encapsulation[bier:bsl='256-bit'][(bier:max-si+1)*256<current()/bier:bfr-id-end])"; key "end-bier bfr-id-start bfr-id-end"; description "Configure BIER static BIFT."; leaf end-bier { type inet:ipv6-address-no-zone; description "End BIER address of neighbor, must a valid unicast IPv6 address."; } leaf bfr-id-start { type uint16 { range "1..65535"; } description "BFR-ID as start of range."; } leaf bfr-id-end { type uint16 { range "1..65535"; } description "BFR-ID as end of range."; } } // list static-bift } // container static-bifts container local-infos { config false; description "BIER sub-domain state."; leaf igp-process-id { type uint32; description "Process ID of the underlay routing protocol."; } leaf igp-sub-process-id { type uint32; description "Sub-process ID of the underlay routing protocol."; } leaf bfr-prefix { type inet:ip-address-no-zone; description "BFR prefix address."; } leaf bfr-prefix-mask-len { type uint8 { range "0..128"; } description "BFR prefix address mask length."; } leaf end-bier-sid { type inet:ipv6-address-no-zone; description "End-bier-sid of the SD."; } } // container local-infos container routings { config false; description "List of BIER routing state."; list routing { key "bsl destination-prefix"; description "BIER routing state."; leaf bsl { type bit-string-length; description "BIER BitString length, which is 64/128/256 bits."; } leaf destination-prefix { type inet:ip-address-no-zone; description "Destination prefix."; } leaf underlay-protocol { type underlay-protocol-type; description "Underlay IGP used by BIER."; } choice prefix-igp-attribute { description "IGP attributes."; case ospf-protocol { description "OSPF."; leaf router-id { type inet:ip-address-no-zone; description "OSPF router ID."; } } // case ospf-protocol case isis-protocol { description "IS-IS."; leaf system-id { type string { length "1..16"; } description "IS-IS system ID."; } } // case isis-protocol case local-system { description "Local system."; leaf is-local-system { type boolean; description "Prefix is advertised by local system."; } } // case local-system } // choice prefix-igp-attribute leaf bfr-id { type uint16 { range "1..65535"; } description "BFR-ID."; } leaf up-time { type pub-type:time-tick; description "Prefix survival time."; } container nexthops { description "List of next-hop state."; list nexthop { key "next-hop-addr next-hop-outbound-if"; description "Next-hop state."; leaf next-hop-addr { type inet:ip-address-no-zone; description "Next-hop prefix address."; } leaf next-hop-outbound-if { type pub-type:if-name; description "Next-hop outbound interface."; } leaf bfr-neighbor { type inet:ip-address-no-zone; description "BIER neighbor."; } leaf underlay-protocol { type underlay-protocol-type; description "Underlay IGP used by BIER."; } choice igp-attribute { description "IGP attributes."; case ospf-protocol { description "OSPF."; leaf router-id { type inet:ip-address-no-zone; description "OSPF router ID."; } } // case ospf-protocol case isis-protocol { description "IS-IS."; leaf system-id { type string { length "1..16"; } description "IS-IS system ID."; } } // case isis-protocol case local-system { description "Local system."; leaf is-local-system { type boolean; description "Prefix is advertised by local system."; } } // case local-system } // choice igp-attribute leaf up-time { type pub-type:time-tick; description "Neighbor relationship establishment time."; } leaf bift-id { type uint32 { range "0..4294967295"; } description "The BIFT-ID assigned by this nexthop node."; } leaf direct-flag { type boolean; description "The nexthop is directly conected."; } } // list nexthop } // container nexthops container invalid-nexthops { description "List of Next-hop state."; list invalid-nexthop { key "next-hop-addr next-hop-outbound-if"; description "Next-hop state."; leaf next-hop-addr { type inet:ip-address-no-zone; description "Next-hop prefix address."; } leaf next-hop-outbound-if { type pub-type:if-name; description "Next-hop outbound interface."; } leaf bfr-neighbor { type inet:ip-address-no-zone; description "BIER neighbor."; } leaf underlay-protocol { type underlay-protocol-type; description "Underlay IGP used by BIER."; } choice igp-attribute { description "IGP attributes."; case ospf-protocol { description "OSPF."; leaf router-id { type inet:ip-address-no-zone; description "OSPF router ID."; } } // case ospf-protocol case isis-protocol { description "IS-IS."; leaf system-id { type string { length "1..16"; } description "IS-IS system ID."; } } // case isis-protocol case local-system { description "Local system."; leaf is-local-system { type boolean; description "Prefix is advertised by local system."; } } // case local-system } // choice igp-attribute leaf up-time { type pub-type:time-tick; description "Neighbor relationship establishment time."; } leaf bift-id { type uint32 { range "0..4294967295"; } description "The BIFT-ID assigned by this nexthop node."; } leaf invalid-reason { type birt-nexthop-invalid-type; description "Invalid nexthop reason."; } } // list invalid-nexthop } // container invalid-nexthops } // list routing } // container routings container static-routings { config false; description "List of BIER static BIFT state."; list static-routing { key "bsl dest-end-bier-sid"; description "BIER routing state."; leaf bsl { type bit-string-length; description "BIER BitString length, which is 64/128/256 bits."; } leaf dest-end-bier-sid { type inet:ipv6-address-no-zone; description "Destination prefix."; } container bfr-id-ranges { description "List of target BFR-ID range."; list bfr-id-range { key "bfr-id-start bfr-id-end"; description "Statistics of target BFR-ID range."; leaf bfr-id-start { type uint16 { range "1..65535"; } description "Start of BFR-ID range."; } leaf bfr-id-end { type uint16 { range "1..65535"; } description "End of BFR-ID range."; } } // list bfr-id-range } // container bfr-id-ranges leaf up-time { type pub-type:time-tick; description "Prefix survival time."; } container nexthops { description "List of next-hop state."; list nexthop { key "next-hop-addr next-hop-outbound-if"; description "Next-hop state."; leaf next-hop-addr { type inet:ipv6-address-no-zone; description "Next-hop prefix address."; } leaf next-hop-outbound-if { type pub-type:if-name; description "Next-hop outbound interface."; } leaf bift-id { type uint32 { range "0..4294967295"; } description "The BIFT-ID assigned by this nexthop node."; } } // list nexthop } // container nexthops container invalid-nexthops { description "List of Next-hop state."; list invalid-nexthop { key "next-hop-addr next-hop-outbound-if"; description "Next-hop state."; leaf next-hop-addr { type inet:ipv6-address-no-zone; description "Next-hop prefix address."; } leaf next-hop-outbound-if { type pub-type:if-name; description "Next-hop outbound interface."; } leaf bift-id { type uint32 { range "0..4294967295"; } description "The BIFT-ID assigned by this nexthop node."; } leaf invalid-reason { type birt-nexthop-invalid-type; description "Invalid nexthop reason."; } } // list invalid-nexthop } // container invalid-nexthops } // list static-routing } // container static-routings container pipe-mode-ttl { description "Configure pipe mode ttl value."; leaf ttl-value { type uint8 { range "1..255"; } default "255"; description "Bier pipe mode ttl value."; } } // container pipe-mode-ttl container load-balance-enhance-factor { when "../bier:address-family = 'ipv6-unicast'"; description "Configure load-balance enhance factor."; leaf factor-value { type uint8 { range "1..64"; } must "(../bier-fwd:factor-value * ../../bier:load-balance-num) <= 64"; description "Configure load-balance enhance factor."; } } // container load-balance-enhance-factor } // list sub-domain } // container sub-domains container bier-prefixs { config false; description "List of BIER prefix state."; container isis-prefixs { description "List of ISIS prefix state."; list isis-prefix { key "address-family igp-process-id mt-id igp-sub-process-id"; description "ISIS prefix state."; leaf address-family { type address-family-type; description "IPv4 or IPv6 address family."; } leaf igp-process-id { type uint32; description "Process ID of the underlay IGP."; } leaf mt-id { type uint32; description "Multi-topology ID of the underlay IGP."; } leaf igp-sub-process-id { type uint32; description "Sub-process ID of the underlay IGP."; } container isis-systems { description "List of ISIS system state."; list isis-system { key "system-id"; description "ISIS system state."; leaf system-id { type string { length "1..16"; } description "IS-IS system ID."; } container prefix-infos { description "List of prefix state."; list prefix-info { key "prefix prefix-mask-len"; description "Prefix state."; leaf prefix { type inet:ip-address-no-zone; description "BFR prefix address."; } leaf prefix-mask-len { type uint8 { range "0..128"; } description "BFR prefix address mask length."; } leaf prefix-igp-flags { type bits { bit local { position 0; description "Local prefix."; } bit intra { position 1; description "Intra-domain prefix."; } bit invalid { position 2; description "Invalid prefix."; } bit duplicate { position 3; description "Duplicate prefix."; } bit best { position 4; description "Best prefix."; } } description "BIER prefix IGP state."; } container sub-domain-infos { description "List of sub-domain state."; list sub-domain-info { key "sub-domain-id"; description "Sub-domain state."; leaf sub-domain-id { type uint16 { range "0..255"; } description "BIER sub-domain ID."; } leaf bfr-id { ext:support-filter "true"; type uint16 { range "1..65535"; } description "BFR-ID."; } leaf end-bier-sid { type inet:ipv6-address-no-zone; description "End-bier-sid of the SD."; } leaf prefix-sd-flags { type bits { bit duplicate-sd { position 0; description "Duplicate sub-domain ID."; } bit invalid-igp-cfg { position 1; description "Invalid IGP configuration."; } bit invalid-bar { position 2; description "Invalid BIER algorithm."; } bit invalid-ipa { position 3; description "Invalid IGP algorithm."; } bit duplicate-bfr-id { position 4; description "Duplicate BFR-ID."; } bit invalid-mt { position 5; description "Invalid multi-topology."; } bit supress-bfr-id-adv { position 6; description "BFR-ID advertisement suppression."; } } description "BIER prefix sub-domain state."; } leaf igp-algorithm { type igp-algorithm-type; description "IGP algorithm type."; } leaf bier-algorithm { type bier-algorithm-type; description "BIER algorithm type."; } container encapsulation-infos { description "BIER prefix encapsulation state."; container encapsulations { description "List of BIER prefix encapsulation state."; list encapsulation { key "bsl encapsulation-type"; description "BIER prefix encapsulation state."; leaf bsl { type bit-string-length; description "BIER BitString length, which is 64/128/256 bits."; } leaf encapsulation-type { type bier-encapsulation-type; description "BIER encapsulation type."; } leaf max-si { type uint16 { range "0..255"; } description "Maximum set identifier."; } leaf up-time { type pub-type:time-tick; description "Prefix survival time."; } leaf bift-id-base { type uint32 { range "0..4294967295"; } description "Start BIFT-ID in the BIER encapsulation information."; } } // list encapsulation } // container encapsulations container invalid-encapsulations { description "List of BIER prefix encapsulation state."; list invalid-encapsulation { key "bsl encapsulation-type"; description "BIER prefix encapsulation state."; leaf bsl { type bit-string-length; description "BIER BitString length, which is 64/128/256 bits."; } leaf encapsulation-type { type bier-encapsulation-type; description "BIER encapsulation type."; } leaf max-si { type uint16 { range "0..255"; } description "Maximum set identifier."; } leaf up-time { type pub-type:time-tick; description "Prefix survival time."; } leaf bift-id-base { type uint32 { range "0..4294967295"; } description "Start BIFT-ID in the BIER encapsulation information."; } leaf invalid-reason { type bits { bit unknown-sd { position 0; description "Unknown sub-domain ID."; } bit invalid-igp-cfg { position 1; description "The SD advertised by an IGP instance is the same as that advertised by another IGP instance."; } bit duplicate-bsl { position 2; description "Duplicate BitString length."; } bit invalid-bsl { position 3; description "Invalid BitString length."; } bit unsupport-bsl { position 4; description "Unsupported BitString length."; } bit invalid-label { position 5; description "Invalid MPLS label."; } bit invalid-label-range { position 6; description "Invalid range of MPLS labels."; } bit overlap-label-range { position 7; description "Overlap range of MPLS labels."; } bit sd-unsupport-bsl { position 8; description "BitString length is not configured locally."; } bit invalid-bsl-bfrid-maxsi-asso { position 9; description "The advertised BFR-ID exceeds the maximum value that can be expressed by the advertised BSL and Max-SI."; } bit invalid-prefix-mask { position 10; description "Invalid prefix mask."; } } description "Invalid BSL reason."; } } // list invalid-encapsulation } // container invalid-encapsulations } // container encapsulation-infos } // list sub-domain-info } // container sub-domain-infos } // list prefix-info } // container prefix-infos } // list isis-system } // container isis-systems } // list isis-prefix } // container isis-prefixs } // container bier-prefixs container forward { description "Configure global attributes to the BIER."; container reserve-interface-enhancement { description "Configure reserve-interface enhancement."; leaf enable { type boolean; default "false"; description "Enable/disable reserve-interface enhancement."; } } // container reserve-interface-enhancement } // container forward } // container bier } // module huawei-bier
© 2023 YumaWorks, Inc. All rights reserved.