import com.google.common.base.Optional;
import com.google.common.net.InetAddresses;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@SuppressWarnings("checkstyle:AbbreviationAsWordInName")
+// This class needs to be mocked
+@SuppressWarnings({ "checkstyle:AbbreviationAsWordInName", "checkstyle:FinalClass" })
public class MDSALUtil {
private static final Logger LOG = LoggerFactory.getLogger(MDSALUtil.class);
new ArrayList<>()).build();
private static final Match EMPTY_MATCHES = new MatchBuilder().build();
+ private MDSALUtil() { }
+
public static FlowEntity buildFlowEntity(BigInteger dpnId, short tableId, String flowId, int priority,
String flowName, int idleTimeOut, int hardTimeOut, BigInteger cookie,
List<? extends MatchInfoBase> listMatchInfoBase, List<InstructionInfo> listInstructionInfo) {
- FlowEntity flowEntity = new FlowEntity(dpnId);
-
- flowEntity.setTableId(tableId);
- flowEntity.setFlowId(flowId);
- flowEntity.setPriority(priority);
- flowEntity.setFlowName(flowName);
- flowEntity.setIdleTimeOut(idleTimeOut);
- flowEntity.setHardTimeOut(hardTimeOut);
- flowEntity.setCookie(cookie);
- flowEntity.setMatchInfoList(listMatchInfoBase);
- flowEntity.setInstructionInfoList(listInstructionInfo);
-
- return flowEntity;
+ FlowEntityBuilder builder = new FlowEntityBuilder()
+ .setDpnId(dpnId)
+ .setTableId(tableId)
+ .setFlowId(flowId)
+ .setPriority(priority)
+ .setFlowName(flowName)
+ .setIdleTimeOut(idleTimeOut)
+ .setHardTimeOut(hardTimeOut)
+ .setCookie(cookie);
+ if (listMatchInfoBase != null) {
+ builder.addAllMatchInfoList(listMatchInfoBase);
+ }
+ if (listInstructionInfo != null) {
+ builder.addAllInstructionInfoList(listInstructionInfo);
+ }
+ return builder.build();
}
// TODO: CHECK IF THIS IS USED
public static GroupEntity buildGroupEntity(BigInteger dpnId, long groupId, String groupName, GroupTypes groupType,
List<BucketInfo> listBucketInfo) {
- GroupEntity groupEntity = new GroupEntity(dpnId);
-
+ GroupEntityBuilder groupEntity = new GroupEntityBuilder();
+ groupEntity.setDpnId(dpnId);
groupEntity.setGroupId(groupId);
groupEntity.setGroupName(groupName);
groupEntity.setGroupType(groupType);
groupEntity.setBucketInfoList(listBucketInfo);
-
- return groupEntity;
+ return groupEntity.build();
}
public static Group buildGroup(long groupId, String groupName, GroupTypes groupType, Buckets buckets) {
.setIngress(ingress).setEgress(ingress).build();
}
+ public static TransmitPacketInput getPacketOut(List<ActionInfo> actionInfos, byte[] payload, BigInteger dpnId,
+ NodeConnectorRef nodeConnRef) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static TransmitPacketInput getPacketOut(List<Action> actions, byte[] payload, BigInteger dpnId) {
+ NodeConnectorRef ncRef = getDefaultNodeConnRef(dpnId);
+ return new TransmitPacketInputBuilder()
+ .setAction(actions)
+ .setPayload(payload)
+ .setNode(
+ new NodeRef(InstanceIdentifier.builder(Nodes.class)
+ .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance()))
+ .setIngress(ncRef).setEgress(ncRef).build();
+ }
+
public static Action retrieveSetTunnelIdAction(BigInteger tunnelId, int actionKey) {
return new ActionBuilder().setAction(
new SetFieldCaseBuilder().setSetField(new SetFieldBuilder().setTunnel(new TunnelBuilder()
return getNodeConnRef(NODE_PREFIX + SEPARATOR + dpId, port);
}
- public static NodeConnectorRef getNodeConnRef(String sNodeId, String port) {
- String sNodeConnectorKey;
- StringBuilder sbTmp;
- NodeId nodeId;
- NodeKey nodeKey;
- NodeConnectorId nodeConnectorId;
- NodeConnectorKey nodeConnectorKey;
- InstanceIdentifierBuilder<Nodes> nodesInstanceIdentifierBuilder;
- InstanceIdentifierBuilder<Node> nodeInstanceIdentifierBuilder;
- InstanceIdentifierBuilder<NodeConnector> nodeConnectorInstanceIdentifierBuilder;
- InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier;
- NodeConnectorRef nodeConnectorRef;
-
- sbTmp = new StringBuilder();
-
- sbTmp.append(sNodeId);
- sbTmp.append(SEPARATOR);
- sbTmp.append(port);
-
- sNodeConnectorKey = sbTmp.toString();
- nodeConnectorId = new NodeConnectorId(sNodeConnectorKey);
- nodeConnectorKey = new NodeConnectorKey(nodeConnectorId);
-
- nodeId = new NodeId(sNodeId);
- nodeKey = new NodeKey(nodeId);
-
- nodesInstanceIdentifierBuilder = InstanceIdentifier.builder(Nodes.class);
- nodeInstanceIdentifierBuilder = nodesInstanceIdentifierBuilder.child(Node.class, nodeKey);
- nodeConnectorInstanceIdentifierBuilder = nodeInstanceIdentifierBuilder.child(
- NodeConnector.class, nodeConnectorKey);
- nodeConnectorInstanceIdentifier = nodeConnectorInstanceIdentifierBuilder.toInstance();
- nodeConnectorRef = new NodeConnectorRef(nodeConnectorInstanceIdentifier);
+ public static NodeConnectorRef getNodeConnRef(String nodeId, String port) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(nodeId);
+ sb.append(SEPARATOR);
+ sb.append(port);
+ String nodeConnectorKeyAsString = sb.toString();
+ NodeConnectorId nodeConnectorId = new NodeConnectorId(nodeConnectorKeyAsString);
+ NodeConnectorKey nodeConnectorKey = new NodeConnectorKey(nodeConnectorId);
+
+ NodeKey nodeKey = new NodeKey(new NodeId(nodeId));
+ InstanceIdentifierBuilder<Node> nodeInstanceIdentifierBuilder
+ = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey);
+ InstanceIdentifierBuilder<NodeConnector> nodeConnectorInstanceIdentifierBuilder
+ = nodeInstanceIdentifierBuilder.child(NodeConnector.class, nodeConnectorKey);
+ InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier
+ = nodeConnectorInstanceIdentifierBuilder.toInstance();
+ NodeConnectorRef nodeConnectorRef = new NodeConnectorRef(nodeConnectorInstanceIdentifier);
return nodeConnectorRef;
}
}
public static BigInteger getDpnIdFromNodeName(String mdsalNodeName) {
- String dpId = mdsalNodeName.substring(mdsalNodeName.lastIndexOf(":") + 1);
+ String dpId = mdsalNodeName.substring(mdsalNodeName.lastIndexOf(':') + 1);
return new BigInteger(dpId);
}
return getOfPortNumberFromPortName(nodeConnectorId.getValue());
}
+ public static long getOfPortNumberFromPortName(String mdsalPortName) {
+ String portNumber = mdsalPortName.substring(mdsalPortName.lastIndexOf(':') + 1);
+ return Long.parseLong(portNumber);
+ }
+
public static long getDpnIdFromPortName(NodeConnectorId nodeConnectorId) {
if (nodeConnectorId == null || nodeConnectorId.getValue() == null) {
return -1;
}
try {
String ofPortName = nodeConnectorId.getValue();
- return Long.parseLong(ofPortName.substring(ofPortName.indexOf(":") + 1,
- ofPortName.lastIndexOf(":")));
+ return Long.parseLong(ofPortName.substring(ofPortName.indexOf(':') + 1,
+ ofPortName.lastIndexOf(':')));
} catch (NumberFormatException | IndexOutOfBoundsException e) {
LOG.error("NodeConnectorId not of expected format openflow:dpnid:portnum");
return -1;
return null;
}
- public static long getOfPortNumberFromPortName(String sMdsalPortName) {
- String portNumber = sMdsalPortName.substring(sMdsalPortName.lastIndexOf(":") + 1);
- return Long.parseLong(portNumber);
- }
-
- public static TransmitPacketInput getPacketOut(List<ActionInfo> actionInfos, byte[] payload, BigInteger dpnId,
- NodeConnectorRef nodeConnRef) {
- // TODO Auto-generated method stub
- return null;
- }
-
public static Instruction buildAndGetPopVlanActionInstruction(int actionKey, int instructionKey) {
Action popVlanAction = new ActionBuilder().setAction(
new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
return buildApplyActionsInstruction(listAction, instructionKey);
}
- public static Instruction buildAndGetSetReg6ActionInstruction(int actionKey, int instructionKey,
- int startOffSet, int endOffSet, long value) {
+
+ /**
+ * Create action to set REG6 to the given value.
+ *
+ * @param actionKey the action key.
+ * @param startOffSet the start offset.
+ * @param endOffSet the end offset.
+ * @param value the value.
+ * @return the action.
+ */
+ public static Action createSetReg6Action(int actionKey, int startOffSet, int endOffSet, long value) {
NxRegLoadBuilder nxRegLoadBuilder = new NxRegLoadBuilder();
Dst dst = new DstBuilder()
.setDstChoice(new DstNxRegCaseBuilder().setNxReg(NxmNxReg6.class).build())
ab.setAction(new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder()
.setNxRegLoad(nxRegLoadBuilder.build()).build());
ab.setKey(new ActionKey(actionKey));
- List<Action> listAction = new ArrayList<>();
- listAction.add(ab.build());
- return buildApplyActionsInstruction(listAction, instructionKey);
+ return ab.build();
+ }
+
+ public static Instruction buildAndGetSetReg6ActionInstruction(int actionKey, int instructionKey,
+ int startOffSet, int endOffSet, long value) {
+ return buildApplyActionsInstruction(
+ Collections.singletonList(createSetReg6Action(actionKey, startOffSet, endOffSet, value)),
+ instructionKey);
}
public static Instruction buildApplyActionsInstruction(List<Action> actions) {
return buildApplyActionsInstruction(actions, 0);
}
- public static Instruction buildWriteActionsInstruction(List<Action> actions) {
- WriteActions writeActions = new WriteActionsBuilder().setAction(actions).build();
- WriteActionsCase writeActionsCase = new WriteActionsCaseBuilder().setWriteActions(writeActions).build();
+ public static Instruction buildApplyActionsInstruction(List<Action> listAction, int instructionKey) {
+ ApplyActions applyActions = new ApplyActionsBuilder().setAction(listAction).build();
+ ApplyActionsCase applyActionsCase = new ApplyActionsCaseBuilder().setApplyActions(applyActions).build();
InstructionBuilder instructionBuilder = new InstructionBuilder();
- instructionBuilder.setInstruction(writeActionsCase);
- instructionBuilder.setKey(new InstructionKey(0));
+ instructionBuilder.setInstruction(applyActionsCase);
+ instructionBuilder.setKey(new InstructionKey(instructionKey));
return instructionBuilder.build();
}
- public static Instruction buildApplyActionsInstruction(List<Action> listAction, int instructionKey) {
- ApplyActions applyActions = new ApplyActionsBuilder().setAction(listAction).build();
- ApplyActionsCase applyActionsCase = new ApplyActionsCaseBuilder().setApplyActions(applyActions).build();
+ public static Instruction buildWriteActionsInstruction(List<Action> actions) {
+ return buildWriteActionsInstruction(actions, 0);
+ }
+
+ /**
+ * Build write actions instruction with the given actions and key.
+ *
+ * @param actions the actions.
+ * @param instructionKey the instruction key.
+ * @return the instruction.
+ */
+ public static Instruction buildWriteActionsInstruction(List<Action> actions, int instructionKey) {
+ WriteActions writeActions = new WriteActionsBuilder().setAction(actions).build();
+ WriteActionsCase writeActionsCase = new WriteActionsCaseBuilder().setWriteActions(writeActions).build();
InstructionBuilder instructionBuilder = new InstructionBuilder();
- instructionBuilder.setInstruction(applyActionsCase);
+ instructionBuilder.setInstruction(writeActionsCase);
instructionBuilder.setKey(new InstructionKey(instructionKey));
return instructionBuilder.build();
}
+ public static Instruction buildInstruction(Instruction instruction, int instructionKey) {
+ return new InstructionBuilder(instruction).setKey(new InstructionKey(instructionKey)).build();
+ }
+
public static List<Instruction> buildInstructionsDrop() {
return buildInstructionsDrop(0);
}
return mkInstructions;
}
-
+ /**
+ * Build write actions instruction with the given actions and key.
+ *
+ * @param listAction the actions.
+ * @param instructionKey the instruction key.
+ * @return the instruction.
+ * @deprecated Use buildWriteActionsInstruction
+ */
+ @Deprecated
public static Instruction getWriteActionsInstruction(List<Action> listAction, int instructionKey) {
- WriteActions writeActions = new WriteActionsBuilder().setAction(listAction).build();
- WriteActionsCase writeActionsCase = new WriteActionsCaseBuilder().setWriteActions(writeActions).build();
- InstructionBuilder instructionBuilder = new InstructionBuilder();
-
- instructionBuilder.setInstruction(writeActionsCase);
- instructionBuilder.setKey(new InstructionKey(instructionKey));
- return instructionBuilder.build();
- }
-
- public static Action buildAction(int actionKey, int instruction) {
- return new ActionBuilder().setAction(
- new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
- .setKey(new ActionKey(actionKey)).build();
+ return buildWriteActionsInstruction(listAction, instructionKey);
}
public static Instruction buildAndGetWriteMetadaInstruction(BigInteger metadata,
* Deprecated write.
*
* @deprecated Use
- * {@link SingleTransactionDataBroker#syncWrite(DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)}
+ * {@link SingleTransactionDataBroker#syncWrite(
+ * DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)}
*/
@Deprecated
public static <T extends DataObject> void syncWrite(DataBroker broker,
* Deprecated update.
*
* @deprecated Use
- * {@link SingleTransactionDataBroker#syncUpdate(DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)}
+ * {@link SingleTransactionDataBroker#syncUpdate(
+ * DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)}
*/
@Deprecated
public static <T extends DataObject> void syncUpdate(DataBroker broker,
}
}
+ // "Consider returning a zero length array rather than null" - too late to change behavior plus it's deprecated.
+ @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS")
public static byte[] getMacAddressForNodeConnector(DataBroker broker,
InstanceIdentifier<NodeConnector> nodeConnectorId) {
Optional<NodeConnector> optNc = MDSALDataStoreUtils.read(broker,
public static NodeId getNodeIdFromNodeConnectorId(NodeConnectorId ncId) {
return new NodeId(ncId.getValue().substring(0,
- ncId.getValue().lastIndexOf(":")));
+ ncId.getValue().lastIndexOf(':')));
}
public static String getInterfaceName(NodeConnectorRef ref, DataBroker dataBroker) {
.child(Node.class, new NodeKey(nodeId))
.child(NodeConnector.class,
new NodeConnectorKey(nodeConnectorId)).build();
- return read(dataBroker, LogicalDatastoreType.OPERATIONAL, ncIdentifier).transform(
- nc -> nc.getAugmentation(FlowCapableNodeConnector.class).getName()).orNull();
+ return read(dataBroker, LogicalDatastoreType.OPERATIONAL, ncIdentifier).toJavaUtil().map(
+ nc -> nc.getAugmentation(FlowCapableNodeConnector.class)).map(FlowCapableNodeConnector::getName).orElse(
+ null);
}
public static NodeConnectorId getNodeConnectorId(DataBroker dataBroker,
NodeConnectorRef ref) {
- return ((Optional<NodeConnector>) read(dataBroker, LogicalDatastoreType.OPERATIONAL, ref.getValue())).transform(
- NodeConnector::getId).orNull();
- }
-
- public static TransmitPacketInput getPacketOut(List<Action> actions, byte[] payload, BigInteger dpnId) {
- NodeConnectorRef ncRef = getDefaultNodeConnRef(dpnId);
- return new TransmitPacketInputBuilder()
- .setAction(actions)
- .setPayload(payload)
- .setNode(
- new NodeRef(InstanceIdentifier.builder(Nodes.class)
- .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance()))
- .setIngress(ncRef).setEgress(ncRef).build();
+ return ((Optional<NodeConnector>) read(dataBroker, LogicalDatastoreType.OPERATIONAL,
+ ref.getValue())).toJavaUtil().map(NodeConnector::getId).orElse(null);
}
public static Action createNxOfInPortAction(final int actionKey, final int inPortVal) {
new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
.setKey(new ActionKey(actionKey)).setOrder(actionKey).build();
}
+
}