2 * Copyright (c) 2013 Ericsson AB. All rights reserved.
5 package org.opendaylight.vpnservice.mdsalutil;
7 import java.math.BigInteger;
8 import java.util.ArrayList;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCase;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCaseBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCase;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActions;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.go.to.table._case.GoToTableBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.actions._case.WriteActions;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.actions._case.WriteActionsBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.metadata._case.WriteMetadataBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
30 public enum InstructionType {
33 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
34 List<ActionInfo> mkActions = instructionInfo.getActionInfos();
35 List<Action> listAction = new ArrayList <Action> ();
36 for(ActionInfo mkAction: mkActions) {
37 ActionType actionType = mkAction.getActionType();
38 listAction.add(actionType.buildAction(mkAction));
40 ApplyActions applyActions = new ApplyActionsBuilder().setAction(listAction).build();
41 ApplyActionsCase applyActionsCase = new ApplyActionsCaseBuilder().setApplyActions(applyActions).build();
42 InstructionBuilder instructionBuilder = new InstructionBuilder();
44 instructionBuilder.setInstruction(applyActionsCase);
45 instructionBuilder.setKey(new InstructionKey(instructionKey));
47 return instructionBuilder.build();
53 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
54 short tableId = (short) instructionInfo.getInstructionValues()[0];
56 return new InstructionBuilder()
58 new GoToTableCaseBuilder().setGoToTable(
59 new GoToTableBuilder().setTableId(Short.valueOf(tableId)).build()).build())
60 .setKey(new InstructionKey(instructionKey)).build();
66 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
67 List<ActionInfo> mkActions = instructionInfo.getActionInfos();
68 List<Action> listAction = new ArrayList <Action> ();
69 for(ActionInfo mkAction: mkActions) {
70 ActionType actionType = mkAction.getActionType();
71 listAction.add(actionType.buildAction(mkAction));
73 WriteActions writeActions = new WriteActionsBuilder().setAction(listAction).build();
74 WriteActionsCase writeActionsCase = new WriteActionsCaseBuilder().setWriteActions(writeActions).build();
75 InstructionBuilder instructionBuilder = new InstructionBuilder();
77 instructionBuilder.setInstruction(writeActionsCase);
78 instructionBuilder.setKey(new InstructionKey(instructionKey));
80 return instructionBuilder.build();
86 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
88 ClearActionsCase clearActionsCase = new ClearActionsCaseBuilder().build();
90 InstructionBuilder instructionBuilder = new InstructionBuilder();
91 instructionBuilder.setInstruction(clearActionsCase);
92 instructionBuilder.setKey(new InstructionKey(instructionKey));
94 return instructionBuilder.build();
100 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
101 BigInteger[] metadataValues = instructionInfo.getBigInstructionValues();
102 BigInteger metadata = metadataValues[0];
103 BigInteger mask = metadataValues[1];
105 return new InstructionBuilder()
107 new WriteMetadataCaseBuilder().setWriteMetadata(
108 new WriteMetadataBuilder().setMetadata(metadata).setMetadataMask(mask).build())
109 .build()).setKey(new InstructionKey(instructionKey)).build();
113 public abstract Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey);