/* * Copyright (c) 2016 Pantheon Technologies s.r.o. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.openflowplugin.impl.protocol.deserialization.action; import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry; import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector; import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey; import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants; import org.opendaylight.openflowplugin.api.openflow.protocol.deserialization.MatchEntryDeserializer; import org.opendaylight.openflowplugin.extension.api.path.MatchPath; import org.opendaylight.openflowplugin.impl.protocol.deserialization.key.MessageCodeMatchKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match; import io.netty.buffer.ByteBuf; public class SetFieldActionDeserializer extends AbstractActionDeserializer implements DeserializerRegistryInjector { private static final MessageCodeKey MATCH_KEY = new MessageCodeMatchKey( EncodeConstants.OF13_VERSION_ID, EncodeConstants.EMPTY_LENGTH, Match.class, MatchPath.FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_MATCH); private DeserializerRegistry registry; @Override public Action deserialize(ByteBuf message) { final MatchEntryDeserializer deserializer = registry.getDeserializer(MATCH_KEY); final MatchBuilder builder = new MatchBuilder(); final int startIndex = message.readerIndex(); processHeader(message); deserializer.deserializeEntry(message, builder); int paddingRemainder = (message.readerIndex() - startIndex) % EncodeConstants.PADDING; if (paddingRemainder != 0) { message.skipBytes(EncodeConstants.PADDING - paddingRemainder); } return new SetFieldCaseBuilder() .setSetField(new SetFieldBuilder(builder.build()).build()) .build(); } @Override public Action deserializeHeader(ByteBuf message) { processHeader(message); return new SetFieldCaseBuilder().build(); } @Override public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) { registry = deserializerRegistry; } }