use of org.openkilda.model.Isl in project open-kilda by telstra.
the class LagPortOperationService method validatePhysicalPort.
private void validatePhysicalPort(SwitchId switchId, Set<SwitchFeature> features, Integer portNumber) throws InvalidDataException {
if (portNumber == null || portNumber <= 0) {
throw new InvalidDataException(format("Invalid physical port number %s. It can't be null or negative.", portNumber));
}
int bfdPortOffset = config.getBfdPortOffset();
int bfdPortMaxNumber = config.getBfdPortMaxNumber();
if (features.contains(BFD) && portNumber >= bfdPortOffset && portNumber <= bfdPortMaxNumber) {
throw new InvalidDataException(format("Physical port number %d intersects with BFD port range [%d, %d]", portNumber, bfdPortOffset, bfdPortMaxNumber));
}
long lagPortOffset = config.getPoolConfig().getIdMinimum();
if (portNumber >= lagPortOffset) {
throw new InvalidDataException(format("Physical port number %d can't be greater than LAG port offset %d.", portNumber, lagPortOffset));
}
Collection<Isl> isls = islRepository.findByEndpoint(switchId, portNumber);
if (!isls.isEmpty()) {
throw new InvalidDataException(format("Physical port number %d intersects with existing ISLs %s.", portNumber, isls));
}
Optional<SwitchProperties> properties = switchPropertiesRepository.findBySwitchId(switchId);
if (properties.isPresent() && Objects.equals(properties.get().getServer42Port(), portNumber)) {
throw new InvalidDataException(format("Physical port number %d on switch %s is server42 port.", portNumber, switchId));
}
Set<String> flowIds = flowRepository.findByEndpoint(switchId, portNumber).stream().map(Flow::getFlowId).collect(Collectors.toSet());
if (!flowIds.isEmpty()) {
throw new InvalidDataException(format("Physical port %d already used by following flows: %s. You must " + "remove these flows to be able to use the port in LAG.", portNumber, flowIds));
}
Collection<FlowMirrorPath> mirrorPaths = flowMirrorPathRepository.findByEgressSwitchIdAndPort(switchId, portNumber);
if (!mirrorPaths.isEmpty()) {
Map<String, List<PathId>> mirrorPathByFLowIdMap = new HashMap<>();
for (FlowMirrorPath path : mirrorPaths) {
String flowId = path.getFlowMirrorPoints().getFlowPath().getFlowId();
mirrorPathByFLowIdMap.computeIfAbsent(flowId, ignore -> new ArrayList<>());
mirrorPathByFLowIdMap.get(flowId).add(path.getPathId());
}
String message = mirrorPathByFLowIdMap.entrySet().stream().map(entry -> format("flow '%s': %s", entry.getKey(), entry.getValue())).collect(Collectors.joining(", "));
throw new InvalidDataException(format("Physical port %d already used as sink by following mirror points %s", portNumber, message));
}
}
use of org.openkilda.model.Isl in project open-kilda by telstra.
the class IslMapperTest method islMapperTest.
@Test
public void islMapperTest() {
IslInfoData islInfoData = IslInfoData.builder().latency(1L).source(new PathNode(TEST_SWITCH_A_ID, 1, 0)).destination(new PathNode(TEST_SWITCH_B_ID, 1, 1)).speed(2L).state(IslChangeType.DISCOVERED).actualState(IslChangeType.MOVED).roundTripStatus(IslChangeType.FAILED).cost(700).availableBandwidth(4L).underMaintenance(false).build();
Isl isl = IslMapper.INSTANCE.map(islInfoData);
Assert.assertEquals(IslStatus.ACTIVE, isl.getStatus());
IslInfoData islInfoDataMapping = IslMapper.INSTANCE.map(isl);
Assert.assertEquals(islInfoData, islInfoDataMapping);
}
use of org.openkilda.model.Isl in project open-kilda by telstra.
the class IslMapper method map.
/**
* Convert {@link IslInfoData} to {@link org.openkilda.model.Isl}.
*/
public org.openkilda.model.Isl map(IslInfoData islInfoData) {
if (islInfoData == null) {
return null;
}
Isl.IslBuilder isl = Isl.builder();
PathNode sourcePathNode = islInfoData.getSource();
if (sourcePathNode != null) {
isl.srcSwitch(Switch.builder().switchId(sourcePathNode.getSwitchId()).build()).srcPort(sourcePathNode.getPortNo());
}
PathNode destinationPathNode = islInfoData.getDestination();
if (destinationPathNode != null) {
isl.destSwitch(Switch.builder().switchId(destinationPathNode.getSwitchId()).build()).destPort(destinationPathNode.getPortNo());
}
isl.latency((int) islInfoData.getLatency()).speed(islInfoData.getSpeed()).availableBandwidth(islInfoData.getAvailableBandwidth()).status(map(islInfoData.getState())).actualStatus(map(islInfoData.getActualState())).roundTripStatus(map(islInfoData.getRoundTripStatus())).cost(islInfoData.getCost()).underMaintenance(islInfoData.isUnderMaintenance()).bfdSessionStatus(map(islInfoData.getBfdSessionStatus()));
return isl.build();
}
use of org.openkilda.model.Isl in project open-kilda by telstra.
the class CacheServiceTest method updateIslStatus.
private void updateIslStatus(SwitchId srcSwitchId, int srcPort, SwitchId dstSwitchId, int dstPort, IslStatus status) {
Isl isl = islRepository.findByEndpoints(srcSwitchId, srcPort, dstSwitchId, dstPort).get();
isl.setStatus(status);
}
use of org.openkilda.model.Isl in project open-kilda by telstra.
the class CacheServiceTest method createIsl.
private void createIsl(Switch srcSwitch, int srcPort, Switch dstSwitch, int dstPort, long latency, IslStatus status) {
Isl isl = Isl.builder().srcSwitch(srcSwitch).srcPort(srcPort).destSwitch(dstSwitch).destPort(dstPort).status(status).latency(latency).build();
islRepository.add(isl);
}
Aggregations