Table Of Contents
QoS MIB Implementation
Implementing the CISCO-CLASS-BASED-QOS-MIB
QoS MIB Policy Action Support Matrix
QoS MIB Implementation
This appendix provides information about QoS-based features that are implemented on the Cisco ASR 9000 Series router line cards and what tables and objects in the QoS MIB support these QoS features. The Cisco ASR 9000 Series router line card families each have a different QoS implementation. Do not assume that the QoS features across line card families are equivalent. Some of the QOS configuration is done at the PFC2 (policy feature card) level and others at the parallel express forwarding (PXF) processor level in each line card.
This appendix contain the following topics:
•
Implementing the CISCO-CLASS-BASED-QOS-MIB
•
QoS MIB Policy Action Support Matrix
Implementing the CISCO-CLASS-BASED-QOS-MIB
This section describes which objects from the CISCO-CLASS-BASED-QOS-MIB are implemented, which objects are relevant to the features available for the Cisco ASR 9000 Series router line cards, and which QoS features are supported by each Cisco ASR 9000 Series router line card.
Table 6-1 defines the expected values for Policy Actions.
Table 6-1 QoS Policy Action Parameters
Policy Action
|
Definition
|
Notes
|
Bandwidth
|
A rate limiting function. The difference between the highest and lowest frequencies available for network signals. Bandwidth divides the link bandwidth among different traffic streams into multiple queues.
|
Must be set before you enable WRED.
Aggregate bandwidth rate limits match all of the packets on an interface or subinterface. Granular bandwidth rate limits match a particular type of traffic based on precedence, MAC address, or other parameters.
|
Priority
|
Priority queuing allows you to assign a guaranteed minimum bandwidth to one queue to minimize the packet delay variance for delay-sensitive traffic.
|
A routing feature in which frames in an output queue are prioritized based on various characteristics, such as packet size and interface type.
|
Shape
|
A shaper typically delays excess traffic using a buffer or queueing mechanism to hold packets and shape the flow when the data rate of the source is higher than expected. (For example, Generic traffic Shaping (GTS) uses a weighted fair queue to delay packets to shape the flow, and Frame Relay Traffic Shaping (FRTS) uses either a priority queue (PQ), a custom queue (CQ), or a first-in, first-out (FIFO) queue for the same, depending on how you configure it.)
|
Shapers identify traffic descriptor violations.
|
Police
|
A policer typically drops traffic. (For example, Committed Access Rate (CAR) rate-limiting policer either drops the packet or rewrites its IP precedence, resetting the packet header type of service bits.)
|
Policing is the process by which the OSR limits the bandwidth consumed by a flow of traffic. Policing can mark or drop traffic.
|
Queue limit
|
Parameter specifies the number of packets held by the queue. It operates on the default packet drop method of congestion management.
|
A Cisco queuing technique. A flow-based queuing algorithm that creates bit-wise fairness by allowing each queue to be serviced fairly in terms of byte count. For example, if queue 1 has 100-byte packets and queue 2 has 50-byte packets, the Weighted Fair Queuing (WFQ) algorithm takes two packets from queue 2 for each one packet from queue 1. This makes service fair for each queue: 100 bytes each time the queue is serviced.
WFQ ensures that queues do not starve for bandwidth and that traffic gets predictable service. Low-volume traffic streams-which comprise the majority of traffic-receive increased service, transmitting the same number of bytes as high-volume streams. This behavior results in what appears to be preferential treatment for low-volume traffic, when in actuality it is creating fairness.
|
Fair queue
|
Traffic shaping smooths traffic by storing traffic above the configured rate in a queue. When a packet arrives at the interface for transmission, the following happens:
• If the queue is empty, the arriving packet is processed by the traffic shaper.
• If possible, the traffic shaper sends the packet. Otherwise, the packet is placed in the queue.
• If the queue is not empty, the packet is placed in the queue.
When there are packets in the queue, the traffic shaper removes the number of packets it can transmit from the queue at each time interval.
|
A Cisco queuing technique. A flow-based queuing algorithm that creates bit-wise fairness by allowing each queue to be serviced fairly in terms of byte count. For example, if queue 1 has 100-byte packets and queue 2 has 50-byte packets, the WFQ algorithm takes two packets from queue 2 for each one packet from queue 1. This makes service fair for each queue: 100 bytes each time the queue is serviced.
|
Weighted Random Early Detection(WRED)
|
Action that randomly discards packets during IP precedence settings congestion.
|
Precedence is a value of 0 to 7 where zero is low priority traffic and 7 represents high priority traffic.
|
Set (precedence)
|
The IP precedence (QoS) bits in the packet header are rewritten. The packet is then transmitted. You can use this action to either color (set precedence) or recolor (modify existing packet precedence) the packet.
|
—
|
Notes About QoS:
•
Congestion-management tools include priority queuing (PQ), custom queuing (CQ), weighted fair queuing (WFQ), and class-based weighted fair queuing (CBWFQ).
•
Police and shape are traffic regulation mechanisms:
–
Shaping is used to create a traffic flow that limits the full bandwidth potential of the flows. This is used many times to prevent the overflow problem. For instance, many network topologies use Frame Relay in a hub-and-spoke design. In this case, the central site normally has a high-bandwidth link (such as T1), while remote sites have a low-bandwidth link in comparison (such as 384 Kbps). In this case, it is possible for traffic from the central site to overflow the low bandwidth link at the other end. Shaping is a good way to pace traffic closer to 384 Kbps to avoid the overflow of the remote link. Traffic above the configured rate is buffered for transmission later to maintain the rate configured.
–
Policing is similar to shaping, but it differs in one important way; traffic that exceeds the configured rate is not buffered (and normally is discarded).
QoS MIB Policy Action Support Matrix
The tables in this section describe which objects from the CISCO-CLASS-BASED-QOS-MIB are implemented and which ones are relevant to the different features available for the Cisco ASR 9000 Series router line cards. The tables are divided into objects on the Cisco ASR 9000 Series router platform that are:
•
Supported, implemented, and instrumented (works as defined in the MIB)—Table 6-3
•
Not supported or support is limited—Table 6-4
Table 6-2 lists the definitions of the values that are returned by objects listed in Table 6-3 and Table 6-4. Policy actions are dependent on return values.
Table 6-2 QoS Table Return Values
Identifier
|
Definition
|
Value is V.
|
Returns valid data
|
Value is I. The object is not supported by this platform.
|
Returns invalid data
|
Value is a dash (-).
|
Not instantiated (Does not instantiate [return] any value for this object.)
|
Table 6-3 lists QoS MIB table objects that are supported and implemented on the Cisco ASR 9000 Series router platform and the QoS policy actions that these objects support.
Table 6-3 Supported QoS MIB Objects
|
Policy Actions
|
|
MIB Tables and Objects
|
Band- width
|
Priority
|
Shape
|
Police
|
Queue Limit
|
Fair Queue
|
WRED
|
Set
|
Notes
|
cbQosCMStatsTable
|
|
|
|
|
|
|
|
|
|
cbQosCMPrePolicyPkt Overflow
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
The objects listed with a value of V are supported and return valid data.
|
cbQosCMPrePolicyPkt
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMPrePolicyPkt64
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMPrePolicyByte Overflow
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMPrePolicyByte
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMPrePolicyByte64
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMPrePolicyBitRate
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMPostPolicyByte Overflow
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMPostPolicyByte
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMPostPolicy Byte64
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMPostPolicyBit Rate
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMDropPkt Overflow
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMDropPkt
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMDropPkt64
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMDropByte Overflow
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMDropByte
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMDropByte64
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMDropBitRate
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosMatchStmtStatsTable
|
|
|
|
|
|
|
|
|
|
cbQosMatchPrePolicyPkt Overflow
|
I
|
I
|
I
|
V
|
I
|
I
|
I
|
I
|
The objects listed with a value of I (invalid) are supported but return invalid data for all actions except for Police action (the return data is valid).
|
cbQosMatchPrePolicyPkt
|
I
|
I
|
I
|
V
|
I
|
I
|
I
|
I
|
|
cbQosMatchPrePolicy Pkt64
|
I
|
I
|
I
|
V
|
I
|
I
|
I
|
I
|
|
cbQosMatchPrePolicyByte Overflow
|
I
|
I
|
I
|
V
|
I
|
I
|
I
|
I
|
|
cbQosMatchPrePolicyByte
|
I
|
I
|
I
|
V
|
I
|
I
|
I
|
I
|
|
cbQosMatchPrePolicyBit Rate
|
I
|
I
|
I
|
V
|
I
|
I
|
I
|
I
|
|
cbQosMatchPrePolicy Byte64
|
I
|
I
|
I
|
V
|
I
|
I
|
I
|
I
|
|
cbQosPoliceStatsTable
|
|
|
|
|
|
|
|
|
|
cbQosPoliceConformed PktOverflow
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
The objects listed are supported but only return V data for Police action.
|
cbQosPoliceConformedPkt
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceConformed Pkt64
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
The objects listed are supported but only return V data for Police action.
|
cbQosPoliceConformed ByteOverflow
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceConformed Byte
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceConformed Byte64
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceConformed BitRate
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExceededPkt Overflow
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExceededPkt
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExceeded Pkt64
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExceeded ByteOverflow
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExceededByte
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExceeded Byte64
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExceeded BitRate
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosQueueingStatsTable
|
|
|
|
|
|
|
|
|
|
cbQosQueueingCurrent QDepth
|
V
|
V
|
-
|
-
|
V
|
V
|
-
|
-
|
The objects listed are supported but return valid data only for Bandwidth, Priority, Queue Limit, and Fair Queue.
|
cbQosQueueingMax QDepth
|
V
|
V
|
-
|
-
|
V
|
V
|
-
|
-
|
|
cbQosQueueingDiscard ByteOverflow
|
V
|
V
|
-
|
-
|
V
|
V
|
-
|
-
|
|
cbQosQueueingDiscard Byte
|
V
|
V
|
-
|
-
|
V
|
V
|
-
|
-
|
|
cbQosQueueingDiscard Byte64
|
V
|
V
|
-
|
-
|
V
|
V
|
-
|
-
|
|
cbQosQueueingDiscard PktOverflow
|
V
|
V
|
-
|
-
|
V
|
V
|
-
|
-
|
|
cbQosQueueingDiscardPkt
|
V
|
V
|
-
|
-
|
V
|
V
|
-
|
-
|
|
cbQosQueueingDiscard Pkt64
|
V
|
V
|
-
|
-
|
V
|
V
|
-
|
-
|
|
cbQosTSStatsTable
|
|
|
|
|
|
|
|
|
The objects listed are supported but only V data for only Shape, Queue Limit, Fair Queue, and WRED.
|
cbQosTSStatsDropByte Overflow
|
-
|
-
|
V
|
-
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDropByte
|
-
|
-
|
V
|
-
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDropByte64
|
-
|
-
|
V
|
-
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDropPkt Overflow
|
-
|
-
|
V
|
-
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDropPkt
|
-
|
-
|
V
|
-
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDropPkt64
|
-
|
-
|
V
|
-
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsCurrentQSize
|
-
|
-
|
V
|
-
|
V
|
V
|
V
|
-
|
|
cbQosREDClassStatsTable
|
|
|
|
|
|
|
|
|
Not instantiated for Shape even though the CLI shows values for random and tail counters.
|
cbQosREDRandomDrop PktOverflow
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
The objects are supported but only V data for WRED action only.
|
cbQosREDRandomDropPkt
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDRandomDrop Pkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDRandom DropByteOverflow
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDRandomDrop Byte
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDRandomDrop Byte64
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTailDropPkt Overflow
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTailDropPkt
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
The objects are supported but only V data for WRED action only.
|
cbQosREDTailDropPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTailDropByte Overflow
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTailDropByte
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTailDrop Byte64
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTransmitPkt Overflow
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTransmitPkt
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTransmitPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTransmitByte Overflow
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTransmitByte
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
cbQosREDTransmitByte64
|
-
|
-
|
-
|
-
|
-
|
-
|
V
|
-
|
|
Table 6-4 lists QoS MIB table objects that are unsupported or have limited support on the Cisco ASR 9000 Series router platform and the QoS policy actions that these objects support.
Table 6-4 QoS MIB Objects—Unsupported or Limited Support
MIB Tables and Objects
|
Policy Actions
|
|
Band- width
|
Priority
|
Shape
|
Police
|
Queue Limit
|
Fair Queue
|
WRED
|
Set
|
Notes
|
cbQosCMStatsTable
|
|
|
|
|
|
|
|
|
The objects listed are not supported, but return valid data which is always zero (0).
|
cbQosCMNoBufDropPkt Overflow
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMNoBufDropPkt
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosCMNoBufDrop Pkt64
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
V
|
|
cbQosPoliceStatsTable
|
|
|
|
|
|
|
|
|
The objects listed are not supported, but return valid data for Police action which is always zero (0).
|
cbQosPoliceViolatedPkt Overflow
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceViolatedPkt
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceViolatedPkt64
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceViolated ByteOverflow
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceViolatedByte
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceViolated Byte64
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosPoliceViolated BitRate
|
-
|
-
|
-
|
V
|
-
|
-
|
-
|
-
|
|
cbQosTSStatsTable
|
|
|
|
|
|
|
|
|
The objects listed are not supported but do return valid data which is always zero (0) for Shape, Queue Limit, Fair Queue, and WRED.
|
cbQosTSStatsDelayed ByteOverflow
|
-
|
-
|
V
|
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDelayedByte
|
-
|
-
|
V
|
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDelayed Byte64
|
-
|
-
|
V
|
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDelayed PktOverflow
|
-
|
-
|
V
|
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDelayedPkt
|
-
|
-
|
V
|
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsDelayed Pkt64
|
-
|
-
|
V
|
|
V
|
V
|
V
|
-
|
|
cbQosTSStatsActive
|
-
|
-
|
I
|
|
I
|
I
|
I
|
-
|
This object is not supported and returns invalid data which is always zero (0) for a truthValue type.
|
cbQosREDClassStatsTable
|
|
|
|
|
|
|
|
|
The objects listed with a dash (-) are not supported.
|
cbQosREDECNMarkPkt Overflow
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosREDECNMarkPkt
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosREDECNMarkPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosREDECNMarkByte Overflow
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosREDECNMarkByte
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosREDECNMarkByte64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosREDMeanQSizeUnits
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosREDMeanQSize
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetStatsTable
|
|
|
|
|
|
|
|
|
The objects listed with a dash (-) are not supported.
|
cbQosSetDscpPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetPrecedencePkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetQosGroupPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetFrDePkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetAtmClpPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetL2CosPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetMplsExpImposition Pkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetDiscardClassPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetMplsExpTopMost Pkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetSrpPriorityPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetFrFecnBecnPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetDscpTunnelPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosSetPrecedenceTunnel Pkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceColorStatsTable
|
|
|
|
|
|
|
|
|
The objects listed with a dash (-) are not supported.
|
cbQosPoliceCfmColorCfm Pkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceCfmColorCfm Byte64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceCfmColorExd Pkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceCfmColorExd Byte64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceCfmColorVlt Pkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceCfmColorVlt Byte64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExdColorExdPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExdColorExd Byte64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExdColorVltPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceExdColorVlt Byte64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceVltColorVltPkt64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|
cbQosPoliceVltColorVlt Byte64
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
-
|
|