package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModCommand;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Optional;
-import com.google.common.collect.Ordering;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import org.opendaylight.openflowplugin.api.OFConstants;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.OrderComparator;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flowflag.FlowFlagReactor;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatch;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionsInstruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionsInstructionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataInstruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataInstructionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MeterIdInstruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MeterIdInstructionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TableIdInstruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TableIdInstructionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ClearActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.MeterCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice._goto.table._case.GotoTableBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.meter._case.MeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.write.actions._case.WriteActionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.write.metadata._case.WriteMetadataBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.InstructionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModCommand;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MatchTypeBase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.collect.Ordering;
/**
* Utility class for converting a MD-SAL Flow into the OF flow mod
// Default values for when things are null
private static final TableId DEFAULT_TABLE_ID = new TableId(0L);
- /** Default idle timeout */
+ /**
+ * Default idle timeout
+ */
public static final Integer DEFAULT_IDLE_TIMEOUT = 5 * 60;
- /** Default hard timeout */
+ /**
+ * Default hard timeout
+ */
public static final Integer DEFAULT_HARD_TIMEOUT = 10 * 60;
- /** Default priority */
+ /**
+ * Default priority
+ */
public static final Integer DEFAULT_PRIORITY = Integer.parseInt("8000", 16);
private static final Long DEFAULT_BUFFER_ID = OFConstants.OFP_NO_BUFFER;
private static final Long OFPP_ANY = Long.parseLong("ffffffff", 16);
private static final Long DEFAULT_OUT_PORT = OFPP_ANY;
private static final Long OFPG_ANY = Long.parseLong("ffffffff", 16);
private static final Long DEFAULT_OUT_GROUP = OFPG_ANY;
- /** flow flag: remove */
+ /**
+ * flow flag: remove
+ */
public static final boolean DEFAULT_OFPFF_FLOW_REM = false;
- /** flow flag: check overlap */
+ /**
+ * flow flag: check overlap
+ */
public static final boolean DEFAULT_OFPFF_CHECK_OVERLAP = false;
- /** flow flag: reset counts */
+ /**
+ * flow flag: reset counts
+ */
public static final boolean DEFAULT_OFPFF_RESET_COUNTS = false;
- /** flow flag: don't keep track of packet counts */
+ /**
+ * flow flag: don't keep track of packet counts
+ */
public static final boolean DEFAULT_OFPFF_NO_PKT_COUNTS = false;
- /** flow flag: don't keep track of byte counts */
+ /**
+ * flow flag: don't keep track of byte counts
+ */
public static final boolean DEFAULT_OFPFF_NO_BYT_COUNTS = false;
- /** flow flag: emergency [OFP-1.0] */
+ /**
+ * flow flag: emergency [OFP-1.0]
+ */
public static final boolean DEFAULT_OFPFF_EMERGENCY = false;
- /** OxmMatch type */
+ /**
+ * OxmMatch type
+ */
public static final Class<? extends MatchTypeBase> DEFAULT_MATCH_TYPE = OxmMatchType.class;
- /** default match entries - empty */
- public static final List<MatchEntries> DEFAULT_MATCH_ENTRIES = new ArrayList<MatchEntries>();
+ /**
+ * default match entries - empty
+ */
+ public static final List<MatchEntry> DEFAULT_MATCH_ENTRIES = new ArrayList<MatchEntry>();
+
+ private static final Ordering<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction> INSTRUCTION_ORDERING =
+ Ordering.from(OrderComparator.<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction>build());
+ private static final VlanMatch VLAN_MATCH_FALSE;
+ private static final VlanMatch VLAN_MATCH_TRUE;
+
+ static {
+ final VlanId zeroVlan = new VlanId(0);
+ VlanMatchBuilder vlanMatchBuilder = new VlanMatchBuilder();
+ VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();
+ vlanIdBuilder.setVlanIdPresent(false);
+ vlanIdBuilder.setVlanId(zeroVlan);
+ vlanMatchBuilder.setVlanId(vlanIdBuilder.build());
+
+ VLAN_MATCH_FALSE = vlanMatchBuilder.build();
+
+ VlanMatchBuilder vlanMatchBuilder2 = new VlanMatchBuilder();
+ VlanIdBuilder vlanIdBuilder2 = new VlanIdBuilder();
+ vlanIdBuilder2.setVlanIdPresent(true);
+ vlanIdBuilder2.setVlanId(zeroVlan);
+ vlanMatchBuilder2.setVlanId(vlanIdBuilder2.build());
+
+ VLAN_MATCH_TRUE = vlanMatchBuilder2.build();
+ }
private FlowConvertor() {
//hiding implicit constructor
* If yes its handled separately
*/
public static List<FlowModInputBuilder> toFlowModInputs(Flow srcFlow, short version, BigInteger datapathId) {
- List<FlowModInputBuilder> list = new ArrayList<>();
-
if (version >= OFConstants.OFP_VERSION_1_3 && isSetVlanIdActionCasePresent(srcFlow)) {
- list.addAll(handleSetVlanIdForOF13(srcFlow, version, datapathId));
+ return handleSetVlanIdForOF13(srcFlow, version, datapathId);
} else {
- list.add(toFlowModInput(srcFlow, version, datapathId));
+ return Collections.singletonList(toFlowModInput(srcFlow, version, datapathId));
}
- return list;
}
public static FlowModInputBuilder toFlowModInput(Flow flow, short version, BigInteger datapathid) {
salToOFFlowOutGroup(flow, flowMod);
// convert and inject flowFlags
- FlowFlagReactor.getInstance().convert(flow.getFlags(), version, flowMod,datapathid);
+ FlowFlagReactor.getInstance().convert(flow.getFlags(), version, flowMod, datapathid);
// convert and inject match
- MatchReactor.getInstance().convert(flow.getMatch(), version, flowMod,datapathid);
+ MatchReactor.getInstance().convert(flow.getMatch(), version, flowMod, datapathid);
if (flow.getInstructions() != null) {
- flowMod.setInstruction(toInstructions(flow, version,datapathid));
- flowMod.setAction(getActions(version,datapathid, flow));
+ flowMod.setInstruction(toInstructions(flow, version, datapathid));
+ flowMod.setAction(getActions(version, datapathid, flow));
}
flowMod.setVersion(version);
private static List<Instruction> toInstructions(
Flow flow,
- short version,BigInteger datapathid) {
+ short version, BigInteger datapathid) {
List<Instruction> instructionsList = new ArrayList<>();
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions instructions = flow.getInstructions();
if (curInstruction instanceof GoToTableCase) {
GoToTableCase goToTablecase = (GoToTableCase) curInstruction;
GoToTable goToTable = goToTablecase.getGoToTable();
- instructionBuilder
- .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.GotoTable.class);
- TableIdInstructionBuilder tableBuilder = new TableIdInstructionBuilder();
- tableBuilder.setTableId(goToTable.getTableId());
- instructionBuilder.addAugmentation(TableIdInstruction.class, tableBuilder.build());
+ GotoTableCaseBuilder gotoTableCaseBuilder = new GotoTableCaseBuilder();
+ GotoTableBuilder gotoTableBuilder = new GotoTableBuilder();
+ gotoTableBuilder.setTableId(goToTable.getTableId());
+ gotoTableCaseBuilder.setGotoTable(gotoTableBuilder.build());
+ instructionBuilder.setInstructionChoice(gotoTableCaseBuilder.build());
instructionsList.add(instructionBuilder.build());
- }
-
- else if (curInstruction instanceof WriteMetadataCase) {
+ } else if (curInstruction instanceof WriteMetadataCase) {
WriteMetadataCase writeMetadatacase = (WriteMetadataCase) curInstruction;
WriteMetadata writeMetadata = writeMetadatacase.getWriteMetadata();
- instructionBuilder
- .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteMetadata.class);
- MetadataInstructionBuilder metadataBuilder = new MetadataInstructionBuilder();
- metadataBuilder.setMetadata(ByteUtil.convertBigIntegerToNBytes(writeMetadata.getMetadata(),
- OFConstants.SIZE_OF_LONG_IN_BYTES));
- metadataBuilder
- .setMetadataMask(ByteUtil.convertBigIntegerToNBytes(writeMetadata.getMetadataMask(),
- OFConstants.SIZE_OF_LONG_IN_BYTES));
- instructionBuilder.addAugmentation(MetadataInstruction.class, metadataBuilder.build());
- instructionsList.add(instructionBuilder.build());
- }
- else if (curInstruction instanceof WriteActionsCase) {
+ WriteMetadataCaseBuilder writeMetadataCaseBuilder = new WriteMetadataCaseBuilder();
+ WriteMetadataBuilder writeMetadataBuilder = new WriteMetadataBuilder();
+ writeMetadataBuilder.setMetadata(ByteUtil.convertBigIntegerToNBytes(writeMetadata.getMetadata(),
+ OFConstants.SIZE_OF_LONG_IN_BYTES));
+ writeMetadataBuilder.setMetadataMask(ByteUtil.convertBigIntegerToNBytes(writeMetadata.getMetadataMask(),
+ OFConstants.SIZE_OF_LONG_IN_BYTES));
+ writeMetadataCaseBuilder.setWriteMetadata(writeMetadataBuilder.build());
+ instructionBuilder.setInstructionChoice(writeMetadataCaseBuilder.build());
+ instructionsList.add(instructionBuilder.build());
+ } else if (curInstruction instanceof WriteActionsCase) {
WriteActionsCase writeActionscase = (WriteActionsCase) curInstruction;
WriteActions writeActions = writeActionscase.getWriteActions();
- instructionBuilder
- .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteActions.class);
- ActionsInstructionBuilder actionsInstructionBuilder = new ActionsInstructionBuilder();
- actionsInstructionBuilder.setAction(ActionConvertor.getActions(writeActions.getAction(),
- version,datapathid, flow));
- instructionBuilder.addAugmentation(ActionsInstruction.class, actionsInstructionBuilder.build());
+ WriteActionsCaseBuilder writeActionsCaseBuilder = new WriteActionsCaseBuilder();
+ WriteActionsBuilder writeActionsBuilder = new WriteActionsBuilder();
+ writeActionsBuilder.setAction(ActionConvertor.getActions(writeActions.getAction(),version, datapathid, flow));
+ writeActionsCaseBuilder.setWriteActions(writeActionsBuilder.build());
+ instructionBuilder.setInstructionChoice(writeActionsCaseBuilder.build());
instructionsList.add(instructionBuilder.build());
- }
-
- else if (curInstruction instanceof ApplyActionsCase) {
+ } else if (curInstruction instanceof ApplyActionsCase) {
ApplyActionsCase applyActionscase = (ApplyActionsCase) curInstruction;
ApplyActions applyActions = applyActionscase.getApplyActions();
- instructionBuilder
- .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ApplyActions.class);
- ActionsInstructionBuilder actionsInstructionBuilder = new ActionsInstructionBuilder();
- actionsInstructionBuilder.setAction(ActionConvertor.getActions(applyActions.getAction(),
- version,datapathid, flow));
- instructionBuilder.addAugmentation(ActionsInstruction.class, actionsInstructionBuilder.build());
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCaseBuilder applyActionsCaseBuilder =
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCaseBuilder();
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.apply.actions._case.ApplyActionsBuilder applyActionsBuilder =
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.apply.actions._case.ApplyActionsBuilder();
+ applyActionsBuilder.setAction(ActionConvertor.getActions(applyActions.getAction(), version, datapathid, flow));
+ applyActionsCaseBuilder.setApplyActions(applyActionsBuilder.build());
+ instructionBuilder.setInstructionChoice(applyActionsCaseBuilder.build());
instructionsList.add(instructionBuilder.build());
- }
-
- else if (curInstruction instanceof ClearActionsCase) {
- instructionBuilder
- .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ClearActions.class);
+ } else if (curInstruction instanceof ClearActionsCase) {
+ ClearActionsCaseBuilder clearActionsCaseBuilder = new ClearActionsCaseBuilder();
+ instructionBuilder.setInstructionChoice(clearActionsCaseBuilder.build());
instructionsList.add(instructionBuilder.build());
- }
-
- else if (curInstruction instanceof MeterCase) {
+ } else if (curInstruction instanceof MeterCase) {
MeterCase metercase = (MeterCase) curInstruction;
Meter meter = metercase.getMeter();
- instructionBuilder
- .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.Meter.class);
- MeterIdInstructionBuilder meterBuilder = new MeterIdInstructionBuilder();
+ MeterCaseBuilder meterCaseBuilder = new MeterCaseBuilder();
+ MeterBuilder meterBuilder = new MeterBuilder();
Long meterId = meter.getMeterId().getValue();
meterBuilder.setMeterId(meterId);
- instructionBuilder.addAugmentation(MeterIdInstruction.class, meterBuilder.build());
+ meterCaseBuilder.setMeter(meterBuilder.build());
+ instructionBuilder.setInstructionChoice(meterCaseBuilder.build());
instructionsList.add(instructionBuilder.build());
}
}
return instructionsList;
}
- private static List<Action> getActions(short version,BigInteger datapathid, Flow flow) {
+ private static List<Action> getActions(short version, BigInteger datapathid, Flow flow) {
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions instructions = flow.getInstructions();
List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction> sortedInstructions =
- Ordering.from(OrderComparator.<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction>build())
- .sortedCopy(instructions.getInstruction());
+ INSTRUCTION_ORDERING.sortedCopy(instructions.getInstruction());
for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction instruction : sortedInstructions) {
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction curInstruction = instruction
if (curInstruction instanceof ApplyActionsCase) {
ApplyActionsCase applyActionscase = (ApplyActionsCase) curInstruction;
ApplyActions applyActions = applyActionscase.getApplyActions();
- return ActionConvertor.getActions(applyActions.getAction(), version,datapathid, flow);
+ return ActionConvertor.getActions(applyActions.getAction(), version, datapathid, flow);
}
}
return null;
// check if set vlanid action is present in the flow
private static boolean isSetVlanIdActionCasePresent(Flow flow) {
- boolean isPresent = false;
// we are trying to find if there is a set-vlan-id action (OF1.0) action present in the flow.
// If yes,then we would need to two flows
if (flow.getInstructions() != null) {
for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction instruction :
- flow.getInstructions().getInstruction()) {
+ flow.getInstructions().getInstruction()) {
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction curInstruction =
- instruction.getInstruction();
+ instruction.getInstruction();
if (curInstruction instanceof ApplyActionsCase) {
ApplyActionsCase applyActionscase = (ApplyActionsCase) curInstruction;
for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action action :
applyActions.getAction()) {
if (action.getAction() instanceof SetVlanIdActionCase) {
- isPresent = true;
- break;
+ return true;
}
}
}
}
}
- return isPresent;
+ return false;
}
/**
* A) If user provided flow's match includes vlan match and action has set_vlan_field
* Install following rules
- * 1) match on (OFPVID_PRESENT |value) without mask + action [set_field]
- *
+ * 1) match on (OFPVID_PRESENT |value) without mask + action [set_field]
+ * <p/>
* B) if user provided flow's match doesn't include vlan match but action has set_vlan field
- * 1) Match on (OFPVID_NONE ) without mask + action [push vlan tag + set_field]
- * 2) Match on (OFPVID_PRESENT) with mask (OFPVID_PRESENT ) + action [ set_field]
+ * 1) Match on (OFPVID_NONE ) without mask + action [push vlan tag + set_field]
+ * 2) Match on (OFPVID_PRESENT) with mask (OFPVID_PRESENT ) + action [ set_field]
*/
private static List<FlowModInputBuilder> handleSetVlanIdForOF13(Flow srcFlow, short version, BigInteger datapathId) {
- List<FlowModInputBuilder> list = new ArrayList<>();
+ List<FlowModInputBuilder> list = new ArrayList<>(2);
VlanMatch srcVlanMatch = srcFlow.getMatch().getVlanMatch();
boolean hasVlanMatch = (srcFlow.getMatch() != null && srcVlanMatch != null);
// create 2 flows
//flow 1
// match on no vlan tag with no mask
- VlanMatchBuilder vlanMatchBuilder = new VlanMatchBuilder();
- VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();
- vlanIdBuilder.setVlanIdPresent(false);
- vlanIdBuilder.setVlanId(new VlanId(0));
- vlanMatchBuilder.setVlanId(vlanIdBuilder.build());
- Match match1 = new MatchBuilder(srcFlow.getMatch()).setVlanMatch(vlanMatchBuilder.build()).build();
+ Match match1 = new MatchBuilder(srcFlow.getMatch()).setVlanMatch(VLAN_MATCH_FALSE).build();
Optional<? extends Flow> optional1 = injectMatchAndAction(srcFlow, match1);
if (optional1.isPresent()) {
//flow2
// match on vlan tag with mask
- VlanMatchBuilder vlanMatchBuilder2 = new VlanMatchBuilder();
- VlanIdBuilder vlanIdBuilder2 = new VlanIdBuilder();
- vlanIdBuilder2.setVlanIdPresent(true);
- vlanIdBuilder2.setVlanId(new VlanId(0));
- vlanMatchBuilder2.setVlanId(vlanIdBuilder2.build());
- Match match2 = new MatchBuilder(srcFlow.getMatch()).setVlanMatch(vlanMatchBuilder2.build()).build();
+ Match match2 = new MatchBuilder(srcFlow.getMatch()).setVlanMatch(VLAN_MATCH_TRUE).build();
Optional<? extends Flow> optional2 = injectMatchToFlow(srcFlow, match2);
if (optional2.isPresent()) {
list.add(toFlowModInput(optional2.get(), version, datapathId));
private static Optional<? extends Flow> injectMatchAndAction(Flow sourceFlow, Match match) {
Instructions instructions = (new InstructionsBuilder())
- .setInstruction(injectPushActionToInstruction(sourceFlow))
- .build();
+ .setInstruction(injectPushActionToInstruction(sourceFlow))
+ .build();
if (sourceFlow instanceof AddFlowInput) {
return Optional.<AddFlowInput>of(new AddFlowInputBuilder(sourceFlow)
- .setMatch(match).setInstructions(instructions).build());
+ .setMatch(match).setInstructions(instructions).build());
} else if (sourceFlow instanceof RemoveFlowInput) {
return Optional.<RemoveFlowInput>of(new RemoveFlowInputBuilder(sourceFlow)
- .setMatch(match).setInstructions(instructions).build());
+ .setMatch(match).setInstructions(instructions).build());
} else if (sourceFlow instanceof UpdatedFlow) {
return Optional.<UpdatedFlow>of(new UpdatedFlowBuilder(sourceFlow)
- .setMatch(match).setInstructions(instructions).build());
+ .setMatch(match).setInstructions(instructions).build());
} else {
return Optional.<Flow>absent();
}
}
private static List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction>
- injectPushActionToInstruction(final Flow sourceFlow) {
+ injectPushActionToInstruction(final Flow sourceFlow) {
List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction> srcInstructionList =
- sourceFlow.getInstructions().getInstruction();
+ sourceFlow.getInstructions().getInstruction();
List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction> targetInstructionList = new ArrayList<>(srcInstructionList.size());
List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> targetActionList = new ArrayList<>();
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder instructionBuilder =
new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder();
- for (int i=0; i < srcInstructionList.size(); i++) {
+ for (int i = 0; i < srcInstructionList.size(); i++) {
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction srcInstruction =
srcInstructionList.get(i);
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction curSrcInstruction =
List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> srcActionList = applyActions.getAction();
int offset = 0;
- for (int j=0; j < srcActionList.size(); j++) {
+ for (int j = 0; j < srcActionList.size(); j++) {
// check if its a set-vlan-action. If yes, then add the injected-action
org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action actionItem = srcActionList.get(j);
- if(actionItem.getAction() instanceof SetVlanIdActionCase) {
+ if (actionItem.getAction() instanceof SetVlanIdActionCase) {
SetVlanIdActionCase setVlanIdActionCase = (SetVlanIdActionCase) actionItem.getAction();
PushVlanActionCaseBuilder pushVlanActionCaseBuilder = new PushVlanActionCaseBuilder();
PushVlanActionBuilder pushVlanActionBuilder = new PushVlanActionBuilder();
pushVlanActionBuilder.setCfi(new VlanCfi(1))
- .setVlanId(setVlanIdActionCase.getSetVlanIdAction().getVlanId())
- .setEthernetType(sourceFlow.getMatch().getEthernetMatch()
- .getEthernetType().getType().getValue().intValue())
- .setTag(sourceFlow.getMatch().getEthernetMatch()
- .getEthernetType().getType().getValue().intValue());
+ .setVlanId(setVlanIdActionCase.getSetVlanIdAction().getVlanId())
+ .setEthernetType(sourceFlow.getMatch().getEthernetMatch()
+ .getEthernetType().getType().getValue().intValue())
+ .setTag(sourceFlow.getMatch().getEthernetMatch()
+ .getEthernetType().getType().getValue().intValue());
pushVlanActionCaseBuilder.setPushVlanAction(pushVlanActionBuilder.build());
PushVlanActionCase injectedAction = pushVlanActionCaseBuilder.build();
org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder actionBuilder = new ActionBuilder();
actionBuilder.setAction(injectedAction)
- .setKey(actionItem.getKey())
- .setOrder(actionItem.getOrder() + offset);
+ .setKey(actionItem.getKey())
+ .setOrder(actionItem.getOrder() + offset);
targetActionList.add(actionBuilder.build());
- offset ++;
+ offset++;
}
if (offset > 0) {
// we need to increment the order for all the actions added after injection
org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder actionBuilder =
- new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder(actionItem);
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder(actionItem);
actionBuilder.setOrder(actionItem.getOrder() + offset);
actionItem = actionBuilder.build();
}
}
instructionBuilder
- .setKey(srcInstruction.getKey())
- .setOrder(srcInstruction.getOrder());
+ .setKey(srcInstruction.getKey())
+ .setOrder(srcInstruction.getOrder());
targetInstructionList.add(instructionBuilder.build());
}