BUG-2794: incorporate openflowjava api changes to openflowplugin
[openflowplugin.git] / extension / openflowjava-extension-nicira / src / main / java / org / opendaylight / openflowjava / nx / codec / action / OutputRegCodec.java
1 /**
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.openflowjava.nx.codec.action;
10
11 import io.netty.buffer.ByteBuf;
12 import org.opendaylight.openflowjava.nx.api.NiciraActionDeserializerKey;
13 import org.opendaylight.openflowjava.nx.api.NiciraActionSerializerKey;
14 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.ExperimenterIdAction;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.oxm.container.match.entry.value.ExperimenterIdCaseBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.NxmNxOutputReg;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.OfjAugNxAction;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.OfjAugNxActionBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.output.reg.grouping.ActionOutputReg;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.output.reg.grouping.ActionOutputRegBuilder;
24
25 /**
26  * Codec for the Nicira OutputRegAction
27  *
28  * @author readams
29  */
30 public class OutputRegCodec extends AbstractActionCodec {
31     public static final int LENGTH = 24;
32     public static final byte SUBTYPE = 15; // NXAST_OUTPUT_REG
33     public static final byte PADDING_IN_OUTPUT_REG_ACTION = 6;
34     public static final NiciraActionSerializerKey SERIALIZER_KEY =
35             new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, NxmNxOutputReg.class);
36     public static final NiciraActionDeserializerKey DESERIALIZER_KEY =
37             new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, SUBTYPE);
38
39     @Override
40     public void serialize(Action input, ByteBuf outBuffer) {
41         ActionOutputReg action = input.getAugmentation(OfjAugNxAction.class).getActionOutputReg();
42         serializeHeader(LENGTH, SUBTYPE, outBuffer);
43         outBuffer.writeShort(action.getNBits().shortValue());
44         outBuffer.writeInt(action.getSrc().intValue());
45         outBuffer.writeShort(action.getMaxLen().shortValue());
46         outBuffer.writeZero(6);
47     }
48
49     @Override
50     public Action deserialize(ByteBuf message) {
51         ActionBuilder actionBuilder = deserializeHeader(message);
52         ActionOutputRegBuilder builder = new ActionOutputRegBuilder();
53         builder.setNBits(message.readUnsignedShort());
54         builder.setSrc(message.readUnsignedInt());
55         builder.setMaxLen(message.readUnsignedShort());
56         message.skipBytes(PADDING_IN_OUTPUT_REG_ACTION);
57         OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
58         augNxActionBuilder.setActionOutputReg(builder.build());
59         ExperimenterIdCaseBuilder experimenterIdCaseBuilder = new ExperimenterIdCaseBuilder();
60         actionBuilder.addAugmentation(ExperimenterIdAction.class,
61                 createExperimenterIdAction(NxmNxOutputReg.class));
62         actionBuilder.addAugmentation(OfjAugNxAction.class, augNxActionBuilder.build());
63         return actionBuilder.build();
64     }
65
66 }