Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DO-NOT-MERGE] Promote slice configuration to its own netcfg subject #459

Open
wants to merge 54 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
cc1ac61
Add SlicingProviderService interface
ccascone Jan 12, 2022
b3a48b2
Remove slice/tc initialization from FabricUpfProgrammable
ccascone Jan 12, 2022
e159959
Remove slice/tc initialization from FabricUpfProgrammable
ccascone Jan 12, 2022
71482ae
Remove REST API for adding/removing slice/tcs
ccascone Jan 12, 2022
22385a1
Remove unused CLI commands
ccascone Jan 12, 2022
a13fa6e
Revisit TrafficClass and remove hardcoded initialization
ccascone Jan 12, 2022
c45c3e1
Introduce TrafficClassConfig class
ccascone Jan 13, 2022
7bbf074
Remove queue allocation logic
ccascone Jan 13, 2022
4060841
Comments and renaming on SlicingManager
ccascone Jan 13, 2022
e0a8ead
Fix meter color int value
ccascone Jan 13, 2022
2adadd3
Less ambiguous handling of BE
ccascone Jan 13, 2022
025409e
Fix tests
ccascone Jan 13, 2022
b5a2d1d
Remove leftover QueueStoreValue
ccascone Jan 13, 2022
e3be92f
Javadoc
ccascone Jan 13, 2022
0952439
Wordsmithing
ccascone Jan 13, 2022
50639d7
Merge branch 'main' into qos-refactoring-pr1
ccascone Jan 13, 2022
9bb7335
Improvements to TrafficClassConfig
ccascone Jan 14, 2022
1f0bc37
Rename config class to description to disambiguate from netcfg
ccascone Jan 14, 2022
24a62d8
First stab at config class
ccascone Jan 14, 2022
804cc1a
First stab at tests for SlicingTests
ccascone Jan 14, 2022
0bfa478
Forgot to check in the test JSON
ccascone Jan 14, 2022
9f8d376
Consistently call it tcDescription instead of tcConfig
ccascone Jan 18, 2022
2aaad4d
Move constants to root package
ccascone Jan 18, 2022
a7ff6aa
Centralize app name constants in one place
ccascone Jan 18, 2022
20e7c9d
Progress on netcfg slicing provider
ccascone Jan 18, 2022
2399212
Working config add/remove
ccascone Jan 19, 2022
0cdd7dd
Fix copyright
ccascone Jan 19, 2022
dc90878
Read initial config
ccascone Jan 19, 2022
71cd390
wordsmithing
ccascone Jan 19, 2022
e661f6e
Dyanmic config of system tc
ccascone Jan 20, 2022
2072395
Remove ability to configure best effort queue ID
ccascone Jan 20, 2022
cc40213
Merge branch 'qos-refactoring-pr2' into qos-refactoring-pr3
ccascone Jan 20, 2022
ad42b84
Clean up
ccascone Jan 20, 2022
f9869bd
Use default for mobile slice
ccascone Jan 20, 2022
b7843c4
clean up rest API docs
ccascone Jan 20, 2022
c436d0d
address review comments
ccascone Jan 20, 2022
dd216f4
Fix test and checkstyles
ccascone Jan 20, 2022
7397b13
Merge branch 'qos-refactoring-pr1' into qos-refactoring-pr2
ccascone Jan 20, 2022
5b0e490
Merge branch 'qos-refactoring-pr2' into qos-refactoring-pr3
ccascone Jan 20, 2022
e7de53e
Doubt
ccascone Jan 21, 2022
e156a87
Move distributed store destroy to preDeactivate hook
ccascone Jan 21, 2022
52e0d25
Update default tc javadoc
ccascone Jan 21, 2022
bf31d8d
Merge branch 'qos-refactoring-pr1' into qos-refactoring-pr2
ccascone Jan 21, 2022
42fc8ec
javadoc
ccascone Jan 21, 2022
00f6468
review comments
ccascone Jan 21, 2022
c5c58e0
tests
ccascone Jan 21, 2022
05abd13
Merge branch 'qos-refactoring-pr2' into qos-refactoring-pr3
ccascone Jan 21, 2022
3309d3d
Fix tests
ccascone Jan 21, 2022
fc3c9e0
Merge branch 'qos-refactoring-pr1' into qos-refactoring-pr2
ccascone Jan 21, 2022
e0a0c90
Merge branch 'qos-refactoring-pr2' into qos-refactoring-pr3
ccascone Jan 21, 2022
2ab9473
Refactor config to handle slices as individual subjects
ccascone Jan 21, 2022
f7ecc2d
Update tests
ccascone Jan 22, 2022
edaaa4d
Failing because of kryo
ccascone Jan 22, 2022
d36838a
Update javadoc example
ccascone Jan 23, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
// Copyright 2020-present Open Networking Foundation
// Copyright 2021-present Open Networking Foundation
// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0

// Do not modify this file manually, use `make constants` to generate this file.

package org.stratumproject.fabric.tna.behaviour;
package org.stratumproject.fabric.tna;

import com.google.common.collect.ImmutableMap;

Expand All @@ -19,6 +17,13 @@
*/
public final class Constants {

// TODO: use consistent naming, and potentially just one app name
// After all, the actual app in the ONOS sense is just one.
public static final String APP_NAME = "org.stratumproject.fabric-tna";
public static final String APP_NAME_UPF = "org.stratumproject.fabric-tna.upf";
public static final String APP_NAME_SLICING = "org.stratumproject.fabric.tna.slicing";
public static final String APP_NAME_INT = "org.stratumproject.fabric.tna.inbandtelemetry";

public static final byte[] ONE = new byte[]{1};
public static final byte[] ZERO = new byte[]{0};

Expand Down Expand Up @@ -51,20 +56,6 @@ public final class Constants {
public static final int DEFAULT_PW_TRANSPORT_VLAN = 4090;
public static final int PKT_IN_MIRROR_SESSION_ID = 0x1FF;

// Static Queue IDs (should match those in gen-stratum-qos-config.py)
public static final int QUEUE_ID_BEST_EFFORT = 0;
public static final int QUEUE_ID_SYSTEM = 1;
public static final int QUEUE_ID_CONTROL = 2;
public static final int QUEUE_ID_FIRST_REAL_TIME = 3; // This will always be 3
// FIXME: ELASTIC_ID can change and it should be configurable at runtime (i.e., via netcfg?)
public static final int QUEUE_ID_FIRST_ELASTIC = 6; // TODO: this can change

// Traffic Classes
public static final int TC_BEST_EFFORT = 0; // Also the default TC
public static final int TC_CONTROL = 1;
public static final int TC_REAL_TIME = 2;
public static final int TC_ELASTIC = 3;

public static final int DEFAULT_SLICE_ID = 0;

// Tofino Meter Colors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,9 @@
* Component responsible for registering the fabric-tna pipeconf
* at app activation.
*/
@Component(immediate = true)
@Component(immediate = true, service = PipeconfLoader.class)
public class PipeconfLoader {

public static final String APP_NAME = "org.stratumproject.fabric-tna";
public static final String APP_NAME_UPF = "org.stratumproject.fabric-tna.upf";

private static Logger log = getLogger(PipeconfLoader.class);

private static final String BASE_PIPECONF_ID = "org.stratumproject";
Expand Down Expand Up @@ -77,8 +74,8 @@ public class PipeconfLoader {

@Activate
public void activate() {
coreService.registerApplication(APP_NAME);
coreService.registerApplication(APP_NAME_UPF);
coreService.registerApplication(Constants.APP_NAME);
coreService.registerApplication(Constants.APP_NAME_UPF);
// Registers all pipeconf at component activation.
pipeconfs = buildAllPipeconfs();
pipeconfs.forEach(pipeconfService::register);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import org.onosproject.net.pi.model.PiPipeconf;
import org.slf4j.Logger;
import org.stratumproject.fabric.tna.slicing.api.Color;
import org.stratumproject.fabric.tna.slicing.api.MeterColor;

import java.io.BufferedReader;
import java.io.IOException;
Expand All @@ -16,9 +16,9 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.CPU_PORT_TXT;
import static org.slf4j.LoggerFactory.getLogger;
import static org.stratumproject.fabric.tna.behaviour.Constants.BMV2_COLOR_RED;
import static org.stratumproject.fabric.tna.behaviour.Constants.TNA;
import static org.stratumproject.fabric.tna.behaviour.Constants.V1MODEL;
import static org.stratumproject.fabric.tna.Constants.BMV2_COLOR_RED;
import static org.stratumproject.fabric.tna.Constants.TNA;
import static org.stratumproject.fabric.tna.Constants.V1MODEL;
import static org.stratumproject.fabric.tna.behaviour.P4InfoConstants.FABRIC_INGRESS_SPGW_UPLINK_SESSIONS;

/**
Expand Down Expand Up @@ -70,11 +70,11 @@ public boolean isArchTna() {
.orElse(false);
}

public int getMeterColor(Color color) {
if (isArchV1model() && color == Color.RED) {
public int getMeterColor(MeterColor color) {
if (isArchV1model() && color == MeterColor.RED) {
return BMV2_COLOR_RED;
} else {
return color.ordinal();
return color.toInt();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
import org.onosproject.net.pi.runtime.PiAction;
import org.onosproject.net.pi.runtime.PiActionParam;
import org.onosproject.segmentrouting.config.SegmentRoutingDeviceConfig;
import org.stratumproject.fabric.tna.PipeconfLoader;
import org.stratumproject.fabric.tna.Constants;
import org.stratumproject.fabric.tna.inbandtelemetry.IntProgrammable;
import org.stratumproject.fabric.tna.inbandtelemetry.IntReportConfig;

Expand All @@ -74,8 +74,8 @@
import static org.stratumproject.fabric.tna.behaviour.FabricUtils.KRYO;
import static org.stratumproject.fabric.tna.behaviour.FabricUtils.doCareRangeMatch;

import static org.stratumproject.fabric.tna.behaviour.Constants.V1MODEL_INT_REPORT_MIRROR_ID;
import static org.stratumproject.fabric.tna.behaviour.Constants.V1MODEL_RECIRC_PORT;
import static org.stratumproject.fabric.tna.Constants.V1MODEL_INT_REPORT_MIRROR_ID;
import static org.stratumproject.fabric.tna.Constants.V1MODEL_RECIRC_PORT;

/**
* Implementation of INT programmable behavior for fabric.p4.
Expand Down Expand Up @@ -157,7 +157,7 @@ private boolean setupBehaviour() {
cfgService = handler().get(NetworkConfigService.class);
hostService = handler().get(HostService.class);
final CoreService coreService = handler().get(CoreService.class);
appId = coreService.getAppId(PipeconfLoader.APP_NAME);
appId = coreService.getAppId(Constants.APP_NAME);
if (appId == null) {
log.warn("Application ID is null. Cannot initialize behaviour.");
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.onosproject.net.pi.runtime.PiAction;
import org.onosproject.net.pi.runtime.PiPacketMetadata;
import org.onosproject.net.pi.runtime.PiPacketOperation;
import org.stratumproject.fabric.tna.slicing.api.SlicingService;

import java.nio.ByteBuffer;
import java.util.Collection;
Expand All @@ -42,9 +43,8 @@
import static org.onosproject.net.PortNumber.TABLE;
import static org.onosproject.net.flow.instructions.Instruction.Type.OUTPUT;
import static org.onosproject.net.pi.model.PiPacketOperationType.PACKET_OUT;
import static org.stratumproject.fabric.tna.behaviour.Constants.ONE;
import static org.stratumproject.fabric.tna.behaviour.Constants.QUEUE_ID_SYSTEM;
import static org.stratumproject.fabric.tna.behaviour.Constants.ZERO;
import static org.stratumproject.fabric.tna.Constants.ONE;
import static org.stratumproject.fabric.tna.Constants.ZERO;
import static org.stratumproject.fabric.tna.behaviour.FabricTreatmentInterpreter.mapAclTreatment;
import static org.stratumproject.fabric.tna.behaviour.FabricTreatmentInterpreter.mapEgressNextTreatment;
import static org.stratumproject.fabric.tna.behaviour.FabricTreatmentInterpreter.mapForwardingTreatment;
Expand Down Expand Up @@ -118,6 +118,8 @@ public class FabricInterpreter extends AbstractFabricHandlerBehavior
.put(P4InfoConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4, NOP)
.build();

protected SlicingService slicingService;

private FabricTreatmentInterpreter treatmentInterpreter;

/**
Expand Down Expand Up @@ -146,6 +148,7 @@ private void instantiateTreatmentInterpreter() {
public void setHandler(DriverHandler handler) {
super.setHandler(handler);
instantiateTreatmentInterpreter();
slicingService = handler().get(SlicingService.class);
}

@Override
Expand Down Expand Up @@ -194,6 +197,7 @@ private Collection<PiPacketMetadata> createPacketMetadata(
long portNumber, boolean doForwarding)
throws PiInterpreterException {
try {
int queueId = slicingService.getSystemTrafficClass().queueId().id();
ImmutableList.Builder<PiPacketMetadata> builder = ImmutableList.builder();
builder.add(PiPacketMetadata.builder()
.withId(P4InfoConstants.PAD0)
Expand All @@ -212,7 +216,7 @@ private Collection<PiPacketMetadata> createPacketMetadata(
.build());
builder.add(PiPacketMetadata.builder()
.withId(P4InfoConstants.QUEUE_ID)
.withValue(copyFrom(QUEUE_ID_SYSTEM)
.withValue(copyFrom(queueId)
.fit(P4InfoConstants.QUEUE_ID_BITWIDTH))
.build());
builder.add(PiPacketMetadata.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@
import static org.onosproject.segmentrouting.metadata.SRObjectiveMetadata.INFRA_PORT;
import static org.onosproject.segmentrouting.metadata.SRObjectiveMetadata.PAIR_PORT;
import static org.onosproject.segmentrouting.metadata.SRObjectiveMetadata.isSrMetadataSet;
import static org.stratumproject.fabric.tna.behaviour.Constants.MAX_SLICE_ID;
import static org.stratumproject.fabric.tna.behaviour.Constants.MAX_TC;
import static org.stratumproject.fabric.tna.behaviour.Constants.METADATA_TO_PORT_TYPE;
import static org.stratumproject.fabric.tna.behaviour.Constants.TC_BITWIDTH;
import static org.stratumproject.fabric.tna.Constants.MAX_SLICE_ID;
import static org.stratumproject.fabric.tna.Constants.MAX_TC;
import static org.stratumproject.fabric.tna.Constants.METADATA_TO_PORT_TYPE;
import static org.stratumproject.fabric.tna.Constants.TC_BITWIDTH;

/**
* Utility class with methods common to fabric-tna pipeconf operations.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
import org.onosproject.net.pi.runtime.PiAction;
import org.onosproject.net.pi.runtime.PiActionParam;
import org.slf4j.Logger;
import org.stratumproject.fabric.tna.PipeconfLoader;
import org.stratumproject.fabric.tna.Constants;
import org.stratumproject.fabric.tna.behaviour.AbstractFabricHandlerBehavior;
import org.stratumproject.fabric.tna.behaviour.FabricCapabilities;
import org.stratumproject.fabric.tna.behaviour.P4InfoConstants;
Expand All @@ -64,15 +64,15 @@

import static java.lang.String.format;
import static org.slf4j.LoggerFactory.getLogger;
import static org.stratumproject.fabric.tna.behaviour.Constants.DEFAULT_VLAN;
import static org.stratumproject.fabric.tna.behaviour.Constants.FWD_IPV4_ROUTING;
import static org.stratumproject.fabric.tna.behaviour.Constants.FWD_MPLS;
import static org.stratumproject.fabric.tna.behaviour.Constants.ONE;
import static org.stratumproject.fabric.tna.behaviour.Constants.PORT_TYPE_INTERNAL;
import static org.stratumproject.fabric.tna.behaviour.Constants.RECIRC_PORTS;
import static org.stratumproject.fabric.tna.behaviour.Constants.V1MODEL_RECIRC_PORT;
import static org.stratumproject.fabric.tna.behaviour.Constants.ZERO;
import static org.stratumproject.fabric.tna.behaviour.Constants.PKT_IN_MIRROR_SESSION_ID;
import static org.stratumproject.fabric.tna.Constants.DEFAULT_VLAN;
import static org.stratumproject.fabric.tna.Constants.FWD_IPV4_ROUTING;
import static org.stratumproject.fabric.tna.Constants.FWD_MPLS;
import static org.stratumproject.fabric.tna.Constants.ONE;
import static org.stratumproject.fabric.tna.Constants.PORT_TYPE_INTERNAL;
import static org.stratumproject.fabric.tna.Constants.RECIRC_PORTS;
import static org.stratumproject.fabric.tna.Constants.V1MODEL_RECIRC_PORT;
import static org.stratumproject.fabric.tna.Constants.ZERO;
import static org.stratumproject.fabric.tna.Constants.PKT_IN_MIRROR_SESSION_ID;
import static org.stratumproject.fabric.tna.behaviour.FabricUtils.KRYO;

import static org.stratumproject.fabric.tna.behaviour.FabricUtils.outputPort;
Expand Down Expand Up @@ -129,7 +129,7 @@ public void init(DeviceId deviceId, PipelinerContext context) {
this.forwardingTranslator = new ForwardingObjectiveTranslator(deviceId, capabilities);
this.nextTranslator = new NextObjectiveTranslator(deviceId, capabilities);
this.coreService = context.directory().get(CoreService.class);
this.appId = coreService.getAppId(PipeconfLoader.APP_NAME);
this.appId = coreService.getAppId(Constants.APP_NAME);

initializePipeline();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,14 @@
import static org.onosproject.segmentrouting.metadata.SRObjectiveMetadata.INTERFACE_CONFIG_UPDATE;
import static org.onosproject.segmentrouting.metadata.SRObjectiveMetadata.isSrMetadataSet;
import static org.onosproject.segmentrouting.metadata.SRObjectiveMetadata.isValidSrMetadata;
import static org.stratumproject.fabric.tna.behaviour.Constants.ETH_TYPE_EXACT_MASK;
import static org.stratumproject.fabric.tna.behaviour.Constants.FWD_IPV4_ROUTING;
import static org.stratumproject.fabric.tna.behaviour.Constants.FWD_IPV6_ROUTING;
import static org.stratumproject.fabric.tna.behaviour.Constants.FWD_MPLS;
import static org.stratumproject.fabric.tna.behaviour.Constants.ONE;
import static org.stratumproject.fabric.tna.behaviour.Constants.PORT_TYPE_EDGE;
import static org.stratumproject.fabric.tna.behaviour.Constants.PORT_TYPE_INFRA;
import static org.stratumproject.fabric.tna.behaviour.Constants.ZERO;
import static org.stratumproject.fabric.tna.Constants.ETH_TYPE_EXACT_MASK;
import static org.stratumproject.fabric.tna.Constants.FWD_IPV4_ROUTING;
import static org.stratumproject.fabric.tna.Constants.FWD_IPV6_ROUTING;
import static org.stratumproject.fabric.tna.Constants.FWD_MPLS;
import static org.stratumproject.fabric.tna.Constants.ONE;
import static org.stratumproject.fabric.tna.Constants.PORT_TYPE_EDGE;
import static org.stratumproject.fabric.tna.Constants.PORT_TYPE_INFRA;
import static org.stratumproject.fabric.tna.Constants.ZERO;
import static org.stratumproject.fabric.tna.behaviour.FabricUtils.l2InstructionOrFail;
import static org.stratumproject.fabric.tna.behaviour.FabricUtils.criterion;
import static org.stratumproject.fabric.tna.behaviour.FabricUtils.l2Instruction;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@
import static org.onosproject.segmentrouting.metadata.SRObjectiveMetadata.PAIR_PORT;
import static org.onosproject.segmentrouting.metadata.SRObjectiveMetadata.isSrMetadataSet;
import static org.onosproject.segmentrouting.metadata.SRObjectiveMetadata.isValidSrMetadata;
import static org.stratumproject.fabric.tna.behaviour.Constants.PORT_TYPE_EDGE;
import static org.stratumproject.fabric.tna.behaviour.Constants.PORT_TYPE_INFRA;
import static org.stratumproject.fabric.tna.behaviour.Constants.PORT_TYPE_MASK;
import static org.stratumproject.fabric.tna.Constants.PORT_TYPE_EDGE;
import static org.stratumproject.fabric.tna.Constants.PORT_TYPE_INFRA;
import static org.stratumproject.fabric.tna.Constants.PORT_TYPE_MASK;
import static org.stratumproject.fabric.tna.behaviour.FabricUtils.criterionNotNull;
import static org.stratumproject.fabric.tna.behaviour.FabricUtils.outputPort;
import static org.stratumproject.fabric.tna.behaviour.FabricUtils.portType;
Expand Down
Loading