import java.util.List;\r
\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterQueuePropertyBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.RateQueueProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.RateQueuePropertyBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueProperties;\r
*/\r
public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueueConfigOutput> {\r
\r
- private static QueueGetConfigReplyMessageFactory instance;\r
private static final byte PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER = 4;\r
private static final byte PADDING_IN_PACKET_QUEUE_HEADER = 6;\r
private static final byte PADDING_IN_QUEUE_PROPERTY_HEADER = 4;\r
+ private static final int PADDING_IN_RATE_QUEUE_PROPERTY = 6;\r
+ private static final int PADDING_IN_EXPERIMENTER_QUEUE_PROPERTY = 4;\r
+ private static final byte PACKET_QUEUE_LENGTH = 16;\r
+\r
+ private static QueueGetConfigReplyMessageFactory instance;\r
\r
private QueueGetConfigReplyMessageFactory() {\r
// singleton\r
\r
private static List<Queues> createQueuesList(ByteBuf input){\r
List<Queues> queuesList = new ArrayList<>();\r
- QueuesBuilder queueBuilder = new QueuesBuilder();\r
while (input.readableBytes() > 0) {\r
+ QueuesBuilder queueBuilder = new QueuesBuilder();\r
queueBuilder.setQueueId(new QueueId(input.readUnsignedInt()));\r
queueBuilder.setPort(new PortNumber(input.readUnsignedInt()));\r
- input.skipBytes(2);\r
+ int length = input.readUnsignedShort();\r
input.skipBytes(PADDING_IN_PACKET_QUEUE_HEADER);\r
- queueBuilder.setQueueProperty(createPropertiesList(input));\r
+ queueBuilder.setQueueProperty(createPropertiesList(input, length - PACKET_QUEUE_LENGTH));\r
queuesList.add(queueBuilder.build());\r
} \r
return queuesList;\r
}\r
\r
- private static List<QueueProperty> createPropertiesList(ByteBuf propertiesInput){\r
+ private static List<QueueProperty> createPropertiesList(ByteBuf input, int length){\r
+ int propertiesLength = length;\r
List<QueueProperty> propertiesList = new ArrayList<>();\r
- QueuePropertyBuilder propertiesBuilder = new QueuePropertyBuilder();\r
- propertiesBuilder.setProperty(QueueProperties.forValue(propertiesInput.readUnsignedShort()));\r
- propertiesInput.skipBytes(2);\r
- propertiesInput.skipBytes(PADDING_IN_QUEUE_PROPERTY_HEADER);\r
- propertiesList.add(propertiesBuilder.build());\r
+ while (propertiesLength > 0) {\r
+ QueuePropertyBuilder propertiesBuilder = new QueuePropertyBuilder();\r
+ QueueProperties property = QueueProperties.forValue(input.readUnsignedShort());\r
+ propertiesBuilder.setProperty(property);\r
+ int currentPropertyLength = input.readUnsignedShort();\r
+ propertiesLength -= currentPropertyLength;\r
+ input.skipBytes(PADDING_IN_QUEUE_PROPERTY_HEADER);\r
+ if (property.equals(QueueProperties.OFPQTMINRATE) || property.equals(QueueProperties.OFPQTMAXRATE)) {\r
+ RateQueuePropertyBuilder rateBuilder = new RateQueuePropertyBuilder();\r
+ rateBuilder.setRate(input.readUnsignedShort());\r
+ propertiesBuilder.addAugmentation(RateQueueProperty.class, rateBuilder.build());\r
+ input.skipBytes(PADDING_IN_RATE_QUEUE_PROPERTY);\r
+ } else if (property.equals(QueueProperties.OFPQTEXPERIMENTER)) {\r
+ ExperimenterQueuePropertyBuilder expBuilder = new ExperimenterQueuePropertyBuilder();\r
+ expBuilder.setExperimenter(input.readUnsignedInt());\r
+ input.skipBytes(PADDING_IN_EXPERIMENTER_QUEUE_PROPERTY);\r
+ expBuilder.setData(input.readBytes(currentPropertyLength\r
+ - Integer.SIZE / Byte.SIZE - PADDING_IN_EXPERIMENTER_QUEUE_PROPERTY).array());\r
+ propertiesBuilder.addAugmentation(RateQueueProperty.class, expBuilder.build());\r
+ }\r
+ propertiesList.add(propertiesBuilder.build());\r
+ }\r
return propertiesList;\r
}\r
\r