use of org.openkilda.model.cookie.FlowSegmentCookie in project open-kilda by telstra.
the class AnyFlowStatsEntryHandler method handleStatsEntry.
@Override
public void handleStatsEntry(DummyFlowDescriptor descriptor) {
FlowSegmentCookie cookie = decodeFlowSegmentCookie(statsEntry.getCookie());
TagsFormatter tags = initTags(cookie);
directionFromCookieIntoTags(cookie, tags);
emitMeterPoints(tags);
}
use of org.openkilda.model.cookie.FlowSegmentCookie in project open-kilda by telstra.
the class AnyFlowStatsEntryHandler method initTags.
private TagsFormatter initTags(FlowSegmentCookie decodedCookie) {
TagsFormatter tags = new TagsFormatter();
tags.addFlowIdTag(null);
tags.addDirectionTag(Direction.UNKNOWN);
tags.addSwitchIdTag(switchId);
tags.addCookieTag(statsEntry.getCookie());
tags.addTableIdTag(statsEntry.getTableId());
tags.addInPortTag(statsEntry.getInPort());
tags.addOutPortTag(statsEntry.getOutPort());
CookieType cookieType;
boolean flowSatellite = isFlowSatelliteEntry(decodedCookie);
if (decodedCookie != null) {
cookieType = decodedCookie.getType();
if (flowSatellite) {
tags.addIsFlowRttInjectTag(cookieType == CookieType.SERVER_42_FLOW_RTT_INGRESS);
tags.addIsMirrorTag(decodedCookie.isMirror());
tags.addIsLoopTag(decodedCookie.isLooped());
}
} else {
cookieType = new Cookie(statsEntry.getCookie()).getType();
}
tags.addIsFlowSatelliteTag(flowSatellite);
tags.addCookieTypeTag(cookieType);
return tags;
}
use of org.openkilda.model.cookie.FlowSegmentCookie in project open-kilda by telstra.
the class FlowMapperTest method buildFlow.
private Flow buildFlow() {
Flow flow = Flow.builder().flowId("test_flow").srcSwitch(Switch.builder().switchId(SRC_SWITCH_ID).build()).destSwitch(Switch.builder().switchId(DST_SWITCH_ID).build()).allocateProtectedPath(true).build();
FlowPath forwardFlowPath = FlowPath.builder().pathId(new PathId("forward_flow_path")).srcSwitch(Switch.builder().switchId(SRC_SWITCH_ID).build()).destSwitch(Switch.builder().switchId(DST_SWITCH_ID).build()).cookie(new FlowSegmentCookie(FlowPathDirection.FORWARD, 1)).status(FlowPathStatus.ACTIVE).build();
flow.setForwardPath(forwardFlowPath);
FlowPath reverseFlowPath = FlowPath.builder().pathId(new PathId("reverse_flow_path")).srcSwitch(Switch.builder().switchId(DST_SWITCH_ID).build()).destSwitch(Switch.builder().switchId(SRC_SWITCH_ID).build()).cookie(new FlowSegmentCookie(FlowPathDirection.REVERSE, 1)).status(FlowPathStatus.ACTIVE).build();
flow.setReversePath(reverseFlowPath);
FlowPath forwardProtectedFlowPath = FlowPath.builder().pathId(new PathId("forward_protected_flow_path")).srcSwitch(Switch.builder().switchId(SRC_SWITCH_ID).build()).destSwitch(Switch.builder().switchId(DST_SWITCH_ID).build()).cookie(new FlowSegmentCookie(FlowPathDirection.FORWARD, 2)).status(FlowPathStatus.INACTIVE).build();
flow.setProtectedForwardPath(forwardProtectedFlowPath);
FlowPath reverseProtectedFlowPath = FlowPath.builder().pathId(new PathId("reverse_protected_flow_path")).srcSwitch(Switch.builder().switchId(DST_SWITCH_ID).build()).destSwitch(Switch.builder().switchId(SRC_SWITCH_ID).build()).cookie(new FlowSegmentCookie(FlowPathDirection.REVERSE, 2)).status(FlowPathStatus.INACTIVE).build();
flow.setProtectedReversePath(reverseProtectedFlowPath);
return flow;
}
use of org.openkilda.model.cookie.FlowSegmentCookie in project open-kilda by telstra.
the class SpeakerFlowSegmentRequestBuilderTest method useActualFlowEndpoint.
@Test
public void useActualFlowEndpoint() {
Switch srcSwitch = Switch.builder().switchId(SWITCH_1).build();
Switch destSwitch = Switch.builder().switchId(SWITCH_2).build();
// having flow stored in DB
Flow origin = buildFlow(srcSwitch, 1, 5, destSwitch, 2, 0, 0);
setSegmentsWithoutTransitSwitches(Objects.requireNonNull(origin.getForwardPath()), Objects.requireNonNull(origin.getReversePath()));
// then new set of paths are created
FlowPath goalForwardPath = buildFlowPath(origin, origin.getSrcSwitch(), origin.getDestSwitch(), new FlowSegmentCookie(FlowPathDirection.FORWARD, cookieFactory.next()));
FlowPath goalReversePath = buildFlowPath(origin, origin.getDestSwitch(), origin.getSrcSwitch(), new FlowSegmentCookie(FlowPathDirection.REVERSE, cookieFactory.next()));
setSegmentsWithTransitSwitches(goalForwardPath, goalReversePath);
// than new version of flow is created to fulfill update request
Flow goal = Flow.builder().flowId(origin.getFlowId()).srcSwitch(origin.getSrcSwitch()).srcPort(origin.getSrcPort()).srcVlan(// update
origin.getSrcVlan() + 10).destSwitch(origin.getDestSwitch()).destPort(origin.getDestPort()).destVlan(origin.getDestVlan()).bandwidth(origin.getBandwidth()).encapsulationType(origin.getEncapsulationType()).build();
// emulate db behaviour - flow will have "existing" paths after fetching it from DB
goal.setForwardPath(origin.getForwardPath());
goal.setReversePath(origin.getReversePath());
goal.addPaths(goalForwardPath, goalReversePath);
// then produce path segment request factories
List<FlowSegmentRequestFactory> commands = target.buildIngressOnly(COMMAND_CONTEXT, goal, goalForwardPath, goalReversePath, SpeakerRequestBuildContext.getEmpty());
boolean haveMatch = false;
for (FlowSegmentRequestFactory entry : commands) {
// search command for flow source side
if (SWITCH_1.equals(entry.getSwitchId())) {
haveMatch = true;
Assert.assertTrue(entry instanceof IngressFlowSegmentRequestFactory);
IngressFlowSegmentRequestFactory segment = (IngressFlowSegmentRequestFactory) entry;
IngressFlowSegmentRequest request = segment.makeInstallRequest(commandIdGenerator.generate());
Assert.assertEquals(goal.getSrcVlan(), request.getEndpoint().getOuterVlanId());
}
}
Assert.assertTrue(haveMatch);
}
use of org.openkilda.model.cookie.FlowSegmentCookie in project open-kilda by telstra.
the class SimpleSwitchRuleConverterTest method shouldConvertLoopedFlowPathWithTransitVlanEncapToSimpleSwitchRules.
@Test
public void shouldConvertLoopedFlowPathWithTransitVlanEncapToSimpleSwitchRules() {
Flow flow = buildFlow(FlowEncapsulationType.TRANSIT_VLAN);
flow.setLoopSwitchId(flow.getSrcSwitchId());
List<SimpleSwitchRule> expectedSwitchRules = getSimpleSwitchRuleForTransitVlan();
expectedSwitchRules.add(SimpleSwitchRule.builder().switchId(TEST_SWITCH_ID_A).cookie(new FlowSegmentCookie(FLOW_A_FORWARD_COOKIE_VALUE).toBuilder().looped(true).build().getValue()).inPort(FLOW_A_SRC_PORT).outPort(FLOW_A_SRC_PORT).inVlan(FLOW_A_SRC_VLAN).build());
List<SimpleSwitchRule> switchRules = simpleSwitchRuleConverter.convertFlowPathToSimpleSwitchRules(flow, flow.getForwardPath(), TransitVlan.builder().flowId(TEST_FLOW_ID_A).pathId(FLOW_A_FORWARD_PATH_ID).vlan(FLOW_A_ENCAP_ID).build(), MIN_BURST_SIZE_IN_KBITS, BURST_COEFFICIENT);
assertEquals(expectedSwitchRules.size(), switchRules.size());
assertTrue(expectedSwitchRules.containsAll(switchRules));
}
Aggregations