X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=utils%2Fmdsal-openflow%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Futils%2Fmdsal%2Fopenflow%2FInstructionUtils.java;h=4c59d45c555d382d70361647de70c6ff9620d4c6;hb=167d2bf5a154baf68f9c507341e44ad346433f04;hp=1bfde3e21f20e8897f2354d8d9b03d8843a626ba;hpb=bd3cd2b5d1ffee91163c831e3e5ba6ca3be20cda;p=netvirt.git diff --git a/utils/mdsal-openflow/src/main/java/org/opendaylight/ovsdb/utils/mdsal/openflow/InstructionUtils.java b/utils/mdsal-openflow/src/main/java/org/opendaylight/ovsdb/utils/mdsal/openflow/InstructionUtils.java index 1bfde3e21f..4c59d45c55 100644 --- a/utils/mdsal-openflow/src/main/java/org/opendaylight/ovsdb/utils/mdsal/openflow/InstructionUtils.java +++ b/utils/mdsal-openflow/src/main/java/org/opendaylight/ovsdb/utils/mdsal/openflow/InstructionUtils.java @@ -43,6 +43,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti 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.action.types.rev131112.address.address.Ipv4Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder; @@ -73,6 +75,7 @@ import org.slf4j.LoggerFactory; import java.math.BigInteger; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class InstructionUtils { @@ -113,7 +116,7 @@ public class InstructionUtils { } /** - * Create LOCAL Reserved Port Instruction + * Create NORMAL Reserved Port Instruction (packet_in) * * @param nodeName Uri Prefix, containing nodeConnectorType and dpId (aka NodeId) * @param ib Map InstructionBuilder without any instructions @@ -145,7 +148,7 @@ public class InstructionUtils { } /** - * Create NORMAL Reserved Port Instruction (packet_in) + * Create LOCAL Reserved Port Instruction * * @param ib Map InstructionBuilder without any instructions * @param dpidLong Long the datapath ID of a switch/node @@ -1094,6 +1097,37 @@ public class InstructionUtils { return getInstructions(applyActionIns(dropAction())); } + /** + * Extracts the existing instructions (if any) from the flow. + * + * @param flow The flow. + * @return The instructions in the flow (empty if none). + */ + public static List extractExistingInstructions(Flow flow) { + if (flow != null) { + Instructions ins = flow.getInstructions(); + if (ins != null) { + return ins.getInstruction(); + } + } + return Collections.emptyList(); + } + + /** + * Configures the flow builder to have the single given instruction. + * + * @param flowBuilder The flow builder. + * @param instruction The instruction. + * @return The flow builder. + */ + public static FlowBuilder setFlowBuilderInstruction(FlowBuilder flowBuilder, Instruction instruction) { + flowBuilder.setInstructions( + new InstructionsBuilder() + .setInstruction(Collections.singletonList(instruction)) + .build()); + return flowBuilder; + } + /** * Get a list of Instructions containing Nicira extensions that can have * additional OF/OXM instructions added to the returned Instruction list