2 * Copyright (c) 2014 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.codec.action;
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;
26 * Codec for the Nicira OutputRegAction
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);
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);
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();