| /* |
| * Copyright (c) 2018 - present. Boling Consulting Solutions (bcsw.net) |
| * Copyright 2020-present Open Networking Foundation |
| |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| /* |
| * NOTE: This file was generated, manual edits will be overwritten! |
| * |
| * Generated by 'goCodeGenerator.py': |
| * https://github.com/cboling/OMCI-parser/README.md |
| */ |
| |
| package generated |
| |
| import "github.com/deckarep/golang-set" |
| |
| // PriorityQueueClassID is the 16-bit ID for the OMCI |
| // Managed entity Priority queue |
| const PriorityQueueClassID = ClassID(277) // 0x0115 |
| |
| var priorityqueueBME *ManagedEntityDefinition |
| |
| // PriorityQueue (Class ID: #277 / 0x0115) |
| // NOTE 1 - In [ITU-T G.984.4], this is called a priority queue-G. |
| // |
| // This ME specifies the priority queue used by a GEM port network CTP in the upstream direction. |
| // The upstream priority queue ME is also related to a T-CONT ME. By default, this relationship is |
| // fixed by the ONU hardware architecture, but some ONUs may also permit the relationship to be |
| // configured through the OMCI, as indicated by the QoS configuration flexibility attribute of the |
| // ONU2G ME. |
| // |
| // In the downstream direction, priority queues are associated with UNIs. Again, the association is |
| // fixed by default, but some ONUs may permit the association to be configured through the OMCI. |
| // |
| // If an ONU as a whole contains priority queues, it instantiates these queues autonomously. |
| // Priority queues may also be localized to pluggable circuit packs, in which case the ONU creates |
| // and deletes them in accordance with circuit pack pre-provisioning and the equipped |
| // configuration. |
| // |
| // The OLT can find all the queues by reading the priority queue ME instances. If the OLT tries to |
| // retrieve a non-existent priority queue, the ONU denies the get action with an error indication. |
| // |
| // See also Appendix II. |
| // |
| // Priority queues can exist in the ONU core and circuit packs serving both UNI and ANI functions. |
| // Therefore, they can be indirectly created and destroyed through cardholder provisioning actions. |
| // |
| // In the upstream direction, the weight attribute permits the configuring of an optional traffic |
| // scheduler. Several attributes support back pressure operation, whereby a back-pressure signal is |
| // sent backwards and causes the attached terminal to temporarily suspend sending data. |
| // |
| // In the downstream direction, strict priority discipline among the queues serving a given UNI is |
| // the default, with priorities established through the related port attribute. If two or more non- |
| // empty queues have the same priority, capacity is allocated among them in proportion to their |
| // weights. Note that the details of the downstream model differ from those of the upstream model. |
| // |
| // The yellow packet drop thresholds specify the drop probability for a packet that has been marked |
| // yellow (drop eligible) by a traffic descriptor or by external equipment such as a residential |
| // gateway (RG). If the current average queue occupancy is less than the minimum threshold, the |
| // yellow packet drop probability is zero. If the current average queue occupancy is greater than |
| // or equal to the maximum threshold, the yellow packet drop probability is one. The yellow drop |
| // probability increases linearly between 0 and max_p as the current average queue occupancy |
| // increases from the minimum to the maximum threshold. |
| // |
| // The same model can be configured for green packets, those regarded as being within the traffic |
| // contract. |
| // |
| // Drop precedence colour marking indicates the method by which a packet is marked as drop eligible |
| // (yellow). For discard eligibility indicator (DEI) and priority code point (PCP) marking, a drop |
| // eligible indicator is equivalent to yellow colour; otherwise, the colour is green. For |
| // differentiated services code point (DSCP) assured forwarding (AF) marking, the lowest drop |
| // precedence is equivalent to green; otherwise, the colour is yellow. |
| // |
| // Relationships |
| // One or more instances of this ME are associated with the ONU-G ME to model upstream priority |
| // queues if the traffic management option attribute in the ONU-G ME is 0 or 2.//// One or more instances of this ME are associated with a PPTP UNI ME as downstream priority |
| // queues. Downstream priority queues may or may not be provided for a virtual Ethernet interface |
| // point (VEIP). |
| // |
| // Attributes |
| // Managed Entity Id |
| // This attribute uniquely identifies each instance of this ME. The MSB represents the direction |
| // (1: upstream, 0:-downstream). The 15 LSBs represent a queue ID. The queue ID is numbered in |
| // ascending order by the ONU itself. It is strongly encouraged that the queue ID be formulated to |
| // simplify finding related queues. One way to do this is to number the queues such that the |
| // related port attributes are in ascending order (for the downstream and upstream queues |
| // separately). The range of downstream queue ids is 0 to 0x7FFF and the range of upstream queue |
| // ids is 0x8000 to 0xFFFF. (R) (mandatory) (2-bytes) |
| // |
| // Queue Configuration Option |
| // This attribute identifies the buffer partitioning policy. The value 1 means that several queues |
| // share one buffer of maximum queue size, while the value 0 means that each queue has an |
| // individual buffer of maximum queue size. (R) (mandatory) (1-byte) |
| // |
| // Maximum Queue Size |
| // This attribute specifies the maximum size of the queue, in bytes, scaled by the priority queue |
| // scale factor attribute of the ONU2G. (R) (mandatory) (2 bytes) |
| // |
| // NOTE 2 - In this and the other similar attributes of the priority queue ME, some legacy |
| // implementations may take the queue scale factor from the GEM block length attribute of the ANI-G |
| // ME. This option is discouraged in new implementations. |
| // |
| // Allocated Queue Size |
| // This attribute identifies the allocated size of this queue, in bytes, scaled by the priority |
| // queue scale factor attribute of the ONU2G. (R, W) (mandatory) (2 bytes) |
| // |
| // Discard_Block Counter Reset Interval |
| // Discard-block counter reset interval: This attribute represents the interval in milliseconds at |
| // which the counter resets itself. (R,-W) (optional) (2-bytes) |
| // |
| // Threshold Value For Discarded Blocks Due To Buffer Overflow |
| // This attribute specifies the threshold for the number of bytes (scaled by the priority queue |
| // scale factor attribute of the ONU2G) discarded on this queue due to buffer overflow. Its value |
| // controls the declaration of the block loss alarm. (R, W) (optional) (2-bytes) |
| // |
| // Related Port |
| // This attribute represents the slot, port/T-CONT and priority information associated with the |
| // instance of priority queue ME. This attribute comprises 4-bytes. |
| // |
| // In the upstream direction, the first 2-bytes are the ME ID of the associated T-CONT, the first |
| // byte of which is a slot number, the second byte a T-CONT number. In the downstream direction, |
| // the first byte is the slot number and the second byte is the port number of the queue's |
| // destination port. |
| // |
| // The last 2-bytes represent the priority of this queue. The range of priority is 0 to 0x0FFF. The |
| // value 0 indicates the highest priority and 0x0FFF indicates the lowest priority. The priority |
| // field is meaningful if multiple priority queues are associated with a T-CONT or traffic |
| // scheduler whose scheduling discipline is strict priority. |
| // |
| // (R, W) (mandatory) (4 bytes) |
| // |
| // NOTE 3 - If flexible port configuration is supported, the related port attribute is meaningful |
| // only if the traffic scheduler pointer attribute value is null. Otherwise, the related port |
| // attribute is ignored. |
| // |
| // NOTE 4 - The related port attribute is read-only, unless otherwise specified by the QoS |
| // configuration flexibility attribute of the ONU2-G ME. If port flexibility is supported, the |
| // second byte, the port or T-CONT number, may be changed. If priority flexibility is supported, |
| // the third and fourth bytes may be changed. The OMCI set command must contain 4-bytes to match |
| // the attribute size, but the ONU must ignore all bytes that are not specified to be flexible. |
| // |
| // If flexible configuration is not supported, the ONU should reject an attempt to set the related |
| // port with a parameter error result-reason code. |
| // |
| // Traffic Scheduler Pointer |
| // The ONU should reject an attempt to violate these conditions with a parameter error result- |
| // reason code. |
| // |
| // This attribute points to the traffic scheduler ME instance that is associated with this priority |
| // queue. This pointer is used when this priority queue is connected with a traffic scheduler. The |
| // default value is a null pointer (0). (R, W) (mandatory) (2 bytes) |
| // |
| // NOTE 5 - When the QoS configuration flexibility attribute of the ONU2-G ME allows flexible |
| // assignment of the traffic scheduler, the OLT may configure the traffic scheduler pointer to |
| // refer to any traffic scheduler in the same slot. |
| // |
| // If traffic scheduler flexibility is not permitted by the QoS configuration flexibility |
| // attribute, the OLT may use the traffic scheduler pointer attribute only by pointing to another |
| // traffic scheduler ME that is associated with the same T-CONT as the priority queue itself. |
| // |
| // Weight |
| // This attribute represents weight for WRR scheduling. At a given priority level, capacity is |
| // distributed to non-empty queues in proportion to their weights. In the upstream direction, this |
| // weight is meaningful if several priority queues are associated with a traffic scheduler or |
| // T-CONT whose policy is WRR. In the downstream direction, this weight is used by a UNI in a WRR |
| // fashion. Upon ME instantiation, the ONU sets this attribute to 1. (R,-W) (mandatory) (1-byte) |
| // |
| // Back Pressure Operation |
| // This attribute enables (0) or disables (1) back pressure operation. Its default value is 0. |
| // (R,-W) (mandatory) (2-bytes) |
| // |
| // Back Pressure Time |
| // This attribute specifies the duration in microseconds of the backpressure signal. It can be used |
| // as a pause time for an Ethernet UNI. Upon ME instantiation, the ONU sets this attribute to 0. |
| // (R,-W) (mandatory) (4-bytes) |
| // |
| // Back Pressure Occur Queue Threshold |
| // This attribute identifies the threshold queue occupancy, in bytes, scaled by the priority queue |
| // scale factor attribute of the ONU2G, to start sending a back-pressure signal. (R, W) (mandatory) |
| // (2-bytes) |
| // |
| // Back Pressure Clear Queue Threshold |
| // This attribute identifies the threshold queue occupancy, in bytes, scaled by the priority queue |
| // scale factor attribute of the ONU2G, to stop sending a back-pressure signal. (R, W) (mandatory) |
| // (2-bytes) |
| // |
| // Packet Drop Queue Thresholds |
| // This attribute is a composite of four 2-byte values, a minimum and a maximum threshold, measured |
| // in bytes, scaled by the priority queue scale factor attribute of the ONU2-G, for green and |
| // yellow packets. The first value is the minimum green threshold, the queue occupancy below which |
| // all green packets are admitted to the queue. The second value is the maximum green threshold, |
| // the queue occupancy at or above which all green packets are discarded. The third value is the |
| // minimum yellow threshold, the queue occupancy below which all yellow packets are admitted to the |
| // queue. The fourth value is the maximum yellow threshold, the queue occupancy at or above which |
| // all yellow packets are discarded. The default is that all thresholds take the value of the |
| // maximum queue size. (R,-W) (optional) (8-bytes) |
| // |
| // Packet Drop Max_P |
| // This attribute is a composite of two 1-byte values, the probability of dropping a coloured |
| // packet when the queue occupancy lies just below the maximum threshold for packets of that |
| // colour. The first value is the green packet max_p, and the second value is the yellow packet |
| // max_p. The probability, max_p, is determined by adding one to the unsigned value (0..255) of |
| // this attribute and dividing the result by 256. The default for each value is 255. (R,-W) |
| // (optional) (2-bytes) |
| // |
| // Queue Drop W_Q |
| // This attribute determines the averaging coefficient, w_q, as described in [b-Floyd]. The |
| // averaging coefficient, w_q, is equal to 2Queue_drop_w_q. For example, when queue drop_w_q has |
| // the value 9, the averaging coefficient, w_q, is 1/512-= 0.001-9. The default value is 9. (R,-W) |
| // (optional) (1-byte) |
| // |
| // Drop Precedence Colour Marking |
| // 6 PCP 5P3D [IEEE 802.1ad] |
| // |
| // 7 DSCP AF class [IETF RFC 2597] |
| // |
| // (R,-W) (optional) (1-byte) |
| // |
| // This attribute specifies how drop precedence is marked on ingress packets to the priority queue. |
| // The default value is 0. |
| // |
| // 0 No marking (treat all packets as green) |
| // |
| // 1 Internal marking (from traffic descriptor ME) |
| // |
| // 2 DEI [IEEE 802.1ad] |
| // |
| // 3 PCP 8P0D [IEEE 802.1ad] |
| // |
| // 4 PCP 7P1D [IEEE 802.1ad] |
| // |
| // 5 PCP 6P2D [IEEE 802.1ad] |
| // |
| type PriorityQueue struct { |
| ManagedEntityDefinition |
| Attributes AttributeValueMap |
| } |
| |
| func init() { |
| priorityqueueBME = &ManagedEntityDefinition{ |
| Name: "PriorityQueue", |
| ClassID: 277, |
| MessageTypes: mapset.NewSetWith( |
| Get, |
| Set, |
| ), |
| AllowedAttributeMask: 0xffff, |
| AttributeDefinitions: AttributeDefinitionMap{ |
| 0: Uint16Field("ManagedEntityId", PointerAttributeType, 0x0000, 0, mapset.NewSetWith(Read), false, false, false, 0), |
| 1: ByteField("QueueConfigurationOption", UnsignedIntegerAttributeType, 0x8000, 0, mapset.NewSetWith(Read), false, false, false, 1), |
| 2: Uint16Field("MaximumQueueSize", UnsignedIntegerAttributeType, 0x4000, 0, mapset.NewSetWith(Read), false, false, false, 2), |
| 3: Uint16Field("AllocatedQueueSize", UnsignedIntegerAttributeType, 0x2000, 0, mapset.NewSetWith(Read, Write), false, false, false, 3), |
| 4: Uint16Field("DiscardBlockCounterResetInterval", UnsignedIntegerAttributeType, 0x1000, 0, mapset.NewSetWith(Read, Write), false, true, false, 4), |
| 5: Uint16Field("ThresholdValueForDiscardedBlocksDueToBufferOverflow", UnsignedIntegerAttributeType, 0x0800, 0, mapset.NewSetWith(Read, Write), false, true, false, 5), |
| 6: Uint32Field("RelatedPort", UnsignedIntegerAttributeType, 0x0400, 0, mapset.NewSetWith(Read, Write), false, false, false, 6), |
| 7: Uint16Field("TrafficSchedulerPointer", UnsignedIntegerAttributeType, 0x0200, 0, mapset.NewSetWith(Read, Write), false, false, false, 7), |
| 8: ByteField("Weight", UnsignedIntegerAttributeType, 0x0100, 0, mapset.NewSetWith(Read, Write), false, false, false, 8), |
| 9: Uint16Field("BackPressureOperation", UnsignedIntegerAttributeType, 0x0080, 0, mapset.NewSetWith(Read, Write), false, false, false, 9), |
| 10: Uint32Field("BackPressureTime", UnsignedIntegerAttributeType, 0x0040, 0, mapset.NewSetWith(Read, Write), false, false, false, 10), |
| 11: Uint16Field("BackPressureOccurQueueThreshold", UnsignedIntegerAttributeType, 0x0020, 0, mapset.NewSetWith(Read, Write), false, false, false, 11), |
| 12: Uint16Field("BackPressureClearQueueThreshold", UnsignedIntegerAttributeType, 0x0010, 0, mapset.NewSetWith(Read, Write), false, false, false, 12), |
| 13: Uint64Field("PacketDropQueueThresholds", UnsignedIntegerAttributeType, 0x0008, 0, mapset.NewSetWith(Read, Write), false, true, false, 13), |
| 14: Uint16Field("PacketDropMaxP", UnsignedIntegerAttributeType, 0x0004, 0, mapset.NewSetWith(Read, Write), false, true, false, 14), |
| 15: ByteField("QueueDropWQ", UnsignedIntegerAttributeType, 0x0002, 0, mapset.NewSetWith(Read, Write), false, true, false, 15), |
| 16: ByteField("DropPrecedenceColourMarking", UnsignedIntegerAttributeType, 0x0001, 0, mapset.NewSetWith(Read, Write), false, true, false, 16), |
| }, |
| Access: CreatedByOnu, |
| Support: UnknownSupport, |
| Alarms: AlarmMap{ |
| 0: "Block loss", |
| }, |
| } |
| } |
| |
| // NewPriorityQueue (class ID 277) creates the basic |
| // Managed Entity definition that is used to validate an ME of this type that |
| // is received from or transmitted to the OMCC. |
| func NewPriorityQueue(params ...ParamData) (*ManagedEntity, OmciErrors) { |
| return NewManagedEntity(*priorityqueueBME, params...) |
| } |