/**
* Convertor data used in {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.PacketOutConvertor}
- * containing Openflow version and XID
+ * containing Openflow version and XID.
*/
public class PacketOutConvertorData extends VersionDatapathIdConvertorData {
private Long xid;
public void setXid(Long xid) {
this.xid = xid;
}
-}
\ No newline at end of file
+}
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorData;
/**
- * Convertor data implementation containing only Openflow version
+ * Convertor data implementation containing only Openflow version.
*/
public class VersionConvertorData extends ConvertorData {
/**
public VersionConvertorData(short version) {
super(version);
}
-}
\ No newline at end of file
+}
import java.math.BigInteger;
/**
- * Convertor data implementation containing Openflow version and datapath ID
+ * Convertor data implementation containing Openflow version and datapath ID.
*/
public class VersionDatapathIdConvertorData extends VersionConvertorData {
private BigInteger datapathId;
* Converts the SAL Flow to OF Flow. It checks if there is a set-vlan-id (1.0) action made on OF1.3.
* If yes its handled separately.
*
+ * <p>
* Example usage:
* <pre>
* {@code
*/
public class FlowConvertor extends Convertor<Flow, List<FlowModInputBuilder>, VersionDatapathIdConvertorData> {
/**
- * Default idle timeout
+ * Default idle timeout.
*/
public static final Integer DEFAULT_IDLE_TIMEOUT = 0;
+
/**
- * Default hard timeout
+ * Default hard timeout.
*/
public static final Integer DEFAULT_HARD_TIMEOUT = 0;
+
/**
- * Default priority
+ * Default priority.
*/
public static final Integer DEFAULT_PRIORITY = Integer.parseInt("8000", 16);
+
/**
- * 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
+ * default match entries - empty.
*/
public static final List<MatchEntry> DEFAULT_MATCH_ENTRIES = new ArrayList<>();
private static final Long OFPG_ANY = Long.parseLong("ffffffff", 16);
private static final Long DEFAULT_OUT_GROUP = OFPG_ANY;
private static final Integer PUSH_VLAN = 0x8100;
- private static final Ordering<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction> INSTRUCTION_ORDERING = Ordering.from(OrderComparator.build());
+ private static final Ordering<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction
+ .list.Instruction> INSTRUCTION_ORDERING = Ordering.from(OrderComparator.build());
private static final VlanMatch VLAN_MATCH_FALSE;
private static final VlanMatch VLAN_MATCH_TRUE;
- private static final ConvertorProcessor<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction, Instruction, ActionConvertorData> PROCESSOR = new ConvertorProcessor<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction, Instruction, ActionConvertorData>()
+ private static final ConvertorProcessor<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026
+ .instruction.Instruction, Instruction, ActionConvertorData> PROCESSOR =
+ new ConvertorProcessor<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026
+ .instruction.Instruction, Instruction, ActionConvertorData>()
.addCase(new ApplyActionsCase())
.addCase(new ClearActionsCase())
.addCase(new GoToTableCase())
.addCase(new MeterCase())
.addCase(new WriteActionsCase())
.addCase(new WriteMetadataCase());
- private static final List<Class<?>> TYPES = Arrays.asList(Flow.class, AddFlowInput.class, RemoveFlowInput.class, UpdatedFlow.class);
+
+ private static final List<Class<?>> TYPES = Arrays.asList(Flow.class, AddFlowInput.class,
+ RemoveFlowInput.class, UpdatedFlow.class);
static {
final VlanId zeroVlan = new VlanId(0);
MatchInjector.inject(conversionMatch, flowMod, versionConverterData.getVersion());
if (flow.getInstructions() != null) {
- flowMod.setInstruction(toInstructions(flow, versionConverterData.getVersion(), versionConverterData.getDatapathId()));
- flowMod.setAction(getActions(versionConverterData.getVersion(), versionConverterData.getDatapathId(), flow));
+ flowMod.setInstruction(toInstructions(flow, versionConverterData.getVersion(),
+ versionConverterData.getDatapathId()));
+ flowMod.setAction(getActions(versionConverterData.getVersion(),
+ versionConverterData.getDatapathId(), flow));
}
- flowMod.setVersion(versionConverterData.getVersion()); return flowMod;
+ flowMod.setVersion(versionConverterData.getVersion());
+ return flowMod;
}
private static void salToOFFlowOutGroup(Flow flow, FlowModInputBuilder flowMod) {
Instructions instructions = flow.getInstructions();
- for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction instruction : instructions
- .getInstruction()) {
- org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction curInstruction = instruction
- .getInstruction();
+ for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction
+ instruction : instructions.getInstruction()) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction
+ curInstruction = instruction.getInstruction();
Optional<Instruction> result = PROCESSOR.process(curInstruction, data, getConvertorExecutor());
private List<Action> getActions(short version, BigInteger datapathid, Flow flow) {
Instructions instructions = flow.getInstructions();
- List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction> sortedInstructions =
- 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
- .getInstruction();
-
- if (curInstruction instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase) {
- org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase applyActionscase = (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase) curInstruction;
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction>
+ sortedInstructions = 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.getInstruction();
+
+ if (curInstruction instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026
+ .instruction.instruction.ApplyActionsCase) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction
+ .ApplyActionsCase applyActionscase = (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.ApplyActionsCase) curInstruction;
ApplyActions applyActions = applyActionscase.getApplyActions();
final ActionConvertorData data = new ActionConvertorData(version);
// 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 && flow.getInstructions().getInstruction() != null) {
- for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction instruction :
- flow.getInstructions().getInstruction()) {
- org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction curInstruction =
- instruction.getInstruction();
-
- if (curInstruction instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase) {
- org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase applyActionscase = (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase) curInstruction;
+ for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction
+ instruction : flow.getInstructions().getInstruction()) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction
+ curInstruction = instruction.getInstruction();
+
+ if (curInstruction instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026
+ .instruction.instruction.ApplyActionsCase) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction
+ .ApplyActionsCase applyActionscase = (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.ApplyActionsCase) curInstruction;
ApplyActions applyActions = applyActionscase.getApplyActions();
- for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action action :
- applyActions.getAction()) {
+ for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action
+ action : applyActions.getAction()) {
if (action.getAction() instanceof SetVlanIdActionCase) {
return true;
}
/**
* A) If user provided flow's match includes vlan match  and action has set_vlan_field
- * Install following rules
+ * Install following rules.
* Â Â 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]
*/
- private List<FlowModInputBuilder> handleSetVlanIdForOF13(Flow srcFlow, VersionDatapathIdConvertorData versionDatapathIdConverterData) {
+ private List<FlowModInputBuilder> handleSetVlanIdForOF13(Flow srcFlow,
+ VersionDatapathIdConvertorData versionDatapathIdConverterData) {
List<FlowModInputBuilder> list = new ArrayList<>(2);
final Match srcMatch = Preconditions.checkNotNull(srcFlow.getMatch());
private static Optional<? extends Flow> injectMatchAndAction(Flow sourceFlow, Match match) {
- Instructions instructions = (new InstructionsBuilder())
+ Instructions instructions = new InstructionsBuilder()
.setInstruction(injectPushActionToInstruction(sourceFlow))
.build();
}
private static List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction>
- injectPushActionToInstruction(final Flow sourceFlow) {
-
- List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction> srcInstructionList =
- 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 (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction srcInstruction : srcInstructionList) {
- org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction curSrcInstruction =
- srcInstruction.getInstruction();
-
- if (curSrcInstruction instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase) {
- org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase applyActionscase = (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase) curSrcInstruction;
+ injectPushActionToInstruction(final Flow sourceFlow) {
+
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction>
+ srcInstructionList = 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 (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction
+ srcInstruction : srcInstructionList) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction
+ curSrcInstruction = srcInstruction.getInstruction();
+
+ if (curSrcInstruction instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026
+ .instruction.instruction.ApplyActionsCase) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction
+ .ApplyActionsCase applyActionscase = (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.ApplyActionsCase) curSrcInstruction;
ApplyActions applyActions = applyActionscase.getApplyActions();
- List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> srcActionList = applyActions.getAction();
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>
+ srcActionList = applyActions.getAction();
int offset = 0;
- for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action actionItem : srcActionList) {
+ for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action
+ actionItem : srcActionList) {
// check if its a set-vlan-action. If yes, then add the injected-action
if (actionItem.getAction() instanceof SetVlanIdActionCase) {
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow;
/**
- * Flow related utils
+ * Flow related utils.
*/
-public abstract class FlowConvertorUtil {
+public final class FlowConvertorUtil {
+ private FlowConvertorUtil() {
+ }
/**
- * Method wrapping all the actions org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action
- * in org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action, to set appropriate keys
- * for actions.
+ * Method wrapping all the actions
+ * org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action
+ * in org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action, to set
+ * appropriate keys for actions.
*
* @param actionList the action list
* @return the list
*/
- public static List<Action> wrapActionList(List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action> actionList) {
+ public static List<Action> wrapActionList(List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types
+ .rev131112.action.Action> actionList) {
List<Action> actions = new ArrayList<>();
int actionKey = 0;
}
@Override
- public FlowModFlags convert(final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags source,
- final VersionConvertorData data) {
+ public FlowModFlags convert(
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags source,
+ final VersionConvertorData data) {
return new FlowModFlags(
source.isCHECKOVERLAP(), source.isNOBYTCOUNTS(), source.isNOPKTCOUNTS(),
source.isRESETCOUNTS(), source.isSENDFLOWREM());
}
-}
\ No newline at end of file
+}
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlagsV10;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;
-public class FlowFlagsInjector {
+public final class FlowFlagsInjector {
+ private FlowFlagsInjector() {
+ }
+
@SuppressWarnings("unchecked")
- public static <FROM, TO> void inject(Optional<FROM> source, TO target, short version) {
- FROM sourceResult;
+ public static <F, T> void inject(Optional<F> source, T target, short version) {
+ F sourceResult;
if (source.isPresent()) {
sourceResult = source.get();
} else if (version == EncodeConstants.OF10_VERSION_ID) {
- sourceResult = (FROM) FlowFlagsV10Convertor.defaultResult();
+ sourceResult = (F) FlowFlagsV10Convertor.defaultResult();
} else {
- sourceResult = (FROM) FlowFlagsConvertor.defaultResult();
+ sourceResult = (F) FlowFlagsConvertor.defaultResult();
}
final Map<ConvertorKey, ResultInjector<?, ?>> injectorMap = new HashMap<>();
addInjectors(injectorMap);
- final ResultInjector<FROM, TO> injection = (ResultInjector<FROM, TO>) injectorMap
+ final ResultInjector<F, T> injection = (ResultInjector<F, T>) injectorMap
.get(new ConvertorKey(version, target.getClass()));
injection.inject(sourceResult, target);
private static void addInjectors(final Map<ConvertorKey, ResultInjector<?, ?>> injectionMapping) {
// OF-1.3|FlowModFlags --> FlowModInputBuilder
injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_3, FlowModInputBuilder.class),
- new ResultInjector<FlowModFlags, FlowModInputBuilder>() {
- @Override
- public void inject(final FlowModFlags value,
- final FlowModInputBuilder target) {
- target.setFlags(value);
- }
- });
+ (ResultInjector<FlowModFlags, FlowModInputBuilder>)(value, target) -> target.setFlags(value));
// OF-1.3|FlowModFlagsV10 --> FlowModInputBuilder
injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_0, FlowModInputBuilder.class),
- new ResultInjector<FlowModFlagsV10, FlowModInputBuilder>() {
- @Override
- public void inject(final FlowModFlagsV10 value,
- final FlowModInputBuilder target) {
- target.setFlagsV10(value);
- }
- });
+ (ResultInjector<FlowModFlagsV10, FlowModInputBuilder>)(value, target) -> target.setFlagsV10(value));
}
-}
\ No newline at end of file
+}
public class FlowFlagsV10Convertor extends Convertor<FlowModFlags, FlowModFlagsV10, VersionConvertorData> {
private static final List<Class<?>> TYPES = Collections.singletonList(
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags.class);
+
/**
* Create default empty flow flags
* Use this method, if result from converter is empty.
return new FlowModFlagsV10(
source.isCHECKOVERLAP(), FlowConvertor.DEFAULT_OFPFF_EMERGENCY, source.isSENDFLOWREM());
}
-}
\ No newline at end of file
+}
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCase;
/**
- * Converts Openflow 1.3+ specific instructions to MD-SAL format flow instruction
+ * Converts Openflow 1.3+ specific instructions to MD-SAL format flow instruction.
*
+ * <p>
* Example usage:
* <pre>
* {@code
* </pre>
*/
public final class FlowInstructionResponseConvertor extends Convertor<
- List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction>,
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions
+ .grouping.Instruction>,
Instructions,
VersionConvertorData> {
- private static final Set<Class<?>> TYPES = Collections.singleton(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction.class);
+ private static final Set<Class<?>> TYPES = Collections.singleton(org.opendaylight.yang.gen.v1.urn.opendaylight
+ .openflow.common.instruction.rev130731.instructions.grouping.Instruction.class);
@Override
public Collection<Class<?>> getTypes() {
}
@Override
- public Instructions convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction> source, VersionConvertorData data) {
+ public Instructions convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction
+ .rev130731.instructions.grouping.Instruction> source, VersionConvertorData data) {
InstructionsBuilder instructionsBuilder = new InstructionsBuilder();
List<Instruction> salInstructionList = new ArrayList<>();
int instructionTreeNodekey = 0;
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction salInstruction;
- for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.
- Instruction switchInst : source) {
+ for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping
+ .Instruction switchInst : source) {
if (switchInst.getInstructionChoice() instanceof ApplyActionsCase) {
ApplyActionsCase actionsInstruction = (ApplyActionsCase) switchInst.getInstructionChoice();
ApplyActionsCaseBuilder applyActionsCaseBuilder = new ApplyActionsCaseBuilder();
ApplyActionsBuilder applyActionsBuilder = new ApplyActionsBuilder();
- final ActionResponseConvertorData actionResponseConvertorData = new ActionResponseConvertorData(data.getVersion());
+ final ActionResponseConvertorData actionResponseConvertorData =
+ new ActionResponseConvertorData(data.getVersion());
actionResponseConvertorData.setActionPath(ActionPath.FLOWS_STATISTICS_UPDATE_APPLY_ACTIONS);
final Optional<List<Action>> actions = getConvertorExecutor().convert(
actionsInstruction.getApplyActions().getAction(), actionResponseConvertorData);
- applyActionsBuilder.setAction(FlowConvertorUtil.wrapActionList(actions.orElse(Collections.emptyList())));
+ applyActionsBuilder.setAction(FlowConvertorUtil.wrapActionList(
+ actions.orElse(Collections.emptyList())));
applyActionsCaseBuilder.setApplyActions(applyActionsBuilder.build());
salInstruction = applyActionsCaseBuilder.build();
- } else if (switchInst.getInstructionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ClearActionsCase) {
+ } else if (switchInst.getInstructionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight
+ .openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ClearActionsCase) {
ClearActionsCaseBuilder clearActionsCaseBuilder = new ClearActionsCaseBuilder();
salInstruction = clearActionsCaseBuilder.build();
} else if (switchInst.getInstructionChoice() instanceof GotoTableCase) {
WriteActionsCaseBuilder writeActionsCaseBuilder = new WriteActionsCaseBuilder();
WriteActionsBuilder writeActionsBuilder = new WriteActionsBuilder();
- final ActionResponseConvertorData actionResponseConvertorData = new ActionResponseConvertorData(data.getVersion());
+ final ActionResponseConvertorData actionResponseConvertorData =
+ new ActionResponseConvertorData(data.getVersion());
actionResponseConvertorData.setActionPath(ActionPath.FLOWS_STATISTICS_UPDATE_WRITE_ACTIONS);
final Optional<List<Action>> actions = getConvertorExecutor().convert(
writeActionsCase.getWriteActions().getAction(), actionResponseConvertorData);
- writeActionsBuilder.setAction(FlowConvertorUtil.wrapActionList(actions.orElse(Collections.emptyList())));
+ writeActionsBuilder.setAction(FlowConvertorUtil.wrapActionList(
+ actions.orElse(Collections.emptyList())));
writeActionsCaseBuilder.setWriteActions(writeActionsBuilder.build());
salInstruction = writeActionsCaseBuilder.build();
- } else if (switchInst.getInstructionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase) {
- org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase writeMetadataCase =
- (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase) switchInst.getInstructionChoice();
+ } else if (switchInst.getInstructionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight
+ .openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction
+ .grouping.instruction.choice.WriteMetadataCase writeMetadataCase =
+ (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731
+ .instruction.grouping.instruction.choice.WriteMetadataCase) switchInst
+ .getInstructionChoice();
WriteMetadataCaseBuilder writeMetadataCaseBuilder = new WriteMetadataCaseBuilder();
WriteMetadataBuilder writeMetadataBuilder = new WriteMetadataBuilder();
- writeMetadataBuilder.setMetadata(new BigInteger(OFConstants.SIGNUM_UNSIGNED, writeMetadataCase.getWriteMetadata().getMetadata()));
- writeMetadataBuilder.setMetadataMask(new BigInteger(OFConstants.SIGNUM_UNSIGNED, writeMetadataCase.getWriteMetadata().getMetadataMask()));
+ writeMetadataBuilder.setMetadata(new BigInteger(OFConstants.SIGNUM_UNSIGNED,
+ writeMetadataCase.getWriteMetadata().getMetadata()));
+ writeMetadataBuilder.setMetadataMask(new BigInteger(OFConstants.SIGNUM_UNSIGNED,
+ writeMetadataCase.getWriteMetadata().getMetadataMask()));
writeMetadataCaseBuilder.setWriteMetadata(writeMetadataBuilder.build());
salInstruction = writeMetadataCaseBuilder.build();
} else {
/**
* Converts flow related statistics messages coming from openflow switch to MD-SAL messages.
*
+ * <p>
* Example usage:
* <pre>
* {@code
* }
* </pre>
*/
-public class FlowStatsResponseConvertor extends Convertor<List<FlowStats>, List<FlowAndStatisticsMapList>, FlowStatsResponseConvertorData> {
+public class FlowStatsResponseConvertor extends Convertor<List<FlowStats>, List<FlowAndStatisticsMapList>,
+ FlowStatsResponseConvertorData> {
private static final Set<Class<?>> TYPES = Collections.singleton(FlowStats.class);
/**
- * Method wraps openflow 1.0 actions list to Apply Action Instructions
+ * Method wraps openflow 1.0 actions list to Apply Action Instructions.
*
* @param actionsList list of action
* @param ipProtocol ip protocol
* @return OF10 actions as an instructions
*/
- private Instructions wrapOF10ActionsToInstruction(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action> actionsList,
- final short version,
- final Short ipProtocol) {
+ private Instructions wrapOF10ActionsToInstruction(
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions
+ .grouping.Action> actionsList,
+ final short version, final Short ipProtocol) {
ActionResponseConvertorData actionResponseConvertorData = new ActionResponseConvertorData(version);
actionResponseConvertorData.setActionPath(ActionPath.FLOWS_STATISTICS_UPDATE_WRITE_ACTIONS);
actionResponseConvertorData.setIpProtocol(ipProtocol);
- InstructionsBuilder instructionsBuilder = new InstructionsBuilder();
- List<Instruction> salInstructionList = new ArrayList<>();
-
ApplyActionsCaseBuilder applyActionsCaseBuilder = new ApplyActionsCaseBuilder();
ApplyActionsBuilder applyActionsBuilder = new ApplyActionsBuilder();
- final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>> actions = getConvertorExecutor().convert(
- actionsList, actionResponseConvertorData);
+ final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>>
+ actions = getConvertorExecutor().convert(actionsList, actionResponseConvertorData);
applyActionsBuilder.setAction(FlowConvertorUtil.wrapActionList(actions.orElse(Collections.emptyList())));
applyActionsCaseBuilder.setApplyActions(applyActionsBuilder.build());
instBuilder.setInstruction(applyActionsCaseBuilder.build());
instBuilder.setKey(new InstructionKey(0));
instBuilder.setOrder(0);
+ List<Instruction> salInstructionList = new ArrayList<>();
salInstructionList.add(instBuilder.build());
+ InstructionsBuilder instructionsBuilder = new InstructionsBuilder();
instructionsBuilder.setInstruction(salInstructionList);
return instructionsBuilder.build();
}
Short ipProtocol = null;
if (flowStats.getMatchV10() != null) {
- final Optional<MatchBuilder> matchBuilderOptional = getConvertorExecutor().convert(flowStats.getMatchV10(), data);
+ final Optional<MatchBuilder> matchBuilderOptional = getConvertorExecutor().convert(
+ flowStats.getMatchV10(), data);
if (matchBuilderOptional.isPresent()) {
if (Objects.nonNull(matchBuilderOptional.get().getIpMatch())) {
}
if (flowStats.getAction() != null && flowStats.getAction().size() != 0) {
- salFlowStatsBuilder.setInstructions(wrapOF10ActionsToInstruction(flowStats.getAction(), data.getVersion(), ipProtocol));
+ salFlowStatsBuilder.setInstructions(wrapOF10ActionsToInstruction(flowStats.getAction(),
+ data.getVersion(), ipProtocol));
}
}
if (flowStats.getMatch() != null) {
- final Optional<MatchBuilder> matchBuilderOptional = getConvertorExecutor().convert(flowStats.getMatch(), data);
+ final Optional<MatchBuilder> matchBuilderOptional = getConvertorExecutor().convert(
+ flowStats.getMatch(), data);
if (matchBuilderOptional.isPresent()) {
final MatchBuilder matchBuilder = matchBuilderOptional.get();
data.getMatchPath());
if (matchExtensionWrap != null) {
- matchBuilder.addAugmentation(matchExtensionWrap.getAugmentationClass(), matchExtensionWrap.getAugmentationObject());
+ matchBuilder.addAugmentation(matchExtensionWrap.getAugmentationClass(),
+ matchExtensionWrap.getAugmentationObject());
}
salFlowStatsBuilder.setMatch(matchBuilder.build());
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;
-public class ApplyActionsCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase, Instruction, ActionConvertorData> {
+public class ApplyActionsCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.ApplyActionsCase, Instruction, ActionConvertorData> {
public ApplyActionsCase() {
- super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
+ super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction
+ .ApplyActionsCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
}
@Override
- public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase source, final ActionConvertorData data, ConvertorExecutor convertorExecutor) {
+ public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.ApplyActionsCase source, final ActionConvertorData data,
+ ConvertorExecutor convertorExecutor) {
ApplyActions applyActions = source.getApplyActions();
ApplyActionsCaseBuilder applyActionsCaseBuilder = new ApplyActionsCaseBuilder();
ApplyActionsBuilder applyActionsBuilder = new ApplyActionsBuilder();
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;
-public class ClearActionsCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCase, Instruction, ActionConvertorData> {
+public class ClearActionsCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026
+ .instruction.instruction.ClearActionsCase, Instruction, ActionConvertorData> {
public ClearActionsCase() {
- super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
+ super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction
+ .ClearActionsCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
}
@Override
- public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCase source, final ActionConvertorData data, ConvertorExecutor convertorExecutor) {
+ public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.ClearActionsCase source, final ActionConvertorData data,
+ ConvertorExecutor convertorExecutor) {
ClearActionsCaseBuilder clearActionsCaseBuilder = new ClearActionsCaseBuilder();
InstructionBuilder instructionBuilder = new InstructionBuilder();
instructionBuilder.setInstructionChoice(clearActionsCaseBuilder.build());
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;
-public class GoToTableCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCase, Instruction, ActionConvertorData> {
+public class GoToTableCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026
+ .instruction.instruction.GoToTableCase, Instruction, ActionConvertorData> {
public GoToTableCase() {
- super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
+ super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction
+ .GoToTableCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
}
@Override
- public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCase source, final ActionConvertorData data, ConvertorExecutor convertorExecutor) {
+ public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.GoToTableCase source, final ActionConvertorData data,
+ ConvertorExecutor convertorExecutor) {
GoToTable goToTable = source.getGoToTable();
GotoTableCaseBuilder gotoTableCaseBuilder = new GotoTableCaseBuilder();
GotoTableBuilder gotoTableBuilder = new GotoTableBuilder();
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;
-public class MeterCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCase, Instruction, ActionConvertorData> {
+public class MeterCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026
+ .instruction.instruction.MeterCase, Instruction, ActionConvertorData> {
public MeterCase() {
- super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
+ super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction
+ .MeterCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
}
@Override
- public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCase source, final ActionConvertorData data, ConvertorExecutor convertorExecutor) {
+ public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.MeterCase source, final ActionConvertorData data,
+ ConvertorExecutor convertorExecutor) {
Meter meter = source.getMeter();
MeterCaseBuilder meterCaseBuilder = new MeterCaseBuilder();
MeterBuilder meterBuilder = new MeterBuilder();
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;
-public class WriteActionsCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCase, Instruction, ActionConvertorData> {
+public class WriteActionsCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026
+ .instruction.instruction.WriteActionsCase, Instruction, ActionConvertorData> {
public WriteActionsCase() {
- super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
+ super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction
+ .WriteActionsCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
}
@Override
- public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCase source, final ActionConvertorData data, ConvertorExecutor convertorExecutor) {
+ public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.WriteActionsCase source, final ActionConvertorData data,
+ ConvertorExecutor convertorExecutor) {
WriteActions writeActions = source.getWriteActions();
WriteActionsCaseBuilder writeActionsCaseBuilder = new WriteActionsCaseBuilder();
WriteActionsBuilder writeActionsBuilder = new WriteActionsBuilder();
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;
-public class WriteMetadataCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCase, Instruction, ActionConvertorData> {
+public class WriteMetadataCase extends ConvertorCase<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.WriteMetadataCase, Instruction, ActionConvertorData> {
public WriteMetadataCase() {
- super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
+ super(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction
+ .WriteMetadataCase.class, true, OFConstants.OFP_VERSION_1_0, OFConstants.OFP_VERSION_1_3);
}
@Override
- public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCase source, final ActionConvertorData data, ConvertorExecutor convertorExecutor) {
+ public Optional<Instruction> process(final @Nonnull org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types
+ .rev131026.instruction.instruction.WriteMetadataCase source, final ActionConvertorData data,
+ ConvertorExecutor convertorExecutor) {
WriteMetadata writeMetadata = source.getWriteMetadata();
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));
+ 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 instructionBuilder = new InstructionBuilder();
instructionBuilder.setInstructionChoice(writeMetadataCaseBuilder.build());
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.list.grouping.ExtensionList;
/**
- * Utility class for converting a MD-SAL Flow into the OF flow mod
+ * Utility class for converting a MD-SAL Flow into the OF flow mod.
*/
public class MatchConvertor extends Convertor<Match, List<MatchEntry>, VersionConvertorData> {
private static final List<Class<?>> TYPES = Arrays.asList(
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.mod.removed.Match.class,
org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received.Match.class,
org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.in.message.Match.class,
- org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match.class,
+ org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature
+ .prop.type.Match.class,
SetField.class);
- private static final ConvertorProcessor<Layer3Match, List<MatchEntry>, VersionConvertorData> LAYER3_PROCESSOR = new ConvertorProcessor<Layer3Match, List<MatchEntry>, VersionConvertorData>()
+ private static final ConvertorProcessor<Layer3Match, List<MatchEntry>, VersionConvertorData> LAYER3_PROCESSOR =
+ new ConvertorProcessor<Layer3Match, List<MatchEntry>, VersionConvertorData>()
.addCase(new SalToOfIpv4MatchArbitraryBitMaskCase())
.addCase(new SalToOfIpv4MatchCase())
.addCase(new SalToOfTunnelIpv4MatchCase())
.addCase(new SalToOfIpv6MatchArbitraryBitMaskCase())
.addCase(new SalToOfIpv6MatchCase());
- private static final ConvertorProcessor<Layer4Match, List<MatchEntry>, VersionConvertorData> LAYER4_PROCESSOR = new ConvertorProcessor<Layer4Match, List<MatchEntry>, VersionConvertorData>()
+ private static final ConvertorProcessor<Layer4Match, List<MatchEntry>, VersionConvertorData> LAYER4_PROCESSOR =
+ new ConvertorProcessor<Layer4Match, List<MatchEntry>, VersionConvertorData>()
.addCase(new SalToOfTcpMatchCase())
.addCase(new SalToOfUdpMatchCase())
.addCase(new SalToOfSctpMatchCase());
}
private static void layer4Match(final List<MatchEntry> matchEntryList, final Layer4Match layer4Match,
- ConvertorExecutor converterExecutor, final ExtensionConverterProvider extensionConvertorProvider) {
+ ConvertorExecutor converterExecutor, final ExtensionConverterProvider extensionConvertorProvider) {
java.util.Optional<List<MatchEntry>> result = LAYER4_PROCESSOR.process(layer4Match, converterExecutor
);
}
private static void metadataMatch(final List<MatchEntry> matchEntryList,
- final org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Metadata metadata) {
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Metadata metadata) {
if (metadata == null) {
return;
}
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- boolean hasmask = metadata.getMetadataMask() != null;
+ final boolean hasmask = metadata.getMetadataMask() != null;
matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
matchEntryBuilder.setOxmMatchField(Metadata.class);
MetadataCaseBuilder metadataCaseBuilder = new MetadataCaseBuilder();
- org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder metadataBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder();
- metadataBuilder.setMetadata(ByteUtil.convertBigIntegerToNBytes(metadata.getMetadata(), OFConstants.SIZE_OF_LONG_IN_BYTES));
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry
+ .value.metadata._case.MetadataBuilder metadataBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight
+ .openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder();
+ metadataBuilder.setMetadata(ByteUtil.convertBigIntegerToNBytes(metadata.getMetadata(),
+ OFConstants.SIZE_OF_LONG_IN_BYTES));
if (hasmask) {
- metadataBuilder.setMask(ByteUtil.convertBigIntegerToNBytes(metadata.getMetadataMask(), OFConstants.SIZE_OF_LONG_IN_BYTES));
+ metadataBuilder.setMask(ByteUtil.convertBigIntegerToNBytes(metadata.getMetadataMask(),
+ OFConstants.SIZE_OF_LONG_IN_BYTES));
}
metadataCaseBuilder.setMetadata(metadataBuilder.build());
}
private static void tunnelMatch(final List<MatchEntry> matchEntryList,
- final org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Tunnel tunnel) {
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Tunnel tunnel) {
if (tunnel == null) {
return;
}
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();
TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();
boolean hasMask = tunnel.getTunnelMask() != null;
if (hasMask) {
- tunnelIdBuilder.setMask(ByteUtil.convertBigIntegerToNBytes(tunnel.getTunnelMask(), OFConstants.SIZE_OF_LONG_IN_BYTES));
+ tunnelIdBuilder.setMask(ByteUtil.convertBigIntegerToNBytes(tunnel.getTunnelMask(),
+ OFConstants.SIZE_OF_LONG_IN_BYTES));
}
- tunnelIdBuilder.setTunnelId(ByteUtil.convertBigIntegerToNBytes(tunnel.getTunnelId(), OFConstants.SIZE_OF_LONG_IN_BYTES));
+ tunnelIdBuilder.setTunnelId(ByteUtil.convertBigIntegerToNBytes(tunnel.getTunnelId(),
+ OFConstants.SIZE_OF_LONG_IN_BYTES));
tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());
+
+ MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
matchEntryBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());
matchEntryBuilder.setHasMask(hasMask);
matchEntryBuilder.setOxmMatchField(TunnelId.class);
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
matchEntryBuilder.setOxmMatchField(VlanVid.class);
- VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();
VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();
boolean setCfiBit = false;
Integer vidEntryValue = 0;
vlanVidBuilder.setCfiBit(setCfiBit);
vlanVidBuilder.setVlanVid(vidEntryValue);
+ VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();
vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());
matchEntryBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());
matchEntryBuilder.setHasMask(hasmask);
TcpFlagsContainerBuilder tcpFlagsContainerBuilder = new TcpFlagsContainerBuilder();
TcpFlagsBuilder tcpFlagsBuilder = new TcpFlagsBuilder();
tcpFlagsBuilder.setFlags(tcpFlagsMatch.getTcpFlags());
- if(tcpFlagsMatch.getTcpFlagsMask() != null) {
+ if (tcpFlagsMatch.getTcpFlagsMask() != null) {
matchEntryBuilder.setHasMask(true);
tcpFlagsBuilder.setMask(ByteUtil.unsignedShortToBytes(tcpFlagsMatch.getTcpFlagsMask()));
}
private static MatchEntry toOfMplsPbb(final Pbb pbb) {
MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- boolean hasmask = pbb.getPbbMask() != null;
+ final boolean hasmask = pbb.getPbbMask() != null;
matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
matchEntryBuilder.setOxmMatchField(PbbIsid.class);
PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();
tunnelMatch(result, source.getTunnel());
tcpFlagsMatch(result, source.getTcpFlagsMatch());
- /**
+ /*
* TODO: EXTENSION PROPOSAL (source, MD-SAL to OFJava)
* - we might need version for conversion and for key
*/
- Optional<GeneralExtensionListGrouping> extensionListOpt = ExtensionResolvers.getMatchExtensionResolver().getExtension(source);
+ Optional<GeneralExtensionListGrouping> extensionListOpt =
+ ExtensionResolvers.getMatchExtensionResolver().getExtension(source);
if (extensionListOpt.isPresent()) {
List<ExtensionList> extensionListList = extensionListOpt.get().getExtensionList();
for (ExtensionList extensionItem : extensionListList) {
// TODO: get real version
- ConverterExtensionKey<? extends ExtensionKey> key = new ConverterExtensionKey<>(extensionItem.getExtensionKey(), OFConstants.OFP_VERSION_1_3);
+ ConverterExtensionKey<? extends ExtensionKey> key =
+ new ConverterExtensionKey<>(extensionItem.getExtensionKey(), OFConstants.OFP_VERSION_1_3);
ConvertorToOFJava<MatchEntry> convertor = extensionConvertorProvider.getConverter(key);
if (convertor == null) {
throw new IllegalStateException("No converter found for key: " + key.toString());
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.pcp._case.VlanPcpBuilder;
/**
- * match related tools
+ * Match related tools.
*/
-public abstract class MatchConvertorUtil {
+public final class MatchConvertorUtil {
// Pre-calculated masks for the 33 possible values. Do not give them out, but clone() them as they may
// end up being leaked and vulnerable.
private static final byte[][] IPV4_MASKS;
static {
final byte[][] tmp = new byte[33][];
for (int i = 0; i <= 32; ++i) {
- final int mask = 0xffffffff << (32 - i);
+ final int mask = 0xffffffff << 32 - i;
tmp[i] = new byte[]{(byte) (mask >>> 24), (byte) (mask >>> 16), (byte) (mask >>> 8), (byte) mask};
}
IPV4_MASKS = tmp;
}
+ private MatchConvertorUtil() {
+ }
+
/**
* Ipv 6 exthdr flags to int integer.
*
- * @param pField ipv6 external header flag
+ * @param flags ipv6 external header flag
* @return integer containing lower 9 bits filled with corresponding flags
*/
- public static Integer ipv6ExthdrFlagsToInt(final Ipv6ExthdrFlags pField) {
+ public static Integer ipv6ExthdrFlagsToInt(final Ipv6ExthdrFlags flags) {
Integer bitmap = 0;
- bitmap |= pField.isNonext() ? 1 : 0;
- bitmap |= pField.isEsp() ? (1 << 1) : 0;
- bitmap |= pField.isAuth() ? (1 << 2) : 0;
- bitmap |= pField.isDest() ? (1 << 3) : 0;
- bitmap |= pField.isFrag() ? (1 << 4) : 0;
- bitmap |= pField.isRouter() ? (1 << 5) : 0;
- bitmap |= pField.isHop() ? (1 << 6) : 0;
- bitmap |= pField.isUnrep() ? (1 << 7) : 0;
- bitmap |= pField.isUnseq() ? (1 << 8) : 0;
+ bitmap |= flags.isNonext() ? 1 : 0;
+ bitmap |= flags.isEsp() ? 1 << 1 : 0;
+ bitmap |= flags.isAuth() ? 1 << 2 : 0;
+ bitmap |= flags.isDest() ? 1 << 3 : 0;
+ bitmap |= flags.isFrag() ? 1 << 4 : 0;
+ bitmap |= flags.isRouter() ? 1 << 5 : 0;
+ bitmap |= flags.isHop() ? 1 << 6 : 0;
+ bitmap |= flags.isUnrep() ? 1 << 7 : 0;
+ bitmap |= flags.isUnseq() ? 1 << 8 : 0;
return bitmap;
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.aggregate._case.MultipartRequestAggregateBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder;
-public class MatchInjector {
+public final class MatchInjector {
+ private MatchInjector() {
+ }
+
@SuppressWarnings("unchecked")
- public static <FROM, TO> void inject(Optional<FROM> source, TO target, short version) {
- FROM sourceResult;
+ public static <F, T> void inject(Optional<F> source, T target, short version) {
+ F sourceResult;
if (source.isPresent()) {
sourceResult = source.get();
} else if (version == EncodeConstants.OF10_VERSION_ID) {
- sourceResult = (FROM) MatchV10Convertor.defaultResult();
+ sourceResult = (F) MatchV10Convertor.defaultResult();
} else {
- sourceResult = (FROM) MatchConvertor.defaultResult();
+ sourceResult = (F) MatchConvertor.defaultResult();
}
final Map<ConvertorKey, ResultInjector<?, ?>> injectorMap = new HashMap<>();
addInjectors(injectorMap);
- final ResultInjector<FROM, TO> injection = (ResultInjector<FROM, TO>) injectorMap
+ final ResultInjector<F, T> injection = (ResultInjector<F, T>) injectorMap
.get(new ConvertorKey(version, target.getClass()));
injection.inject(sourceResult, target);
private static void addInjectors(final Map<ConvertorKey, ResultInjector<?, ?>> injectionMapping) {
// OF-1.3|List<MatchEntries> --> FlowModInputBuilder
injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_3, FlowModInputBuilder.class),
- new ResultInjector<List<MatchEntry>, FlowModInputBuilder>() {
- @Override
- public void inject(final List<MatchEntry> value,
- final FlowModInputBuilder target) {
- target.setMatch(wrapMatchV13(value).build());
- }
- });
+ (ResultInjector<List<MatchEntry>, FlowModInputBuilder>)(value, target)
+ -> target.setMatch(wrapMatchV13(value).build()));
// OF-1.3|List<MatchEntries> --> OxmFieldsActionBuilder
injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_3, SetFieldActionBuilder.class),
- new ResultInjector<List<MatchEntry>, SetFieldActionBuilder>() {
- @Override
- public void inject(final List<MatchEntry> value,
- final SetFieldActionBuilder target) {
- target.setMatchEntry(value);
- }
- });
+ (ResultInjector<List<MatchEntry>, SetFieldActionBuilder>)(value, target) -> target.setMatchEntry(value));
// OF-1.0|MatchV10Builder --> FlowModInputBuilder
injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_0, FlowModInputBuilder.class),
- new ResultInjector<MatchV10, FlowModInputBuilder>() {
- @Override
- public void inject(final MatchV10 value,
- final FlowModInputBuilder target) {
- target.setMatchV10(value);
- }
- });
+ (ResultInjector<MatchV10, FlowModInputBuilder>)(value, target) -> target.setMatchV10(value));
// OF-1.3|List<MatchEntries> --> MultipartRequestFlowBuilder
injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_3, MultipartRequestFlowBuilder.class),
- new ResultInjector<List<MatchEntry>, MultipartRequestFlowBuilder>() {
- @Override
- public void inject(final List<MatchEntry> value,
- final MultipartRequestFlowBuilder target) {
- target.setMatch(wrapMatchV13(value).build());
- }
- });
+ (ResultInjector<List<MatchEntry>, MultipartRequestFlowBuilder>)(value, target)
+ -> target.setMatch(wrapMatchV13(value).build()));
// OF-1.0|List<MatchEntries> --> MultipartRequestFlowBuilder
injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_0, MultipartRequestFlowBuilder.class),
- new ResultInjector<MatchV10, MultipartRequestFlowBuilder>() {
- @Override
- public void inject(final MatchV10 value,
- final MultipartRequestFlowBuilder target) {
- target.setMatchV10(value);
- }
- });
+ (ResultInjector<MatchV10, MultipartRequestFlowBuilder>)(value, target) -> target.setMatchV10(value));
// OF-1.3|List<MatchEntries> --> MultipartRequestAggregateBuilder
injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_3, MultipartRequestAggregateBuilder.class),
- new ResultInjector<List<MatchEntry>, MultipartRequestAggregateBuilder>() {
- @Override
- public void inject(final List<MatchEntry> value,
- final MultipartRequestAggregateBuilder target) {
- target.setMatch(wrapMatchV13(value).build());
- }
- });
+ (ResultInjector<List<MatchEntry>, MultipartRequestAggregateBuilder>)(value, target)
+ -> target.setMatch(wrapMatchV13(value).build()));
// OF-1.0|List<MatchEntries> --> MultipartRequestAggregateBuilder
injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_0, MultipartRequestAggregateBuilder.class),
- new ResultInjector<MatchV10, MultipartRequestAggregateBuilder>() {
- @Override
- public void inject(final MatchV10 value,
- final MultipartRequestAggregateBuilder target) {
- target.setMatchV10(value);
- }
- });
+ (ResultInjector<MatchV10, MultipartRequestAggregateBuilder>)(value, target) -> target.setMatchV10(value));
}
private static MatchBuilder wrapMatchV13(final List<MatchEntry> value) {
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalEthDstCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalEthSrcCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalEthTypeCase;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalExperimenterIdCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalIcmpv4CodeCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalIcmpv4TypeCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalIcmpv6CodeCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalSctpDstCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalSctpSrcCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalTcpDstCase;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalExperimenterIdCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalTcpSrcCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalTunnelIdCase;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.cases.OfToSalTunnelIpv4DstCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatchBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldAction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchEntriesGrouping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.MatchEntryValue;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Dst;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Src;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldAction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;
-import org.opendaylight.yangtools.yang.binding.DataContainer;
/**
- * Converts Openflow 1.3+ specific flow match to MD-SAL format flow
- * match
+ * Converts Openflow 1.3+ specific flow match to MD-SAL format flow match.
*
+ * <p>
* Example usage:
* <pre>
* {@code
* }
* </pre>
*/
-public class MatchResponseConvertor extends Convertor<MatchEntriesGrouping, MatchBuilder, VersionDatapathIdConvertorData> {
- private static final ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData> OF_TO_SAL_PROCESSOR = new ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData>()
+public class MatchResponseConvertor extends Convertor<MatchEntriesGrouping, MatchBuilder,
+ VersionDatapathIdConvertorData> {
+ private static final ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData>
+ OF_TO_SAL_PROCESSOR = new ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData>()
.addCase(new OfToSalInPortCase())
.addCase(new OfToSalInPhyPortCase())
.addCase(new OfToSalMetadataCase())
.addCase(new OfToSalTunnelIdCase())
.addCase(new OfToSalExperimenterIdCase());
- private static final ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData> OF_TO_SAL_TUNNEL_PROCESSOR = new ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData>()
+ private static final ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData>
+ OF_TO_SAL_TUNNEL_PROCESSOR = new ConvertorProcessor<MatchEntryValue, MatchBuilder, MatchResponseConvertorData>()
.addCase(new OfToSalTunnelIpv4SrcCase())
.addCase(new OfToSalTunnelIpv4DstCase());
private static final java.util.List<Class<?>> TYPES = Arrays.asList(Match.class, SetFieldAction.class);
data.setTcpFlagsMatchBuilder(new TcpFlagsMatchBuilder());
for (MatchEntry ofMatch : source.getMatchEntry()) {
- if (TunnelIpv4Dst.class.isAssignableFrom(ofMatch.getOxmMatchField()) ||
- TunnelIpv4Src.class.isAssignableFrom(ofMatch.getOxmMatchField())) {
- /**
+ if (TunnelIpv4Dst.class.isAssignableFrom(ofMatch.getOxmMatchField())
+ || TunnelIpv4Src.class.isAssignableFrom(ofMatch.getOxmMatchField())) {
+ /*
* TODO: Fix TunnelIpv4Src and Ipv4Dst, because current implementation do not work
* TunnelIpv4Src and TunnelIpv4Dst are not compatible with
* org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField
* and so you cannot even set them to OxmMatchField.
* Creation of TunnelIpv4SrcCase and TunnelIpv4DstCase in
- * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value
+ * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value
+ * .grouping.match.entry.value
* and proper use of it can fix this bug.
*/
OF_TO_SAL_TUNNEL_PROCESSOR.process(ofMatch.getMatchEntryValue(), data, getConvertorExecutor());
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.mod.removed.Match.class,
org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received.Match.class,
org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.in.message.Match.class,
- org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match.class,
+ org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature
+ .prop.type.Match.class,
SetField.class);
/**
- * default MAC
+ * default MAC.
*/
- private static final MacAddress zeroMac = new MacAddress("00:00:00:00:00:00");
+ private static final MacAddress ZERO_MAC = new MacAddress("00:00:00:00:00:00");
+
/**
- * default IPv4
+ * default IPv4.
*/
- private static final Ipv4Address zeroIPv4 = new Ipv4Address("0.0.0.0");
+ private static final Ipv4Address ZERO_IPV4 = new Ipv4Address("0.0.0.0");
/*
* The value 0xffff (OFP_VLAN_NONE) is used to indicate
private static void convertL3Ipv4DstMatch(final MatchV10Builder matchBuilder,
final Ipv4Match ipv4) {
if (ipv4.getIpv4Destination() != null) {
- Iterator<String> addressParts = IpConversionUtil.PREFIX_SPLITTER.split(ipv4.getIpv4Destination().getValue()).iterator();
+ Iterator<String> addressParts = IpConversionUtil.PREFIX_SPLITTER.split(
+ ipv4.getIpv4Destination().getValue()).iterator();
Ipv4Address ipv4Address = new Ipv4Address(addressParts.next());
Integer prefix = buildPrefix(addressParts);
matchBuilder.setNwDst(ipv4Address);
private static void convertL3Ipv4SrcMatch(final MatchV10Builder matchBuilder,
final Ipv4Match ipv4) {
if (ipv4.getIpv4Source() != null) {
- Iterator<String> addressParts = IpConversionUtil.PREFIX_SPLITTER.split(ipv4.getIpv4Source().getValue()).iterator();
+ Iterator<String> addressParts = IpConversionUtil.PREFIX_SPLITTER.split(
+ ipv4.getIpv4Source().getValue()).iterator();
Ipv4Address ipv4Address = new Ipv4Address(addressParts.next());
int prefix = buildPrefix(addressParts);
private static boolean convertDlVlan(final MatchV10Builder matchBuilder, final VlanMatch vlanMatch) {
if (vlanMatch.getVlanId() != null) {
int vlanId = vlanMatch.getVlanId().getVlanId().getValue();
- matchBuilder.setDlVlan((vlanId == 0 ? OFP_VLAN_NONE : vlanId));
+ matchBuilder.setDlVlan(vlanId == 0 ? OFP_VLAN_NONE : vlanId);
return false;
}
return true;
private static boolean convertInPortMatch(final MatchV10Builder matchBuilder, final NodeConnectorId inPort) {
if (inPort != null) {
- matchBuilder.setInPort(InventoryDataServiceUtil.portNumberfromNodeConnectorId(OpenflowVersion.OF10, inPort).intValue());
+ matchBuilder.setInPort(InventoryDataServiceUtil.portNumberfromNodeConnectorId(OpenflowVersion.OF10,
+ inPort).intValue());
return false;
}
return true;
@Override
public MatchV10 convert(final Match source, final VersionConvertorData data) {
MatchV10Builder matchBuilder = new MatchV10Builder();
- boolean _dLDST = true;
- boolean _dLSRC = true;
- boolean _dLTYPE = true;
- boolean _dLVLAN = true;
- boolean _dLVLANPCP = true;
- boolean _iNPORT = true;
- boolean _nWPROTO = true;
- boolean _nWTOS = true;
- boolean _tPDST = true;
- boolean _tPSRC = true;
+ boolean dlDst = true;
+ boolean dlSsc = true;
+ boolean dlType = true;
+ boolean dlVlan = true;
+ boolean dlVlanPcp = true;
+ boolean ipPort = true;
+ boolean nwProto = true;
+ boolean nwTos = true;
+ boolean tpDst = true;
+ boolean tpSrc = true;
matchBuilder.setInPort(0);
- matchBuilder.setDlDst(zeroMac);
- matchBuilder.setDlSrc(zeroMac);
+ matchBuilder.setDlDst(ZERO_MAC);
+ matchBuilder.setDlSrc(ZERO_MAC);
matchBuilder.setDlType(0);
matchBuilder.setDlVlan(OFP_VLAN_NONE);
matchBuilder.setDlVlanPcp((short) 0);
- matchBuilder.setNwDst(zeroIPv4);
+ matchBuilder.setNwDst(ZERO_IPV4);
matchBuilder.setNwDstMask((short) 0);
- matchBuilder.setNwSrc(zeroIPv4);
+ matchBuilder.setNwSrc(ZERO_IPV4);
matchBuilder.setNwSrcMask((short) 0);
matchBuilder.setNwProto((short) 0);
matchBuilder.setNwTos((short) 0);
if (source != null) {
EthernetMatch ethernetMatch = source.getEthernetMatch();
if (ethernetMatch != null) {
- _dLDST = convertEthernetDlDst(matchBuilder, ethernetMatch);
- _dLSRC = convertEthernetDlSrc(matchBuilder, ethernetMatch);
- _dLTYPE = convertEthernetDlType(matchBuilder, ethernetMatch);
+ dlDst = convertEthernetDlDst(matchBuilder, ethernetMatch);
+ dlSsc = convertEthernetDlSrc(matchBuilder, ethernetMatch);
+ dlType = convertEthernetDlType(matchBuilder, ethernetMatch);
}
VlanMatch vlanMatch = source.getVlanMatch();
if (vlanMatch != null) {
- _dLVLAN = convertDlVlan(matchBuilder, vlanMatch);
- _dLVLANPCP = convertDlVlanPcp(matchBuilder, vlanMatch);
+ dlVlan = convertDlVlan(matchBuilder, vlanMatch);
+ dlVlanPcp = convertDlVlanPcp(matchBuilder, vlanMatch);
}
NodeConnectorId inPort = source.getInPort();
if (inPort != null) {
- _iNPORT = convertInPortMatch(matchBuilder, inPort);
+ ipPort = convertInPortMatch(matchBuilder, inPort);
}
Layer3Match l3Match = source.getLayer3Match();
if (l3Match != null) {
}
IpMatch ipMatch = source.getIpMatch();
if (ipMatch != null) {
- _nWPROTO = convertNwProto(matchBuilder, ipMatch);
- _nWTOS = convertNwTos(matchBuilder, ipMatch);
+ nwProto = convertNwProto(matchBuilder, ipMatch);
+ nwTos = convertNwTos(matchBuilder, ipMatch);
}
Layer4Match layer4Match = source.getLayer4Match();
if (layer4Match != null) {
if (layer4Match instanceof TcpMatch) {
TcpMatch tcpMatch = (TcpMatch) layer4Match;
- _tPSRC = convertL4TpSrcMatch(matchBuilder, tcpMatch);
- _tPDST = convertL4TpDstMatch(matchBuilder, tcpMatch);
+ tpSrc = convertL4TpSrcMatch(matchBuilder, tcpMatch);
+ tpDst = convertL4TpDstMatch(matchBuilder, tcpMatch);
} else if (layer4Match instanceof UdpMatch) {
UdpMatch udpMatch = (UdpMatch) layer4Match;
- _tPSRC = convertL4UdpSrcMatch(matchBuilder, udpMatch);
- _tPDST = convertL4UdpDstMatch(matchBuilder, udpMatch);
+ tpSrc = convertL4UdpSrcMatch(matchBuilder, udpMatch);
+ tpDst = convertL4UdpDstMatch(matchBuilder, udpMatch);
}
} else {
Icmpv4Match icmpv4Match = source.getIcmpv4Match();
Short type = icmpv4Match.getIcmpv4Type();
if (type != null) {
matchBuilder.setTpSrc(type.intValue());
- _tPSRC = false;
+ tpSrc = false;
}
Short code = icmpv4Match.getIcmpv4Code();
if (code != null) {
matchBuilder.setTpDst(code.intValue());
- _tPDST = false;
+ tpDst = false;
}
}
}
}
FlowWildcardsV10 wildCards = new FlowWildcardsV10(
- _dLDST, _dLSRC, _dLTYPE, _dLVLAN,
- _dLVLANPCP, _iNPORT, _nWPROTO, _nWTOS, _tPDST, _tPSRC);
+ dlDst, dlSsc, dlType, dlVlan,
+ dlVlanPcp, ipPort, nwProto, nwTos, tpDst, tpSrc);
matchBuilder.setWildcards(wildCards);
return matchBuilder.build();
}
-}
\ No newline at end of file
+}
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
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.oxm.rev150225.match.v10.grouping.MatchV10;
-import org.opendaylight.yangtools.yang.binding.DataContainer;
/**
- * Converts Openflow 1.0 specific flow match to MD-SAL format flow
- * match
+ * Converts Openflow 1.0 specific flow match to MD-SAL format flow match.
*
+ * <p>
* Example usage:
* <pre>
* {@code
}
if (!source.getWildcards().isDLVLAN() && source.getDlVlan() != null) {
VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();
- int vlanId = (source.getDlVlan() == (0xffff)) ? 0 : source.getDlVlan();
- vlanIdBuilder.setVlanId(new org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId(vlanId));
+ int vlanId = source.getDlVlan() == 0xffff ? 0 : source.getDlVlan();
+ vlanIdBuilder.setVlanId(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId(vlanId));
vlanIdBuilder.setVlanIdPresent(vlanId != 0);
vlanMatchBuilder.setVlanId(vlanIdBuilder.build());
matchBuilder.setVlanMatch(vlanMatchBuilder.build());
TcpMatchBuilder tcpMatchBuilder = new TcpMatchBuilder();
boolean hasTcp = false;
if (!source.getWildcards().isTPSRC() && source.getTpSrc() != null) {
- tcpMatchBuilder
- .setTcpSourcePort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber(
- source.getTpSrc()));
+ tcpMatchBuilder.setTcpSourcePort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+ .inet.types.rev130715.PortNumber(source.getTpSrc()));
hasTcp = true;
}
if (!source.getWildcards().isTPDST() && source.getTpDst() != null) {
- tcpMatchBuilder
- .setTcpDestinationPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber(
- source.getTpDst()));
+ tcpMatchBuilder.setTcpDestinationPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
+ .ietf.inet.types.rev130715.PortNumber(source.getTpDst()));
hasTcp = true;
}
UdpMatchBuilder udpMatchBuilder = new UdpMatchBuilder();
boolean hasUdp = false;
if (!source.getWildcards().isTPSRC() && source.getTpSrc() != null) {
- udpMatchBuilder
- .setUdpSourcePort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber(
- source.getTpSrc()));
+ udpMatchBuilder.setUdpSourcePort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+ .inet.types.rev130715.PortNumber(source.getTpSrc()));
hasUdp = true;
}
if (!source.getWildcards().isTPDST() && source.getTpDst() != null) {
- udpMatchBuilder
- .setUdpDestinationPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber(
- source.getTpDst()));
+ udpMatchBuilder.setUdpDestinationPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
+ .ietf.inet.types.rev130715.PortNumber(source.getTpDst()));
hasUdp = true;
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
/**
- * Convertor data used in {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchResponseConvertor}
+ * Convertor data used in
+ * {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchResponseConvertor}
* containing Openflow version, datapath ID and various builders, because match response convertor cases depends
- * on each other and requires shared builders
+ * on each other and requires shared builders.
*/
public class MatchResponseConvertorData extends VersionDatapathIdConvertorData {
private MatchBuilder matchBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class ExtensionSessionManagerImpl implements ExtensionSessionManager {
+public final class ExtensionSessionManagerImpl implements ExtensionSessionManager {
protected static final Logger LOG = LoggerFactory.getLogger(ExtensionSessionManagerImpl.class);
private static ExtensionSessionManagerImpl INSTANCE;
private ExtensionConverterProvider extensionConverterProvider;
-
/**
- * @return singleton instance
+ * Returns singleton instance.
*/
public static ExtensionSessionManager getInstance() {
if (INSTANCE == null) {
public ExtensionConverterProvider getExtensionConverterProvider() {
return extensionConverterProvider;
}
-}
\ No newline at end of file
+}
import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
import org.opendaylight.openflowplugin.extension.api.core.session.ExtensionSessionManager;
-public abstract class OFSessionUtil {
+public final class OFSessionUtil {
+ private OFSessionUtil() {
+ }
/**
- * @return session manager singleton instance
+ * Returns the session manager singleton instance.
*/
public static ExtensionSessionManager getSessionManager() {
return ExtensionSessionManagerImpl.getInstance();
}
/**
- * @return extension converters provider
+ * Returns the extension converters provider.
*/
public static ExtensionConverterProvider getExtensionConvertorProvider() {
return getSessionManager().getExtensionConverterProvider();
/**
- * OF-action related utilities
+ * OF-action related utilities.
*/
public final class ActionUtil {
- /** http://en.wikipedia.org/wiki/IPv4#Packet_structure (end of octet number 1, bit 14.+15.) */
+ /** http://en.wikipedia.org/wiki/IPv4#Packet_structure (end of octet number 1, bit 14.+15.). */
public static final int ENC_FIELD_BIT_SIZE = 2;
private ActionUtil() {
}
/**
+ * Converts TOS to DSCP value.
+ *
* @param tosValue TypeOfService value
* @return DSCP value
*/
}
/**
+ * Converts DSCP to TOS value.
+ *
* @param dscpValue TypeOfService value
* @return TOS value
*/
public static Short dscpToTos(short dscpValue) {
return (short) (dscpValue << ActionUtil.ENC_FIELD_BIT_SIZE);
}
-
-
}
*/
package org.opendaylight.openflowplugin.openflow.md.util;
-import java.math.BigInteger;
-import java.util.Arrays;
-
import com.google.common.base.Preconditions;
import com.google.common.io.BaseEncoding;
+import java.math.BigInteger;
+import java.util.Arrays;
-public abstract class ByteUtil {
+public final class ByteUtil {
+ private ByteUtil() {
+ }
- /** default hex string separator */
+ /** default hex string separator. */
private static final String DEFAULT_HEX_SEPARATOR = ":";
- /** basic hex string encoding */
+
+ /** basic hex string encoding. */
private static final BaseEncoding PLAIN_HEX_16_ENCODING = BaseEncoding.base16().lowerCase();
- /** hex string encoding involving {@link #DEFAULT_HEX_SEPARATOR} as searator */
+
+ /** hex string encoding involving {@link #DEFAULT_HEX_SEPARATOR} as separator. */
private static final BaseEncoding HEX_16_ENCODING = PLAIN_HEX_16_ENCODING.withSeparator(DEFAULT_HEX_SEPARATOR, 2);
/**
+ * Converts bytes to a hex string.
+ *
* @param bytes bytes that needs to be converted to hex
* @param delimiter string delimiter
* @return hexString containing bytes, separated with delimiter
}
/**
- * Utility method to convert BigInteger to n element byte array
+ * Utility method to convert BigInteger to n element byte array.
*
* @param bigInteger big integer value that needs to be converted to byte
* @param numBytes convert to number of bytes
}
/**
- * Converts a 4 byte array of unsigned bytes to unsigned int
+ * Converts a 4 byte array of unsigned bytes to unsigned int.
*
* @param bytes an array of 4 unsigned bytes
* @return a long representing the unsigned int
*/
- public static final long bytesToUnsignedInt(final byte[] bytes) {
+ public static long bytesToUnsignedInt(final byte[] bytes) {
Preconditions.checkArgument(bytes.length == 4, "Input byte array must be exactly four bytes long.");
long unsignedInt = 0;
unsignedInt |= bytes[0] & 0xFF;
}
/**
- * Converts a 3 byte array of unsigned bytes to unsigned int
+ * Converts a 3 byte array of unsigned bytes to unsigned int.
*
* @param bytes an array of 4 unsigned bytes
* @return a long representing the unsigned int
*/
- public static final long bytesToUnsignedMedium(final byte[] bytes) {
+ public static long bytesToUnsignedMedium(final byte[] bytes) {
Preconditions.checkArgument(bytes.length == 3, "Input byte array must be exactly three bytes long.");
long unsignedMedium = 0;
unsignedMedium |= bytes[0] & 0xFF;
}
/**
- * Converts a 2 byte array of unsigned bytes to unsigned short
+ * Converts a 2 byte array of unsigned bytes to unsigned short.
*
* @param bytes an array of 2 unsigned bytes
* @return an int representing the unsigned short
*/
- public static final int bytesToUnsignedShort(final byte[] bytes) {
+ public static int bytesToUnsignedShort(final byte[] bytes) {
Preconditions.checkArgument(bytes.length == 2, "Input byte array must be exactly two bytes long.");
int unsignedShort = 0;
unsignedShort |= bytes[0] & 0xFF;
}
/**
- * Converts unsigned integer to a 4 byte array of unsigned bytes
+ * Converts unsigned integer to a 4 byte array of unsigned bytes.
*
* @param unsignedInt representing the unsigned integer
* @return bytes an array of 4 unsigned bytes
public static byte[] unsignedIntToBytes(final Long unsignedInt) {
byte[] bytes = new byte[4];
bytes[3] = (byte) (unsignedInt & 0xFF);
- bytes[2] = (byte) ((unsignedInt >> 8) & 0xFF);
- bytes[1] = (byte) ((unsignedInt >> 16) & 0xFF);
- bytes[0] = (byte) ((unsignedInt >> 24) & 0xFF);
+ bytes[2] = (byte) (unsignedInt >> 8 & 0xFF);
+ bytes[1] = (byte) (unsignedInt >> 16 & 0xFF);
+ bytes[0] = (byte) (unsignedInt >> 24 & 0xFF);
return bytes;
}
/**
- * Converts unsigned integer to a 3 byte array of unsigned bytes
+ * Converts unsigned integer to a 3 byte array of unsigned bytes.
*
* @param unsignedInt representing the unsigned integer
* @return bytes an array of 3 unsigned bytes
public static byte[] unsignedMediumToBytes(final Long unsignedInt) {
byte[] bytes = new byte[3];
bytes[2] = (byte) (unsignedInt & 0xFF);
- bytes[1] = (byte) ((unsignedInt >> 8) & 0xFF);
- bytes[0] = (byte) ((unsignedInt >> 16) & 0xFF);
+ bytes[1] = (byte) (unsignedInt >> 8 & 0xFF);
+ bytes[0] = (byte) (unsignedInt >> 16 & 0xFF);
return bytes;
}
/**
- * Converts unsigned short to a 2 byte array of unsigned bytes
+ * Converts unsigned short to a 2 byte array of unsigned bytes.
*
* @param unsignedShort representing the unsigned short
* @return bytes an array of 2 unsigned bytes
public static byte[] unsignedShortToBytes(final Integer unsignedShort) {
byte[] bytes = new byte[2];
bytes[1] = (byte) (unsignedShort & 0xFF);
- bytes[0] = (byte) ((unsignedShort >> 8) & 0xFF);
+ bytes[0] = (byte) (unsignedShort >> 8 & 0xFF);
return bytes;
}
}
public static NodeConnectorId nodeConnectorIdfromDatapathPortNo(final BigInteger datapathid, final Long portNo,
final OpenflowVersion ofVersion) {
String logicalName = OpenflowPortsUtil.getPortLogicalName(ofVersion, portNo);
- return new NodeConnectorId(OFConstants.OF_URI_PREFIX + datapathid + ":" + (logicalName == null ? portNo : logicalName));
+ return new NodeConnectorId(OFConstants.OF_URI_PREFIX + datapathid + ":" + (logicalName == null
+ ? portNo : logicalName));
}
@Nullable
return portNumberfromNodeConnectorId(ofVersion, ncId.getValue());
}
+ @Nullable
+ public static Long portNumberfromNodeConnectorId(final OpenflowVersion ofVersion, @Nonnull final String ncId) {
+ String portNoString = portNoStringfromNodeConnectorID(ncId);
+ return OpenflowPortsUtil.getPortFromLogicalName(ofVersion, portNoString);
+ }
+
public static String portNoStringfromNodeConnectorID(final String ncID) {
List<String> splitStringList = COLON_SPLITTER.splitToList(ncID);
// If the length is just one then this cannot be the new MD-SAL style node connector Id which
// is of the form openflow:1:3.
- return splitStringList.get(splitStringList.size()-1);
- }
-
- @Nullable
- public static Long portNumberfromNodeConnectorId(final OpenflowVersion ofVersion, @Nonnull final String ncId) {
- String portNoString = portNoStringfromNodeConnectorID(ncId);
- return OpenflowPortsUtil.getPortFromLogicalName(ofVersion, portNoString);
+ return splitStringList.get(splitStringList.size() - 1);
}
- public static NodeConnectorRef nodeConnectorRefFromDatapathIdPortno(final BigInteger datapathId, final Long portNo, final OpenflowVersion ofVersion) {
+ public static NodeConnectorRef nodeConnectorRefFromDatapathIdPortno(final BigInteger datapathId, final Long portNo,
+ final OpenflowVersion ofVersion) {
return new NodeConnectorRef(nodeConnectorInstanceIdentifierFromDatapathIdPortno(datapathId, portNo, ofVersion));
}
public static NodeConnectorRef nodeConnectorRefFromDatapathIdPortno(final BigInteger datapathId, final Long portNo,
- final OpenflowVersion ofVersion,
- final KeyedInstanceIdentifier<Node, NodeKey> nodePath) {
- return new NodeConnectorRef(nodeConnectorInstanceIdentifierFromDatapathIdPortno(datapathId, portNo, ofVersion, nodePath));
+ final OpenflowVersion ofVersion, final KeyedInstanceIdentifier<Node, NodeKey> nodePath) {
+ return new NodeConnectorRef(
+ nodeConnectorInstanceIdentifierFromDatapathIdPortno(datapathId, portNo, ofVersion, nodePath));
}
public static InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifierFromDatapathIdPortno(
}
public static InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifierFromDatapathIdPortno(
- final BigInteger datapathId, final Long portNo, final OpenflowVersion ofVersion, final KeyedInstanceIdentifier<Node, NodeKey> nodePath) {
+ final BigInteger datapathId, final Long portNo, final OpenflowVersion ofVersion,
+ final KeyedInstanceIdentifier<Node, NodeKey> nodePath) {
NodeConnectorId nodeConnectorId = nodeConnectorIdfromDatapathPortNo(datapathId, portNo, ofVersion);
return nodePath.child(NodeConnector.class, new NodeConnectorKey(nodeConnectorId));
}
- public static NodeConnectorUpdatedBuilder nodeConnectorUpdatedBuilderFromDatapathIdPortNo(final BigInteger datapathId,
- final Long portNo, final OpenflowVersion ofVersion) {
+ public static NodeConnectorUpdatedBuilder nodeConnectorUpdatedBuilderFromDatapathIdPortNo(
+ final BigInteger datapathId, final Long portNo, final OpenflowVersion ofVersion) {
NodeConnectorUpdatedBuilder builder = new NodeConnectorUpdatedBuilder();
builder.setId(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathId, portNo, ofVersion));
- builder.setNodeConnectorRef(InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(datapathId, portNo, ofVersion));
+ builder.setNodeConnectorRef(InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(
+ datapathId, portNo, ofVersion));
return builder;
}
public static NodeConnectorBuilder nodeConnectorBuilderFromDatapathIdPortNo(final BigInteger datapathId,
- final Long portNo, final OpenflowVersion ofVersion) {
+ final Long portNo, final OpenflowVersion ofVersion) {
NodeConnectorBuilder builder = new NodeConnectorBuilder();
builder.setId(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathId, portNo, ofVersion));
return builder;
}
/**
+ * Converts a BigInteger to a padded hex value.
+ *
* @param dataPathId datapath id in big interger value
* @return string of size 16, padded with '0'
*/
return StringUtils.leftPad(dataPathId.toString(16), 16, "0");
}
- //TODO : create new module openflowplugin-util, move there this method along with TestProviderTransactionUtil#getDataObject
- private static <T extends DataObject> T getDataObject(final ReadTransaction readOnlyTransaction, final InstanceIdentifier<T> identifier) {
+ // TODO : create new module openflowplugin-util, move there this method along with
+ // TestProviderTransactionUtil#getDataObject
+ private static <T extends DataObject> T getDataObject(final ReadTransaction readOnlyTransaction,
+ final InstanceIdentifier<T> identifier) {
Optional<T> optionalData = null;
try {
optionalData = readOnlyTransaction.read(LogicalDatastoreType.OPERATIONAL, identifier).get();
}
return null;
}
-
-}
\ No newline at end of file
+}
* This class is responsible for converting MDSAL given logical names to port numbers and back.
* Any newer version of openflow can have a similar mapping or can/should be extended.
*/
-public class OpenflowPortsUtil {
+public final class OpenflowPortsUtil {
+ private OpenflowPortsUtil() {
+ }
private static final Logger LOG = LoggerFactory.getLogger(OpenflowPortsUtil.class);
- private static final ImmutableBiMap<Short, ImmutableBiMap<String, Long>> versionPortMap;
- private static final ImmutableBiMap<Short, ImmutableBiMap<Long, String>> versionInversePortMap;
+ private static final ImmutableBiMap<Short, ImmutableBiMap<String, Long>> VERSION_PORT_MAP;
+ private static final ImmutableBiMap<Short, ImmutableBiMap<Long, String>> VERSION_INVERSE_PORT_MAP;
private static boolean inportWarnignAlreadyFired = false;
.put(OutputPortValues.NORMAL.getName(), (long) PortNumberValuesV10.NORMAL.getIntValue()) //0xfffa
.put(OutputPortValues.FLOOD.getName(), (long) PortNumberValuesV10.FLOOD.getIntValue()) //0xfffb
.put(OutputPortValues.ALL.getName(), (long) PortNumberValuesV10.ALL.getIntValue()) //0xfffc
- .put(OutputPortValues.CONTROLLER.getName(), (long) PortNumberValuesV10.CONTROLLER.getIntValue()) //0xfffd
+ .put(OutputPortValues.CONTROLLER.getName(),
+ (long) PortNumberValuesV10.CONTROLLER.getIntValue()) //0xfffd
.put(OutputPortValues.LOCAL.getName(), (long) PortNumberValuesV10.LOCAL.getIntValue()) //0xfffe
.put(OutputPortValues.NONE.getName(), (long) PortNumberValuesV10.NONE.getIntValue()) //0xffff
.build();
// openflow 1.3 reserved ports.
- // PortNumberValues are defined in OFJava yang. And yang maps an int to all enums. Hence we need to create longs from (-ve) ints
+ // PortNumberValues are defined in OFJava yang. And yang maps an int to all enums. Hence we need to create
+ // longs from (-ve) ints
// TODO: do we need to define these ports in yang?
final ImmutableBiMap<String, Long> ofv13ports = new ImmutableBiMap.Builder<String, Long>()
- .put(OutputPortValues.MAX.getName(), BinContent.intToUnsignedLong(PortNumberValues.MAX.getIntValue())) //0xffffff00
- .put(OutputPortValues.INPORT.getName(), BinContent.intToUnsignedLong(PortNumberValues.INPORT.getIntValue())) //0xfffffff8
- .put(OutputPortValues.TABLE.getName(), BinContent.intToUnsignedLong(PortNumberValues.TABLE.getIntValue())) //0xfffffff9
- .put(OutputPortValues.NORMAL.getName(), BinContent.intToUnsignedLong(PortNumberValues.NORMAL.getIntValue())) //0xfffffffa
- .put(OutputPortValues.FLOOD.getName(), BinContent.intToUnsignedLong(PortNumberValues.FLOOD.getIntValue())) //0xfffffffb
- .put(OutputPortValues.ALL.getName(), BinContent.intToUnsignedLong(PortNumberValues.ALL.getIntValue())) //0xfffffffc
- .put(OutputPortValues.CONTROLLER.getName(), BinContent.intToUnsignedLong(PortNumberValues.CONTROLLER.getIntValue())) //0xfffffffd
- .put(OutputPortValues.LOCAL.getName(), BinContent.intToUnsignedLong(PortNumberValues.LOCAL.getIntValue())) //0xfffffffe
- .put(OutputPortValues.ANY.getName(), BinContent.intToUnsignedLong(PortNumberValues.ANY.getIntValue())) //0xffffffff
+ .put(OutputPortValues.MAX.getName(),
+ BinContent.intToUnsignedLong(PortNumberValues.MAX.getIntValue())) // 0xffffff00
+ .put(OutputPortValues.INPORT.getName(),
+ BinContent.intToUnsignedLong(PortNumberValues.INPORT.getIntValue())) // 0xfffffff8
+ .put(OutputPortValues.TABLE.getName(),
+ BinContent.intToUnsignedLong(PortNumberValues.TABLE.getIntValue())) // 0xfffffff9
+ .put(OutputPortValues.NORMAL.getName(),
+ BinContent.intToUnsignedLong(PortNumberValues.NORMAL.getIntValue())) // 0xfffffffa
+ .put(OutputPortValues.FLOOD.getName(),
+ BinContent.intToUnsignedLong(PortNumberValues.FLOOD.getIntValue())) // 0xfffffffb
+ .put(OutputPortValues.ALL.getName(),
+ BinContent.intToUnsignedLong(PortNumberValues.ALL.getIntValue())) // 0xfffffffc
+ .put(OutputPortValues.CONTROLLER.getName(),
+ BinContent.intToUnsignedLong(PortNumberValues.CONTROLLER.getIntValue())) // 0xfffffffd
+ .put(OutputPortValues.LOCAL.getName(),
+ BinContent.intToUnsignedLong(PortNumberValues.LOCAL.getIntValue())) // 0xfffffffe
+ .put(OutputPortValues.ANY.getName(),
+ BinContent.intToUnsignedLong(PortNumberValues.ANY.getIntValue())) // 0xffffffff
.build();
- versionPortMap = new ImmutableBiMap.Builder<Short, ImmutableBiMap<String, Long>>()
+ VERSION_PORT_MAP = new ImmutableBiMap.Builder<Short, ImmutableBiMap<String, Long>>()
.put(OFConstants.OFP_VERSION_1_0, ofv10ports)
.put(OFConstants.OFP_VERSION_1_3, ofv13ports)
.build();
- versionInversePortMap = new ImmutableBiMap.Builder<Short, ImmutableBiMap<Long, String>>()
+ VERSION_INVERSE_PORT_MAP = new ImmutableBiMap.Builder<Short, ImmutableBiMap<Long, String>>()
.put(OFConstants.OFP_VERSION_1_0, ofv10ports.inverse())
.put(OFConstants.OFP_VERSION_1_3, ofv13ports.inverse())
.build();
}
public static String getPortLogicalName(final short ofVersion, final Long portNumber) {
- return versionInversePortMap.get(ofVersion).get(portNumber);
+ return VERSION_INVERSE_PORT_MAP.get(ofVersion).get(portNumber);
}
public static String getPortLogicalName(final OpenflowVersion ofVersion, final Long portNumber) {
LOG.warn("Using '{}' in port field is not recommended use 'IN_PORT' instead", logicalNameOrPort);
inportWarnignAlreadyFired = true;
}
- port = versionPortMap.get(ofVersion.getVersion()).get(OutputPortValues.INPORT.getName());
+ port = VERSION_PORT_MAP.get(ofVersion.getVersion()).get(OutputPortValues.INPORT.getName());
} else {
- port = versionPortMap.get(ofVersion.getVersion()).get(logicalNameOrPort);
+ port = VERSION_PORT_MAP.get(ofVersion.getVersion()).get(logicalNameOrPort);
}
if (port == null) {
try {
final String portLogicalName = port.getString();
return portLogicalName != null
- ? versionPortMap.get(ofVersion.getVersion()).get(portLogicalName)
+ ? VERSION_PORT_MAP.get(ofVersion.getVersion()).get(portLogicalName)
: port.getUint32();
}
}
public static boolean isPortReserved(final OpenflowVersion ofVersion, final Long portNumber) {
- return versionInversePortMap.get(ofVersion.getVersion()).containsKey(portNumber);
+ return VERSION_INVERSE_PORT_MAP.get(ofVersion.getVersion()).containsKey(portNumber);
}
/**
+ * Checks port validity.
+ *
* @param ofVersion OpenFlow version of the switch
* @param portNumber port number
* @return true if port number is valid for given protocol version
}
/**
+ * Converts a port number to a string.
+ *
* @param portNumber port number
* @return string containing number or logical name
*/
}
/**
- * Converts port number to Uri
+ * Converts port number to Uri.
+ *
* @param version openflow version
* @param portNumber port number
* @return port number uri
public static Uri getProtocolAgnosticPortUri(final short version, final long portNumber) {
return new Uri(portNumberToString(getProtocolAgnosticPort(OpenflowVersion.get(version), portNumber)));
}
-
}