use of org.openkilda.model.SwitchProperties in project open-kilda by telstra.
the class FlowPathBuilder method buildFlowPath.
/**
* Build a flow path entity for the flow using provided resources and segments.
*
* @param flow a flow the flow path will be associated with.
* @param pathResources resources to be used for the flow path.
* @param pathLatency path to be used for the flow path.
* @param segments segments to be used for the flow path.
* @param cookie cookie to be used for the flow path.
* @param forceToIgnoreBandwidth force path to ignore bandwidth.
* @param sharedBandwidthGroupId a shared bandwidth group to be set for the path
*/
public FlowPath buildFlowPath(Flow flow, PathResources pathResources, long pathLatency, SwitchId srcSwitchId, SwitchId destSwitchId, List<PathSegment> segments, FlowSegmentCookie cookie, boolean forceToIgnoreBandwidth, String sharedBandwidthGroupId) {
Map<SwitchId, Switch> switches = new HashMap<>();
switches.put(flow.getSrcSwitchId(), flow.getSrcSwitch());
switches.put(flow.getDestSwitchId(), flow.getDestSwitch());
Switch srcSwitch = switches.get(srcSwitchId);
if (srcSwitch == null) {
throw new IllegalArgumentException(format("Path %s has different end-point %s than flow %s", pathResources.getPathId(), srcSwitchId, flow.getFlowId()));
}
Switch destSwitch = switches.get(destSwitchId);
if (destSwitch == null) {
throw new IllegalArgumentException(format("Path %s has different end-point %s than flow %s", pathResources.getPathId(), destSwitchId, flow.getFlowId()));
}
Map<SwitchId, SwitchProperties> switchProperties = getSwitchProperties(pathResources.getPathId());
boolean srcWithMultiTable = switchProperties.get(srcSwitch.getSwitchId()) != null ? switchProperties.get(srcSwitch.getSwitchId()).isMultiTable() : kildaConfigurationRepository.getOrDefault().getUseMultiTable();
boolean dstWithMultiTable = switchProperties.get(destSwitch.getSwitchId()) != null ? switchProperties.get(destSwitch.getSwitchId()).isMultiTable() : kildaConfigurationRepository.getOrDefault().getUseMultiTable();
return FlowPath.builder().pathId(pathResources.getPathId()).srcSwitch(srcSwitch).destSwitch(destSwitch).meterId(pathResources.getMeterId()).cookie(cookie).bandwidth(flow.getBandwidth()).ignoreBandwidth(flow.isIgnoreBandwidth() || forceToIgnoreBandwidth).latency(pathLatency).segments(segments).srcWithMultiTable(srcWithMultiTable).destWithMultiTable(dstWithMultiTable).sharedBandwidthGroupId(sharedBandwidthGroupId).build();
}
use of org.openkilda.model.SwitchProperties in project open-kilda by telstra.
the class FlowValidatorTest method checkForEncapsulationTypeRequirementNullTypesTest.
@Test(expected = InvalidFlowException.class)
public void checkForEncapsulationTypeRequirementNullTypesTest() throws InvalidFlowException {
SwitchProperties properties = SwitchProperties.builder().supportedTransitEncapsulation(null).build();
flowValidator.checkForEncapsulationTypeRequirement(SRC_ENDPOINT, properties, TRANSIT_VLAN);
}
use of org.openkilda.model.SwitchProperties in project open-kilda by telstra.
the class FlowValidatorTest method checkForEncapsulationTypeRequirementEmptyTypesTest.
@Test(expected = InvalidFlowException.class)
public void checkForEncapsulationTypeRequirementEmptyTypesTest() throws InvalidFlowException {
SwitchProperties properties = SwitchProperties.builder().supportedTransitEncapsulation(new HashSet<>()).build();
flowValidator.checkForEncapsulationTypeRequirement(SRC_ENDPOINT, properties, TRANSIT_VLAN);
}
use of org.openkilda.model.SwitchProperties in project open-kilda by telstra.
the class CommandBuilderImpl method buildCommandsToReinstallRules.
@Override
public List<ReinstallDefaultFlowForSwitchManagerRequest> buildCommandsToReinstallRules(SwitchId switchId, List<Long> reinstallRulesCookies) {
SwitchProperties properties = getSwitchProperties(switchId);
List<ReinstallDefaultFlowForSwitchManagerRequest> commands = new ArrayList<>();
for (Long cookie : reinstallRulesCookies) {
if (isDefaultRuleWithSpecialRequirements(cookie)) {
commands.add(new ReinstallServer42FlowForSwitchManagerRequest(switchId, cookie, properties.getServer42MacAddress(), properties.getServer42Vlan(), properties.getServer42Port()));
} else {
commands.add(new ReinstallDefaultFlowForSwitchManagerRequest(switchId, cookie));
}
}
return commands;
}
use of org.openkilda.model.SwitchProperties in project open-kilda by telstra.
the class CommandBuilderImpl method buildInstallSpecialDefaultRuleCommands.
/**
* Some default rules require additional properties to be installed. This method creates commands for such rules.
*/
private List<BaseInstallFlow> buildInstallSpecialDefaultRuleCommands(SwitchId switchId, List<Long> switchRules) {
SwitchProperties properties = getSwitchProperties(switchId);
List<BaseInstallFlow> commands = new ArrayList<>();
for (Long cookie : switchRules) {
InstallServer42FlowBuilder command = InstallServer42Flow.builder().transactionId(transactionIdGenerator.generate()).cookie(cookie).switchId(switchId).multiTable(properties.isMultiTable()).inputPort(0).outputPort(0).server42Vlan(properties.getServer42Vlan()).server42MacAddress(properties.getServer42MacAddress());
if (cookie == SERVER_42_FLOW_RTT_OUTPUT_VLAN_COOKIE) {
commands.add(command.id("SWMANAGER_SERVER_42_FLOW_RTT_OUTPUT_VLAN_RULE_INSTALL").outputPort(properties.getServer42Port()).build());
} else if (cookie == SERVER_42_FLOW_RTT_OUTPUT_VXLAN_COOKIE) {
commands.add(command.id("SWMANAGER_SERVER_42_FLOW_RTT_OUTPUT_VXLAN_RULE_INSTALL").outputPort(properties.getServer42Port()).build());
} else if (new PortColourCookie(cookie).getType() == CookieType.SERVER_42_FLOW_RTT_INPUT) {
commands.add(command.id("SWMANAGER_SERVER_42_FLOW_RTT_INPUT_RULE_INSTALL").inputPort(properties.getServer42Port()).build());
} else if (cookie == SERVER_42_ISL_RTT_OUTPUT_COOKIE) {
commands.add(command.id("SWMANAGER_SERVER_42_ISL_RTT_OUTPUT_RULE_INSTALL").outputPort(properties.getServer42Port()).build());
} else if (new PortColourCookie(cookie).getType() == CookieType.SERVER_42_ISL_RTT_INPUT) {
commands.add(command.id("SWMANAGER_SERVER_42_ISL_RTT_INPUT_RULE_INSTALL").inputPort(properties.getServer42Port()).build());
} else {
log.warn("Got request for installation of unknown rule {} on switch {}", cookie, switchId);
}
}
return commands;
}
Aggregations