2 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowjava.nx.api.impl;
11 import io.netty.buffer.ByteBuf;
13 import org.opendaylight.openflowjava.nx.api.NiciraActionDeserializerKey;
14 import org.opendaylight.openflowjava.nx.api.NiciraConstants;
15 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
16 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterActionDeserializerKey;
17 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
22 public class ActionDeserializer implements OFDeserializer<Action> {
24 private static final Logger LOG = LoggerFactory.getLogger(ActionDeserializer.class);
26 public static final ExperimenterActionDeserializerKey OF13_DESERIALIZER_KEY = new ExperimenterActionDeserializerKey(
27 EncodeConstants.OF13_VERSION_ID, NiciraConstants.NX_VENDOR_ID);
28 public static final ExperimenterActionDeserializerKey OF10_DESERIALIZER_KEY = new ExperimenterActionDeserializerKey(
29 EncodeConstants.OF10_VERSION_ID, NiciraConstants.NX_VENDOR_ID);
31 private final short version;
34 * @param version protocol wire version
36 public ActionDeserializer(short version) {
37 this.version = version;
41 public Action deserialize(ByteBuf message) {
42 int startPossition = message.readerIndex();
43 // size of experimenter type
44 message.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
46 message.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
47 long experimenterId = message.readUnsignedInt();
48 if (NiciraConstants.NX_VENDOR_ID != experimenterId) {
49 throw new IllegalStateException("Experimenter ID is not Nicira vendor id but is " + experimenterId);
51 int subtype = message.readUnsignedShort();
52 NiciraActionDeserializerKey key = new NiciraActionDeserializerKey(version, subtype);
53 OFDeserializer<Action> actionDeserializer = NiciraExtensionCodecRegistratorImpl.getActionDeserializer(key);
54 if (actionDeserializer == null) {
55 LOG.info("No deserializer was found for key {}", key);
58 message.readerIndex(startPossition);
59 return actionDeserializer.deserialize(message);