1 kumpf 1.2 // ===================================================================
2 // Title: Network Quality of Service 2.7.0
3 // Filename: Network27_QoS.mof
4 // Version: 2.7.0
5 // Status: Final
6 // Date: April 18, 2003
7 // ===================================================================
8 // Copyright 1998-2003 Distributed Management Task Force, Inc. (DMTF).
9 // All rights reserved.
10 // DMTF is a not-for-profit association of industry members dedicated
11 // to promoting enterprise and systems management and interoperability.
12 // DMTF specifications and documents may be reproduced for uses
13 // consistent with this purpose by members and non-members,
14 // provided that correct attribution is given.
15 // As DMTF specifications may be revised from time to time,
16 // the particular version and release date should always be noted.
17 //
18 // Implementation of certain elements of this standard or proposed
19 // standard may be subject to third party patent rights, including
20 // provisional patent rights (herein "patent rights"). DMTF makes
21 // no representations to users of the standard as to the existence
22 kumpf 1.2 // of such rights, and is not responsible to recognize, disclose, or
23 // identify any or all such third party patent right, owners or
24 // claimants, nor for any incomplete or inaccurate identification or
25 // disclosure of such rights, owners or claimants. DMTF shall have no
26 // liability to any party, in any manner or circumstance, under any
27 // legal theory whatsoever, for failure to recognize, disclose, or
28 // identify any such third party patent rights, or for such party's
29 // reliance on the standard or incorporation thereof in its product,
30 // protocols or testing procedures. DMTF shall have no liability to
31 // any party implementing such standard, whether such implementation
32 // is foreseeable or not, nor to any patent owner or claimant, and shall
33 // have no liability or responsibility for costs or losses incurred if
34 // a standard is withdrawn or modified after publication, and shall be
35 // indemnified and held harmless by any party implementing the
36 // standard from any and all claims of infringement by a patent owner
37 // for such implementations.
38 //
39 // For information about patents held by third-parties which have
40 // notified the DMTF that, in their opinion, such patent may relate to
41 // or impact implementations of DMTF standards, visit
42 // http://www.dmtf.org/about/policies/disclosures.php.
43 kumpf 1.2 // ===================================================================
44 // Description: The Network Model extends the management concepts to
45 // represent protocol interfaces and network/protocol
46 // services. This file defines classes to manage
47 // DiffServ/IntServ quality of service.
48 //
49 // The object classes below are listed in an order that
50 // avoids forward references. Required objects, defined
51 // by other working groups, are omitted.
52 // ==================================================================
53 // Change Log for v2.7
54 // CR662 - Modify Description of QoSService to indicate that
55 // NetworkService has been deprecated
56 // CR794 - Updates to PacketSchedulingService:
57 // - Update description
58 // - Change subclassing from ForwardingService to
59 // ConditioningService
60 // (ERRATA) - Change the enumeration for SchedulerType
61 // - Update description for OtherSchedulerType
62 // - Add NextScheduler Association
63 // - Add NonWorkConservingSchedulingService and FailNextScheduler
64 kumpf 1.2 // (ERRATA) - Remove PrioritySchedulingService,
65 // PriorityBandwidthSchedulingService,
66 // BandwidthSchedulingService,
67 // RoundRobinPacketSchedulingService and
68 // WeightedRoundRobinPacketSchedulingService
69 // - Deprecate SchedulerUsed
70 // CR795 - Updates to DropperService:
71 // - Update description
72 // (ERRATA) - Change the enumeration for DropperType
73 // - Deprecate AlwaysDrop property
74 // - Add DropFrom property
75 // - Changes to REDDropperService to update description, update
76 // description of MinQueueThreshold and MaxQueueThreshold
77 // properties, and add ThresholdUnits property
78 // (ERRATA) - In REDDropperService, change the datatype of the
79 // StartProbability and StopProbability properties
80 // - Add HeadTrailDropper
81 // - Deprecate WeightedREDDropperService
82 // CR795 (Continued) - Updates to QueuingService:
83 // - Update description
84 // - Add CurrentQueueDepth and DepthUnits properties
85 kumpf 1.2 // (ERRATA) - Remove the SmoothingWeight, TimeInterval, and
86 // GiveExcessCapacity properties
87 // - Add DropThresholdCalculationService
88 // - Add QueueAllocation.AllocationPercentage
89 // - Deprecate QueueHierarchy
90 // - Add CalculationServiceForDropper, CalculationBasedOnQueue
91 // and HeadTailDropQueueBinding
92 // CR796 - Updates to MarkerService:
93 // - Update description
94 // - Remove the CanRemark, RemarkType, OtherRemarkType,
95 // and RemarkValue properties
96 // - Add PreambleMarkerService, ToSMarkerService,
97 // DSCPMarkerService and 8021QMarkerService
98 // CR797 - Update description for MeterService and expand the
99 // abbreviations for MeterType
100 // - Update description for AverageRateMeterService
101 // (ERRATA) - Change the datatype for AverageRateMeterService.
102 // AverageRate from real32 to uint32 and change the
103 // units for AverageRateMeterService.DeltaInterval
104 // - Update the description for EWMAMeterService
105 // (ERRATA) - Change the datatype for EWMAMeterService
106 kumpf 1.2 // .AverageRate and.Gain from real32 to uint32
107 // (ERRATA) - Change the Units of EWMAMeterService.DeltaIntervals
108 // - Update the description for TokenBucketMeterService
109 // - Change the datatype for TokenBucketMeterService
110 // .AverageRate, .PeakRate, .BurstSize, and
111 // .ExcessBurstSize from real32 to uint32
112 // (ERRATA) - Fix subclassing of NextServiceAfterMeter, fix
113 // misspelled property name, and update the enum values for
114 // MeterResult
115 // CR798 - Updates to ClassifierService:
116 // - Update description
117 // - Remove ClassifierType, OtherClassifierType, and
118 // HaveClassifiedPacket properties
119 // - Add ClassifierElement, ClassifierElementInClassifierService,
120 // ClassifierElementUsesFilterList, and
121 // NextServiceAfterClassifierElement
122 // - Deprecate ClassifierFilterSet
123 // CR799 - Updates to QoSService:
124 // - Update the description
125 // (ERRATA) - Change the subclassing
126 // - Add Composition qualifier to QoSSubService
127 kumpf 1.2 // - Update description for QoSConditioningSubService and
128 // remove the Max (1) from the "Group" ref
129 // - Update the description for DiffServService
130 // - Deprecate DiffServService.DSCP
131 // - Add DiffServService.PHBID
132 // - Update the description for AFService and its ClassNumber
133 // and DropperNumber properties
134 // - Add FlowService
135 // - Deprecate PrecedenceService, 8021PService and EFService
136 // CR800 - Updates to ConditioningService:
137 // - Update the class description
138 // - Deprecate the Enabled property
139 // (ERRATA) - Change the subclassing
140 // - Deprecate ConditioningServiceOnEndpoint
141 // - Add IngressConditioningServiceOnEndpoint and
142 // EgressConditioningServiceOnEndpoint
143 // CR800 (Continued) - Updates for NextService:
144 // - Update the class description
145 // (ERRATA) - Remove the TrafficClass property
146 // - Fix spelling of reference (Preceeding, should be Preceding)
147 // CR849 - Define InstanceID as the Key of SchedulingElement
148 kumpf 1.2 // CR914 - Change inheritance of the deprecated association,
149 // ConditioningServiceOnEndpoint (from ForwardsAmong to its
150 // superclass, Dependency). Remove the ValueMap qualifier
151 // from the properties, WRRSchedulingElement.WorkConserving,
152 // PrioritySchedulingElement.WorkConserving, and
153 // BoundedPrioritySchedulingElement.WorkConserving
154 // CR920 - Remove the Key qualifier from NextScheduler.FollowingService
155 // since its superclass defines the key; Add missing parenthesis
156 // to the Description of AFService
157 // CR961 - Update the reference to EnabledLogicalElement.EnabledState
158 // CR982 - Removal of Experimental for preliminary to final
159 // CR983 - v2.7 Deprecations promoted to final
160 // CR994 - Update the InstanceID property Description
161 // ===================================================================
162
163 #pragma Locale ("en_US")
164
165
166 // ===================================================================
167 // QoSService
168 // ===================================================================
169 kumpf 1.2 [Version ("2.7.0"), Description (
170 "This is a concrete class that represents the ability to "
171 "conceptualize a QoS service as a set of coordinated "
172 "sub-services. This enables the network administrator to map "
173 "business rules to the network, and the network designer to "
174 "engineer the network such that it can provide different "
175 "functions for different traffic streams. \n"
176 "\n"
177 "This class has two main purposes. First, it serves as a "
178 "common base class for defining various sub-services that "
179 "are needed to build higher-level QoS services. Second, it "
180 "serves as a way to consolidate relationships between "
181 "different types of QoS services and different types of "
182 "ConditioningServices. \n"
183 "\n"
184 "For example, Gold Service may be defined as a QoSService "
185 "which aggregates two other QoSServices together. Each of "
186 "these 'other' QoSServices could be DiffServServices - one "
187 "representing the servicing of very high demand packets "
188 "(instantiated as a DiffServService directly), and one "
189 "representing the service given to most of the packets "
190 kumpf 1.2 "(instantiated as an AFService). The high demand "
191 "DiffServService instance would use QoSConditioning"
192 "SubService to aggregate together the necessary classifiers "
193 "to indicate which traffic it applies to, the appropriate "
194 "meters for contract limits, the marker to mark the EF PHB "
195 "in the packets, and the queuing-related services. The "
196 "AFService instance would similarly use QoSConditioning"
197 "SubService to aggregate its classifiers, meters, the several "
198 "markers used to mark the different AF PHBs in the packets, "
199 "and the queuing-related services needed to deliver the packet "
200 "treatment.") ]
201 class CIM_QoSService : CIM_Service {
202 };
203
204
205 // ==================================================================
206 // QoSSubService
207 // ==================================================================
208 [Association, Aggregation, Composition, Version ("2.7.0"),
209 Description (
210 "The associations - QoSSubService and QoSConditioningSub"
211 kumpf 1.2 "Service - operate in conjunction. High level QoS "
212 "definitions, such as 'John gets Gold Service', map to "
213 "lower level, more concrete QoSServices (the subclasses "
214 "of QoSService). This is described by the QoSSubService "
215 "association. In turn, each of the SubServices may require "
216 "their own conditioning. This is modeled using the "
217 "QoSConditioningSubService aggregation. \n"
218 "\n"
219 "Note that a more concrete QoSService may only be "
220 "aggregated into one higher level Service, using this "
221 "association. The cardinality on the GroupComponent "
222 "reference is Max (1).") ]
223 class CIM_QoSSubService : CIM_ServiceComponent {
224
225 [Override ("GroupComponent"), Aggregate, Max (1),
226 Description (
227 "The higher level QoSService that is constructed by "
228 "aggregating one or more lower-level QoSServices.") ]
229 CIM_QoSService REF GroupComponent;
230
231 [Override ("PartComponent"), Description (
232 kumpf 1.2 "The more concrete QoSService that is used to provide "
233 "the higher level Service.") ]
234 CIM_QoSService REF PartComponent;
235 };
236
237
238 // ===================================================================
239 // PrecedenceService
240 // ===================================================================
241 [Version ("2.7.0"), Deprecated {"CIM_QoSService"},
242 Description (
243 "This class represents a specialization of the general "
244 "concept of forwarding network traffic by adding specific "
245 "semantics that define how traffic is forwarded based on "
246 "the value of the ToS byte of a packet. \n"
247 "\n"
248 "This class is used to enable DiffServ devices and non-"
249 "DiffServ devices to exchange traffic. This is done by "
250 "defining a sibling class, DiffServService, to represent "
251 "devices that forward traffic based on the DiffServ code "
252 "point. This enables the administrator to define mappings "
253 kumpf 1.2 "between devices that do not support DiffServ (and instead "
254 "use IP Precedence) and those that do support DiffServ. \n"
255 "\n"
256 "PrecedenceService is deprecated since forwarding based on the "
257 "value of the ToS byte is specified using a FilterList, which "
258 "is associated with a ClassifierElement. If there is a need to "
259 "distinguish a higher-level set of coordinated QoS services, "
260 "the QoSService class can be instantiated directly.") ]
261 class CIM_PrecedenceService : CIM_QoSService {
262
263 [Deprecated {"CIM_IPHeadersFilter.HdrDSCP"},
264 Description (
265 "This property is an 8-bit unsigned integer that defines the "
266 "notion of precedence for different types of traffic.") ]
267 uint8 PrecedenceValue;
268 };
269
270
271 // ===================================================================
272 // DiffServService
273 // ===================================================================
274 kumpf 1.2 [Version ("2.7.0"), Description (
275 "DiffServService represents the use of standard or custom "
276 "DiffServ services (associated with particular Per Hop "
277 "Behaviors, PHBs) to implement a (higher-level) QoSService. "
278 "Note that the DiffServService may be just one of a set "
279 "of coordinated QoSSubServices that together implement a "
280 "higher-level QoSService. The relationship between the "
281 "QoSServices is described using the association, "
282 "QoSSubService.") ]
283 class CIM_DiffServService : CIM_QoSService {
284
285 [Deprecated {"CIM_DiffServService.PHBID"},
286 Description (
287 "This property is an unsigned 8-bit integer, and defines the "
288 "Differentiated Services Code Point (DSCP) that this link "
289 "uses to represent various types of differentiated "
290 "services through device-specific configuration commands. It"
291 "is deprecated since this information is conveyed via "
292 "filter lists, associated with ClassifierElements. The "
293 "DiffServService is better represented as a Per Hop "
294 "Behavior.") ]
295 kumpf 1.2 uint8 DSCP;
296
297 [Description (
298 "A 16-bit unsigned integer which identifies a particular "
299 "per hop behavior, or family of per hop behaviors. The "
300 "value is a Per Hop Behavior Identification Code, as defined "
301 "in [R3140]. Note that as defined, these identification codes "
302 "use the default, recommended, code points for PHBs as part of "
303 "their structure. These values may well be different from the "
304 "actual value used in the marker, as the marked value is "
305 "domain-dependent. The ability to indicate the PHB "
306 "Identification Code associated with a DiffServService is "
307 "helpful when tying the QoSService to reference documents, "
308 "and for inter-domain coordination and operation.") ]
309 uint16 PHBID;
310 };
311
312
313 // ===================================================================
314 // 8021PService
315 // ===================================================================
316 kumpf 1.2 [Version ("2.7.0"), Deprecated {"CIM_QoSService"},
317 Description (
318 "This class represents a specialization of the general "
319 "concept of forwarding network traffic by adding specific "
320 "semantics that define how traffic is forwarded based on "
321 "the value of the Priority field in the 802.1P header. \n"
322 "\n"
323 "This class is used to enable DiffServ domains and domains "
324 "that support 802.1P only to exchange traffic. It represents "
325 "the mapping between implementations that only support "
326 "802.1P priority marking to be mapped to implementations "
327 "that support DiffServ, which use DSCPs. \n"
328 "\n"
329 "8021PService is deprecated since forwarding based on the "
330 "value of the Priority field in the 802.1P header is "
331 "specified using a FilterList, which is associated with "
332 "a ClassifierElement. If there is a need to distinguish "
333 "a higher-level set of coordinated QoS services, the "
334 "QoSService class can be instantiated directly.") ]
335 class CIM_8021PService : CIM_QoSService {
336
337 kumpf 1.2 [Deprecated {"CIM_8021Filter.8021HdrPriorityValue"},
338 Description (
339 "This property is an 8-bit unsigned integer that defines "
340 "the notion of priority as specified in 802.1P "
341 "implementations.") ]
342 uint8 PriorityValue;
343 };
344
345
346 // ===================================================================
347 // AFService
348 // ===================================================================
349 [Version ("2.7.0"), Description (
350 "This class represents a specialization to the general "
351 "concept of forwarding network traffic by adding specific "
352 "semantics that characterize the operation of the Assured "
353 "Forwarding (AF) Service (RFC2597). This RFC defines four "
354 "different AF classes to represent four different treatments "
355 "of traffic (e.g., a different amount of forwarding "
356 "resources, such as buffer space and bandwidth, are "
357 "allocated). Within each AF class, IP packets are marked with "
358 kumpf 1.2 "one of three possible drop precedence values. The drop "
359 "precedence of a packet determines the relative "
360 "importance of that packet compared to other packets within "
361 "the same AF class if congestion occurs. A congested "
362 "interface will try to avoid dropping packets with a lower "
363 "drop precedence value by instead discarding packets with a "
364 "higher drop precedence value. \n"
365 "\n"
366 "Note that [R2597] defines 12 DSCPs that together represent "
367 "the AF Per Hop Behavior (PHB) group. Implementations are "
368 "free to extend this (e.g., add more classes and/or drop "
369 "precedences). \n"
370 "\n"
371 "The AFService class is modeled as a specialization of "
372 "DiffServService, which is in turn a specialization of QoSService. "
373 "This enables it to be related to higher-level QoSServices, as "
374 "well as to lower-level conditioning sub-services (e.g., "
375 "classification, metering, dropping, queuing, and others).") ]
376 class CIM_AFService : CIM_DiffServService {
377
378 [Description (
379 kumpf 1.2 "This property is an 8-bit unsigned integer that indicates "
380 "the number of AF classes that this AF implementation uses. "
381 "Among the instances aggregated into AFService (using "
382 "QoSConditioningSubService), one SHOULD find markers with "
383 "as many distinct values as is indicated by ClassNumber.") ]
384 uint8 ClassNumber;
385
386 [Description (
387 "This property is an 8-bit unsigned integer that indicates "
388 "the number of drop precedence values that this AF "
389 "implementation uses. The number of drop precedence values "
390 "is the number PER AF CLASS. The corresponding droppers are "
391 "found in the collection of ConditioningServices aggregated "
392 "by QoSConditioningSubService.") ]
393 uint8 DropperNumber;
394 };
395
396
397 // ===================================================================
398 // FlowService
399 // ===================================================================
400 kumpf 1.2 [Version ("2.7.0"), Description (
401 "This class represents a service that supports a particular "
402 "microflow. The microflow is identified by the string-valued "
403 "property FlowID. In some implementations, an instance of this "
404 "class corresponds to an entry in the implementation's flow "
405 "table.") ]
406 class CIM_FlowService : CIM_QoSService {
407
408 [Description (
409 "This property is a string containing an identifier for a "
410 "microflow.") ]
411 string FlowID;
412 };
413
414
415 // ===================================================================
416 // EFService
417 // ===================================================================
418 [Version ("2.7.0"), Deprecated {"CIM_DiffServService"},
419 Description (
420 "This class represents a specialization of the general "
421 kumpf 1.2 "concept of forwarding network traffic by adding specific "
422 "semantics that characterize the operation of the "
423 "Expedited Forwarding (EF) Service (defined in RFC 2598). \n"
424 "\n"
425 "The EF PHB can be used to build a low loss, low latency, "
426 "low jitter, assured bandwidth, end-to-end service through "
427 "DiffServ domains. Such a service appears to the endpoints "
428 "like a point-to-point connection or a virtual leased line. "
429 "This service has also been described as Premium service in "
430 "the IETF literature. \n"
431 "\n"
432 "RFC 2598 defines one DSCP for the EF service. Thus, there "
433 "is no need to define any attributes in this class, since an "
434 "instance of the EFService class, by definition, means that "
435 "this particular DSCP is used. \n"
436 "\n"
437 "EFService is deprecated since forwarding based on the "
438 "value of the DiffServ Code Point is specified using a "
439 "FilterList, which is associated with a ClassifierElement. "
440 "If there is a need to distinguish a higher-level set of "
441 "coordinated QoS services, the DiffServService class can "
442 kumpf 1.2 "be instantiated directly.") ]
443 class CIM_EFService : CIM_DiffServService {
444 };
445
446
447 // ==================================================================
448 // AFRelatedServices
449 // ==================================================================
450 [Association, Version ("2.6.0"), Description (
451 "The IETF's RFC2597 describes a Differentiated Services "
452 "Per-Hop-Behavior (PHB) Group called Assured Forwarding "
453 "(AF). Quoting from the RFC, 'The AF PHB group provides "
454 "delivery of IP packets in four independently forwarded "
455 "AF classes. Within each AF class, an IP packet can be "
456 "assigned one of three different levels of drop "
457 "precedence.' The AFRelatedServices association describes "
458 "the precedence of the individual AF drop-related "
459 "Services within an AF IP packet-forwarding class.") ]
460 class CIM_AFRelatedServices {
461
462 [Key, Max (1), Description (
463 kumpf 1.2 "The AFService with a lower drop precedence (ie, lower "
464 "probability of dropping packets).") ]
465 CIM_AFService REF AFLowerDropPrecedence;
466
467 [Key, Description (
468 "An AFService at the same IP packet-forwarding class level, "
469 "but at a higher drop precedence.") ]
470 CIM_AFService REF AFHigherDropPrecedence;
471 };
472
473
474 // ===================================================================
475 // ConditioningService
476 // ===================================================================
477 [Version ("2.7.0"), Description (
478 "ConditioningService represents the ability to define how "
479 "traffic is conditioned in the data-forwarding path of a "
480 "device. The subclasses of ConditioningService define the "
481 "particular types of conditioning that are done. These are "
482 "the services performed by a classifier, a meter, a marker, "
483 "a dropper, a queue, and a scheduler. Other, more "
484 kumpf 1.2 "sophisticated types of conditioning may be defined in the "
485 "future. \n"
486 "\n"
487 "ConditioningService is a concrete class because its "
488 "superclass (ForwardingService) is concrete. While "
489 "this class can be instantiated, an instance of it "
490 "does not accomplish anything, because the nature of the "
491 "conditioning, and the parameters that control it, are "
492 "specified only in the subclasses of ConditioningService. \n"
493 "\n"
494 "Two associations in which ConditioningService participates "
495 "are critical to its usage in QoS - QoSConditioningSubService "
496 "and NextService. QoSConditioningSubService aggregates "
497 "ConditioningServices into a particular QoS service (such as "
498 "AF), to describe the specific conditioning functionality that "
499 "underlies that QoSService in a particular device. NextService "
500 "indicates the subsequent conditioning service(s) for "
501 "different traffic streams.") ]
502 class CIM_ConditioningService : CIM_Service {
503
504 [Deprecated {"CIM_EnabledLogicalElement.EnabledState"},
505 kumpf 1.2 Description (
506 "This property is a boolean that, if TRUE, signifies that "
507 "one or more conditioning functions can be performed on "
508 "traffic encountered by this ConditioningService. This "
509 "allows one or more ConditioningServices to be enabled or "
510 "disabled to provide different types of conditioning for "
511 "traffic. Enabled is deprecated in lieu of a similar "
512 "(but more generally and completely defined) property "
513 "which is inherited.") ]
514 boolean Enabled;
515 };
516
517
518 // ==================================================================
519 // QoSConditioningSubService
520 // ==================================================================
521 [Association, Aggregation, Version ("2.7.0"),
522 Description (
523 "A QoSService utilizes underlying ConditioningServices as "
524 "part of its overall functionality. This is modeled using "
525 "the QoSConditioningSubService association. Note that "
526 kumpf 1.2 "a ConditioningService may only be part of a single "
527 "QoSService - the cardinality on the QoSService "
528 "reference is Max (1).") ]
529 class CIM_QoSConditioningSubService : CIM_ServiceComponent {
530
531 [Override ("GroupComponent"), Aggregate,
532 Description (
533 "This aggregation identifies the set of ConditioningServices "
534 "that together condition traffic for a particular "
535 "QoSService.") ]
536 CIM_QoSService REF GroupComponent;
537
538 [Override ("PartComponent"),
539 Description ("The ConditioningService.") ]
540 CIM_ConditioningService REF PartComponent;
541 };
542
543
544 // ==================================================================
545 // ConditioningServiceOnEndpoint
546 // ==================================================================
547 kumpf 1.2 [Association, Version ("2.7.0"),
548 Deprecated {"CIM_IngressConditioningServiceOnEndpoint",
549 "CIM_EgressConditioningServiceOnEndpoint"},
550 Description (
551 "The QoS Model describes the traffic conditioning functions "
552 "in place for a network device. In order to 'be "
553 "conditioned', a packet is received at a ProtocolEndpoint. "
554 "After 'conditioning', a packet is dropped or leaves the "
555 "device via a ProtocolEndpoint. This dependency on "
556 "ProtocolEndpoints is defined by the ConditioningServiceOn"
557 "Endpoint association. A property of the association, "
558 "ServiceType, indicates whether the ConditioningService "
559 "handles incoming (\"Ingress\") or out-going (\"Egress\") "
560 "packets. This association is deprecated since different "
561 "cardinalities are needed on the ingress and egress "
562 "classes. This cannot be done using a single association.") ]
563 class CIM_ConditioningServiceOnEndpoint : CIM_Dependency {
564
565 [Deprecated {
566 "CIM_IngressConditioningServiceOnEndpoint.Antecedent",
567 "CIM_EgressConditioningServiceOnEndpoint.Antecedent "},
568 kumpf 1.2 Override ("Antecedent"), Max (1), Description (
569 "The ProtocolEndpoint through which traffic arrives at or "
570 "leaves from a network device.") ]
571 CIM_ProtocolEndpoint REF Antecedent;
572
573 [Deprecated {
574 "CIM_IngressConditioningServiceOnEndpoint.Dependent",
575 "CIM_EgressConditioningServiceOnEndpoint.Dependent"},
576 Override ("Dependent"), Description (
577 "The ConditioningService which begins or ends the traffic "
578 "conditioning processing within a network device.") ]
579 CIM_ConditioningService REF Dependent;
580
581 [Deprecated {"CIM_IngressConditioningServiceOnEndpoint",
582 "CIM_EgressConditioningServiceOnEndpoint"},
583 Description (
584 "Indicates whether a packet is incoming (value = 1, "
585 "\"Ingress\") or out-going (value = 2, \"Egress\") at the "
586 "ProtocolEndpoint, relative to the ConditioningService."),
587 ValueMap {"0", "1", "2"},
588 Values {"Unknown", "Ingress", "Egress"} ]
589 kumpf 1.2 uint16 ServiceType;
590 };
591
592
593 // ==================================================================
594 // IngressConditioningServiceOnEndpoint
595 // ==================================================================
596 [Association, Version ("2.7.0"),
597 Description (
598 "This association represents the binding, in the ingress "
599 "direction, between a ProtocolEndpoint and the first "
600 "ConditioningService that processes packets received via "
601 "that Endpoint. Since there can only be one 'first' "
602 "ConditioningService for a ProtocolEndpoint, the cardinality "
603 "for the Dependent object reference is narrowed from 0..n "
604 "to 0..1. On the other hand, a single ConditioningService "
605 "can be the first to process packets received via multiple "
606 "ProtocolEndpoints. So, the cardinality of the "
607 "Antecedent object reference remains 0..n.") ]
608 class CIM_IngressConditioningServiceOnEndpoint :
609 CIM_ServiceSAPDependency {
610 kumpf 1.2
611 [Override ("Antecedent"), Description (
612 "The ProtocolEndpoint through which traffic arrives at "
613 "a network device.") ]
614 CIM_ProtocolEndpoint REF Antecedent;
615
616 [Override ("Dependent"), Max (1), Description (
617 "The ConditioningService which begins the traffic "
618 "conditioning processing within a network device.") ]
619 CIM_ConditioningService REF Dependent;
620 };
621
622
623 // ==================================================================
624 // EgressConditioningServiceOnEndpoint
625 // ==================================================================
626 [Association, Version ("2.7.0"),
627 Description (
628 "This association represents the binding, in the egress "
629 "direction, between a ProtocolEndpoint and the last "
630 "ConditioningService that processes packets before they "
631 kumpf 1.2 "leave a network device (via that ProtocolEndpoint). This "
632 "'last' ConditioningService is ordinarily a scheduler, "
633 "but it does not have to be. There can be multiple "
634 "'last' ConditioningServices for an Endpoint (for example, "
635 "in the case of a fallback scheduler). Therefore, the "
636 "cardinality for the Dependent object reference remains "
637 "0..n. On the other hand, a single ConditioningService "
638 "cannot be the last one to process packets for multiple "
639 "Endpoints. So, the cardinality of the Antecedent object "
640 "reference is narrowed from 0..n to 0..1.") ]
641 class CIM_EgressConditioningServiceOnEndpoint :
642 CIM_ServiceSAPDependency {
643
644 [Override ("Antecedent"), Max (1), Description (
645 "The ProtocolEndpoint through which traffic leaves "
646 "a network device.") ]
647 CIM_ProtocolEndpoint REF Antecedent;
648
649 [Override ("Dependent"), Description (
650 "The ConditioningService which ends the traffic "
651 "conditioning processing within a network device.") ]
652 kumpf 1.2 CIM_ConditioningService REF Dependent;
653 };
654
655
656 // ==================================================================
657 // NextService
658 // ==================================================================
659 [Association, Version ("2.7.0"), Description (
660 "NextService establishes a predecessor-successor "
661 "relationship between two ConditioningService objects. This "
662 "association is used to indicate the sequence of "
663 "ConditioningServices required to process a particular type "
664 "of traffic. \n"
665 "\n"
666 "Instances describe the various relationships between "
667 "different ConditioningServices (such as classifiers, meters, "
668 "droppers, etc.) that are used collectively to condition "
669 "traffic. Both one-to-one and more complicated fan-in and/or "
670 "fan-out relationships can be described. The Conditioning"
671 "Services may feed one another directly, or they may be "
672 "mapped to multiple 'next' Services based on the "
673 kumpf 1.2 "characteristics of the packet." ) ]
674 class CIM_NextService {
675
676 [Key, Description (
677 "The preceding ConditioningService, 'earlier' in the "
678 "processing sequence for a packet.") ]
679 CIM_ConditioningService REF PrecedingService;
680
681 [Key, Description (
682 "The 'next' or following ConditioningService.") ]
683 CIM_ConditioningService REF FollowingService;
684 };
685
686
687 // ===================================================================
688 // ClassifierService
689 // ===================================================================
690 [Version ("2.7.0"), Description (
691 "ClassifierService represents a logical entity associated "
692 "with an ingress or egress interface of a device, that takes "
693 "a single input stream, and sorts it into one or more output "
694 kumpf 1.2 "streams. The sorting is done by a set of filters that select "
695 "packets based on the packet contents, or possibly based on "
696 "other attributes associated with the packet. Each output "
697 "stream is the result of matching a particular filter. \n"
698 "\n"
699 "Rather than being linked directly to its filters (instantiated "
700 "as FilterLists), a classifier is modeled as an aggregation "
701 "of ClassifierElements. Each of these ClassifierElements is "
702 "linked to a single FilterList, by the association "
703 "ClassifierElementUsesFilterList. Note that ClassifierServices "
704 "are designed to allow hierarchical classification. When "
705 "hierarchical classification is used, a ClassifierElement may "
706 "point to another ClassifierService (via the association, "
707 "NextServiceAfterClassifierElement). When this is true, the "
708 "ClassifierElement MUST NOT use the ClassifierElementUses"
709 "FilterList association. \n"
710 "\n"
711 "A classifier is modeled as a ConditioningService so that it "
712 "can be aggregated into a QoSService (using the "
713 "QoSConditioningSubService aggregation), and can use the "
714 "NextService association to identify the subsequent "
715 kumpf 1.2 "ConditioningServices for different traffic streams.") ]
716 class CIM_ClassifierService : CIM_ConditioningService {
717 };
718
719
720 // ===================================================================
721 // ClassifierElement
722 // ===================================================================
723 [Version ("2.7.0"), Description (
724 "ClassifierElement represents the linkage, within a single "
725 "ClassifierService, between a FilterList (that defines the "
726 "criteria to select packets from the stream of packets "
727 "coming into the Service) and the next ConditioningService "
728 "(to which the selected packets go after they leave the "
729 "ClassifierService). ClassifierElement has no properties of "
730 "its own. It is present to serve as an aggregated entity "
731 "into ClassifierService (using the ClassifierElementIn"
732 "ClassifierService association), and for associations with its "
733 "FilterList (ClassifierElementUsesFilterList) and its next "
734 "ConditioningService (NextServiceAfterClassifierElement). \n"
735 "\n"
736 kumpf 1.2 "Note that a ClassifierElement may be associated with a "
737 "ClassifierService through the NextServiceAfterClassifier"
738 "Element association. This will occur when implementing "
739 "hierarchical classification. In this case, the "
740 "ClassifierElement MUST NOT instantiate the ClassifierElement"
741 "UsesFilterList association. Further, when a ClassifierElement "
742 "is associated with a ClassifierService as described above, "
743 "the order of processing of the associated ClassifierService "
744 "is a function of the ClassifierOrder property of the "
745 "ClassifierElementInClassifierService aggregation.") ]
746 class CIM_ClassifierElement : CIM_ClassifierService {
747 };
748
749
750 // ===================================================================
751 // ClassifierElementInClassifierService
752 // ===================================================================
753 [Association, Aggregation, Composition,
754 Version ("2.7.0"), Description (
755 "This aggregation represents the relationship between "
756 "a ClassifierService and the ClassifierElements that provide "
757 kumpf 1.2 "its fan-out function. ClassifierElements represent "
758 "the traffic selectors for the Service. A ClassifierService "
759 "typically aggregates multiple ClassifierElements. An "
760 "individual Element, however, is aggregated only by a single "
761 "ClassifierService.") ]
762 class CIM_ClassifierElementInClassifierService : CIM_ServiceComponent {
763
764 [Override ("GroupComponent"), Aggregate, Min (1), Max (1),
765 Description (
766 "The ClassifierService which aggregates ClassifierElements.") ]
767 CIM_ClassifierService REF GroupComponent;
768
769 [Override ("PartComponent"), Description (
770 "The aggregated ClassifierElement, defined in the context of one "
771 "ClassifierService.") ]
772 CIM_ClassifierElement REF PartComponent;
773
774 [Description (
775 "Because the filters for a classifier can overlap, it is "
776 "necessary to specify the order in which the ClassifierElements "
777 "are aggregated by a ClassifierService. This then dictates the "
778 kumpf 1.2 "order in which packets coming into the classifier are presented. "
779 "Values are represented in ascending order: first '1', then '2', "
780 "and so on. Different values MUST be assigned for each of the "
781 "ClassifierElements aggregated by a given ClassifierService.") ]
782 uint32 ClassifierOrder;
783 };
784
785
786 // ===================================================================
787 // ClassifierElementUsesFilterList
788 // ===================================================================
789 [Association, Version ("2.7.0"),
790 Description (
791 "This association relates one or more ClassifierElements "
792 "with a FilterList that defines the criteria to select packets "
793 "for the classifier to process. Note that a classifier is "
794 "always modeled as a ClassifierService that aggregates a set "
795 "of ClassifierElements. Each of these ClassifierElements is "
796 "EITHER associated with a single FilterList OR associated to "
797 "another ClassifierService (via NextServiceAfterClassifier"
798 "Element to describe hierarchical classification).") ]
799 kumpf 1.2 class CIM_ClassifierElementUsesFilterList : CIM_Dependency {
800
801 [Override ("Antecedent"), Max (1),
802 Description (
803 "The FilterList that specifies the traffic criteria for a "
804 "ClassifierElement.") ]
805 CIM_FilterList REF Antecedent;
806
807 [Override ("Dependent"), Description (
808 "The ClassifierElement that depends on the FilterList for "
809 "its traffic criteria.") ]
810 CIM_ClassifierElement REF Dependent;
811 };
812
813
814 // ===================================================================
815 // NextServiceAfterClassifierElement
816 // ===================================================================
817 [Association, Version ("2.7.0"),
818 Description (
819 "An association used to establish a predecessor-successor "
820 kumpf 1.2 "relationship between a single ClassifierElement (within a "
821 "ClassifierService) and the next ConditioningService object "
822 "that further processes the selected traffic. Note that the "
823 "cardinalities indicate that a FollowingService MUST be "
824 "defined, after the ClassifierElement. This is because there "
825 "is no reason to classify traffic unless further processing "
826 "will be done.") ]
827 class CIM_NextServiceAfterClassifierElement : CIM_NextService {
828
829 [Override ("PrecedingService"), Description (
830 "The ClassifierElement that selects traffic to be passed "
831 "to the FollowingService.") ]
832 CIM_ClassifierElement REF PrecedingService;
833
834 [Override ("FollowingService"), Min (1), Max (1),
835 Description (
836 "The ConditioningService that follows the ClassifierElement.") ]
837 CIM_ConditioningService REF FollowingService;
838 };
839
840
841 kumpf 1.2 // ==================================================================
842 // ClassifierFilterSet
843 // ==================================================================
844 [Association,
845 Deprecated {"CIM_ClassifierElementUsesFilterList",
846 "ClassifierElementInClassifierService"},
847 Version ("2.7.0"), Description (
848 "In order for a ClassifierService to correctly identify and "
849 "process network traffic, that traffic must be described by "
850 "FilterEntries, which are aggregated into FilterLists. This "
851 "association defines the Dependency of the ClassifierService "
852 "on FilterLists (and therefore, their FilterEntries). The "
853 "cardinality of the association requires that the Classifier"
854 "Service operate against at least one FilterList. \n"
855 "\n"
856 "The association is deprecated in lieu of associating Filter"
857 "Lists to ClassifierElements, and ClassifierElements into "
858 "ClassifierServices. The latter approach is very flexible "
859 "regarding the implementations that can be modeled, and removes "
860 "the need to track individual traffic streams using an "
861 "artificial model property, TrafficClass. Using "
862 kumpf 1.2 "ClassifierElements, each stream is processed beginning with "
863 "a single FilterList and progressing through various "
864 "ConditioningServices, associated via instances of "
865 "NextService.") ]
866 class CIM_ClassifierFilterSet : CIM_Dependency {
867
868 [Deprecated {"CIM_ClassifierElementUsesFilterList.Antecedent"},
869 Override ("Antecedent"), Description (
870 "The FilterList aggregating FilterEntries, these in turn "
871 "describe how traffic is identified and processed by the "
872 "ClassifierService.") ]
873 CIM_FilterList REF Antecedent;
874
875 [Deprecated {"CIM_ClassifierElementUsesFilterList.Dependent"},
876 Override ("Dependent"), Description (
877 "The ClassifierService which uses the FilterList and its "
878 "aggregated FilterEntries.") ]
879 CIM_ClassifierService REF Dependent;
880
881 [Deprecated {
882 "CIM_ClassifierElementInClassifierService.ClassifierOrder"},
883 kumpf 1.2 Description (
884 "The ordering of the FilterLists used in the classification "
885 "and forwarding functions of the ClassifierService.") ]
886 uint16 FilterListPosition;
887 };
888
889
890 // ===================================================================
891 // MeterService
892 // ===================================================================
893 [Version ("2.7.0"), Description (
894 "This class represents the metering of network traffic. "
895 "Metering is the function of monitoring the arrival times "
896 "of packets of a traffic stream and determining the level "
897 "of conformance of each packet with respect to a pre-"
898 "established traffic profile. A meter has the ability to "
899 "invoke different ConditioningServices for conforming "
900 "and non-conforming traffic. Traffic leaving a meter may "
901 "be further conditioned (e.g., dropped or queued) by "
902 "routing the packet to another conditioning element. \n"
903 "\n"
904 kumpf 1.2 "This class is modeled as a ConditioningService so that "
905 "it can be aggregated into a QoSService (using the "
906 "QoSConditioningSubService association), to indicate that "
907 "its functionality underlies that QoS service. MeterService "
908 "also participates in a subclass of the NextService association, "
909 "to identify the subsequent ConditioningServices for conforming "
910 "and non-conforming traffic.") ]
911 class CIM_MeterService : CIM_ConditioningService {
912
913 [Description (
914 "This property is an enumerated 16-bit unsigned integer "
915 "that is used to specify the particular type of meter. "
916 "Defined values of the enumeration are: \n"
917 "\n"
918 " 1: Other \n"
919 " 2: Average Rate Meter \n"
920 " 3: Exponentially Weighted Moving Average Meter \n"
921 " 4: Token Bucket Meter \n"
922 "\n"
923 "Note: The MeterType property and the MeterService "
924 "subclasses provide similar information. This property is "
925 kumpf 1.2 "defined for query purposes and for future expansion. It "
926 "is assumed that not all MeterServices will require a "
927 "subclass to define them. Therefore, MeterService will "
928 "be instantiated directly and the Type property is "
929 "needed."),
930 ValueMap {"1", "2", "3", "4"},
931 Values {"Other", "Average Rate Meter",
932 "Exponentially Weighted Moving Average Meter",
933 "Token Bucket Meter"},
934 ModelCorrespondence {"CIM_MeterService.OtherMeterType"} ]
935 uint16 MeterType;
936
937 [Description (
938 "This property is a string used in conjunction with "
939 "the MeterType property. When the value of MeterType "
940 "is 1 (i.e., \"Other\"), then the name of the conformance "
941 "level for this meter is defined in this property."),
942 ModelCorrespondence {"CIM_MeterService.MeterType"} ]
943 string OtherMeterType;
944
945 [Description (
946 kumpf 1.2 "An unsigned integer indicating the number of conformance "
947 "levels supported by the Meter. For example, when only "
948 "'in-profile' or 'out of profile' metering is supported. "
949 "ConformanceLevels is set to 2.") ]
950 uint16 ConformanceLevels;
951 };
952
953
954 // ===================================================================
955 // AverageRateMeterService
956 // ===================================================================
957 [Version ("2.7.0"), Description (
958 "This is a concrete subclass of MeterService that represents "
959 "a simple meter, called an Average Rate Meter. This type of "
960 "meter measures the average rate at which packets are "
961 "submitted to it over a specified time. Packets are "
962 "defined as conformant if their average arrival rate "
963 "does not exceed the specified measuring rate of the meter. "
964 "Any packet that causes the specified measuring rate to be "
965 "exceeded is defined to be non-conforming.") ]
966 class CIM_AverageRateMeterService : CIM_MeterService {
967 kumpf 1.2
968 [Description (
969 "This property is a 32-bit unsigned integer that defines the "
970 "rate used to determine whether admitted packets are in "
971 "conformance or not. The value is specified in kilobits per "
972 "second."),
973 Units ("KiloBits per Second") ]
974 uint32 AverageRate;
975
976 [Description (
977 "This property is a 64-bit unsigned integer that defines "
978 "the time period over which the average measurement should "
979 "be taken. The value is specified in microseconds."),
980 Units ("MicroSeconds") ]
981 uint64 DeltaInterval;
982 };
983
984
985 // ===================================================================
986 // EWMAMeterService
987 // ===================================================================
988 kumpf 1.2 [Version ("2.7.0"), Description (
989 "This is a concrete subclass of the MeterService class that "
990 "represents an exponentially weighted moving average meter. This "
991 "meter is a simple low-pass filter that measures the rate of "
992 "incoming packets over a small, fixed sampling interval. Any "
993 "admitted packet that pushes the average rate over a pre-defined "
994 "limit is defined to be non-conforming.") ]
995 class CIM_EWMAMeterService : CIM_MeterService {
996
997 [Description (
998 "This property is a 32-bit unsigned integer that defines the "
999 "average rate against which the sampled arrival rate of "
1000 "packets should be measured. Any packet that causes the "
1001 "sampled rate to exceed this rate is deemed "
1002 "non-conforming. The value is specified in kilobits per "
1003 "second."),
1004 Units ("KiloBits Per Second") ]
1005 uint32 AverageRate;
1006
1007 [Description (
1008 "This property is a 64-bit unsigned integer that defines "
1009 kumpf 1.2 "the sampling interval used to measure the arrival rate. "
1010 "The calculated rate is averaged over this interval "
1011 "and checked against the AverageRate property. All "
1012 "packets whose computed average arrival rate is "
1013 "less than the AverageRate are deemed conforming. The "
1014 "value is specified in microseconds."),
1015 Units ("MicroSeconds") ]
1016 uint64 DeltaInterval;
1017
1018 [Description (
1019 "This property is a 32-bit unsigned integer representing the "
1020 "reciprocal of the time constant (e.g., frequency response) "
1021 "of what is essentially a simple low-pass filter. For example, "
1022 "the value 64 for this property represents a time constant "
1023 "value of 1/64.") ]
1024 uint32 Gain;
1025 };
1026
1027
1028 // ===================================================================
1029 // TokenBucketMeterService
1030 kumpf 1.2 // ===================================================================
1031 [Version ("2.7.0"), Description (
1032 "This is a concrete subclass of the MeterService class that "
1033 "represents the metering of network traffic using a token "
1034 "bucket meter. Two types of token bucket meters are defined "
1035 "using this class - a simple, two-parameter bucket meter, "
1036 "and a multi-stage meter. \n"
1037 "\n"
1038 "A simple token bucket usually has two parameters, an average "
1039 "token rate and a burst size, and has two conformance levels: "
1040 "'conforming' and 'non-conforming'. This class also defines "
1041 "an excess burst size, which enables the meter to have three "
1042 "conformance levels ('conforming', 'partially conforming', and "
1043 "'non-conforming'). In this case, packets that exceed the "
1044 "excess burst size are deemed non-conforming, while packets "
1045 "that exceed the smaller burst size but are less than the "
1046 "excess burst size are deemed partially conforming.") ]
1047 class CIM_TokenBucketMeterService : CIM_MeterService {
1048
1049 [Description (
1050 "This property is a 32-bit unsigned integer that is used to "
1051 kumpf 1.2 "define the committed rate of the meter. The value is "
1052 "expressed in kilobits per second."),
1053 Units ("KiloBits per Second") ]
1054 uint32 AverageRate;
1055
1056 [Description (
1057 "This attribute is a 32-bit unsigned integer that is used to "
1058 "define the peak rate of the meter. The value is "
1059 "expressed in kilobits per second."),
1060 Units ("KiloBits per Second") ]
1061 uint32 PeakRate;
1062
1063 [Description (
1064 "This property is a 32-bit unsigned integer that is used to "
1065 "define the maximum number of tokens available for the "
1066 "committed rate (specified by the AverageRate property). The "
1067 "value is specified in kilobytes."),
1068 Units ("KiloBytes") ]
1069 uint32 BurstSize;
1070
1071 [Description (
1072 kumpf 1.2 "This property is a 32-bit unsigned integer that is used to "
1073 "define the maximum number of tokens available for the "
1074 "peak rate (specified by the PeakRate property). The "
1075 "value is specified in kilobytes."),
1076 Units ("KiloBytes") ]
1077 uint32 ExcessBurstSize;
1078 };
1079
1080
1081 // ==================================================================
1082 // NextServiceAfterMeter
1083 // ==================================================================
1084 [Association, Version ("2.7.0"), Description (
1085 "This association describes a predecessor-successor "
1086 "relationship between a MeterService and one or more "
1087 "ConditioningService objects that process traffic from the "
1088 "meter. For example, for devices that implement preamble "
1089 "marking, the FollowingService reference (after the meter) "
1090 "is a PreambleMarkerService - to record the results of the "
1091 "metering in the preamble. \n"
1092 "\n"
1093 kumpf 1.2 "It might be expected that the NextServiceAfterMeter "
1094 "association would subclass from NextService. However, "
1095 "meters are 1:n fan-out elements, and require a mechanism "
1096 "to distinguish between the different results/outputs of "
1097 "the meter. Therefore, this association defines a new key "
1098 "property, MeterResult, which is used to record the result "
1099 "and identify the output through which this traffic left "
1100 "the meter.") ]
1101 class CIM_NextServiceAfterMeter {
1102
1103 [Key, Description (
1104 "The preceding MeterService, 'earlier' in the "
1105 "processing sequence for a packet.") ]
1106 CIM_MeterService REF PrecedingService;
1107
1108 [Key, Description (
1109 "The 'next' or following ConditioningService.") ]
1110 CIM_ConditioningService REF FollowingService;
1111
1112 [Key, Description (
1113 "Information on the result of the metering. Traffic "
1114 kumpf 1.2 "is distinguished as being conforming, non-conforming, or "
1115 "partially conforming. More complicated metering can be "
1116 "built either by extending the enumeration or by "
1117 "cascading meters."),
1118 ValueMap {"0", "1", "2", "3"},
1119 Values {"Unknown", "Conforming", "Partially Conforming",
1120 "Non-Conforming"} ]
1121 uint16 MeterResult;
1122 };
1123
1124
1125 // ===================================================================
1126 // MarkerService
1127 // ===================================================================
1128 [Version ("2.6.0"), Description (
1129 "MarkerService represents the general process of "
1130 "marking a selected field in a network packet with "
1131 "a specified value. Packets are marked in order to "
1132 "control the conditioning that they will subsequently "
1133 "receive. Subclasses of MarkerService identify the "
1134 "specific fields to be marked, and introduce properties "
1135 kumpf 1.2 "to represent the values used in marking these fields. "
1136 "Markers are usually invoked as a result of a "
1137 "preceding classifier match. \n"
1138 "\n"
1139 "MarkerService is a concrete class because its "
1140 "superclass (ConditioningService) is concrete. While "
1141 "this class can be instantiated, an instance of it "
1142 "does not accomplish anything, because both the field "
1143 "to be marked and the value used to mark it are defined "
1144 "in subclasses. \n"
1145 "\n"
1146 "MarkerService is modeled as a ConditioningService so "
1147 "that it can be aggregated into a QoSService (using the "
1148 "QoSConditioningSubService association). This association "
1149 "indicates that the MarkerService's functionality "
1150 "underlies the QoSService. MarkerService also "
1151 "participates in the NextService association to identify "
1152 "the subsequent ConditioningService(s) that act on packets "
1153 "after they have been marked.") ]
1154 class CIM_MarkerService : CIM_ConditioningService {
1155 };
1156 kumpf 1.2
1157
1158 // ===================================================================
1159 // PreambleMarkerService
1160 // ===================================================================
1161 [Version ("2.7.0"), Description (
1162 "PreambleMarkerService models the storing of traffic-"
1163 "conditioning results in a packet preamble. An instance "
1164 "appends a two-part string of the form '<type>,<value>' to "
1165 "the packet preamble. The concept of 'type's is discussed "
1166 "more fully in the Description of the class' "
1167 "FilterItemList property.") ]
1168 class CIM_PreambleMarkerService : CIM_MarkerService {
1169
1170 [Description (
1171 "To foster interoperability, the basic format of the "
1172 "information captured by a PreambleMarker is specified. "
1173 "That information is contained in the FilterItemList "
1174 "property (an ordered, string array). Each entry in the "
1175 "array takes the form 'type,value'. When entries are added, "
1176 "they are appended to the end of the list. \n"
1177 kumpf 1.2 "\n"
1178 "A limited set of standardized 'type's exist. They are: \n"
1179 " - ConformingFromMeter, NonConformingFromMeter and "
1180 "PartConformingFromMeter to convey metering results "
1181 "(where the 'value' is the name of the meter) \n"
1182 " - VlanId to describe the traffic's VLAN information "
1183 "(where the 'value' is the VLAN ID). \n"
1184 " An implementation is free to define and use other "
1185 "preamble 'types'. \n"
1186 " Note that a wildcard value of \"any\" is allowed to "
1187 "indicate that the preamble entry matches for any 'value' "
1188 "of the specified 'type'. For example, using the wildcard, "
1189 "an administrator can define a filter to select all "
1190 "packets that were found to be conforming ('type' = "
1191 "\"ConformingFromMeter\") without having to name each "
1192 "meter individually."),
1193 ArrayType ("Ordered") ]
1194 string FilterItemList[];
1195 };
1196
1197
1198 kumpf 1.2 // ===================================================================
1199 // ToSMarkerService
1200 // ===================================================================
1201 [Version ("2.7.0"), Description (
1202 "ToSMarkerService marks the ToS (type of service) field "
1203 "in the IPv4 packet header [R791] with a specific value. "
1204 "Packets are marked in order to control the conditioning "
1205 "that they will subsequently receive. Following common "
1206 "practice, the value to be written into the ToS field is "
1207 "represented as an unsigned 8-bit integer.") ]
1208 class CIM_ToSMarkerService : CIM_MarkerService {
1209
1210 [Description (
1211 "This property is an unsigned 8-bit integer, representing "
1212 "a value to be used for marking the type of service (ToS) "
1213 "field in the IPv4 packet header. The ToS field is "
1214 "defined to be a complete octet, so the range for this "
1215 "property is 0..255. Some implementations, however, "
1216 "require that the lowest-order bit in the field is always "
1217 "0. Such an implementation cannot support an "
1218 "odd TosValue.") ]
1219 kumpf 1.2 uint8 ToSValue;
1220 };
1221
1222
1223 // ===================================================================
1224 // DSCPMarkerService
1225 // ===================================================================
1226 [Version ("2.7.0"), Description (
1227 "DSCPMarkerService marks the differentiated services "
1228 "codepoint (DSCP) within the DS field in the IPv4 and IPv6 "
1229 "packet headers, as defined in [R2474]. It is marked with "
1230 "the specific value defined in the property, DSCPValue. "
1231 "Following common practice, the value to be written into "
1232 "the field is represented as an unsigned 8-bit integer.") ]
1233 class CIM_DSCPMarkerService : CIM_MarkerService {
1234
1235 [MinValue (0), MaxValue (63), Description (
1236 "This property is an unsigned 8-bit integer, representing "
1237 "a value to be used for marking the DSCP field in an "
1238 "IPv4 or Ipv6 packet header. Since the DSCP consists of 6 "
1239 "bits, the values for this property are limited to the "
1240 kumpf 1.2 "range 0..63. When the DSCP is marked, the remaining two bits "
1241 "in the DS field are left unchanged.") ]
1242 uint8 DSCPValue;
1243 };
1244
1245
1246 // ===================================================================
1247 // 8021QMarkerService
1248 // ===================================================================
1249 [Version ("2.7.0"), Description (
1250 "8021QMarkerService marks the Priority field in an 802.1Q-"
1251 "compliant frame, with a specified value. Frames are "
1252 "marked in order to control the conditioning that they will "
1253 "subsequently receive. Following common practice, the value "
1254 "to be written into the field is represented as an unsigned "
1255 "8-bit integer.") ]
1256 class CIM_8021QMarkerService : CIM_MarkerService {
1257
1258 [MinValue (0), MaxValue (7), Description (
1259 "This property is an unsigned 8-bit integer, representing "
1260 "a value to be used for marking the Priority field in the "
1261 kumpf 1.2 "802.1Q header. Since the Priority field consists of 3 "
1262 "bits, the values for this property are limited to the "
1263 "range 0..7. When the Priority field is marked, the "
1264 "remaining two bits in the octet are left unchanged.") ]
1265 uint8 PriorityValue;
1266 };
1267
1268
1269 // ===================================================================
1270 // DropperService
1271 // ===================================================================
1272 [Version ("2.7.0"), Description (
1273 "DropperService represents the ability to selectively "
1274 "drop network traffic, and/or to invoke another "
1275 "ConditioningService (indicated using the NextService "
1276 "association) for further processing of traffic that is "
1277 "not dropped. It is the base class for different types "
1278 "of droppers. Droppers are distinguished by the "
1279 "algorithm that they use to drop traffic. \n"
1280 "\n"
1281 "The NextService association has special semantics for "
1282 kumpf 1.2 "droppers, in addition to conveying the general information "
1283 "of 'what happens next' (that apply to all Conditioning"
1284 "Services). The queue(s) from which a particular dropper "
1285 "drops packets are identified by following chain(s) of "
1286 "NextService associations 'rightwards' from the dropper, "
1287 "until they reach a queue.") ]
1288 class CIM_DropperService : CIM_ConditioningService {
1289
1290 [Description (
1291 "This property is an enumerated 16-bit unsigned integer "
1292 "that defines the type of dropper. Its Values are: \n"
1293 " 1: Other \n"
1294 " 2: Random \n"
1295 " 3: HeadTail \n"
1296 " 4: Absolute Dropper \n"
1297 "\n"
1298 "Note: The DropperType property and the DropperService "
1299 "subclasses provide similar information. This property is "
1300 "defined for query purposes and to not require a "
1301 "subclass for all types of DropperServices (for example, "
1302 "to describe an Absolute Dropper in today's model). "
1303 kumpf 1.2 "Therefore, DropperService can be instantiated directly "
1304 "and the Type property is needed."),
1305 ValueMap {"1", "2", "3", "4"},
1306 Values {"Other", "Random", "HeadTail", "Absolute Dropper"},
1307 ModelCorrespondence {
1308 "CIM_DropperService.OtherDropperType"} ]
1309 uint16 DropperType;
1310
1311 [Description (
1312 "This property contains a vendor-specific value for the "
1313 "type of dropping that is done. It is used when the value "
1314 "of the DropperType property is 1 (Other)."),
1315 ModelCorrespondence {"CIM_DropperService.DropperType"} ]
1316 string OtherDropperType;
1317
1318 [Deprecated {
1319 "CIM_DropperService.TypeOfDropper (=4, Absolute Dropper)"},
1320 Description (
1321 "This property indicates whether the Dropper will always "
1322 "drop incoming packets (value=1) regardless of their type. "
1323 "It is deprecated since its information is conveyed by "
1324 kumpf 1.2 "the TypeOfDropper property (value=4, 'Absolute Dropper')."),
1325 ValueMap {"0", "1", "2"},
1326 Values {"Unknown", "Always Drop", "Do Not Always Drop"} ]
1327 uint16 AlwaysDrop;
1328
1329 [Description (
1330 "This enumeration indicates the point in the associated "
1331 "queue (associated via the NextService relationship) "
1332 "from which packets should be dropped. If the value is "
1333 "0 \"Unknown\", then packets MAY be dropped from any "
1334 "location in the queue."),
1335 ValueMap {"0", "1", "2"},
1336 Values {"Unknown", "Head", "Tail"} ]
1337 uint16 DropFrom;
1338
1339 [Description (
1340 "This property is an enumerated unsigned 16-bit integer "
1341 "that defines the metric used to trigger the start of "
1342 "dropping packets. This does NOT mean that all packets "
1343 "will be dropped; it does mean that SOME packets will "
1344 "start to be dropped. The number and type of packets "
1345 kumpf 1.2 "dropped is a function of the type of algorithm used by "
1346 "this Dropper. Values are: \n"
1347 "\n"
1348 " 1: Other \n"
1349 " 2: Queue Threshold \n"
1350 " 3: Arrival Rate "),
1351 ValueMap {"1", "2", "3"},
1352 Values {"Other", "Queue Threshold", "Arrival Rate"} ]
1353 uint16 DropStartMetric;
1354
1355 [Description (
1356 "This property is an enumerated unsigned 16-bit integer "
1357 "that defines the metric used to determine when ALL "
1358 "packets will be dropped REGARDLESS of the type of "
1359 "algorithm used by this Dropper. Values are: \n"
1360 "\n"
1361 " 1: Other \n"
1362 " 2: Queue Threshold \n"
1363 " 3: Arrival Rate "),
1364 ValueMap {"1", "2", "3"},
1365 Values {"Other", "Queue Threshold", "Arrival Rate"} ]
1366 kumpf 1.2 uint16 DropMaintainMetric;
1367 };
1368
1369
1370 // ===================================================================
1371 // REDDropperService
1372 // ===================================================================
1373 [Version ("2.7.0"), Description (
1374 "REDDropperService represents the ability to drop "
1375 "network traffic using a Random Early Detection (RED) "
1376 "algorithm. The purpose of a RED algorithm is to "
1377 "avoid congestion (as opposed to managing congestion). "
1378 "Instead of waiting for the queues to fill up, and then "
1379 "dropping large numbers of packets, RED works by "
1380 "monitoring average queue depth. When the queue depth "
1381 "exceeds a minimum threshold, packets are randomly "
1382 "discarded. These discards cause TCP to slow its "
1383 "transmission rate for those connections that "
1384 "experienced the packet discards. Other connections "
1385 "are not affected by these discards. \n"
1386 "\n"
1387 kumpf 1.2 "A RED dropper always drops packets from a single queue, "
1388 "which is related to the dropper as the following Service "
1389 "in the NextService association. The queue(s) examined by "
1390 "the drop algorithm are found by following the "
1391 "CalculationServiceForDropper association(s) to determine the "
1392 "dropper's DropThresholdCalculationService(s), and then "
1393 "following the CalculationBasedOnQueue association to "
1394 "find the queue being watched by each CalculationService.") ]
1395 class CIM_REDDropperService : CIM_DropperService {
1396
1397 [Description (
1398 "This is an unsigned 32-bit integer that defines the "
1399 "minimum average queue depth at which packets are "
1400 "subject to being dropped. (See the ThresholdUnits "
1401 "property to determine the units of the threshold.) "
1402 "The slope of the drop probability function is "
1403 "described by the Start/StopProbability properties."),
1404 ModelCorrespondence {"CIM_REDDropperService.ThresholdUnits"} ]
1405 uint32 MinQueueThreshold;
1406
1407 [MinValue (0), MaxValue (1000), Description (
1408 kumpf 1.2 "This is an unsigned 32-bit integer that defines the "
1409 "maximum average queue length at which packets are "
1410 "subject to always being dropped, regardless of the "
1411 "dropping algorithm and probabilities being used. "
1412 "(See the ThresholdUnits property to determine the "
1413 "units of the threshold.)"),
1414 ModelCorrespondence {"CIM_REDDropperService.ThresholdUnits"} ]
1415 uint32 MaxQueueThreshold;
1416
1417 [Description (
1418 "This is an unsigned 32-bit integer, used in conjunction "
1419 "with the StopDropProbability property. The start and stop "
1420 "probabilities define the slope of the drop probability "
1421 "function. This function governs the rate at which "
1422 "packets are subject to being dropped, as a function of "
1423 "the queue length. \n"
1424 "\n"
1425 "This property expresses a drop probability in drops "
1426 "per thousand packets. For example, the value 100 "
1427 "indicates a drop probability of 100 per 1000 packets, "
1428 "that is, 10%. Min and max values are 0 to 1000."),
1429 kumpf 1.2 Units ("Per Thousand Packets"),
1430 ModelCorrespondence {
1431 "CIM_REDDropperService.StopProbability"} ]
1432 uint32 StartProbability;
1433
1434 [MinValue (0), MaxValue (1000), Description (
1435 "This is an unsigned 32-bit integer, used in conjunction "
1436 "with the StartDropProbability property. The start and "
1437 "stop probabilities define the slope of the drop "
1438 "probability function. This function governs the rate at "
1439 "which packets are subject to being dropped, as a "
1440 "function of the queue length. \n"
1441 "\n"
1442 "This property expresses a drop probability in drops "
1443 "per thousand packets. For example, the value 100 "
1444 "indicates a drop probability of 100 per 1000 packets, "
1445 "that is, 10%. Min and max values are 0 to 1000."),
1446 Units ("Per Thousand Packets"),
1447 ModelCorrespondence {
1448 "CIM_REDDropperService.StartProbability"} ]
1449 uint32 StopProbability;
1450 kumpf 1.2
1451 [Description (
1452 "ThresholdUnits is an enumerated integer that identifies "
1453 "the units for the Min and MaxQueueThreshold properties. "
1454 "The values are either bytes (1) or packets (2)."),
1455 ValueMap {"1", "2"},
1456 Values {"Bytes", "Packets"} ]
1457 uint16 ThresholdUnits;
1458 };
1459
1460
1461 // ===================================================================
1462 // WeightedREDDropperService
1463 // ===================================================================
1464 [Version ("2.7.0"), Deprecated {"No value"},
1465 Description (
1466 "This class represents a logical entity that resides in the "
1467 "data forwarding path of a network device. It describes the "
1468 "ability to drop network traffic using a Weighted Random "
1469 "Early Detection (WRED) algorithm. Like RED, the purpose of "
1470 "WRED is to avoid congestion (as opposed to managing "
1471 kumpf 1.2 "congestion). This modification of the basic RED algorithm "
1472 "enables packets belonging to different traffic classes to "
1473 "be dropped at different queue depths. This algorithm also "
1474 "enables discard to be done based on different information "
1475 "contained in the packet header, such as IP Precedence, "
1476 "RSVP session parameters, or even on other factors not "
1477 "directly encoded in the packet header, such as the "
1478 "queue depth. \n"
1479 "\n"
1480 "Implementation of this class has shown that weighting "
1481 "should not be a property of the class (but on an association "
1482 "to it), and that there is insufficient data to process the "
1483 "drop metric. The class is deprecated pending further "
1484 "definition by the DMTF.") ]
1485 class CIM_WeightedREDDropperService : CIM_DropperService {
1486
1487 [Deprecated {"No value"}, Description (
1488 "This property is an enumerated 16-bit unsigned integer, "
1489 "and defines the type of metric that is used to drop "
1490 "traffic. Values are: \n"
1491 "\n"
1492 kumpf 1.2 " 1: Other \n"
1493 " 2: IP Precedence \n"
1494 " 3: DSCP Value \n"
1495 " 4: 802.1P Priority Value \n"
1496 " 5: RSVP Session \n"
1497 " 6: Queue Depth \n"
1498 " 7: Packet Arrival Rate "),
1499 ValueMap {"1", "2", "3", "4", "5", "6", "7"},
1500 Values {"Other", "IP Precedence", "DSCP Value",
1501 "802.1P Priority Value", "RSVP Session",
1502 "Queue Depth", "Packet Arrival Rate"},
1503 ModelCorrespondence {
1504 "CIM_WeightedREDDropperService.OtherDropMetric"} ]
1505 uint16 DropMetric;
1506
1507 [Deprecated {"No value"}, Description (
1508 "This string property is used in conjunction with the "
1509 "DropMetric property. When the value of DropMetric is "
1510 "1 (i.e., \"Other\"), then the type of metric to be used "
1511 "is defined in this property."),
1512 ModelCorrespondence {
1513 kumpf 1.2 "CIM_WeightedREDDropperService.DropMetric"} ]
1514 string OtherDropMetric;
1515
1516 [Deprecated {
1517 "CIM_DropperThresholdCalculationService.SmoothingWeight"},
1518 MinValue (0), MaxValue (100), Description (
1519 "This is a 32-bit real number that represents the "
1520 "weighting factor used to determine which queues "
1521 "get more service.") ]
1522 real32 Weight;
1523 };
1524
1525
1526 // ===================================================================
1527 // HeadTailDropper
1528 // ===================================================================
1529 [Version ("2.7.0"), Description (
1530 "HeadTailDropper describes the threshold information "
1531 "of a head or tail dropper. The inherited property "
1532 "DropFrom indicates whether a particular instance of "
1533 "this class is a head dropper or a tail dropper. \n"
1534 kumpf 1.2 "\n"
1535 "A head dropper always examines the same queue from "
1536 "which it drops packets, and this queue is always "
1537 "related to the dropper as the following service in "
1538 "the NextService association.") ]
1539 class CIM_HeadTailDropper : CIM_DropperService {
1540
1541 [Description (
1542 "This is an unsigned 32-bit integer that indicates "
1543 "the queue depth (in bytes) at which traffic is "
1544 "dropped. For a tail dropper, all newly arriving "
1545 "traffic is dropped. For a head dropper, packets at the "
1546 "front of the queue are dropped to make room for new "
1547 "packets, which are added at the end."),
1548 Units ("Bytes") ]
1549 uint32 QueueThreshold;
1550 };
1551
1552
1553 // ===================================================================
1554 // QueuingService
1555 kumpf 1.2 // ===================================================================
1556 [Version ("2.7.0"), Description (
1557 "QueuingService represents the ability to queue "
1558 "network traffic, and to specify the characteristics "
1559 "for determining long-term congestion. It is modeled "
1560 "as a ConditioningService so that it can be aggregated "
1561 "into a QoSService (using the QoSConditioningSubService "
1562 "association). This indicates that its functionality "
1563 "underlies the QoSService.") ]
1564 class CIM_QueuingService : CIM_ConditioningService {
1565
1566 [Gauge, Description (
1567 "Indicates the current depth of this queue in units "
1568 "specified by DepthUnits. This value may be important "
1569 "in diagnosing unexpected behavior."),
1570 ModelCorrespondence {"CIM_QueuingService.DepthUnits"} ]
1571 uint32 CurrentQueueDepth;
1572
1573 [Description (
1574 "DepthUnits is an enumerated integer that identifies "
1575 "the units for the CurrentQueueDepth property. "
1576 kumpf 1.2 "The values are either bytes (1) or packets (2)."),
1577 ValueMap {"1", "2"},
1578 Values {"Bytes", "Packets"} ]
1579 uint16 DepthUnits;
1580 };
1581
1582
1583 // ===================================================================
1584 // DropThresholdCalculationService
1585 // ===================================================================
1586 [Version ("2.7.0"), Description (
1587 "This class calculates an average depth for a queue, based "
1588 "on a smoothing weight and a sampling time interval. The "
1589 "latter are properties of this Service, describing how it "
1590 "operates and its necessary parameters. The Service does "
1591 "the calculation on behalf of a RED dropper (as indicated "
1592 "by the association, CalculationServiceForDroppper). A "
1593 "DropThresholdCalculationService is always associated to "
1594 "the single queue that it examines via the Calculation"
1595 "BasedOnQueue relationship.") ]
1596 class CIM_DropThresholdCalculationService : CIM_Service {
1597 kumpf 1.2
1598 [MinValue (0), MaxValue (100000), Description (
1599 "This property is a 32-bit unsigned integer, ranging between "
1600 "0 and 100,000 - specified in thousandths. It defines the "
1601 "weighting of past history in affecting the calculation of "
1602 "the current average queue depth. The current queue depth "
1603 "calculation uses the inverse of this value as its factor, "
1604 "and one minus that inverse as the factor for the historical "
1605 "average. The calculation takes the form: \n"
1606 "average = (old_average*(1-inverse of SmoothingWeight)) \n"
1607 " + (current_queue_depth*inverse of SmoothingWeight) \n "
1608 "Implementations may choose to limit the acceptable set of "
1609 "values to a specified set, such as powers of 2."),
1610 Units ("Thousandths") ]
1611 uint32 SmoothingWeight;
1612
1613 [Description (
1614 "This property is a 32-bit unsigned integer, and defines "
1615 "the number of nanoseconds between each calculation of "
1616 "average/smoothed queue depth. When this property is not "
1617 "specified, the CalculationService may determine an "
1618 kumpf 1.2 "appropriate interval."),
1619 Units ("NanoSeconds") ]
1620 uint32 TimeInterval;
1621 };
1622
1623
1624 // ==================================================================
1625 // QueueHierarchy
1626 // ==================================================================
1627 [Association, Version ("2.7.0"), Deprecated {"No value"},
1628 Description (
1629 "Describes the reliance of a QueuingService on other, "
1630 "supporting queues and their QueuingServices. A given Service "
1631 "can only act in support of one QueuingService; but a "
1632 "higher level queue may be supported by many lower level "
1633 "QueuingServices. \n"
1634 "\n"
1635 "The class is deprecated since a queue only stores "
1636 "network traffic. It does not support other queues, or "
1637 "manipulate their entries. This type of processing is described "
1638 "using NextService associations 'rightwards' from the "
1639 kumpf 1.2 "QueuingService. These associations reference 'other' "
1640 "ConditioningServices that may send traffic to 'other' "
1641 "queues).") ]
1642 class CIM_QueueHierarchy : CIM_ServiceServiceDependency {
1643
1644 [Override ("Antecedent"), Deprecated {"No value"},
1645 Description (
1646 "The supporting queue(s) and its QueuingService. This Service "
1647 "can only support at most one, higher level QueuingService.") ]
1648 CIM_QueuingService REF Antecedent;
1649
1650 [Override ("Dependent"), Max (1), Deprecated {"No value"},
1651 Description (
1652 "The QueuingService dependent on other, supporting Queuing"
1653 "Services.") ]
1654 CIM_QueuingService REF Dependent;
1655 };
1656
1657
1658 // ==================================================================
1659 // CalculationServiceForDropper
1660 kumpf 1.2 // ==================================================================
1661 [Association, Version ("2.7.0"),
1662 Description (
1663 "This association is a subclass of ServiceServiceDependency, "
1664 "and represents the reliance of a REDDropperService on one or "
1665 "more DropThresholdCalculationServices. The latter calculate "
1666 "average queue depth, based on the observed depths of a "
1667 "queue. The specific queue examined by each CalculationService "
1668 "is defined using the CalculationBasedOnQueue association.") ]
1669 class CIM_CalculationServiceForDropper : CIM_ServiceServiceDependency {
1670
1671 [Override ("Antecedent"), Min (1), Description (
1672 "A calculation service for the dropper.") ]
1673 CIM_DropThresholdCalculationService REF Antecedent;
1674
1675 [Override ("Dependent"), Description (
1676 "The RED dropper which is dependent on average queue depth "
1677 "calculations by the Antecedent Service.") ]
1678 CIM_REDDropperService REF Dependent;
1679 };
1680
1681 kumpf 1.2
1682 // ==================================================================
1683 // CalculationBasedOnQueue
1684 // ==================================================================
1685 [Association, Version ("2.7.0"),
1686 Description (
1687 "This association establishes a dependency relationship "
1688 "between a QueuingService and an instance of the "
1689 "DropThresholdCalculationService class. The queue's "
1690 "current depth is used by the CalculationService in "
1691 "calculating an average/smoothed queue depth.") ]
1692 class CIM_CalculationBasedOnQueue : CIM_ServiceServiceDependency {
1693
1694 [Override ("Antecedent"), Min (1), Max (1),
1695 Description (
1696 "The queue examined by the CalculationService.") ]
1697 CIM_QueuingService REF Antecedent;
1698
1699 [Override ("Dependent"), Description (
1700 "The CalculationService that provides an average queue "
1701 "depth.") ]
1702 kumpf 1.2 CIM_DropThresholdCalculationService REF Dependent;
1703 };
1704
1705
1706 // ==================================================================
1707 // HeadTailDropQueueBinding
1708 // ==================================================================
1709 [Association, Version ("2.7.0"),
1710 Description (
1711 "This association describes the relationship between a "
1712 "head or tail dropper and the queue that it monitors to "
1713 "determine when to drop traffic. The referenced queue's "
1714 "depth is compared against the Dropper's threshold property. "
1715 "Although the dropper drops from only one queue, the "
1716 "drop decision may be influenced by the state of several "
1717 "queues. The rule for combining the multiple inputs is "
1718 "simple addition: if the sum of the lengths of the "
1719 "monitored queues exceeds the dropper's QueueThreshold "
1720 "value, then packets are dropped. Note that this rule for "
1721 "combining inputs may be overridden.") ]
1722 class CIM_HeadTailDropQueueBinding : CIM_Dependency {
1723 kumpf 1.2
1724 [Override ("Antecedent"), Min (1),
1725 Description (
1726 "A QueuingService examined by the CalculationService.") ]
1727 CIM_QueuingService REF Antecedent;
1728
1729 [Override ("Dependent"), Description (
1730 "The CalculationService that provides an average queue "
1731 "depth.") ]
1732 CIM_HeadTailDropper REF Dependent;
1733 };
1734
1735
1736 // ==================================================================
1737 // QueueAllocation
1738 // ==================================================================
1739 [Association, Version ("2.6.0"), Description (
1740 "Describes the reliance of a QueuingService on the "
1741 "availability of space in a BufferPool.") ]
1742 class CIM_QueueAllocation : CIM_Dependency {
1743
1744 kumpf 1.2 [Override ("Antecedent"), Description (
1745 "The BufferPool supporting packet storage for a "
1746 "QueuingService.") ]
1747 CIM_BufferPool REF Antecedent;
1748
1749 [Override ("Dependent"), Description (
1750 "The QueuingService dependent on the BufferPool for storage "
1751 "space.") ]
1752 CIM_QueuingService REF Dependent;
1753
1754 [MinValue (0), MaxValue (100), Description (
1755 "This property is an 8-bit unsigned integer representing "
1756 "a percentage from 0 to 100. It defines the percentage of "
1757 "the BufferPool that should be allocated to the referenced "
1758 "QueuingService. If absolute sizes are desired, this is "
1759 "accomplished by defining individual BufferPools of the "
1760 "specified sizes, with QueueAllocation.AllocationPercentages "
1761 "set to 100."),
1762 Units ("Percent") ]
1763 uint8 AllocationPercentage;
1764 };
1765 kumpf 1.2
1766
1767 // ===================================================================
1768 // PacketSchedulingService
1769 // ===================================================================
1770 [Version ("2.7.0"), Description (
1771 "This class represents the scheduling service, which is a "
1772 "process that determines whether a queued packet should be "
1773 "removed from a queue and sent to an output interface. Note "
1774 "that output interfaces can be physical network interfaces or "
1775 "interfaces to components internal to systems, such as "
1776 "crossbars or backplanes. In either case, if multiple queues "
1777 "are involved, schedulers are used to provide access to the "
1778 "interface. Each instance of a PacketSchedulingService "
1779 "describes a scheduler from the perspective of the queues "
1780 "that the scheduler is servicing. One can describe that "
1781 "different schedulers support different queues, or that "
1782 "a scheduler supports several queues. \n"
1783 "\n"
1784 "PacketSchedulingService is modeled as a ConditioningService "
1785 "so that it can be aggregated into a QoSService (using the "
1786 kumpf 1.2 "QoSConditioningSubService association) to indicate that its "
1787 "functionality underlies that QoS service. It participates in "
1788 "the NextService association to identify a subsequent "
1789 "ConditioningService, if any, that acts on traffic after it "
1790 "has been processed by the scheduler.") ]
1791 class CIM_PacketSchedulingService : CIM_ConditioningService {
1792
1793 [Description (
1794 "This property is an enumerated 16-bit unsigned integer, and "
1795 "defines the type of scheduler. Values are: \n"
1796 " 1: Other \n"
1797 " 2: FIFO \n"
1798 " 3: Priority \n"
1799 " 4: Allocation \n"
1800 " 5: Bounded Priority \n"
1801 " 6: Weighted Round Robin Packet \n"
1802 "If no value is specified, 2 (\"FIFO\") should be assumed."),
1803 ValueMap {"1", "2", "3", "4", "5", "6"},
1804 Values {"Other", "FIFO", "Priority", "Allocation",
1805 "Bounded Priority", "Weighted Round Robin Packet"},
1806 ModelCorrespondence {
1807 kumpf 1.2 "CIM_PacketSchedulingService.OtherSchedulerType"} ]
1808 uint16 SchedulerType;
1809
1810 [Description (
1811 "This string property is used in conjunction with "
1812 "the SchedulerType property. When the value of "
1813 "SchedulerType is 1 (i.e., \"Other\"), then the type of "
1814 "scheduler to be used is defined in this attribute."),
1815 ModelCorrespondence {
1816 "CIM_ PacketSchedulingService.SchedulerType"} ]
1817 string OtherSchedulerType;
1818 };
1819
1820
1821 // ==================================================================
1822 // NextScheduler
1823 // ==================================================================
1824 [Association, Version ("2.7.0"), Description (
1825 "This association is a subclass of NextService, and defines "
1826 "a predecessor-successor relationship between Packet"
1827 "SchedulingServices. In a hierarchical queuing "
1828 kumpf 1.2 "configuration (where a second scheduler treats the output of "
1829 "a first scheduler as a single, aggregated input), the two "
1830 "schedulers are related via the NextScheduler association.") ]
1831 class CIM_NextScheduler : CIM_NextService {
1832
1833 [Override ("PrecedingService"), Description (
1834 "The PacketSchedulingService whose output is treated as a "
1835 "single, aggregated input by the FollowingService scheduler. "
1836 "The [0..n] cardinality indicates that a single "
1837 "FollowingService scheduler may bring together the aggregated "
1838 "outputs of multiple prior schedulers.") ]
1839 CIM_PacketSchedulingService REF PrecedingService;
1840
1841 [Override ("FollowingService"), Max (1), Description (
1842 "A scheduler that includes among its inputs the aggregated "
1843 "outputs of one or more PrecedingService schedulers.") ]
1844 CIM_PacketSchedulingService REF FollowingService;
1845 };
1846
1847
1848 // ==================================================================
1849 kumpf 1.2 // SchedulerUsed
1850 // ==================================================================
1851 [Association, Version ("2.7.0"),
1852 Deprecated {"CIM_QueueToSchedule",
1853 "CIM_SchedulingServiceToSchedule"},
1854 Description (
1855 "In order to remove queued packets, a process or Service "
1856 "(identified as a PacketSchedulingService) runs. This "
1857 "association describes the Dependency of the queue and its "
1858 "QueuingService on a SchedulingService, which empties it. \n"
1859 "\n"
1860 "The association is deprecated in lieu of associating Queuing"
1861 "Services to SchedulingElements, and SchedulingElements into "
1862 "SchedulingServices. The latter approach is very flexible "
1863 "regarding the implementations that can be modeled, and removes "
1864 "the need to track individual traffic streams using an "
1865 "artificial model property, TrafficClass.") ]
1866 class CIM_SchedulerUsed : CIM_ServiceServiceDependency {
1867
1868 [Override ("Antecedent"),
1869 Deprecated {"CIM_QueueToSchedule.Queue"},
1870 kumpf 1.2 Max (1), Description (
1871 "The PacketSchedulingService which empties the Queuing"
1872 "Service's queue.") ]
1873 CIM_PacketSchedulingService REF Antecedent;
1874
1875 [Override ("Dependent"),
1876 Deprecated {"CIM_QueueToSchedule.SchedElement"},
1877 Description (
1878 "The queue and its QueuingService from which packets "
1879 "are emptied.") ]
1880 CIM_QueuingService REF Dependent;
1881 };
1882
1883
1884 // ==================================================================
1885 // NonWorkConservingSchedulingService
1886 // ==================================================================
1887 [Version ("2.7.0"), Description (
1888 "A type of packet scheduler, that is capable of "
1889 "operating in a non-work conserving manner. This class "
1890 "does not add any properties beyond those it inherits "
1891 kumpf 1.2 "from PacketSchedulingService. It does, however, "
1892 "participate in one additional association, "
1893 "FailNextScheduler.") ]
1894 class CIM_NonWorkConservingSchedulingService :
1895 CIM_PacketSchedulingService {
1896 };
1897
1898
1899 // ==================================================================
1900 // FailNextScheduler
1901 // ==================================================================
1902 [Association, Version ("2.7.0"),
1903 Description (
1904 "This association is a subclass of NextScheduler, and defines "
1905 "a predecessor-successor relationship between a NonWork"
1906 "ConservingSchedulingService and another PacketScheduling"
1907 "Service. It indicates that the NonWorkConserving scheduler "
1908 "may pass up a scheduling opportunity (thereby behaving "
1909 "in a non-work conserving manner), and make the resulting "
1910 "bandwidth available to the FollowingService scheduler.") ]
1911 class CIM_FailNextScheduler : CIM_NextScheduler {
1912 kumpf 1.2
1913 [Override ("PrecedingService"), Description (
1914 "The NonWorkConservingSchedulingService whose excess "
1915 "bandwidth is made available to the scheduler identified "
1916 "by the FollowingService reference. The [0..n] cardinality "
1917 "indicates that a single FollowingService scheduler may "
1918 "have the opportunity to use the unused bandwidth of multiple "
1919 "prior non-work-conserving schedulers.") ]
1920 CIM_NonWorkConservingSchedulingService REF PrecedingService;
1921
1922 [Override ("FollowingService"), Max (1), Description (
1923 "A scheduler that may use the bandwidth available from "
1924 "the non-work conserving scheduler.") ]
1925 CIM_PacketSchedulingService REF FollowingService;
1926 };
1927
1928
1929 // ==================================================================
1930 // SchedulingElement
1931 // ==================================================================
1932 [Abstract, Version ("2.7.0"), Description (
1933 kumpf 1.2 "SchedulingElement represents the configuration "
1934 "information that a PacketSchedulingService has for one "
1935 "of the elements that it is scheduling. The scheduled "
1936 "element is either a QueuingService or another Packet"
1937 "SchedulingService. \n"
1938 "\n"
1939 "Among the subclasses of this class, some are defined in "
1940 "such a way that all of their instances are work conserving. "
1941 "Other subclasses, however, have instances that either "
1942 "are or are not work conserving. In this class, the boolean "
1943 "property WorkConserving indicates whether an instance is or "
1944 "is not work conserving. Note that WorkConserving is "
1945 "restricted to TRUE in the subclasses that are inherently "
1946 "work conserving, since instances of these classes cannot "
1947 "be anything else.") ]
1948 class CIM_SchedulingElement : CIM_ManagedElement {
1949
1950 [Key, Description (
1951 "Within the scope of the instantiating Namespace, InstanceID "
1952 "opaquely and uniquely identifies an instance of this class. "
1953 "In order to ensure uniqueness within the NameSpace, the "
1954 kumpf 1.2 "value of InstanceID SHOULD be constructed using the "
1955 "following 'preferred' algorithm: \n"
1956 " <OrgID>:<LocalID> \n"
1957 "Where <OrgID> and <LocalID> are separated by a colon ':', "
1958 "and where <OrgID> MUST include a copyrighted, trademarked "
1959 "or otherwise unique name that is owned by the business entity "
1960 "creating/defining the InstanceID, or is a registered ID that "
1961 "is assigned to the business entity by a recognized global "
1962 "authority. (This is similar to the <Schema Name>_<Class Name> "
1963 "structure of Schema class names.) In addition, to ensure "
1964 "uniqueness <OrgID> MUST NOT contain a colon (':'). When "
1965 "using this algorithm, the first colon to appear in "
1966 "InstanceID MUST appear between <OrgID> and <LocalID>. \n"
1967 " <LocalID> is chosen by the business entity and SHOULD not be "
1968 "re-used to identify different underlying (real-world) elements. "
1969 "If the above 'preferred' algorithm is not used, the defining "
1970 "entity MUST assure that the resultant InstanceID is not "
1971 "re-used across any InstanceIDs produced by this or other "
1972 "providers for this instance's NameSpace. \n"
1973 "For DMTF defined instances, the 'preferred' algorithm MUST be "
1974 "used with the <OrgID> set to 'CIM'.") ]
1975 kumpf 1.2 string InstanceID;
1976
1977 [Write, Description (
1978 "A boolean property indicating whether the "
1979 "PacketSchedulingService tied to this instance (by the "
1980 "ElementInSchedulingService aggregation) is treating the"
1981 "queue/input tied to this instance, in a work-conserving "
1982 "manner. The queue/input is indicated by either the "
1983 "QueueToSchedule or SchedulingServiceToSchedule "
1984 "association. Note that this property is writeable, "
1985 "indicating that an administrator can change the behavior "
1986 "of the SchedulingElement - but only for those elements "
1987 "that can operate in a non-work conserving mode.") ]
1988 boolean WorkConserving;
1989 };
1990
1991
1992 // ==================================================================
1993 // AllocationSchedulingElement
1994 // ==================================================================
1995 [Version ("2.7.0"), Description (
1996 kumpf 1.2 "This class is a subclass of the abstract class "
1997 "SchedulingElement. It introduces five new properties to "
1998 "support bandwidth-based scheduling. As is the case with "
1999 "all subclasses of SchedulingElement, the input associated "
2000 "with an instance of AllocationSchedulingElement is of "
2001 "one of two types: either a queue, or another scheduler.") ]
2002 class CIM_AllocationSchedulingElement : CIM_SchedulingElement {
2003
2004 [Description (
2005 "A 16-bit unsigned integer enumeration that identifies "
2006 "the units in which the BandwidthAllocation and "
2007 "BurstAllocation properties are expressed. The following "
2008 "values are defined: \n"
2009 " - Bytes(1) \n"
2010 " - Packets(2) \n"
2011 " - Cells(3) (fixed-size, for example, ATM) \n"
2012 "If no value is specified, 1 (\"Bytes\") should be assumed."),
2013 ValueMap {"1", "2", "3"},
2014 Values {"Bytes", "Packets", "Cells"} ]
2015 uint16 AllocationUnits;
2016
2017 kumpf 1.2 [Description (
2018 "A 32-bit bit unsigned integer defining the number "
2019 "of 'units' per second that should be allocated to the "
2020 "associated input. 'Units' are identified by the "
2021 "AllocationUnits property."),
2022 ModelCorrespondence {
2023 "CIM_AllocationSchedulingElement.AllocationUnits"} ]
2024 uint32 BandwidthAllocation;
2025
2026 [Description (
2027 "A 32-bit bit unsigned integer specifying the amount "
2028 "of temporary or short-term bandwidth (in 'units' per "
2029 "second) that can be allocated to an input, beyond the "
2030 "amount of bandwidth allocated through the "
2031 "BandwidthAllocation property. If the maximum actual "
2032 "bandwidth allocation for the input were to be "
2033 "measured, it would be the sum of the BurstAllocation and "
2034 "the BandwidthAllocation properties. 'Units' are "
2035 "identified by the AllocationUnits property."),
2036 ModelCorrespondence {
2037 "CIM_AllocationSchedulingElement.AllocationUnits"} ]
2038 kumpf 1.2 uint32 BurstAllocation;
2039
2040 [Description (
2041 "A boolean property that, if TRUE, enables unused "
2042 "bandwidth from the associated input to be allocated "
2043 "to other inputs serviced by the Scheduler.") ]
2044 boolean CanShare;
2045
2046 [Description (
2047 "A boolean property that, if TRUE, indicates that the "
2048 "behavior of the scheduler relative to this input can be "
2049 "altered by changing the value of the inherited property, "
2050 "WorkConserving.") ]
2051 boolean WorkFlexible;
2052 };
2053
2054
2055 // ==================================================================
2056 // WRRSchedulingElement
2057 // ==================================================================
2058 [Version ("2.7.0"), Description (
2059 kumpf 1.2 "This class is a subclass of the abstract class "
2060 "SchedulingElement. It introduces a new property, "
2061 "WeightingFactor, to give some inputs a higher probability "
2062 "of being serviced than other inputs. It also introduces "
2063 "a Priority property, to serve as a tiebreaker to be used "
2064 "when inputs have equal weighting factors. As is the case "
2065 "with all subclasses of SchedulingElement, the input "
2066 "associated with an instance of WRRSchedulingElement is of "
2067 "one of two types: either a queue, or another scheduler. "
2068 "Because scheduling of this type is always work conserving, "
2069 "the inherited boolean property, WorkConserving, is restricted "
2070 "to TRUE in this class.") ]
2071 class CIM_WRRSchedulingElement : CIM_SchedulingElement {
2072
2073 [Override ("WorkConserving") ]
2074 boolean WorkConserving = TRUE;
2075
2076 [MinValue (0), MaxValue (100000), Description (
2077 "A 32-bit bit unsigned integer defining the weighting "
2078 "factor that offers some inputs a higher probability of "
2079 "being serviced than other inputs. The property's minimum "
2080 kumpf 1.2 "value is 0, its maximum value is 100000, and its Units "
2081 "are thousandths."),
2082 Units ("Thousandths") ]
2083 uint32 WeightingFactor;
2084
2085 [Description (
2086 "A 16-bit bit unsigned integer which serves as a "
2087 "tiebreaker, in the event that two or more inputs have "
2088 "equal weights. A larger value represents a higher "
2089 "priority. While this condition may not occur in some "
2090 "implementations of a weighted round robin scheduler, "
2091 "many implementations require a priority to resolve "
2092 "an equal-weight condition. In the instances where "
2093 "this behavior is not necessary or is undesirable, the "
2094 "property may be left unspecified.") ]
2095 uint16 Priority;
2096 };
2097
2098
2099 // ==================================================================
2100 // PrioritySchedulingElement
2101 kumpf 1.2 // ==================================================================
2102 [Version ("2.7.0"), Description (
2103 "This class is a subclass of the abstract class "
2104 "SchedulingElement. It indicates that a scheduler is "
2105 "taking packets from a set of inputs using the priority "
2106 "scheduling discipline. As is the case with all "
2107 "subclasses of SchedulingElement, the input associated "
2108 "with an instance of PrioritySchedulingElement is of one "
2109 "of two types: either a queue, or another scheduler. The "
2110 "Priority property represents the priority for an input, "
2111 "relative to the priorities of all the other inputs to "
2112 "which the scheduler (that aggregates this "
2113 "PrioritySchedulingElement) is associated. Inputs to which "
2114 "the scheduler is related via other scheduling disciplines "
2115 "do not figure in this prioritization. Because scheduling "
2116 "of this type is always work conserving, the inherited "
2117 "boolean property, WorkConserving, is restricted to TRUE "
2118 "in this class.") ]
2119 class CIM_PrioritySchedulingElement : CIM_SchedulingElement {
2120
2121 [Override ("WorkConserving") ]
2122 kumpf 1.2 boolean WorkConserving = TRUE;
2123
2124 [Description (
2125 "A 16-bit unsigned integer indicating the priority level "
2126 "of this SchedulingElement's input, relative to the other "
2127 "inputs serviced by the SchedulingElement's aggregating "
2128 "PacketSchedulingService. A larger value represents a "
2129 "higher priority.") ]
2130 uint16 Priority;
2131 };
2132
2133
2134 // ==================================================================
2135 // BoundedPrioritySchedulingElement
2136 // ==================================================================
2137 [Version ("2.7.0"), Description (
2138 "This class is a subclass of the class PriorityScheduling"
2139 "Element, which is itself derived from the abstract class "
2140 "SchedulingElement. As is the case with all subclasses of "
2141 "SchedulingElement, the input associated with an instance "
2142 "of BoundedPrioritySchedulingElement is of one of two types: "
2143 kumpf 1.2 "either a queue, or another scheduler. BoundedPriority"
2144 "SchedulingElement adds an upper bound (BandwidthBound in "
2145 "kilobits per second) on how much traffic can be handled "
2146 "from an input. This data is specific to that one input. It "
2147 "is needed when bounded strict priority scheduling is "
2148 "performed. Note that this class inherits from its "
2149 "superclass the restriction of the inherited boolean "
2150 "property WorkConserving to TRUE.") ]
2151 class CIM_BoundedPrioritySchedulingElement :
2152 CIM_PrioritySchedulingElement {
2153
2154 [Override ("WorkConserving") ]
2155 boolean WorkConserving = TRUE;
2156
2157 [Description (
2158 "A 32-bit unsigned integer that defines the upper limit "
2159 "on the amount of traffic that can be handled from the "
2160 "input (through this SchedulingElement). This is not a "
2161 "shaped upper bound, since bursts can occur. It is a "
2162 "strict bound, limiting the impact of the input. Units "
2163 "are kilobits per second."),
2164 kumpf 1.2 Units ("KiloBits per Second") ]
2165 uint32 BandwidthBound;
2166 };
2167
2168
2169 // ==================================================================
2170 // QueueToSchedule
2171 // ==================================================================
2172 [Association, Version ("2.7.0"),
2173 Description (
2174 "This is a top-level association, representing the "
2175 "relationship between a queue (QueuingService) and a "
2176 "SchedulingElement. The SchedulingElement, in turn, "
2177 "represents the information in a packet scheduling service "
2178 "that is specific to this queue, such as relative priority "
2179 "or allocated bandwidth. \n"
2180 "\n"
2181 "Although it cannot be expressed formally with the "
2182 "association cardinalities, there is an additional constraint "
2183 "on participation in this association. A particular instance "
2184 "of (a subclass of) SchedulingElement always participates "
2185 kumpf 1.2 "either in exactly one instance of this association, or in "
2186 "exactly one instance of the association "
2187 "SchedulingServiceToSchedule.") ]
2188 class CIM_QueueToSchedule {
2189
2190 [Key, Max (1), Description (
2191 "The queue and its QueuingService from which packets "
2192 "are emptied.") ]
2193 CIM_QueuingService REF Queue;
2194
2195 [Key, Description (
2196 "The SchedulingElement for the input queue.") ]
2197 CIM_SchedulingElement REF SchedElement;
2198 };
2199
2200
2201 // ==================================================================
2202 // SchedulingServiceToSchedule
2203 // ==================================================================
2204 [Association, Version ("2.7.0"),
2205 Description (
2206 kumpf 1.2 "This is a top-level association, representing the "
2207 "relationship between a scheduler (PacketSchedulingService) "
2208 "and a SchedulingElement, in a configuration involving "
2209 "cascaded schedulers. The SchedulingElement, in turn, "
2210 "represents the information in a packet scheduling service "
2211 "that is specific to this scheduler, such as relative "
2212 "priority or allocated bandwidth. \n"
2213 "\n"
2214 "Although it cannot be expressed formally with the "
2215 "association cardinalities, there is an additional constraint "
2216 "on participation in this association. A particular instance "
2217 "of (a subclass of) SchedulingElement always participates "
2218 "either in exactly one instance of this association, or in "
2219 "exactly one instance of the association QueueToSchedule.") ]
2220 class CIM_SchedulingServiceToSchedule {
2221
2222 [Key, Max (1), Description (
2223 "The scheduler being cascaded.") ]
2224 CIM_PacketSchedulingService REF SchedService;
2225
2226 [Key, Description (
2227 kumpf 1.2 "A SchedulingElement in the subsequent scheduler.") ]
2228 CIM_SchedulingElement REF SchedElement;
2229 };
2230
2231
2232 // ==================================================================
2233 // ElementInSchedulingService
2234 // ==================================================================
2235 [Association, Aggregation, Composition,
2236 Version ("2.7.0"), Description (
2237 "This association represents the relationship between a "
2238 "PacketSchedulingService and the set of SchedulingElements "
2239 "that tie it to its inputs (either QueuingServices or other "
2240 "PacketSchedulingServices).") ]
2241 class CIM_ElementInSchedulingService : CIM_Component {
2242
2243 [Override ("GroupComponent"), Aggregate, Max (1),
2244 Description (
2245 "The scheduler aggregating the SchedulingElement. A "
2246 "SchedulingElement can be associated with at most one "
2247 "SchedulingService.") ]
2248 kumpf 1.2 CIM_PacketSchedulingService REF GroupComponent;
2249
2250 [Override ("PartComponent"), Min (1), Description (
2251 "A SchedulingElement that ties either a queue or another "
2252 "scheduler to the referenced PacketSchedulingService. Every "
2253 "PacketSchedulingService MUST have at least one Scheduling"
2254 "Element/input.") ]
2255 CIM_SchedulingElement REF PartComponent;
2256 };
2257
2258
2259 // ===================================================================
2260 // end of file
2261 // ===================================================================
|