1238 lines
38 KiB
YANG
1238 lines
38 KiB
YANG
module ieee802-dot1cb-frer {
|
||
yang-version "1.1";
|
||
namespace urn:ieee:std:802.1Q:yang:ieee802-dot1cb-frer;
|
||
prefix dot1cb-frer;
|
||
import ieee802-dot1cb-stream-identification {
|
||
prefix dot1cb-sid;
|
||
}
|
||
import ieee802-dot1cb-stream-identification-types {
|
||
prefix dot1cb-sid-types;
|
||
}
|
||
import ieee802-dot1cb-frer-types {
|
||
prefix dot1cb-frer-types;
|
||
}
|
||
import ieee802-dot1q-types {
|
||
prefix dot1qtypes;
|
||
}
|
||
import ietf-interfaces {
|
||
prefix if;
|
||
}
|
||
organization
|
||
"Institute of Electrical and Electronics Engineers";
|
||
contact
|
||
"WG-URL: http://ieee802.org/1/
|
||
WG-EMail: stds-802-1-l@ieee.org
|
||
|
||
Contact: IEEE 802.1 Working Group Chair
|
||
Postal: C/O IEEE 802.1 Working Group
|
||
IEEE Standards Association
|
||
445 Hoes Lane
|
||
Piscataway, NJ 08854
|
||
USA
|
||
|
||
E-mail: stds-802-1-chairs@ieee.org";
|
||
description
|
||
"Management objects that control the frame replication and
|
||
elimination from IEEE Std 802.1CB-2017. This YANG data model conforms
|
||
to the Network Management Datastore Architecture defined in RFC 8342.
|
||
Copyright (C) IEEE (2021). This version of this YANG module is part
|
||
of IEEE Std 802.1CBcv; see the draft itself for full legal notices.";
|
||
revision 2021-05-06 {
|
||
description
|
||
"Published as part of IEEE Std 802.1CBcv-2021. Initial version.";
|
||
reference
|
||
"IEEE Std 802.1CBcv-2021, Frame Replication and Elimination for
|
||
Reliability - FRER YANG Data Model and Management Information Base
|
||
Module.";
|
||
}
|
||
feature auto-configuration {
|
||
description
|
||
"Autoconfiguration of entries in the tables for stream identity
|
||
table, sequence recovery table and sequence identification table.";
|
||
reference
|
||
"7.11 of IEEE Std 802.1CB-2017
|
||
10.7 of IEEE Std 802.1CB-2017";
|
||
}
|
||
typedef lan-path-id {
|
||
type int8;
|
||
description
|
||
"An integer specifying a path or LAN. If and only if a packet
|
||
matches an entry in the Sequence identification table that
|
||
specifies HSR or PRP in its frerSeqEncEncapsType object,
|
||
tsnStreamIdLanPathId specifies the LanId or PathId value that must
|
||
be matched for this tsnStreamIdEntry to apply. A value of –1
|
||
indicates that the LanId or PathId are to be ignored.";
|
||
reference
|
||
"10.22 of IEEE Std 802.1CB-2017";
|
||
}
|
||
typedef sequence-history-length {
|
||
type uint32 {
|
||
range "2..max";
|
||
}
|
||
description
|
||
"An integer specifying how many bits of the SequenceHistory
|
||
variable are to be used.";
|
||
reference
|
||
"7.4.3.2.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
grouping sequence-encode-decode {
|
||
description
|
||
"The sequence-encode-decode grouping indicates the type of
|
||
encapsulation used for this instance of the Sequence encode/decode
|
||
function.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
choice encapsulation {
|
||
description
|
||
"This choice indicates the type of encapsulation used for this
|
||
instance of the Sequence encode/decode function. The
|
||
encapsulation includes an Organizationally Unique Identifier
|
||
(OUI) or Company ID (CID) to identify the organization defining
|
||
the sequence encode/decode method.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
container r-tag {
|
||
presence "true";
|
||
description
|
||
"R-TAG";
|
||
reference
|
||
"7.8 of IEEE Std 802.1CB-2017";
|
||
leaf type-number {
|
||
type dot1cb-frer-types:seq-encaps-method;
|
||
default "r-tag";
|
||
config false;
|
||
description
|
||
"The type number used for the R-TAG encode/decode method.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf oui-cid {
|
||
type string {
|
||
pattern "[0-9A-F]{2}(-[0-9A-F]{2}){2}";
|
||
}
|
||
default "00-80-C2";
|
||
config false;
|
||
description
|
||
"The Organizationally Unique Identifier (OUI) or Company ID
|
||
(CID) to identify the organization defining the encode/decode
|
||
method. For encode/decode methods defined in IEEE Std
|
||
802.1CB-2017 the OUI/CID is always 00-80-C2.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
container hsr-sequence-tag {
|
||
presence "true";
|
||
description
|
||
"HSR sequence tag";
|
||
reference
|
||
"7.9 of IEEE Std 802.1CB-2017";
|
||
leaf type-number {
|
||
type dot1cb-frer-types:seq-encaps-method;
|
||
default "hsr-seq-tag";
|
||
config false;
|
||
description
|
||
"The type number used for the HSR sequence tag encode/decode
|
||
method.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf oui-cid {
|
||
type string {
|
||
pattern "[0-9A-F]{2}(-[0-9A-F]{2}){2}";
|
||
}
|
||
default "00-80-C2";
|
||
config false;
|
||
description
|
||
"The Organizationally Unique Identifier (OUI) or Company ID
|
||
(CID) to identify the organization defining the encode/decode
|
||
method. For encode/decode methods defined in IEEE Std
|
||
802.1CB-2017 the OUI/CID is always 00-80-C2.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
container prp-sequence-tag {
|
||
presence "true";
|
||
description
|
||
"PRP sequence trailer";
|
||
reference
|
||
"7.10 of IEEE Std 802.1CB-2017";
|
||
leaf type-number {
|
||
type dot1cb-frer-types:seq-encaps-method;
|
||
default "prp-seq-trailer";
|
||
config false;
|
||
description
|
||
"The type number used for the PRP sequence trailer
|
||
encode/decode method.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf oui-cid {
|
||
type string {
|
||
pattern "[0-9A-F]{2}(-[0-9A-F]{2}){2}";
|
||
}
|
||
default "00-80-C2";
|
||
config false;
|
||
description
|
||
"The Organizationally Unique Identifier (OUI) or Company ID
|
||
(CID) to identify the organization defining the encode/decode
|
||
method. For encode/decode methods defined in IEEE Std
|
||
802.1CB-2017 the OUI/CID is always 00-80-C2.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
container organization-specific {
|
||
presence "true";
|
||
description
|
||
"This container allows to select sequence encode/decode types
|
||
that are defined by entities outside of IEEE 802.1.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
leaf type-number {
|
||
type int32 {
|
||
range "256..max";
|
||
}
|
||
description
|
||
"The type number used for an encode/decode method defined by
|
||
an entity owning the OUI or CID for this encapsulation type.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf oui-cid {
|
||
type string {
|
||
pattern "[0-9A-F]{2}(-[0-9A-F]{2}){2}";
|
||
}
|
||
description
|
||
"The Organizationally Unique Identifier (OUI) or Company ID
|
||
(CID) to identify the organization defining the encode/decode
|
||
method.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
grouping sequence-recovery-algorithm {
|
||
description
|
||
"The sequence-recovery-algorithm grouping specifies which sequence
|
||
recovery algorithm is to be used for this instance of the Sequence
|
||
recovery function.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
choice algorithm {
|
||
description
|
||
"This choice indicates the sequence recovery algorithm used for
|
||
this instance of the Sequence recovery function. It includes an
|
||
Organizationally Unique Identifier (OUI) or Company ID (CID) to
|
||
identify the organization defining the sequence recovery
|
||
algorithm.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
container vector {
|
||
presence "true";
|
||
description
|
||
"Vector Recovery Algorithm.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
leaf type-number {
|
||
type dot1cb-frer-types:seq-rcvy-algorithm;
|
||
default "vector";
|
||
config false;
|
||
description
|
||
"The type number used for the VectorRecoveryAlgorithm.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf oui-cid {
|
||
type string {
|
||
pattern "[0-9A-F]{2}(-[0-9A-F]{2}){2}";
|
||
}
|
||
default "00-80-C2";
|
||
config false;
|
||
description
|
||
"The Organizationally Unique Identifier (OUI) or Company ID
|
||
(CID) to identify the organization defining the sequence
|
||
recovery algorithm. For sequence recovery algorithms defined
|
||
in IEEE Std 802.1CB-2017 the OUI/CID is always 00-80-C2.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
container match {
|
||
presence "true";
|
||
description
|
||
"Match Recovery Algorithm.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
leaf type-number {
|
||
type dot1cb-frer-types:seq-rcvy-algorithm;
|
||
default "match";
|
||
config false;
|
||
description
|
||
"The type number used for the MatchRecoveryAlgorithm.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf oui-cid {
|
||
type string {
|
||
pattern "[0-9A-F]{2}(-[0-9A-F]{2}){2}";
|
||
}
|
||
default "00-80-C2";
|
||
config false;
|
||
description
|
||
"The Organizationally Unique Identifier (OUI) or Company ID
|
||
(CID) to identify the organization defining the sequence
|
||
recovery algorithm. For sequence recovery algorithms defined
|
||
in IEEE Std 802.1CB-2017 the OUI/CID is always 00-80-C2.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
container organization-specific {
|
||
presence "true";
|
||
description
|
||
"This container allows to select sequence recovery algorithms
|
||
that are defined by entities outside of IEEE 802.1.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
leaf type-number {
|
||
type int32 {
|
||
range "256..max";
|
||
}
|
||
description
|
||
"The type number used for a sequence recovery algorithm
|
||
defined by an entity owning the OUI or CID for this algorithm
|
||
type.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf oui-cid {
|
||
type string {
|
||
pattern "[0-9A-F]{2}(-[0-9A-F]{2}){2}";
|
||
}
|
||
description
|
||
"The Organizationally Unique Identifier (OUI) or Company ID
|
||
(CID) to identify the organization defining the sequence
|
||
recovery algorithm.";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
container frer {
|
||
description
|
||
"The managed objects that control Stream identification are
|
||
described in Clause 9 of IEEE Std 802.1CB-2017. The managed objects
|
||
that control FRER are described in Clause 10 of IEEE Std
|
||
802.1CB-2017as follows:
|
||
|
||
a) General requirements on the behavior of counters are in 10.1.
|
||
b) The various tables of managed objects that can manage, in
|
||
detail, each individual Stream, are described in five
|
||
subclauses, including:
|
||
1) Additions to the Stream identity table required for
|
||
Autoconfiguration.
|
||
2) The Sequence generation table that configures instances of
|
||
the Sequence generation function;
|
||
3) The Sequence recovery table that configures instances of the
|
||
Individual recovery function, the Sequence recovery function,
|
||
and the Latent error detection function;
|
||
4) The Sequence identification table that configures instances
|
||
of the Sequence encode/decode function; and
|
||
5) The Stream split table that configures instances of the
|
||
Stream splitting function.
|
||
c) The managed objects that support the automatic configuration,
|
||
upon receipt of a packet, of entries in the first four of the
|
||
preceding tables, are described in the subclause on
|
||
Autoconfiguration.
|
||
d) The per-port, per-Stream packet counters that are kept by FRER
|
||
functions for inspection by network management entities are
|
||
described in 10.8, and the per-port (totaled over all Streams)
|
||
counters in 10.9.
|
||
|
||
The managed objects in the subclauses under 9.1 make it possible to
|
||
configure more than one encapsulation for the same stream_handle
|
||
subparameter on the same port. Similarly, the managed objects in
|
||
the subclauses under 10.3 and 10.4 make it possible to configure
|
||
more than one Sequence encode/decode function or more than one
|
||
Sequence generation function for the same stream_handle
|
||
subparameter. [The same value of stream_handle can be in the
|
||
frerSeqGenStreamList of more than one frerSeqGenEntry or in the
|
||
frerSeqRcvyStreamList of more than one frerSeqRcvyEntry.] A system
|
||
shall return an error if an attempt is made to configure
|
||
conflicting requirements upon that system.";
|
||
reference
|
||
"Clause 10 of IEEE Std 802.1CB-2017";
|
||
list sequence-generation {
|
||
key "index";
|
||
description
|
||
"There is one Sequence generation table in a system, and one
|
||
entry in the Sequence generation table for each Sequence
|
||
generation function. Each frerSeqGenEntry lists the Streams and
|
||
direction for which a single instance of the Sequence generation
|
||
function is to be placed.";
|
||
reference
|
||
"10.3 of IEEE Std 802.1CB-2017";
|
||
leaf index {
|
||
type uint32;
|
||
description
|
||
"Clause 10 of IEEE Std 802.1CB-2017 states that the same stream
|
||
handle can be present multiple times in the sequence generation
|
||
table. Therefore this index leaf is being used to uniquely
|
||
identify an entry in the sequence generation table.";
|
||
}
|
||
leaf-list stream {
|
||
type leafref {
|
||
path '/dot1cb-sid:stream-identity/dot1cb-sid:handle';
|
||
}
|
||
min-elements 1;
|
||
description
|
||
"A list of stream_handle values, corresponding to the values of
|
||
the tsnStreamIdHandle objects in the Stream identity table, on
|
||
which this instance of the Sequence generation function is to
|
||
operate. The single instance of the Sequence generation
|
||
function created by this frerSeqGenEntry operates every packet
|
||
belonging to this Stream, regardless of the port on which it is
|
||
received.";
|
||
reference
|
||
"10.3.1.1 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf direction-out-facing {
|
||
type dot1cb-sid-types:direction;
|
||
description
|
||
"An object indicating whether the Sequence generation function
|
||
is to be placed on the out-facing (True) or in-facing (False)
|
||
side of the port.";
|
||
reference
|
||
"10.3.1.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf reset {
|
||
type boolean;
|
||
description
|
||
"A Boolean object indicating that the Sequence generation
|
||
function is to be reset by calling its corresponding
|
||
SequenceGenerationReset function. Writing the value True to
|
||
frerSeqGenReset triggers a reset; writing the value False has
|
||
no effect. When read, frerSeqGenReset always returns the value
|
||
False.";
|
||
reference
|
||
"10.3.1.3 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
list sequence-recovery {
|
||
key "index";
|
||
description
|
||
"There is one Sequence recovery table in a system, and one entry
|
||
in the Sequence recovery table for each Sequence recovery
|
||
function or Individual recovery function that can also be
|
||
present. The entry describes a set of managed objects for the
|
||
single instance of a Base recovery function and Latent error
|
||
detection function included in the Sequence recovery function or
|
||
Individual recovery function. Each frerSeqRcvyEntry lists the
|
||
Streams, ports, and direction for which instances of a Sequence
|
||
recovery function or Individual recovery function are to be
|
||
instantiated.";
|
||
reference
|
||
"10.4 of IEEE Std 802.1CB-2017";
|
||
leaf index {
|
||
type uint32;
|
||
description
|
||
"Clause 10 of IEEE Std 802.1CB-2017 states that the same stream
|
||
handle can be present multiple times in the sequence recovery
|
||
table. Therefore this index leaf is being used to uniquely
|
||
identify an entry in the sequence recovery table.";
|
||
}
|
||
leaf-list stream {
|
||
type leafref {
|
||
path '/dot1cb-sid:stream-identity/dot1cb-sid:handle';
|
||
}
|
||
min-elements 1;
|
||
description
|
||
"A list of the stream_handle values, corresponding to the
|
||
values of the tsnStreamIdHandle objects in the Stream identity
|
||
table, to which the system is to apply the instance of the
|
||
Sequence recovery function or Individual recovery function.";
|
||
reference
|
||
"10.4.1.1 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf-list port {
|
||
type if:interface-ref;
|
||
min-elements 1;
|
||
description
|
||
"The list of ports on each of which the system is to
|
||
instantiate the Sequence recovery function, or from which
|
||
received packets are to be fed to a single instance of the
|
||
Individual recovery function.";
|
||
reference
|
||
"10.4.1.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf direction-out-facing {
|
||
type dot1cb-sid-types:direction;
|
||
description
|
||
"An object indicating whether the Sequence recovery function or
|
||
Individual recovery function is to be placed on the out-facing
|
||
(True) or in-facing (False) side of the port.";
|
||
reference
|
||
"10.4.1.3 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf reset {
|
||
type boolean;
|
||
default "false";
|
||
description
|
||
"A Boolean object indicating that the Sequence recovery
|
||
function or Individual recovery function is to be reset by
|
||
calling its corresponding SequenceGenerationReset function.
|
||
Writing the value True to frerSeqRcvyReset triggers a reset;
|
||
writing the value False has no effect. When read,
|
||
frerSeqRcvyReset always returns the value False.";
|
||
reference
|
||
"10.4.1.4 of IEEE Std 802.1CB-2017";
|
||
}
|
||
container algorithm {
|
||
description
|
||
"This object is an enumerated value specifying which sequence
|
||
recovery algorithm is to be used for this instance of the
|
||
Sequence recovery function. The enumeration uses an OUI or CID
|
||
as shown in Table 10-1. The default value for
|
||
frerSeqRcvyAlgorithm is Vector_Alg (00-80-C2, 0).";
|
||
reference
|
||
"10.4.1.5 of IEEE Std 802.1CB-2017";
|
||
uses sequence-recovery-algorithm;
|
||
}
|
||
leaf history-length {
|
||
type sequence-history-length;
|
||
default "2";
|
||
description
|
||
"An integer specifying how many bits of the SequenceHistory
|
||
variable are to be used. The minimum and the default value is
|
||
2, maximum is the maximum allowed by the implementation. [Not
|
||
used if frerSeqRcvyAlgorithm = Match_Alg (00-80-C2, 1).]";
|
||
reference
|
||
"10.4.1.6 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf reset-timeout {
|
||
type uint32;
|
||
units "ms";
|
||
description
|
||
"An unsigned integer specifying the timeout period in
|
||
milliseconds for the RECOVERY_TIMEOUT event.";
|
||
reference
|
||
"10.4.1.7 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf invalid-sequence-value {
|
||
type uint32;
|
||
config false;
|
||
description
|
||
"A read-only unsigned integer value that cannot be encoded in a
|
||
packet as a value for the sequence_number subparameter, i.e.,
|
||
frerSeqRcvyInvalidSequenceValue is larger than or equal to
|
||
RecovSeqSpace.";
|
||
reference
|
||
"10.4.1.8 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf take-no-sequence {
|
||
type boolean;
|
||
default "false";
|
||
description
|
||
"A Boolean value specifying whether packets with no
|
||
sequence_number subparameter are to be accepted (True) or not
|
||
(False). Default value False.";
|
||
reference
|
||
"10.4.1.9 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf individual-recovery {
|
||
type boolean;
|
||
description
|
||
"A Boolean value specifying whether this entry describes a
|
||
Sequence recovery function or Individual recovery function.
|
||
a) True: The entry describes an Individual recovery function.
|
||
Packets discarded by the SequenceGenerationAlgorithm will
|
||
cause the variable RemainingTicks to be reset. There is no
|
||
Latent error detection function associated with this entry,
|
||
so frerSeqRcvyLatentErrorDetection cannot also be True.
|
||
b) False: The entry describes a Sequence recovery function.
|
||
Packets discarded by the SequenceGenerationAlgorithm will
|
||
not cause the variable RemainingTicks to be reset.";
|
||
reference
|
||
"10.4.1.10 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf latent-error-detection {
|
||
type boolean;
|
||
description
|
||
"A Boolean value indicating whether an instance of the Latent
|
||
error detection function is to be instantiated along with the
|
||
Base recovery function in this Sequence recovery function or
|
||
Individual recovery function. frerSeqRcvyLatentErrorDetection
|
||
cannot be set True if frerSeqRcvyIndividualRecovery is also
|
||
True; an Individual recovery function does not include a Latent
|
||
error detection function.";
|
||
reference
|
||
"10.4.1.11 of IEEE Std 802.1CB-2017";
|
||
}
|
||
container latent-error-detection-parameters {
|
||
description
|
||
"The objects in the following subclauses are present if and
|
||
only if frerSeqRcvyIndividualRecovery is False.";
|
||
reference
|
||
"10.4.1.12 of IEEE Std 802.1CB-2017";
|
||
leaf difference {
|
||
type int32;
|
||
description
|
||
"An integer specifying the maximum difference between
|
||
frerCpsSeqRcvyDiscardedPackets, and the product of
|
||
frerCpsSeqRcvyPassedPackets and (frerSeqRcvyLatentErrorPaths
|
||
– 1) that is allowed. Any larger difference will trigger the
|
||
detection of a latent error by the LatentErrorTest function.";
|
||
reference
|
||
"10.4.1.12.1 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf period {
|
||
type uint32;
|
||
units "ms";
|
||
default "2000";
|
||
description
|
||
"The integer number of milliseconds that are to elapse
|
||
between instances of running the LatentErrorTest function. An
|
||
implementation can have a minimum value for
|
||
frerSeqRcvyLatentErrorPeriod, below which it cannot be set,
|
||
but this minimum shall be no larger than 1000 ms (1 s).
|
||
Default value 2000 (2 s).";
|
||
reference
|
||
"10.4.1.12.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf paths {
|
||
type uint16;
|
||
description
|
||
"The integer number of paths over which FRER is operating for
|
||
this instance of the Base recovery function and Latent error
|
||
detection function.";
|
||
reference
|
||
"10.4.1.12.3 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf reset-period {
|
||
type uint32;
|
||
units "ms";
|
||
default "30000";
|
||
description
|
||
"The integer number of milliseconds that are to elapse
|
||
between instances of running the LatentErrorReset function.
|
||
An implementation can have a minimum value for
|
||
LatentErrorReset, below which it cannot be set, but this
|
||
minimum shall be no larger than 1000 ms (1 s). Default value
|
||
30000 (30 s).";
|
||
reference
|
||
"10.4.1.12.4 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
}
|
||
list sequence-identification {
|
||
key "port direction-out-facing";
|
||
description
|
||
"There is one Sequence identification table per system, and one
|
||
entry in the Sequence identification table for each port and
|
||
direction for which an instance of the Sequence encode/decode
|
||
function is to be created. Each entry in the Sequence
|
||
identification table specifies a port and direction on which an
|
||
instance of the Sequence encode/decode function is to be
|
||
instantiated for a list of Streams.";
|
||
reference
|
||
"10.5 of IEEE Std 802.1CB-2017";
|
||
leaf-list stream {
|
||
type leafref {
|
||
path '/dot1cb-sid:stream-identity/dot1cb-sid:handle';
|
||
}
|
||
min-elements 1;
|
||
description
|
||
"A list of stream_handles, corresponding to the values of the
|
||
tsnStreamIdHandle objects in the Stream identity table, for
|
||
which the system is to use the same encapsulation for the
|
||
Sequence encode/decode function.";
|
||
reference
|
||
"10.5.1.1 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf port {
|
||
type if:interface-ref;
|
||
description
|
||
"The port on which the system is to place an instance of the
|
||
Sequence encode/decode function.";
|
||
reference
|
||
"10.5.1.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf direction-out-facing {
|
||
type dot1cb-sid-types:direction;
|
||
description
|
||
"An object indicating whether the Sequence encode/decode
|
||
function is to be placed on the out-facing (True) or in-facing
|
||
(False) side of the port.";
|
||
reference
|
||
"10.5.1.3 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf active {
|
||
type boolean;
|
||
description
|
||
"A Boolean value specifying whether this frerSeqEncEntry is
|
||
passive (False), and therefore is used only to decode (extract
|
||
information from) input packets passing up the protocol stack,
|
||
or active (True), and therefore is used both for recognizing
|
||
input packets and for encoding output packets being passed down
|
||
the protocol stack.";
|
||
reference
|
||
"10.5.1.4 of IEEE Std 802.1CB-2017";
|
||
}
|
||
container encapsulation {
|
||
description
|
||
"An enumerated value indicating the type of encapsulation used
|
||
for this instance of the Sequence encode/decode function. The
|
||
type includes an OUI or CID.";
|
||
reference
|
||
"10.5.1.5 of IEEE Std 802.1CB-2017";
|
||
uses sequence-encode-decode;
|
||
}
|
||
leaf path-id-lan-id {
|
||
type lan-path-id;
|
||
description
|
||
"A 4-bit integer value to be placed in the PathId field of an
|
||
HSR sequence tag or the LanId field of a PRP sequence trailer
|
||
added to an output packet. This managed object is used only if:
|
||
a) The HSR sequence tag or the PRP sequence trailer is
|
||
selected by the frerSeqEncEncapsType object; and
|
||
b) frerSeqEncActive is False (passive)";
|
||
reference
|
||
"10.5.1.6 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
list stream-split {
|
||
key "port direction-out-facing";
|
||
description
|
||
"There is one Stream split table per system, with one
|
||
frerSplitEntry per Stream splitting function per set of
|
||
stream_handle values. Each entry in the Stream split table
|
||
specifies a port and direction on which an instance of the Stream
|
||
splitting function is to be instantiated, and the list of
|
||
stream_handles specifying its operation.";
|
||
reference
|
||
"10.6 of IEEE Std 802.1CB-2017";
|
||
leaf port {
|
||
type if:interface-ref;
|
||
description
|
||
"The port on which the system is to place an instance of the
|
||
Stream splitting function performing the stream_handle
|
||
translations specified by frerSplitInputIdList and
|
||
frerSplitOutputIdList is to be placed.";
|
||
reference
|
||
"10.6.1.1 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf direction-out-facing {
|
||
type dot1cb-sid-types:direction;
|
||
description
|
||
"An object indicating whether the instance of the Stream
|
||
splitting function performing the stream_handle translations
|
||
specified by frerSplitInputIdList and frerSplitOutputIdList is
|
||
to be placed on the out-facing (True) or in-facing (False) side
|
||
of the port.";
|
||
reference
|
||
"10.6.1.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf-list input-id {
|
||
type leafref {
|
||
path '/dot1cb-sid:stream-identity/dot1cb-sid:handle';
|
||
}
|
||
min-elements 1;
|
||
description
|
||
"A list of stream_handles (tsnStreamIdHandle values) that are
|
||
to be split.";
|
||
reference
|
||
"10.6.1.3 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf-list output-id {
|
||
type leafref {
|
||
path '/dot1cb-sid:stream-identity/dot1cb-sid:handle';
|
||
}
|
||
min-elements 1;
|
||
description
|
||
"A list of stream_handles (tsnStreamIdHandle values) into which
|
||
the input packet is to be split, one copy per item in the
|
||
frerSplitOutputIdList.";
|
||
reference
|
||
"10.6.1.4 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
container autoconfiguration {
|
||
if-feature "auto-configuration";
|
||
description
|
||
"Container for autoconfiguration managed objects.";
|
||
reference
|
||
"10.7 of IEEE Std 802.1CB-2017";
|
||
list sequence {
|
||
key "index";
|
||
description
|
||
"There is one Sequence autoconfiguration table per system. It
|
||
contains any number of table entries. No two (or more) entries
|
||
in the Sequence autoconfiguration table can have the same
|
||
values for frerAutSeqSeqEncaps, frerAutSeqTagged, and
|
||
frerAutSeqVlan on any given port. Each frerAutSeqEntry objects
|
||
relates to a single class of Streams, and specifies how entries
|
||
are created (and destroyed) in the Stream identity table, the
|
||
Sequence recovery table, and the Sequence identification table.";
|
||
reference
|
||
"10.7.1 of IEEE Std 802.1CB-2017";
|
||
leaf index {
|
||
type uint32;
|
||
description
|
||
"Entry in the sequence list referencing to a single class of
|
||
streams.";
|
||
}
|
||
container sequence-encapsulation {
|
||
description
|
||
"An enumerated value, specifying which Sequence encode/decode
|
||
function, and therefore, which type sequence_number encoding,
|
||
is to be recognized for the purposes of Autoconfiguration.";
|
||
reference
|
||
"10.7.1.1.1 of IEEE Std 802.1CB-2017";
|
||
uses sequence-encode-decode;
|
||
}
|
||
leaf-list receive-port {
|
||
type if:interface-ref;
|
||
min-elements 1;
|
||
description
|
||
"The list of ports to which this frerAutSeqEntry applies, and
|
||
on which Stream identification functions, Sequence
|
||
encode/decode functions, and Individual recovery functions
|
||
are to be autocreated.";
|
||
reference
|
||
"10.7.1.1.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf tagged {
|
||
type enumeration {
|
||
enum tagged {
|
||
value 1;
|
||
description
|
||
"A frame must have a VLAN tag to be matched.";
|
||
}
|
||
enum priority {
|
||
value 2;
|
||
description
|
||
"A frame must be untagged, or have a VLAN tag with a VLAN
|
||
ID = 0 to be matched.";
|
||
}
|
||
enum all {
|
||
value 3;
|
||
description
|
||
"A frame is matched whether tagged or not.";
|
||
}
|
||
}
|
||
description
|
||
"An enumerated value indicating whether packets to be matched
|
||
by this frerAutSeqEntry are permitted to have a VLAN tag.";
|
||
reference
|
||
"10.7.1.1.3 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf-list vlan {
|
||
type dot1qtypes:vlanid;
|
||
description
|
||
"A list of vlan_identifiers for the packet to match. A null
|
||
list matches all vlan_identifiers.";
|
||
reference
|
||
"10.7.1.1.4 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf-list recovery-port {
|
||
type if:interface-ref;
|
||
min-elements 1;
|
||
description
|
||
"The list of ports on which Sequence recovery functions are
|
||
to be autocreated by this frerAutSeqEntry.";
|
||
reference
|
||
"10.7.1.1.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf destruction-interval {
|
||
type uint64;
|
||
units "ms";
|
||
default "86400000";
|
||
description
|
||
"An integer number of milliseconds after which an idle set of
|
||
functions created by this frerAutSeqEntry can be destroyed. A
|
||
value of 0 indicates that idle autoconfigured functions are
|
||
not to be destroyed. Default value is 86 400 000 decimal (one
|
||
day).";
|
||
reference
|
||
"10.7.1.1.6 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf reset-interval {
|
||
type uint64;
|
||
units "ms";
|
||
description
|
||
"The value used to fill frerSeqRcvyResetMSec when
|
||
autoconfiguring entries in the Sequence recovery table.";
|
||
reference
|
||
"10.7.1.1.7 of IEEE Std 802.1CB-2017";
|
||
}
|
||
container algorithm {
|
||
description
|
||
"The value used to fill frerSeqRcvyAlgorithm when
|
||
autoconfiguring entries in the Sequence recovery table.";
|
||
reference
|
||
"10.7.1.1.8 of IEEE Std 802.1CB-2017";
|
||
uses sequence-recovery-algorithm;
|
||
}
|
||
leaf history-length {
|
||
type sequence-history-length;
|
||
default "2";
|
||
description
|
||
"The value used to fill frerSeqRcvyHistoryLength when
|
||
autoconfiguring entries in the Sequence recovery table.";
|
||
reference
|
||
"10.7.1.1.9 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf create-individual {
|
||
type boolean;
|
||
description
|
||
"A Boolean value. If True, the receipt of a packet that
|
||
triggers the autoconfiguration of a new tsnStreamIdEntry also
|
||
triggers the instantiation of a frerSeqRcvyEntry for an
|
||
Individual recovery function.";
|
||
reference
|
||
"10.7.1.1.10 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf create-recovery {
|
||
type boolean;
|
||
description
|
||
"A Boolean value. If True, the receipt of a packet that
|
||
triggers the autoconfiguration of a new tsnStreamIdEntry can
|
||
also trigger the instantiation of a frerSeqRcvyEntry for a
|
||
Sequence recovery function.";
|
||
reference
|
||
"10.7.1.1.11 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf latent-error-detection {
|
||
type boolean;
|
||
description
|
||
"A Boolean value. If True, the autoconfiguration of a new
|
||
Sequence recovery function also creates an associated Latent
|
||
Error Detection function.";
|
||
reference
|
||
"10.7.1.1.12 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf latent-error-difference {
|
||
type int32;
|
||
description
|
||
"The value used to fill frerSeqRcvyLatentErrorDifference when
|
||
autoconfiguring entries in the Sequence recovery table.";
|
||
reference
|
||
"10.7.1.1.13 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf latent-error-period {
|
||
type uint32;
|
||
units "ms";
|
||
default "2000";
|
||
description
|
||
"The value used to fill frerSeqRcvyLatentErrorPeriod when
|
||
autoconfiguring entries in the Sequence recovery table.";
|
||
reference
|
||
"10.7.1.1.14 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf latent-error-reset-period {
|
||
type uint32;
|
||
units "ms";
|
||
default "30000";
|
||
description
|
||
"The value used to fill frerSeqRcvyLatentResetPeriod when
|
||
autoconfiguring entries in the Sequence recovery table.";
|
||
reference
|
||
"10.7.1.1.15 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
list output {
|
||
key "index";
|
||
description
|
||
"There is one Output autoconfiguration table per system. It
|
||
contains any number of frerAutOutEntry objects, each relating
|
||
to a single class of Streams specifying how active entries are
|
||
created in the Sequence identification table. No two (or more)
|
||
entries in the Output autoconfiguration table can include the
|
||
same port in their frerAutSeqReceivePortList objects.";
|
||
reference
|
||
"10.7.2 of IEEE Std 802.1CB-2017";
|
||
leaf index {
|
||
type uint32;
|
||
description
|
||
"Entry in the output list referencing to a single class of
|
||
streams.";
|
||
}
|
||
leaf-list port {
|
||
type if:interface-ref;
|
||
min-elements 1;
|
||
description
|
||
"The list of ports to which this frerAutOutEntry applies, and
|
||
on which active Sequence encode/decode functions are to be
|
||
autocreated.";
|
||
reference
|
||
"10.7.2.1.1 of IEEE Std 802.1CB-2017";
|
||
}
|
||
container encapsulation {
|
||
description
|
||
"An enumerated value, specifying which Sequence encode/decode
|
||
function, and therefore, which type sequence_number encoding,
|
||
is to be used for autoconfigured Streams on the ports in
|
||
frerAutSeqReceivePortList.";
|
||
reference
|
||
"10.7.2.1.2 of IEEE Std 802.1CB-2017";
|
||
uses sequence-encode-decode;
|
||
}
|
||
leaf lan-path-id {
|
||
type lan-path-id;
|
||
description
|
||
"An integer specifying a path or LAN. If and only if
|
||
frerAutOutEncaps specifies HSR or PRP frerAutOutLanPathId
|
||
specifies the LanId or PathId value to be inserted into the
|
||
HSR sequence tag or PRP sequence trailer of autoconfigured
|
||
packets transmitted on the ports in
|
||
frerAutSeqReceivePortList.";
|
||
reference
|
||
"10.7.2.1.3 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
augment "/dot1cb-sid:stream-identity" {
|
||
if-feature "auto-configuration";
|
||
description
|
||
"Two managed objects augment each tsnStreamIdEntry in the Stream
|
||
identity table when Managed objects for autoconfiguration is
|
||
implemented.";
|
||
reference
|
||
"10.2 of IEEE Std 802.1CB-2017";
|
||
leaf auto-configured {
|
||
type boolean;
|
||
config false;
|
||
description
|
||
"A read-only Boolean value, supplied by the system, specifying
|
||
whether this entry was created explicitly (False) or via the
|
||
Sequence autoconfiguration table.";
|
||
reference
|
||
"10.2.1 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf lan-path-id {
|
||
type lan-path-id;
|
||
description
|
||
"An integer specifying a path or LAN. If and only if a packet
|
||
matches an entry in the Sequence identification table that
|
||
specifies HSR or PRP in its frerSeqEncEncapsType object,
|
||
tsnStreamIdLanPathId specifies the LanId or PathId value that
|
||
must be matched for this tsnStreamIdEntry to apply. A value of –1
|
||
indicates that the LanId or PathId are to be ignored.";
|
||
reference
|
||
"10.2.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
augment "/if:interfaces/if:interface/if:statistics" {
|
||
description
|
||
"The following counters are the counters for frame replication and
|
||
elimination for reliability. All counters are unsigned integers. If
|
||
used on links faster than 650 000 000 bits per second, they shall
|
||
be 64 bits in length to ensure against excessively short wrap
|
||
times.
|
||
|
||
A Stream identification component shall implement the first two
|
||
counters provided in the stream-identification YANG module per-port
|
||
counters, input-packets and output-packets; the remainder of the
|
||
counters in the frer YANG module module are optional for such a
|
||
system.";
|
||
reference
|
||
"10.8 of IEEE Std 802.1CB-2017
|
||
10.9 of IEEE Std 802.1CB-2017";
|
||
container frer {
|
||
description
|
||
"This container contains the per-port as well as the
|
||
per-port-per-stream counters for frame replication and
|
||
elimination for reliability.";
|
||
reference
|
||
"10.8 of IEEE Std 802.1CB-2017
|
||
10.9 of IEEE Std 802.1CB-2017";
|
||
container per-port-counters {
|
||
config false;
|
||
description
|
||
"Contains the per-port counters for frame replication and
|
||
elimination for reliability. The following counters are
|
||
instantiated for each port on which any of the Stream
|
||
identification function, Sequencing function, or Sequence
|
||
encode/decode function is configured. The counters are indexed
|
||
by port number.";
|
||
leaf rx-passed-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpSeqRcvyPassedPackets counter is incremented once
|
||
for each packet passed up the stack by the
|
||
VectorRecoveryAlgorithm or MatchRecoveryAlgorithm. Its value
|
||
equals the sum (modulo the size of the counters) of all of
|
||
the frerCpsSeqRcvyPassedPackets counters on this same port.";
|
||
reference
|
||
"10.9.1 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf rx-discarded-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpSeqRcvyDiscardPackets counter is incremented once
|
||
for each packet discarded due to a duplicate sequence number
|
||
or for being a rogue packet by any VectorRecoveryAlgorithm or
|
||
MatchRecoveryAlgorithm on this port. Its value equals the sum
|
||
(modulo the size of the counters) of all of the
|
||
frerCpsSeqRcvyRoguePackets and frerCpsSeqRcvyDiscardedPackets
|
||
counters on this same port.";
|
||
reference
|
||
"10.9.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf encode-errored-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpSeqEncErroredPackets counter is incremented once
|
||
each time the Sequence encode/decode function receives a
|
||
packet that it is unable to decode successfully. Its value
|
||
equals the sum (modulo the size of the counters) of all of
|
||
the frerCpsSeqEncErroredPackets counters on this same port.";
|
||
reference
|
||
"10.9.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
list per-port-per-stream-counters {
|
||
key "direction-out-facing handle";
|
||
config false;
|
||
description
|
||
"Contains the per-port-per-stream counters for frame
|
||
replication and elimination for reliability. The following
|
||
counters are instantiated for each port on which any of the
|
||
Stream identification function, Sequencing function, or
|
||
Sequence encode/decode function is configured. The counters are
|
||
indexed by port number, facing (in-facing or out-facing), and
|
||
stream_handle value.";
|
||
reference
|
||
"10.8 of IEEE Std 802.1CB-2017";
|
||
leaf direction-out-facing {
|
||
type dot1cb-sid-types:direction;
|
||
description
|
||
"An object indicating whether the counters apply to
|
||
out-facing (True) or in-facing (False).";
|
||
}
|
||
leaf handle {
|
||
type leafref {
|
||
path '/dot1cb-sid:stream-identity/dot1cb-sid:handle';
|
||
}
|
||
description
|
||
"The according tsnStreamIdHandle for the counters.";
|
||
}
|
||
leaf generation-reset {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqGenResets counter is incremented each time the
|
||
SequenceGenerationReset function is called.";
|
||
reference
|
||
"10.8.2 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf rx-out-of-order-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqRcvyOutOfOrderPackets counter is incremented
|
||
once for each packet accepted out-of-order by the
|
||
VectorRecoveryAlgorithm or MatchRecoveryAlgorithm.
|
||
Out-of-order means that the packet’s sequence number is not
|
||
one more than the previous packet received.";
|
||
reference
|
||
"10.8.3 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf rx-rogue-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqRcvyRoguePackets counter is incremented once
|
||
for each packet discarded by the VectorRecoveryAlgorithm
|
||
because its sequence_number subparameter is more than
|
||
frerSeqRcvyHistoryLength from RecovSeqNum.";
|
||
reference
|
||
"10.8.4 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf rx-passed-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqRcvyPassedPackets counter is incremented once
|
||
for each packet passed up the stack by the
|
||
VectorRecoveryAlgorithm or MatchRecoveryAlgorithm.";
|
||
reference
|
||
"10.8.5 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf rx-discarded-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqRcvyDiscardedPackets counter is incremented
|
||
once for each packet discarded due to a duplicate sequence
|
||
number by the VectorRecoveryAlgorithm or
|
||
MatchRecoveryAlgorithm.";
|
||
reference
|
||
"10.8.6 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf rx-lost-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqRcvyLostPackets counter is incremented once
|
||
for each packet lost by the VectorRecoveryAlgorithm. A packet
|
||
is counted as lost if its sequence number is not received on
|
||
any ingress port.
|
||
|
||
NOTE—If per-source sequence numbering is used,
|
||
frerCpsSeqRcvyLostPackets can count, as lost, packets that
|
||
were sent to another destination, but not lost.";
|
||
reference
|
||
"10.8.7 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf rx-tagless-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqRcvyTaglessPackets counter is incremented once
|
||
for each packet received by the VectorRecoveryAlgorithm that
|
||
has no sequence_number subparameter.";
|
||
reference
|
||
"10.8.8 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf rx-resets {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqRcvyResets counter is incremented once each
|
||
time the SequenceRecoveryReset function is called.";
|
||
reference
|
||
"10.8.9 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf rx-latent-error-resets {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqRcvyLatentErrorResets counter is incremented
|
||
once each time the LatentErrorReset function is called.";
|
||
reference
|
||
"10.8.10 of IEEE Std 802.1CB-2017";
|
||
}
|
||
leaf encode-errored-pkts {
|
||
type uint64;
|
||
config false;
|
||
description
|
||
"The frerCpsSeqEncErroredPackets counter is incremented once
|
||
each time the Sequence encode/decode function receives a
|
||
packet that it is unable to decode successfully.";
|
||
reference
|
||
"10.8.11 of IEEE Std 802.1CB-2017";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|