// Copyright (c) 2005 DMTF.  All rights reserved.
   [Version ( "2.7.0" ), 
    UMLPackagePath ( "CIM::Network::QoS" ), 
    Description ( 
       "REDDropperService represents the ability to drop network "
       "traffic using a Random Early Detection (RED) algorithm. The "
       "purpose of a RED algorithm is to avoid congestion (as opposed "
       "to managing congestion). Instead of waiting for the queues to "
       "fill up, and then dropping large numbers of packets, RED works "
       "by monitoring average queue depth. When the queue depth "
       "exceeds a minimum threshold, packets are randomly discarded. "
       "These discards cause TCP to slow its transmission rate for "
       "those connections that experienced the packet discards. Other "
       "connections are not affected by these discards. \n"
       "\n"
       "A RED dropper always drops packets from a single queue, which "
       "is related to the dropper as the following Service in the "
       "NextService association. The queue(s) examined by the drop "
       "algorithm are found by following the "
       "CalculationServiceForDropper association(s) to determine the "
       "dropper\'s DropThresholdCalculationService(s), and then "
       "following the CalculationBasedOnQueue association to find the "
       "queue being watched by each CalculationService." )]
class CIM_REDDropperService : CIM_DropperService {

      [Description ( 
          "This is an unsigned 32-bit integer that defines the "
          "minimum average queue depth at which packets are subject "
          "to being dropped. (See the ThresholdUnits property to "
          "determine the units of the threshold.) The slope of the "
          "drop probability function is described by the "
          "Start/StopProbability properties." ), 
       ModelCorrespondence { "CIM_REDDropperService.ThresholdUnits" }]
   uint32 MinQueueThreshold;

      [Description ( 
          "This is an unsigned 32-bit integer that defines the "
          "maximum average queue length at which packets are "
          "subject to always being dropped, regardless of the "
          "dropping algorithm and probabilities being used. (See "
          "the ThresholdUnits property to determine the units of "
          "the threshold.)" ), 
       MinValue ( 0 ), 
       MaxValue ( 1000 ), 
       ModelCorrespondence { "CIM_REDDropperService.ThresholdUnits" }]
   uint32 MaxQueueThreshold;

      [Description ( 
          "This is an unsigned 32-bit integer, used in conjunction "
          "with the StopDropProbability property. The start and "
          "stop probabilities define the slope of the drop "
          "probability function. This function governs the rate at "
          "which packets are subject to being dropped, as a "
          "function of the queue length. \n"
          "\n"
          "This property expresses a drop probability in drops per "
          "thousand packets. For example, the value 100 indicates a "
          "drop probability of 100 per 1000 packets, that is, 10%. "
          "Min and max values are 0 to 1000." ), 
       Units ( "Per Thousand Packets" ), 
       ModelCorrespondence { "CIM_REDDropperService.StopProbability" }]
   uint32 StartProbability;

      [Description ( 
          "This is an unsigned 32-bit integer, used in conjunction "
          "with the StartDropProbability property. The start and "
          "stop probabilities define the slope of the drop "
          "probability function. This function governs the rate at "
          "which packets are subject to being dropped, as a "
          "function of the queue length. \n"
          "\n"
          "This property expresses a drop probability in drops per "
          "thousand packets. For example, the value 100 indicates a "
          "drop probability of 100 per 1000 packets, that is, 10%. "
          "Min and max values are 0 to 1000." ), 
       Units ( "Per Thousand Packets" ), 
       MinValue ( 0 ), 
       MaxValue ( 1000 ), 
       ModelCorrespondence { "CIM_REDDropperService.StartProbability" }]
   uint32 StopProbability;

      [Description ( 
          "ThresholdUnits is an enumerated integer that identifies "
          "the units for the Min and MaxQueueThreshold properties. "
          "The values are either bytes (1) or packets (2)." ), 
       ValueMap { "1", "2" }, 
       Values { "Bytes", "Packets" }]
   uint16 ThresholdUnits;


};
