Remove reference to SalFlowService
[openflowplugin.git] / extension / test-extension / src / main / java / org / opendaylight / openflowplugin / extension / test / Test.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 package org.opendaylight.openflowplugin.extension.test;
9
10 import com.google.common.util.concurrent.Futures;
11 import com.google.common.util.concurrent.ListenableFuture;
12 import org.opendaylight.infrautils.utils.concurrent.LoggingFutures;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder;
38 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;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestFlowInput;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestFlowOutput;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestService;
44 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
45 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
46 import org.opendaylight.yangtools.yang.common.RpcResult;
47 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
48 import org.opendaylight.yangtools.yang.common.Uint16;
49 import org.opendaylight.yangtools.yang.common.Uint32;
50 import org.opendaylight.yangtools.yang.common.Uint64;
51 import org.opendaylight.yangtools.yang.common.Uint8;
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55 /**
56  * Implementation of TestService.
57  *
58  * @author msunal
59  */
60 public class Test implements TestService {
61     private static final Logger LOG = LoggerFactory.getLogger(Test.class);
62
63     private SalFlowService flowService;
64
65     @Override
66     public ListenableFuture<RpcResult<TestFlowOutput>> testFlow(final TestFlowInput input) {
67         // Construct the flow instance id
68         final InstanceIdentifier<Node> flowInstanceId = InstanceIdentifier
69                 .builder(Nodes.class) // File under nodes
70                 // A particular node identified by nodeKey
71                 .child(Node.class, new NodeKey(new NodeId("openflow:1"))).build();
72
73         pushFlowViaRpc(new AddFlowInputBuilder()
74             .setPriority(Uint16.TWO)
75             .setMatch(new MatchBuilder()
76                 .setLayer3Match(new Ipv4MatchBuilder().setIpv4Destination(new Ipv4Prefix("10.0.0.1/24")).build())
77                 .setEthernetMatch(new EthernetMatchBuilder()
78                     .setEthernetType(new EthernetTypeBuilder().setType(new EtherType(Uint32.valueOf(0x0800))).build())
79                     .build())
80                 // .addAugmentation(createNxMatchAugment().getAugmentationObject())
81                 .build())
82             .setInstructions(new InstructionsBuilder()
83                 .setInstruction(BindingMap.of(new InstructionBuilder()
84                     .setOrder(0)
85                     .setInstruction(new ApplyActionsCaseBuilder()
86                         .setApplyActions(new ApplyActionsBuilder()
87                             .setAction(BindingMap.of(new ActionBuilder()
88                                 .setOrder(0)
89                                 .setAction(new DecNwTtlCaseBuilder().setDecNwTtl(new DecNwTtlBuilder().build()).build())
90                                 .build(), new ActionBuilder()
91                                 // base part
92                                 .setOrder(1)
93                                 .setAction(new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder()
94                                     // vendor part
95                                     .setNxRegLoad(new NxRegLoadBuilder()
96                                         .setDst(new DstBuilder()
97                                             .setDstChoice(new DstNxRegCaseBuilder().setNxReg(NxmNxReg0.VALUE).build())
98                                             .setStart(Uint16.ZERO)
99                                             .setEnd(Uint16.valueOf(5))
100                                             .build())
101                                         .setValue(Uint64.valueOf(55L))
102                                         .build())
103                                     .build())
104                                 .build()))
105                             .build())
106                         .build())
107                     .build()))
108                 .build())
109             .setBarrier(Boolean.FALSE)
110             .setCookie(new FlowCookie(Uint64.TEN))
111             .setCookieMask(new FlowCookie(Uint64.TEN))
112             .setHardTimeout(Uint16.ZERO)
113             .setIdleTimeout(Uint16.ZERO)
114             .setInstallHw(false)
115             .setStrict(false)
116             .setContainerName(null)
117             .setFlags(new FlowModFlags(false, false, false, false, true))
118             .setTableId(Uint8.ZERO)
119             .setFlowName("NiciraFLOW")
120             .setNode(new NodeRef(flowInstanceId))
121             .build());
122
123         return Futures.immediateFuture(RpcResultBuilder.<TestFlowOutput>status(true).build());
124     }
125
126     private void pushFlowViaRpc(final AddFlowInput addFlowInput) {
127         if (flowService != null) {
128             LoggingFutures.addErrorLogging(flowService.addFlow(addFlowInput), LOG, "addFlow");
129         }
130     }
131
132     public void setFlowService(final SalFlowService flowService) {
133         this.flowService = flowService;
134     }
135 }