2 * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
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
8 package org.opendaylight.vpnservice.mdsalutil;
10 import java.math.BigInteger;
11 import java.util.ArrayList;
12 import java.util.List;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCase;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCase;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActions;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.go.to.table._case.GoToTableBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.actions._case.WriteActions;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.actions._case.WriteActionsBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.metadata._case.WriteMetadataBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
33 public enum InstructionType {
36 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
37 List<ActionInfo> mkActions = instructionInfo.getActionInfos();
38 List<Action> listAction = new ArrayList <Action> ();
40 for(ActionInfo mkAction: mkActions) {
41 ActionType actionType = mkAction.getActionType();
42 mkAction.setActionKey(actionKey++);
43 listAction.add(actionType.buildAction(mkAction));
45 ApplyActions applyActions = new ApplyActionsBuilder().setAction(listAction).build();
46 ApplyActionsCase applyActionsCase = new ApplyActionsCaseBuilder().setApplyActions(applyActions).build();
47 InstructionBuilder instructionBuilder = new InstructionBuilder();
49 instructionBuilder.setInstruction(applyActionsCase);
50 instructionBuilder.setKey(new InstructionKey(instructionKey));
52 return instructionBuilder.build();
58 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
59 short tableId = (short) instructionInfo.getInstructionValues()[0];
61 return new InstructionBuilder()
63 new GoToTableCaseBuilder().setGoToTable(
64 new GoToTableBuilder().setTableId(Short.valueOf(tableId)).build()).build())
65 .setKey(new InstructionKey(instructionKey)).build();
71 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
72 List<ActionInfo> mkActions = instructionInfo.getActionInfos();
73 List<Action> listAction = new ArrayList <Action> ();
75 for(ActionInfo mkAction: mkActions) {
76 ActionType actionType = mkAction.getActionType();
77 mkAction.setActionKey(actionKey++);
78 listAction.add(actionType.buildAction(mkAction));
80 WriteActions writeActions = new WriteActionsBuilder().setAction(listAction).build();
81 WriteActionsCase writeActionsCase = new WriteActionsCaseBuilder().setWriteActions(writeActions).build();
82 InstructionBuilder instructionBuilder = new InstructionBuilder();
84 instructionBuilder.setInstruction(writeActionsCase);
85 instructionBuilder.setKey(new InstructionKey(instructionKey));
87 return instructionBuilder.build();
93 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
95 ClearActionsCase clearActionsCase = new ClearActionsCaseBuilder().build();
97 InstructionBuilder instructionBuilder = new InstructionBuilder();
98 instructionBuilder.setInstruction(clearActionsCase);
99 instructionBuilder.setKey(new InstructionKey(instructionKey));
101 return instructionBuilder.build();
107 public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
108 BigInteger[] metadataValues = instructionInfo.getBigInstructionValues();
109 BigInteger metadata = metadataValues[0];
110 BigInteger mask = metadataValues[1];
112 return new InstructionBuilder()
114 new WriteMetadataCaseBuilder().setWriteMetadata(
115 new WriteMetadataBuilder().setMetadata(metadata).setMetadataMask(mask).build())
116 .build()).setKey(new InstructionKey(instructionKey)).build();
120 public abstract Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey);