Search in sources :

Example 1 with Bucket

use of org.openkilda.rulemanager.group.Bucket in project open-kilda by telstra.

the class OfGroupConverterTest method testConvertDeleteGroupCommand.

@Test
public void testConvertDeleteGroupCommand() {
    List<Bucket> buckets = new ArrayList<>();
    buckets.add(Bucket.builder().watchPort(WatchPort.ANY).watchGroup(WatchGroup.ALL).writeActions(Sets.newHashSet(new PortOutAction(new PortNumber(2, null)))).build());
    buckets.add(Bucket.builder().watchPort(WatchPort.ANY).watchGroup(WatchGroup.ALL).writeActions(Sets.newHashSet(new PortOutAction(new PortNumber(1, null)))).build());
    GroupSpeakerData groupSpeakerData = GroupSpeakerData.builder().groupId(new GroupId(GROUP_ID)).type(GroupType.ALL).buckets(buckets).build();
    OFFactoryVer13 factory = new OFFactoryVer13();
    OFGroupDelete ofGroupDelete = OfGroupConverter.INSTANCE.convertDeleteGroupCommand(groupSpeakerData, factory);
    assertEquals(OFGroup.of(GROUP_ID), ofGroupDelete.getGroup());
    assertEquals(OFGroupType.ALL, ofGroupDelete.getGroupType());
}
Also used : OFBucket(org.projectfloodlight.openflow.protocol.OFBucket) Bucket(org.openkilda.rulemanager.group.Bucket) PortOutAction(org.openkilda.rulemanager.action.PortOutAction) OFFactoryVer13(org.projectfloodlight.openflow.protocol.ver13.OFFactoryVer13) ArrayList(java.util.ArrayList) GroupSpeakerData(org.openkilda.rulemanager.GroupSpeakerData) PortNumber(org.openkilda.rulemanager.ProtoConstants.PortNumber) OFGroupDelete(org.projectfloodlight.openflow.protocol.OFGroupDelete) GroupId(org.openkilda.model.GroupId) Test(org.junit.Test)

Example 2 with Bucket

use of org.openkilda.rulemanager.group.Bucket in project open-kilda by telstra.

the class Utils method buildMirrorBuckets.

/**
 * Builds group buckets for flow mirror points (only for sink endpoints. Flow bucket must be build separately).
 */
public static List<Bucket> buildMirrorBuckets(FlowMirrorPoints flowMirrorPoints) {
    List<Bucket> buckets = new ArrayList<>();
    Set<MirrorConfigData> mirrorConfigDataSet = flowMirrorPoints.getMirrorPaths().stream().map(mirrorPath -> new MirrorConfigData(mirrorPath.getEgressPort(), mirrorPath.getEgressOuterVlan())).collect(Collectors.toSet());
    for (MirrorConfigData mirrorConfig : mirrorConfigDataSet) {
        Set<Action> actions = new HashSet<>(makeVlanReplaceActions(new ArrayList<>(), makeVlanStack(mirrorConfig.getMirrorVlan())));
        actions.add(new PortOutAction(new PortNumber(mirrorConfig.getMirrorPort())));
        buckets.add(Bucket.builder().writeActions(actions).watchGroup(WatchGroup.ANY).watchPort(WatchPort.ANY).build());
    }
    return buckets;
}
Also used : VXLAN_SRC_IPV4_ADDRESS(org.openkilda.rulemanager.Constants.VXLAN_SRC_IPV4_ADDRESS) FlowPath(org.openkilda.model.FlowPath) SwitchFeature(org.openkilda.model.SwitchFeature) FieldMatch(org.openkilda.rulemanager.match.FieldMatch) Action(org.openkilda.rulemanager.action.Action) SpecialPortType(org.openkilda.rulemanager.ProtoConstants.PortNumber.SpecialPortType) KILDA_OVS_PUSH_POP_MATCH_VXLAN(org.openkilda.model.SwitchFeature.KILDA_OVS_PUSH_POP_MATCH_VXLAN) OfMetadata(org.openkilda.rulemanager.OfMetadata) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) PushVxlanAction(org.openkilda.rulemanager.action.PushVxlanAction) VXLAN_DST_IPV4_ADDRESS(org.openkilda.rulemanager.Constants.VXLAN_DST_IPV4_ADDRESS) Flow(org.openkilda.model.Flow) FlowEndpoint.makeVlanStack(org.openkilda.model.FlowEndpoint.makeVlanStack) PushVlanAction(org.openkilda.rulemanager.action.PushVlanAction) Sets.newHashSet(com.google.common.collect.Sets.newHashSet) PopVlanAction(org.openkilda.rulemanager.action.PopVlanAction) PortNumber(org.openkilda.rulemanager.ProtoConstants.PortNumber) ActionType(org.openkilda.rulemanager.action.ActionType) FlowSideAdapter(org.openkilda.adapter.FlowSideAdapter) WatchGroup(org.openkilda.rulemanager.group.WatchGroup) FlowEndpoint(org.openkilda.model.FlowEndpoint) Iterator(java.util.Iterator) FlowMirrorPoints(org.openkilda.model.FlowMirrorPoints) WatchPort(org.openkilda.rulemanager.group.WatchPort) Set(java.util.Set) SpeakerData(org.openkilda.rulemanager.SpeakerData) NOVIFLOW_PUSH_POP_VXLAN(org.openkilda.model.SwitchFeature.NOVIFLOW_PUSH_POP_VXLAN) Collectors(java.util.stream.Collectors) String.format(java.lang.String.format) Bucket(org.openkilda.rulemanager.group.Bucket) MacAddress(org.openkilda.model.MacAddress) List(java.util.List) FlowEndpoint.isVlanIdSet(org.openkilda.model.FlowEndpoint.isVlanIdSet) SwitchId(org.openkilda.model.SwitchId) MirrorConfigData(org.openkilda.model.MirrorConfig.MirrorConfigData) Optional(java.util.Optional) Field(org.openkilda.rulemanager.Field) PortOutAction(org.openkilda.rulemanager.action.PortOutAction) SetFieldAction(org.openkilda.rulemanager.action.SetFieldAction) Action(org.openkilda.rulemanager.action.Action) PushVxlanAction(org.openkilda.rulemanager.action.PushVxlanAction) PushVlanAction(org.openkilda.rulemanager.action.PushVlanAction) PopVlanAction(org.openkilda.rulemanager.action.PopVlanAction) PortOutAction(org.openkilda.rulemanager.action.PortOutAction) SetFieldAction(org.openkilda.rulemanager.action.SetFieldAction) Bucket(org.openkilda.rulemanager.group.Bucket) PortOutAction(org.openkilda.rulemanager.action.PortOutAction) ArrayList(java.util.ArrayList) MirrorConfigData(org.openkilda.model.MirrorConfig.MirrorConfigData) PortNumber(org.openkilda.rulemanager.ProtoConstants.PortNumber) HashSet(java.util.HashSet) Sets.newHashSet(com.google.common.collect.Sets.newHashSet)

Example 3 with Bucket

use of org.openkilda.rulemanager.group.Bucket in project open-kilda by telstra.

the class BroadCastDiscoveryRuleGeneratorTest method checkGroupCommand.

private void checkGroupCommand(GroupSpeakerData groupCommandData) {
    assertEquals(GroupId.ROUND_TRIP_LATENCY_GROUP_ID, groupCommandData.getGroupId());
    assertEquals(GroupType.ALL, groupCommandData.getType());
    List<Bucket> buckets = groupCommandData.getBuckets();
    assertEquals(2, buckets.size());
    Bucket first = buckets.get(0);
    assertEquals(2, first.getWriteActions().size());
    SetFieldAction setEthDstAction = getActionByType(SetFieldAction.class, first.getWriteActions());
    assertEquals(Field.ETH_DST, setEthDstAction.getField());
    assertEquals(sw.getSwitchId().toLong(), setEthDstAction.getValue());
    PortOutAction sendToControllerAction = getActionByType(PortOutAction.class, first.getWriteActions());
    assertEquals(SpecialPortType.CONTROLLER, sendToControllerAction.getPortNumber().getPortType());
    Bucket second = buckets.get(1);
    assertEquals(2, second.getWriteActions().size());
    SetFieldAction setUdpDstAction = getActionByType(SetFieldAction.class, second.getWriteActions());
    assertEquals(Field.UDP_DST, setUdpDstAction.getField());
    assertEquals(LATENCY_PACKET_UDP_PORT, setUdpDstAction.getValue());
    PortOutAction sendToPortInAction = getActionByType(PortOutAction.class, second.getWriteActions());
    assertEquals(SpecialPortType.IN_PORT, sendToPortInAction.getPortNumber().getPortType());
}
Also used : Bucket(org.openkilda.rulemanager.group.Bucket) PortOutAction(org.openkilda.rulemanager.action.PortOutAction) SetFieldAction(org.openkilda.rulemanager.action.SetFieldAction)

Example 4 with Bucket

use of org.openkilda.rulemanager.group.Bucket in project open-kilda by telstra.

the class BroadCastDiscoveryRuleGenerator method getRoundTripLatencyGroup.

private static GroupSpeakerData getRoundTripLatencyGroup(Switch sw) {
    List<Bucket> buckets = new ArrayList<>();
    buckets.add(Bucket.builder().writeActions(Sets.newHashSet(// todo: remove useless set ETH_DST action
    actionSetDstMac(sw.getSwitchId().toLong()), new PortOutAction(new PortNumber(SpecialPortType.CONTROLLER)))).build());
    buckets.add(Bucket.builder().writeActions(Sets.newHashSet(SetFieldAction.builder().field(Field.UDP_DST).value(LATENCY_PACKET_UDP_PORT).build(), new PortOutAction(new PortNumber(SpecialPortType.IN_PORT)))).build());
    return GroupSpeakerData.builder().switchId(sw.getSwitchId()).ofVersion(OfVersion.of(sw.getOfVersion())).groupId(GroupId.ROUND_TRIP_LATENCY_GROUP_ID).type(GroupType.ALL).buckets(buckets).build();
}
Also used : Bucket(org.openkilda.rulemanager.group.Bucket) PortOutAction(org.openkilda.rulemanager.action.PortOutAction) ArrayList(java.util.ArrayList) PortNumber(org.openkilda.rulemanager.ProtoConstants.PortNumber)

Example 5 with Bucket

use of org.openkilda.rulemanager.group.Bucket in project open-kilda by telstra.

the class OfGroupConverter method convertToGroupSpeakerData.

/**
 * Convert stats entry.
 */
public GroupSpeakerData convertToGroupSpeakerData(OFGroupDescStatsEntry entry) {
    GroupId groupId = new GroupId(entry.getGroup().getGroupNumber());
    GroupType type = fromOfGroupType(entry.getGroupType());
    List<Bucket> buckets = new ArrayList<>();
    List<OFBucket> ofBuckets = entry.getBuckets();
    for (OFBucket bucket : ofBuckets) {
        buckets.add(fromOfBucket(bucket));
    }
    return GroupSpeakerData.builder().groupId(groupId).type(type).buckets(buckets).build();
}
Also used : OFBucket(org.projectfloodlight.openflow.protocol.OFBucket) GroupType(org.openkilda.rulemanager.group.GroupType) OFGroupType(org.projectfloodlight.openflow.protocol.OFGroupType) OFBucket(org.projectfloodlight.openflow.protocol.OFBucket) Bucket(org.openkilda.rulemanager.group.Bucket) ArrayList(java.util.ArrayList) GroupId(org.openkilda.model.GroupId)

Aggregations

Bucket (org.openkilda.rulemanager.group.Bucket)9 PortOutAction (org.openkilda.rulemanager.action.PortOutAction)8 PortNumber (org.openkilda.rulemanager.ProtoConstants.PortNumber)7 ArrayList (java.util.ArrayList)6 GroupId (org.openkilda.model.GroupId)4 OFBucket (org.projectfloodlight.openflow.protocol.OFBucket)4 Test (org.junit.Test)3 GroupSpeakerData (org.openkilda.rulemanager.GroupSpeakerData)3 PushVlanAction (org.openkilda.rulemanager.action.PushVlanAction)3 HashSet (java.util.HashSet)2 SetFieldAction (org.openkilda.rulemanager.action.SetFieldAction)2 OFFactoryVer13 (org.projectfloodlight.openflow.protocol.ver13.OFFactoryVer13)2 Sets.newHashSet (com.google.common.collect.Sets.newHashSet)1 String.format (java.lang.String.format)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Optional (java.util.Optional)1 Set (java.util.Set)1 Collectors (java.util.stream.Collectors)1 FlowSideAdapter (org.openkilda.adapter.FlowSideAdapter)1