@Override
public void serialize(Action input, ByteBuf outBuffer) {
- ActionPopNsh action = (ActionPopNsh) input.getActionChoice();
serializeHeader(LENGTH, NXAST_POP_NSH_SUBTYPE, outBuffer);
outBuffer.writeZero(PADDING);
}
@Override
public void serialize(Action input, ByteBuf outBuffer) {
- ActionPushNsh action = (ActionPushNsh) input.getActionChoice();
serializeHeader(LENGTH, NXAST_PUSH_NSH_SUBTYPE, outBuffer);
outBuffer.writeZero(PADDING);
}
import org.opendaylight.yangtools.yang.binding.Augmentable;
import org.opendaylight.yangtools.yang.binding.Augmentation;
import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Provides augmentation resolving upon given {@link Augmentable}.
* @param <G> grouping
*/
public class GroupingLooseResolver<G> {
+ private static final Logger LOG = LoggerFactory.getLogger(GroupingLooseResolver.class);
private final Class<G> commonInterface;
private final Set<Class<? extends Augmentation<?>>> classes;
*/
@SuppressWarnings("unchecked")
public <T extends Augmentable<T>> Optional<G> getExtension(DataObject data) {
- T guessData = (T) data;
+ // The type of 'data' should really be T for compile-time checking. Several call sites do not pass an
+ // Augmentable DataObject type which would result in a ClassCastException at runtime. This is clearly
+ // broken - those call sites need to be analyzed to determine the correct behavior in order for this method
+ // signature to be changed but for now catch ClassCastException.
+ T guessData;
+ try {
+ guessData = (T) data;
+ } catch (ClassCastException e) {
+ LOG.warn("Cannot cast to Augmentable", e);
+ return Optional.empty();
+ }
for (Class<? extends Augmentation<?>> cls : classes) {
Augmentation<T> potential = guessData
import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPreconditionException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPopNsh;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPopNshBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.pop.nsh.grouping.NxActionPopNsh;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.pop.nsh.grouping.NxActionPopNshBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.NxActionPopNshGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionPopNshNotifFlowsStatisticsUpdateApplyActionsCaseBuilder;
@Override
public org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action convert(
Action input, ActionPath path) {
- NxActionPopNsh action = ((ActionPopNsh) input.getActionChoice()).getNxActionPopNsh();
NxPopNshBuilder builder = new NxPopNshBuilder();
return resolveAction(builder.build(), path);
}
public Action convert(
org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action nxActionArg) {
Preconditions.checkArgument(nxActionArg instanceof NxActionPopNshGrouping);
- NxActionPopNshGrouping nxAction = (NxActionPopNshGrouping) nxActionArg;
ActionPopNshBuilder builder = new ActionPopNshBuilder();
NxActionPopNshBuilder nxActionPopNshBuilder = new NxActionPopNshBuilder();
builder.setNxActionPopNsh(nxActionPopNshBuilder.build());
import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPreconditionException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPushNsh;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPushNshBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.push.nsh.grouping.NxActionPushNsh;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.push.nsh.grouping.NxActionPushNshBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.NxActionPushNshGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionPushNshNotifFlowsStatisticsUpdateApplyActionsCaseBuilder;
@Override
public org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action convert(
Action input, ActionPath path) {
- NxActionPushNsh action = ((ActionPushNsh) input.getActionChoice()).getNxActionPushNsh();
NxPushNshBuilder builder = new NxPushNshBuilder();
return resolveAction(builder.build(), path);
}
public Action convert(
org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action nxActionArg) {
Preconditions.checkArgument(nxActionArg instanceof NxActionPushNshGrouping);
- NxActionPushNshGrouping nxAction = (NxActionPushNshGrouping) nxActionArg;
ActionPushNshBuilder builder = new ActionPushNshBuilder();
NxActionPushNshBuilder nxActionPushNshBuilder = new NxActionPushNshBuilder();
builder.setNxActionPushNsh(nxActionPushNshBuilder.build());
package org.opendaylight.openflowplugin.extension.onf.deserializer;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
return properties;
}
+ @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
private BundleProperty createExperimenterBundleProperty(final int length, final ByteBuf message) {
+ Objects.requireNonNull(deserializerRegistry);
+
BundlePropertyExperimenterBuilder experimenterProperty = new BundlePropertyExperimenterBuilder();
long experimenterId = message.readUnsignedInt();
long expType = message.readUnsignedInt();
<groupId>org.opendaylight.controller.model</groupId>
<artifactId>model-inventory</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.infrautils</groupId>
+ <artifactId>infrautils-util</artifactId>
+ <version>${infrautils.version}</version>
+ </dependency>
<!-- OpenFlowJava-API models -->
<dependency>
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
-import org.opendaylight.openflowplugin.extension.api.AugmentTuple;
+import org.opendaylight.infrautils.utils.concurrent.JdkFutures;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtl;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Implementation of TestService.
* @author msunal
*/
public class Test implements TestService {
+ private static final Logger LOG = LoggerFactory.getLogger(Test.class);
private SalFlowService flowService;
}
private void pushFlowViaRpc(AddFlowInput addFlowInput) {
- flowService.addFlow(addFlowInput);
+ if (flowService != null) {
+ JdkFutures.addErrorLogging(flowService.addFlow(addFlowInput), LOG, "addFlow");
+ }
}
public void setFlowService(SalFlowService flowService) {
return match;
}
- private static AugmentTuple<Match> createNxMatchAugment() {
- // TODO add example
- return null;
- }
-
private static InstructionsBuilder createDecNwTtlInstructionsBld() {
// Add our drop action to a list
List<Action> actionList = new ArrayList<>();