Search in sources :

Example 16 with FlowSegmentCookie

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);
}
Also used : FlowSegmentCookie(org.openkilda.model.cookie.FlowSegmentCookie)

Example 17 with FlowSegmentCookie

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;
}
Also used : Cookie(org.openkilda.model.cookie.Cookie) FlowSegmentCookie(org.openkilda.model.cookie.FlowSegmentCookie) CookieType(org.openkilda.model.cookie.CookieBase.CookieType)

Example 18 with FlowSegmentCookie

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;
}
Also used : PathId(org.openkilda.model.PathId) FlowSegmentCookie(org.openkilda.model.cookie.FlowSegmentCookie) FlowPath(org.openkilda.model.FlowPath) Flow(org.openkilda.model.Flow)

Example 19 with FlowSegmentCookie

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);
}
Also used : IngressFlowSegmentRequestFactory(org.openkilda.floodlight.api.request.factory.IngressFlowSegmentRequestFactory) FlowSegmentRequestFactory(org.openkilda.floodlight.api.request.factory.FlowSegmentRequestFactory) FlowSegmentCookie(org.openkilda.model.cookie.FlowSegmentCookie) IngressFlowSegmentRequestFactory(org.openkilda.floodlight.api.request.factory.IngressFlowSegmentRequestFactory) Switch(org.openkilda.model.Switch) IngressFlowSegmentRequest(org.openkilda.floodlight.api.request.IngressFlowSegmentRequest) FlowPath(org.openkilda.model.FlowPath) Flow(org.openkilda.model.Flow) InMemoryGraphBasedTest(org.openkilda.persistence.inmemory.InMemoryGraphBasedTest) Test(org.junit.Test)

Example 20 with FlowSegmentCookie

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));
}
Also used : FlowSegmentCookie(org.openkilda.model.cookie.FlowSegmentCookie) Flow(org.openkilda.model.Flow) Test(org.junit.Test)

Aggregations

FlowSegmentCookie (org.openkilda.model.cookie.FlowSegmentCookie)59 Flow (org.openkilda.model.Flow)33 FlowPath (org.openkilda.model.FlowPath)31 PathId (org.openkilda.model.PathId)23 MeterId (org.openkilda.model.MeterId)19 Test (org.junit.Test)15 PathSegment (org.openkilda.model.PathSegment)15 Switch (org.openkilda.model.Switch)15 ArrayList (java.util.ArrayList)8 SwitchId (org.openkilda.model.SwitchId)8 FlowEntry (org.openkilda.messaging.info.rule.FlowEntry)6 UUID (java.util.UUID)5 FlowSegmentRequestFactory (org.openkilda.floodlight.api.request.factory.FlowSegmentRequestFactory)5 IngressFlowSegmentRequestFactory (org.openkilda.floodlight.api.request.factory.IngressFlowSegmentRequestFactory)5 RemoveFlow (org.openkilda.messaging.command.flow.RemoveFlow)5 DeleteRulesCriteria (org.openkilda.messaging.command.switches.DeleteRulesCriteria)4 MirrorConfig (org.openkilda.model.MirrorConfig)4 YFlow (org.openkilda.model.YFlow)4 Before (org.junit.Before)3 EgressFlowSegmentRequestFactory (org.openkilda.floodlight.api.request.factory.EgressFlowSegmentRequestFactory)3