X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=extension%2Ftest-extension%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fextension%2Ftest%2FTest.java;h=696afcc33996a1a2f5ee00454677f933fa462fe4;hb=82b7fdcd16dd0c71265d5f7560c3f039beedcd5d;hp=04f35928379fb7660279583551b85d6f9c200029;hpb=137e4d7d86e8f402f3d52fd0fa162792f9ff60eb;p=openflowplugin.git diff --git a/extension/test-extension/src/main/java/org/opendaylight/openflowplugin/extension/test/Test.java b/extension/test-extension/src/main/java/org/opendaylight/openflowplugin/extension/test/Test.java index 04f3592837..696afcc339 100644 --- a/extension/test-extension/src/main/java/org/opendaylight/openflowplugin/extension/test/Test.java +++ b/extension/test-extension/src/main/java/org/opendaylight/openflowplugin/extension/test/Test.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the @@ -9,29 +9,26 @@ package org.opendaylight.openflowplugin.extension.test; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import org.opendaylight.infrautils.utils.concurrent.JdkFutures; +import javax.annotation.PreDestroy; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.opendaylight.infrautils.utils.concurrent.LoggingFutures; +import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcProviderService; 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.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlow; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService; 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.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.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; @@ -40,19 +37,28 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestFlow; import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestFlowInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestFlowOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestService; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.util.BindingMap; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,126 +67,93 @@ import org.slf4j.LoggerFactory; * * @author msunal */ -public class Test implements TestService { +@Singleton +@Component(service = { }) +public final class Test implements TestFlow, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(Test.class); - private SalFlowService flowService; + private final AddFlow addFlow; + private final Registration reg; + @Inject + @Activate + public Test(@Reference final RpcConsumerRegistry rpcService, + @Reference final RpcProviderService rpcProviderService) { + addFlow = rpcService.getRpc(AddFlow.class); + reg = rpcProviderService.registerRpcImplementation(this); + } + @PreDestroy + @Deactivate @Override - public ListenableFuture> testFlow(TestFlowInput input) { - AddFlowInputBuilder flow = new AddFlowInputBuilder(); - flow.setPriority(2); - flow.setMatch(createMatchBld().build()); - flow.setInstructions(createDecNwTtlInstructionsBld().build()); - flow.setBarrier(Boolean.FALSE); - BigInteger value = BigInteger.valueOf(10L); - flow.setCookie(new FlowCookie(value)); - flow.setCookieMask(new FlowCookie(value)); - flow.setHardTimeout(0); - flow.setIdleTimeout(0); - flow.setInstallHw(false); - flow.setStrict(false); - flow.setContainerName(null); - flow.setFlags(new FlowModFlags(false, false, false, false, true)); - flow.setTableId((short) 0); - - flow.setFlowName("NiciraFLOW"); + public void close() { + reg.close(); + } + @Override + public ListenableFuture> invoke(final TestFlowInput input) { // Construct the flow instance id final InstanceIdentifier flowInstanceId = InstanceIdentifier .builder(Nodes.class) // File under nodes // A particular node identified by nodeKey .child(Node.class, new NodeKey(new NodeId("openflow:1"))).build(); - flow.setNode(new NodeRef(flowInstanceId)); - pushFlowViaRpc(flow.build()); + pushFlowViaRpc(new AddFlowInputBuilder() + .setPriority(Uint16.TWO) + .setMatch(new MatchBuilder() + .setLayer3Match(new Ipv4MatchBuilder().setIpv4Destination(new Ipv4Prefix("10.0.0.1/24")).build()) + .setEthernetMatch(new EthernetMatchBuilder() + .setEthernetType(new EthernetTypeBuilder().setType(new EtherType(Uint32.valueOf(0x0800))).build()) + .build()) + // .addAugmentation(createNxMatchAugment().getAugmentationObject()) + .build()) + .setInstructions(new InstructionsBuilder() + .setInstruction(BindingMap.of(new InstructionBuilder() + .setOrder(0) + .setInstruction(new ApplyActionsCaseBuilder() + .setApplyActions(new ApplyActionsBuilder() + .setAction(BindingMap.of(new ActionBuilder() + .setOrder(0) + .setAction(new DecNwTtlCaseBuilder().setDecNwTtl(new DecNwTtlBuilder().build()).build()) + .build(), new ActionBuilder() + // base part + .setOrder(1) + .setAction(new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder() + // vendor part + .setNxRegLoad(new NxRegLoadBuilder() + .setDst(new DstBuilder() + .setDstChoice(new DstNxRegCaseBuilder().setNxReg(NxmNxReg0.VALUE).build()) + .setStart(Uint16.ZERO) + .setEnd(Uint16.valueOf(5)) + .build()) + .setValue(Uint64.valueOf(55L)) + .build()) + .build()) + .build())) + .build()) + .build()) + .build())) + .build()) + .setBarrier(Boolean.FALSE) + .setCookie(new FlowCookie(Uint64.TEN)) + .setCookieMask(new FlowCookie(Uint64.TEN)) + .setHardTimeout(Uint16.ZERO) + .setIdleTimeout(Uint16.ZERO) + .setInstallHw(false) + .setStrict(false) + .setContainerName(null) + .setFlags(new FlowModFlags(false, false, false, false, true)) + .setTableId(Uint8.ZERO) + .setFlowName("NiciraFLOW") + .setNode(new NodeRef(flowInstanceId)) + .build()); return Futures.immediateFuture(RpcResultBuilder.status(true).build()); } - private void pushFlowViaRpc(AddFlowInput addFlowInput) { - if (flowService != null) { - JdkFutures.addErrorLogging(flowService.addFlow(addFlowInput), LOG, "addFlow"); + private void pushFlowViaRpc(final AddFlowInput addFlowInput) { + if (addFlow != null) { + LoggingFutures.addErrorLogging(addFlow.invoke(addFlowInput), LOG, "addFlow"); } } - - public void setFlowService(SalFlowService flowService) { - this.flowService = flowService; - } - - private static MatchBuilder createMatchBld() { - MatchBuilder match = new MatchBuilder(); - Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder(); - Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1/24"); - ipv4Match.setIpv4Destination(prefix); - Ipv4Match i4m = ipv4Match.build(); - match.setLayer3Match(i4m); - - EthernetMatchBuilder eth = new EthernetMatchBuilder(); - EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder(); - ethTypeBuilder.setType(new EtherType(0x0800L)); - eth.setEthernetType(ethTypeBuilder.build()); - match.setEthernetMatch(eth.build()); - -// AugmentTuple extAugmentWrapper = createNxMatchAugment(); -// match.addAugmentation(extAugmentWrapper.getAugmentationClass(), extAugmentWrapper.getAugmentationObject()); - - return match; - } - - private static InstructionsBuilder createDecNwTtlInstructionsBld() { - // Add our drop action to a list - List actionList = new ArrayList<>(); - actionList.add(createOFAction(0).build()); - actionList.add(createNxActionBld(1).build()); - - // Create an Apply Action - ApplyActionsBuilder aab = new ApplyActionsBuilder(); - aab.setAction(actionList); - - // Wrap our Apply Action in an Instruction - InstructionBuilder ib = new InstructionBuilder(); - ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build()); - ib.withKey(new InstructionKey(0)); - ib.setOrder(0); - - // Put our Instruction in a list of Instructions - InstructionsBuilder isb = new InstructionsBuilder(); - List instructions = new ArrayList<>(); - instructions.add(ib.build()); - ib.withKey(new InstructionKey(0)); - isb.setInstruction(instructions); - return isb; - } - - private static ActionBuilder createOFAction(int actionKeyVal) { - DecNwTtlBuilder ta = new DecNwTtlBuilder(); - DecNwTtl decNwTtl = ta.build(); - ActionBuilder ab = new ActionBuilder(); - ab.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(decNwTtl).build()); - ab.withKey(new ActionKey(actionKeyVal)); - return ab; - } - - private static ActionBuilder createNxActionBld(int actionKeyVal) { - // vendor part - DstNxRegCaseBuilder nxRegCaseBld = new DstNxRegCaseBuilder().setNxReg(NxmNxReg0.class); - DstBuilder dstBld = new DstBuilder() - .setDstChoice(nxRegCaseBld.build()) - .setStart(0) - .setEnd(5); - NxRegLoadBuilder nxRegLoadBuilder = new NxRegLoadBuilder(); - nxRegLoadBuilder.setDst(dstBld.build()); - nxRegLoadBuilder.setValue(BigInteger.valueOf(55L)); - NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder topNxActionCaseBld = - new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder(); - topNxActionCaseBld.setNxRegLoad(nxRegLoadBuilder.build()); - - // base part - ActionBuilder abExt = new ActionBuilder(); - abExt.withKey(new ActionKey(actionKeyVal)); - abExt.setAction(topNxActionCaseBld.build()); - return abExt; - } }