Search in sources :

Example 21 with FlowRuleService

use of org.onosproject.net.flow.FlowRuleService in project onos by opennetworkinglab.

the class P4RuntimeTableStatisticsDiscovery method getTableStatistics.

@Override
public List<TableStatisticsEntry> getTableStatistics() {
    if (!setupBehaviour("getTableStatistics()")) {
        return Collections.emptyList();
    }
    FlowRuleService flowService = handler().get(FlowRuleService.class);
    PiPipelineInterpreter interpreter = getInterpreter(handler());
    PiPipelineModel model = pipeconf.pipelineModel();
    List<TableStatisticsEntry> tableStatsList;
    List<FlowEntry> rules = newArrayList(flowService.getFlowEntries(deviceId));
    Map<PiTableId, Integer> piTableFlowCount = piFlowRuleCounting(model, interpreter, rules);
    Map<PiTableId, Long> piTableMatchCount = piMatchedCounting(model, interpreter, rules);
    tableStatsList = generatePiFlowTableStatistics(piTableFlowCount, piTableMatchCount, model, deviceId);
    return tableStatsList;
}
Also used : PiTableId(org.onosproject.net.pi.model.PiTableId) PiPipelineInterpreter(org.onosproject.net.pi.model.PiPipelineInterpreter) FlowRuleService(org.onosproject.net.flow.FlowRuleService) FlowEntry(org.onosproject.net.flow.FlowEntry) PiPipelineModel(org.onosproject.net.pi.model.PiPipelineModel) DefaultTableStatisticsEntry(org.onosproject.net.flow.DefaultTableStatisticsEntry) TableStatisticsEntry(org.onosproject.net.flow.TableStatisticsEntry)

Example 22 with FlowRuleService

use of org.onosproject.net.flow.FlowRuleService in project fabric-tna by stratum.

the class FabricIntProgrammableTest method setup.

@Before
public void setup() {
    FabricCapabilities capabilities = createMock(FabricCapabilities.class);
    expect(capabilities.isArchTna()).andReturn(!this.isArchV1model).anyTimes();
    expect(capabilities.isArchV1model()).andReturn(this.isArchV1model).anyTimes();
    expect(capabilities.hasHashedTable()).andReturn(true).anyTimes();
    expect(capabilities.supportDoubleVlanTerm()).andReturn(false).anyTimes();
    expect(capabilities.hwPipeCount()).andReturn(4).anyTimes();
    replay(capabilities);
    // Services mock
    flowRuleService = createMock(FlowRuleService.class);
    groupService = createMock(GroupService.class);
    netcfgService = createMock(NetworkConfigService.class);
    coreService = createMock(CoreService.class);
    hostService = createMock(HostService.class);
    expect(coreService.getAppId(anyString())).andReturn(APP_ID).anyTimes();
    expect(netcfgService.getConfig(LEAF_DEVICE_ID, SegmentRoutingDeviceConfig.class)).andReturn(getSrConfig(LEAF_DEVICE_ID, "/sr.json")).anyTimes();
    expect(netcfgService.getConfig(SPINE_DEVICE_ID, SegmentRoutingDeviceConfig.class)).andReturn(getSrConfig(SPINE_DEVICE_ID, "/sr-spine.json")).anyTimes();
    expect(hostService.getHostsByIp(COLLECTOR_IP)).andReturn(ImmutableSet.of(COLLECTOR_HOST)).anyTimes();
    replay(coreService, netcfgService, hostService);
    DriverHandler driverHandler = createMock(DriverHandler.class);
    expect(driverHandler.get(FlowRuleService.class)).andReturn(flowRuleService).anyTimes();
    expect(driverHandler.get(GroupService.class)).andReturn(groupService).anyTimes();
    expect(driverHandler.get(NetworkConfigService.class)).andReturn(netcfgService).anyTimes();
    expect(driverHandler.get(CoreService.class)).andReturn(coreService).anyTimes();
    expect(driverHandler.get(HostService.class)).andReturn(hostService).anyTimes();
    replay(driverHandler);
    driverData = createMock(DriverData.class);
    expect(driverData.deviceId()).andReturn(LEAF_DEVICE_ID).anyTimes();
    replay(driverData);
    intProgrammable = partialMockBuilder(FabricIntProgrammable.class).addMockedMethod("getFieldSize").createMock();
    expect(intProgrammable.getFieldSize(P4InfoConstants.FABRIC_EGRESS_INT_EGRESS_QUEUE_LATENCY_THRESHOLDS, P4InfoConstants.HDR_HOP_LATENCY_UPPER)).andReturn(16).anyTimes();
    expect(intProgrammable.getFieldSize(P4InfoConstants.FABRIC_EGRESS_INT_EGRESS_QUEUE_LATENCY_THRESHOLDS, P4InfoConstants.HDR_HOP_LATENCY_LOWER)).andReturn(16).anyTimes();
    replay(intProgrammable);
    TestUtils.setField(intProgrammable, "capabilities", capabilities);
    TestUtils.setField(intProgrammable, "handler", driverHandler);
    TestUtils.setField(intProgrammable, "data", driverData);
    TestUtils.setField(intProgrammable, "log", getLogger(""));
    testInit();
}
Also used : HostService(org.onosproject.net.host.HostService) SegmentRoutingDeviceConfig(org.onosproject.segmentrouting.config.SegmentRoutingDeviceConfig) DriverData(org.onosproject.net.driver.DriverData) NetworkConfigService(org.onosproject.net.config.NetworkConfigService) DriverHandler(org.onosproject.net.driver.DriverHandler) CoreService(org.onosproject.core.CoreService) FlowRuleService(org.onosproject.net.flow.FlowRuleService) GroupService(org.onosproject.net.group.GroupService) Before(org.junit.Before)

Example 23 with FlowRuleService

use of org.onosproject.net.flow.FlowRuleService in project fabric-tna by stratum.

the class FabricIntProgrammableTest method testSetupIntConfigWithQueueReportThreshold.

/**
 * Test "setUpIntConfig" function of IntProgrammable with a config that contains
 * queue report threshold config.
 */
@Test
public void testSetupIntConfigWithQueueReportThreshold() {
    final IntReportConfig intConfig = getIntReportConfig(APP_ID, "/int-report-queue-report-threshold.json");
    final List<FlowRule> expectRules = Lists.newArrayList();
    final Capture<FlowRuleOperations> capturedOpsForCollector = newCapture();
    final Capture<FlowRuleOperations> capturedOpsForSubnet = newCapture();
    final Capture<FlowRuleOperations> capturedOpsForQueueThresholds = newCapture();
    final Capture<FlowRule> capturedReportRules = newCapture(CaptureType.ALL);
    final FlowRuleOperations expectedOpsForCollector = FlowRuleOperations.builder().add(buildCollectorWatchlistRule(LEAF_DEVICE_ID)).build();
    // Queue threshold rules.
    // Queue 0 has some old rules which must be removed before adding the new ones.
    final List<FlowRule> queueThresholdRulesToRemove = queueReportFlows(LEAF_DEVICE_ID, 0, 0, (byte) 0);
    final FlowRuleOperations.Builder opsBuilder = FlowRuleOperations.builder();
    queueThresholdRulesToRemove.forEach(opsBuilder::remove);
    opsBuilder.newStage();
    // Add new entries for all queues.
    for (byte queueId = 0; queueId < MAX_QUEUES; queueId++) {
        // threshold config.
        if (queueId == 0) {
            queueReportFlows(LEAF_DEVICE_ID, 1888, 388, queueId).forEach(opsBuilder::add);
        } else if (queueId == 7) {
            // Queue 7 contains the "triggerNs" config only, the value of "resetNs"
            // will be half of "triggerNs".
            queueReportFlows(LEAF_DEVICE_ID, 500, 250, queueId).forEach(opsBuilder::add);
        } else {
            // The rest of the queues use the default queue latency threshold.
            queueReportFlows(LEAF_DEVICE_ID, DEFAULT_QUEUE_REPORT_TRIGGER_LATENCY_THRESHOLD, DEFAULT_QUEUE_REPORT_RESET_LATENCY_THRESHOLD, queueId).forEach(opsBuilder::add);
        }
    }
    final FlowRuleOperations expectedOpsForQueueThresholds = opsBuilder.build();
    expectRules.add(buildReportTableRule(LEAF_DEVICE_ID, false, BMD_TYPE_INT_INGRESS_DROP, INT_REPORT_TYPE_DROP, MIRROR_TYPE_INVALID));
    expectRules.add(buildReportTableRule(LEAF_DEVICE_ID, false, BMD_TYPE_EGRESS_MIRROR, INT_REPORT_TYPE_DROP, MIRROR_TYPE_INT_REPORT));
    expectRules.add(buildReportTableRule(LEAF_DEVICE_ID, false, BMD_TYPE_EGRESS_MIRROR, INT_REPORT_TYPE_FLOW, MIRROR_TYPE_INT_REPORT));
    expectRules.add(buildReportTableRule(LEAF_DEVICE_ID, false, BMD_TYPE_DEFLECTED, INT_REPORT_TYPE_DROP, MIRROR_TYPE_INVALID));
    expectRules.add(buildReportTableRule(LEAF_DEVICE_ID, false, BMD_TYPE_EGRESS_MIRROR, INT_REPORT_TYPE_QUEUE, MIRROR_TYPE_INT_REPORT));
    expectRules.add(buildReportTableRule(LEAF_DEVICE_ID, false, BMD_TYPE_EGRESS_MIRROR, (short) (INT_REPORT_TYPE_QUEUE | INT_REPORT_TYPE_FLOW), MIRROR_TYPE_INT_REPORT));
    expectRules.add(buildFilterConfigFlow(LEAF_DEVICE_ID));
    List<Capture<FlowRule>> captures = Lists.newArrayList();
    for (int i = 0; i < expectRules.size(); i++) {
        Capture<FlowRule> flowRuleCapture = newCapture();
        flowRuleService.applyFlowRules(capture(flowRuleCapture));
        captures.add(flowRuleCapture);
    }
    // Expected steps of method calls, captures, and results.
    reset(flowRuleService);
    final List<FlowEntry> existingFlowEntries = queueThresholdRulesToRemove.stream().map(f -> buildFlowEntry(f)).collect(Collectors.toList());
    expect(flowRuleService.getFlowEntriesById(APP_ID)).andReturn(existingFlowEntries).times(3);
    flowRuleService.apply(capture(capturedOpsForCollector));
    flowRuleService.apply(capture(capturedOpsForSubnet));
    flowRuleService.apply(capture(capturedOpsForQueueThresholds));
    flowRuleService.applyFlowRules(capture(capturedReportRules));
    expectLastCall().times(expectRules.size());
    replay(flowRuleService);
    // Verify values.
    assertTrue(intProgrammable.setUpIntConfig(intConfig));
    assertFlowRuleOperationsEquals(expectedOpsForCollector, capturedOpsForCollector.getValue());
    assertFlowRuleOperationsEquals(EMPTY_FLOW_RULE_OPS, capturedOpsForSubnet.getValue());
    assertFlowRuleOperationsEquals(expectedOpsForQueueThresholds, capturedOpsForQueueThresholds.getValue());
    for (int i = 0; i < expectRules.size(); i++) {
        FlowRule expectRule = expectRules.get(i);
        FlowRule actualRule = capturedReportRules.getValues().get(i);
        assertTrue(expectRule.exactMatch(actualRule));
    }
    verify(flowRuleService);
}
Also used : NetworkConfigService(org.onosproject.net.config.NetworkConfigService) Arrays(java.util.Arrays) HostLocation(org.onosproject.net.HostLocation) EasyMock.capture(org.easymock.EasyMock.capture) DefaultFlowRule(org.onosproject.net.flow.DefaultFlowRule) TestApplicationId(org.onosproject.TestApplicationId) CoreService(org.onosproject.core.CoreService) PortNumber(org.onosproject.net.PortNumber) FlowEntry(org.onosproject.net.flow.FlowEntry) PiActionParam(org.onosproject.net.pi.runtime.PiActionParam) IntReportConfig(org.stratumproject.fabric.tna.inbandtelemetry.IntReportConfig) DefaultTrafficTreatment(org.onosproject.net.flow.DefaultTrafficTreatment) FlowRuleService(org.onosproject.net.flow.FlowRuleService) EasyMock.reset(org.easymock.EasyMock.reset) PiCriterion(org.onosproject.net.flow.criteria.PiCriterion) After(org.junit.After) Map(java.util.Map) ApplicationId(org.onosproject.core.ApplicationId) Parameterized(org.junit.runners.Parameterized) TestUtils.getIntReportConfig(org.stratumproject.fabric.tna.utils.TestUtils.getIntReportConfig) V1MODEL_RECIRC_PORT(org.stratumproject.fabric.tna.Constants.V1MODEL_RECIRC_PORT) ImmutableSet(com.google.common.collect.ImmutableSet) ImmutableMap(com.google.common.collect.ImmutableMap) EasyMock.newCapture(org.easymock.EasyMock.newCapture) FabricUtils.doCareRangeMatch(org.stratumproject.fabric.tna.behaviour.FabricUtils.doCareRangeMatch) Collection(java.util.Collection) Range(com.google.common.collect.Range) Set(java.util.Set) Constants(org.stratumproject.fabric.tna.Constants) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) TestUtils.getSrConfig(org.stratumproject.fabric.tna.utils.TestUtils.getSrConfig) EasyMock.partialMockBuilder(org.easymock.EasyMock.partialMockBuilder) List(java.util.List) Assert.assertFalse(org.junit.Assert.assertFalse) FlowRule(org.onosproject.net.flow.FlowRule) GroupBuckets(org.onosproject.net.group.GroupBuckets) DeviceId(org.onosproject.net.DeviceId) DefaultGroupDescription(org.onosproject.net.group.DefaultGroupDescription) GroupDescription(org.onosproject.net.group.GroupDescription) IpPrefix(org.onlab.packet.IpPrefix) Host(org.onosproject.net.Host) RunWith(org.junit.runner.RunWith) ImmutableByteSequence(org.onlab.util.ImmutableByteSequence) SegmentRoutingDeviceConfig(org.onosproject.segmentrouting.config.SegmentRoutingDeviceConfig) GroupBucket(org.onosproject.net.group.GroupBucket) HostService(org.onosproject.net.host.HostService) DefaultHost(org.onosproject.net.DefaultHost) DriverData(org.onosproject.net.driver.DriverData) Lists(com.google.common.collect.Lists) TrafficSelector(org.onosproject.net.flow.TrafficSelector) DefaultGroupBucket.createCloneGroupBucket(org.onosproject.net.group.DefaultGroupBucket.createCloneGroupBucket) ImmutableList(com.google.common.collect.ImmutableList) DefaultGroupKey(org.onosproject.net.group.DefaultGroupKey) TestUtils(org.onlab.junit.TestUtils) EasyMock.replay(org.easymock.EasyMock.replay) EasyMock.createMock(org.easymock.EasyMock.createMock) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) FlowRuleOperation(org.onosproject.net.flow.FlowRuleOperation) Criterion(org.onosproject.net.flow.criteria.Criterion) Before(org.junit.Before) IpAddress(org.onlab.packet.IpAddress) TpPort(org.onlab.packet.TpPort) TrafficTreatment(org.onosproject.net.flow.TrafficTreatment) EasyMock.anyObject(org.easymock.EasyMock.anyObject) Capture(org.easymock.Capture) DefaultFlowEntry(org.onosproject.net.flow.DefaultFlowEntry) FlowRuleOperations(org.onosproject.net.flow.FlowRuleOperations) EasyMock.anyString(org.easymock.EasyMock.anyString) GroupService(org.onosproject.net.group.GroupService) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) V1MODEL_INT_REPORT_MIRROR_ID(org.stratumproject.fabric.tna.Constants.V1MODEL_INT_REPORT_MIRROR_ID) EasyMock.expect(org.easymock.EasyMock.expect) TimeUnit(java.util.concurrent.TimeUnit) EasyMock.expectLastCall(org.easymock.EasyMock.expectLastCall) PiAction(org.onosproject.net.pi.runtime.PiAction) IPv4(org.onlab.packet.IPv4) CaptureType(org.easymock.CaptureType) DriverHandler(org.onosproject.net.driver.DriverHandler) HexString(org.onlab.util.HexString) KRYO(org.stratumproject.fabric.tna.behaviour.FabricUtils.KRYO) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) MacAddress(org.onlab.packet.MacAddress) EasyMock.verify(org.easymock.EasyMock.verify) Collections(java.util.Collections) PiActionId(org.onosproject.net.pi.model.PiActionId) Assert.assertEquals(org.junit.Assert.assertEquals) FlowRuleOperations(org.onosproject.net.flow.FlowRuleOperations) IntReportConfig(org.stratumproject.fabric.tna.inbandtelemetry.IntReportConfig) TestUtils.getIntReportConfig(org.stratumproject.fabric.tna.utils.TestUtils.getIntReportConfig) EasyMock.newCapture(org.easymock.EasyMock.newCapture) Capture(org.easymock.Capture) DefaultFlowRule(org.onosproject.net.flow.DefaultFlowRule) FlowRule(org.onosproject.net.flow.FlowRule) FlowEntry(org.onosproject.net.flow.FlowEntry) DefaultFlowEntry(org.onosproject.net.flow.DefaultFlowEntry) Test(org.junit.Test)

Example 24 with FlowRuleService

use of org.onosproject.net.flow.FlowRuleService in project fabric-tna by stratum.

the class FabricPipelinerTest method setup.

@Before
public void setup() {
    // Common setup between TNA and bmv2
    FabricCapabilities capabilities = createMock(FabricCapabilities.class);
    expect(capabilities.cpuPort()).andReturn(Optional.of(PORT_CPU)).anyTimes();
    expect(capabilities.isArchV1model()).andReturn(this.isArchV1model).anyTimes();
    expect(capabilities.isArchTna()).andReturn(!this.isArchV1model).anyTimes();
    replay(capabilities);
    // Services mock
    flowRuleService = createMock(FlowRuleService.class);
    groupService = createMock(GroupService.class);
    pipeliner = new FabricPipeliner(capabilities);
    pipeliner.flowRuleService = flowRuleService;
    pipeliner.groupService = groupService;
    pipeliner.appId = APP_ID;
    pipeliner.deviceId = DEVICE_ID;
}
Also used : FabricCapabilities(org.stratumproject.fabric.tna.behaviour.FabricCapabilities) FlowRuleService(org.onosproject.net.flow.FlowRuleService) GroupService(org.onosproject.net.group.GroupService) Before(org.junit.Before)

Example 25 with FlowRuleService

use of org.onosproject.net.flow.FlowRuleService in project fabric-tna by stratum.

the class FabricUpfProgrammable method setupBehaviour.

@Override
protected boolean setupBehaviour(String opName) {
    /* Always setup internally the behavior to refresh
           the internal references: client, controller, etc*/
    if (!super.setupBehaviour(opName)) {
        return false;
    }
    // Already initialized.
    if (appId != null) {
        return true;
    }
    if (!computeHardwareResourceSizes()) {
        // error message will be printed by computeHardwareResourceSizes()
        return false;
    }
    flowRuleService = handler().get(FlowRuleService.class);
    meterService = handler().get(MeterService.class);
    packetService = handler().get(PacketService.class);
    slicingService = handler().get(SlicingService.class);
    upfTranslator = new FabricUpfTranslator();
    final CoreService coreService = handler().get(CoreService.class);
    appId = coreService.getAppId(Constants.APP_NAME_UPF);
    if (appId == null) {
        log.warn("Application ID is null. Cannot initialize behaviour.");
        return false;
    }
    var capabilities = new FabricCapabilities(pipeconf);
    if (!capabilities.supportUpf()) {
        log.warn("Pipeconf {} on {} does not support UPF capabilities, " + "cannot perform {}", pipeconf.id(), deviceId, opName);
        return false;
    }
    return true;
}
Also used : PacketService(org.onosproject.net.packet.PacketService) CoreService(org.onosproject.core.CoreService) FabricCapabilities(org.stratumproject.fabric.tna.behaviour.FabricCapabilities) FlowRuleService(org.onosproject.net.flow.FlowRuleService) MeterService(org.onosproject.net.meter.MeterService) SlicingService(org.stratumproject.fabric.tna.slicing.api.SlicingService)

Aggregations

FlowRuleService (org.onosproject.net.flow.FlowRuleService)51 FlowEntry (org.onosproject.net.flow.FlowEntry)23 CoreService (org.onosproject.core.CoreService)18 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)16 DeviceService (org.onosproject.net.device.DeviceService)16 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)14 Produces (javax.ws.rs.Produces)14 ApplicationId (org.onosproject.core.ApplicationId)13 Device (org.onosproject.net.Device)13 Path (javax.ws.rs.Path)12 FlowRule (org.onosproject.net.flow.FlowRule)12 GET (javax.ws.rs.GET)11 TrafficTreatment (org.onosproject.net.flow.TrafficTreatment)11 DefaultTrafficTreatment (org.onosproject.net.flow.DefaultTrafficTreatment)10 List (java.util.List)9 TrafficSelector (org.onosproject.net.flow.TrafficSelector)9 DeviceId (org.onosproject.net.DeviceId)8 DefaultFlowRule (org.onosproject.net.flow.DefaultFlowRule)7 DefaultTrafficSelector (org.onosproject.net.flow.DefaultTrafficSelector)7 IOException (java.io.IOException)6