Merge branch 'master' into dev-karaf-4.2.1
Change-Id: I86b9d80581cd76a7c20e05201023090f9692d1ab
diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java
index 01885bf..dec6332 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java
@@ -15,29 +15,26 @@
*/
package org.onosproject.pipelines.fabric;
-import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.Sets;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
-import org.onlab.util.ImmutableByteSequence;
-import org.onlab.util.SharedExecutors;
+
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.inbandtelemetry.api.IntConfig;
import org.onosproject.inbandtelemetry.api.IntIntent;
import org.onosproject.inbandtelemetry.api.IntObjective;
import org.onosproject.inbandtelemetry.api.IntProgrammable;
-import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
-import org.onosproject.net.Port;
import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.config.NetworkConfigService;
import org.onosproject.net.driver.AbstractHandlerBehaviour;
import org.onosproject.net.flow.DefaultFlowRule;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.DefaultTrafficTreatment;
import org.onosproject.net.flow.FlowRule;
import org.onosproject.net.flow.FlowRuleService;
+import org.onosproject.net.flow.TableId;
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flow.TrafficTreatment;
import org.onosproject.net.flow.criteria.Criterion;
@@ -45,32 +42,32 @@
import org.onosproject.net.flow.criteria.PiCriterion;
import org.onosproject.net.flow.criteria.TcpPortCriterion;
import org.onosproject.net.flow.criteria.UdpPortCriterion;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.pi.model.PiActionId;
-import org.onosproject.net.pi.model.PiMatchFieldId;
import org.onosproject.net.pi.model.PiTableId;
import org.onosproject.net.pi.runtime.PiAction;
import org.onosproject.net.pi.runtime.PiActionParam;
+import org.onosproject.provider.general.device.api.GeneralProviderDeviceConfig;
import org.slf4j.Logger;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Set;
-import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+import static org.onlab.util.ImmutableByteSequence.copyFrom;
import static org.slf4j.LoggerFactory.getLogger;
+/**
+ * Implementation of INT programmable behavior for fabric.p4. Currently supports
+ * only SOURCE and TRANSIT functionalities.
+ */
public class IntProgrammableImpl extends AbstractHandlerBehaviour implements IntProgrammable {
+
+ private final Logger log = getLogger(getClass());
+
// TODO: change this value to the value of diameter of a network.
+ private static final int DEFAULT_PRIORITY = 10000;
private static final int MAXHOP = 64;
private static final int PORTMASK = 0xffff;
- private static final int IDLE_TIMEOUT = 100;
private static final int PKT_INSTANCE_TYPE_INGRESS_CLONE = 1;
- // Application name of the pipeline which adds this implementation to the pipeconf
- private static final String PIPELINE_APP_NAME = "org.onosproject.pipelines.fabric";
- private final Logger log = getLogger(getClass());
- private ApplicationId appId;
private static final Set<Criterion.Type> SUPPORTED_CRITERION = Sets.newHashSet(
Criterion.Type.IPV4_DST, Criterion.Type.IPV4_SRC,
@@ -78,247 +75,225 @@
Criterion.Type.TCP_SRC, Criterion.Type.TCP_DST,
Criterion.Type.IP_PROTO);
+ private static final Set<PiTableId> TABLES_TO_CLEANUP = Sets.newHashSet(
+ FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT,
+ FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE,
+ FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK,
+ FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE,
+ FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT
+ );
+
@Reference(cardinality = ReferenceCardinality.MANDATORY)
private FlowRuleService flowRuleService;
- @Reference(cardinality = ReferenceCardinality.MANDATORY)
- private DeviceService deviceService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY)
- private HostService hostService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY)
private CoreService coreService;
-
+ private NetworkConfigService cfgService;
private DeviceId deviceId;
- private static final int DEFAULT_PRIORITY = 10000;
- private static final ImmutableBiMap<Integer, PiActionId> INST_0003_ACTION_MAP =
- ImmutableBiMap.<Integer, PiActionId>builder()
- .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I0)
- .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I1)
- .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I2)
- .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I3)
- .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I4)
- .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I5)
- .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I6)
- .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I7)
- .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I8)
- .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I9)
- .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I10)
- .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I11)
- .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12)
- .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13)
- .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14)
- .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15)
- .build();
+ private ApplicationId appId;
- private static final ImmutableBiMap<Integer, PiActionId> INST_0407_ACTION_MAP =
- ImmutableBiMap.<Integer, PiActionId>builder()
- .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I0)
- .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I1)
- .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2)
- .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I3)
- .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I4)
- .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I5)
- .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6)
- .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I7)
- .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I8)
- .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I9)
- .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I10)
- .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I11)
- .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I12)
- .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I13)
- .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I14)
- .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I15)
- .build();
-
- @Override
- public void init() {
+ private boolean setupBehaviour() {
deviceId = this.data().deviceId();
flowRuleService = handler().get(FlowRuleService.class);
- deviceService = handler().get(DeviceService.class);
- hostService = handler().get(HostService.class);
coreService = handler().get(CoreService.class);
- appId = coreService.getAppId(PIPELINE_APP_NAME);
+ cfgService = handler().get(NetworkConfigService.class);
+ appId = coreService.getAppId(PipeconfLoader.PIPELINE_APP_NAME);
if (appId == null) {
- log.warn("Application ID is null. Cannot initialize INT-pipeline.");
- return;
+ log.warn("Application ID is null. Cannot initialize behaviour.");
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean init() {
+
+ if (!setupBehaviour()) {
+ return false;
}
- Set<PortNumber> hostPorts = deviceService.getPorts(deviceId).stream().filter(port ->
- hostService.getConnectedHosts(
- new ConnectPoint(deviceId, port.number())).size() > 0
- ).map(Port::number).collect(Collectors.toSet());
- List<FlowRule> flowRules = new ArrayList<>();
+ final GeneralProviderDeviceConfig cfg = cfgService.getConfig(
+ deviceId, GeneralProviderDeviceConfig.class);
+ if (cfg == null) {
+ log.warn("Missing GeneralProviderDevice config for {}", deviceId);
+ return false;
+ }
+ final String switchId = cfg.protocolsInfo().containsKey("int") ?
+ cfg.protocolsInfo().get("int").configValues().get("switchId")
+ : null;
+ if (switchId == null || switchId.isEmpty()) {
+ log.warn("Missing INT device config for {}", deviceId);
+ return false;
+ }
- // process_int_transit.tb_int_insert
- PiActionParam transitIdParam = new PiActionParam(
- FabricConstants.SWITCH_ID,
- ImmutableByteSequence.copyFrom(
- Integer.parseInt(deviceId.toString().substring(
- deviceId.toString().length() - 2))));
+ PiActionParam transitIdParam;
+ try {
+ transitIdParam = new PiActionParam(
+ FabricConstants.SWITCH_ID,
+ // FIXME set switch ID from netcfg
+ copyFrom(Integer.parseInt(switchId)));
+ } catch (NumberFormatException e) {
+ log.warn("Invalid INT switch ID for {}: {}", deviceId, switchId);
+ return false;
+ }
+
PiAction transitAction = PiAction.builder()
- .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_TRANSIT)
+ .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INIT_METADATA)
.withParameter(transitIdParam)
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.piTableAction(transitAction)
.build();
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchPi(PiCriterion.builder().matchExact(
+ FabricConstants.HDR_INT_HEADER_IS_VALID, (byte) 0x01)
+ .build())
+ .build();
FlowRule transitFlowRule = DefaultFlowRule.builder()
+ .withSelector(selector)
.withTreatment(treatment)
.fromApp(appId)
.withPriority(DEFAULT_PRIORITY)
.makePermanent()
.forDevice(deviceId)
- .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INSERT)
+ .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT)
.build();
- flowRules.add(transitFlowRule);
- for (PortNumber portNumber: hostPorts) {
- // process_set_source_sink.tb_set_source for each host-facing port
- PiCriterion ingressCriterion = PiCriterion.builder()
- .matchExact(FabricConstants.STANDARD_METADATA_INGRESS_PORT, portNumber.toLong())
- .build();
- TrafficSelector srcSelector = DefaultTrafficSelector.builder()
- .matchPi(ingressCriterion)
- .build();
- PiAction setSourceAct = PiAction.builder()
- .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SOURCE)
- .build();
- TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder()
- .piTableAction(setSourceAct)
- .build();
- FlowRule srcFlowRule = DefaultFlowRule.builder()
- .withSelector(srcSelector)
- .withTreatment(srcTreatment)
- .fromApp(appId)
- .withPriority(DEFAULT_PRIORITY)
- .makePermanent()
- .forDevice(deviceId)
- .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE)
- .build();
- flowRules.add(srcFlowRule);
+ flowRuleService.applyFlowRules(transitFlowRule);
+ return true;
+ }
- // process_set_source_sink.tb_set_sink
- PiCriterion egressCriterion = PiCriterion.builder()
- .matchExact(FabricConstants.STANDARD_METADATA_EGRESS_PORT, portNumber.toLong())
- .build();
- TrafficSelector sinkSelector = DefaultTrafficSelector.builder()
- .matchPi(egressCriterion)
- .build();
- PiAction setSinkAct = PiAction.builder()
- .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK)
- .build();
- TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder()
- .piTableAction(setSinkAct)
- .build();
- FlowRule sinkFlowRule = DefaultFlowRule.builder()
- .withSelector(sinkSelector)
- .withTreatment(sinkTreatment)
- .fromApp(appId)
- .withPriority(DEFAULT_PRIORITY)
- .makePermanent()
- .forDevice(deviceId)
- .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK)
- .build();
- flowRules.add(sinkFlowRule);
+ @Override
+ public boolean setSourcePort(PortNumber port) {
+
+ if (!setupBehaviour()) {
+ return false;
}
- flowRules.forEach(flowRule -> flowRuleService.applyFlowRules(flowRule));
- // Populate tb_int_inst_0003 table
- INST_0003_ACTION_MAP.forEach((matchValue, actionId) ->
- populateInstTableEntry(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0003,
- FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0003,
- matchValue,
- actionId,
- appId));
- // Populate tb_int_inst_0407 table
- INST_0407_ACTION_MAP.forEach((matchValue, actionId) ->
- populateInstTableEntry(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0407,
- FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0407,
- matchValue,
- actionId,
- appId));
- }
-
- @Override
- public CompletableFuture<Boolean> addIntObjective(IntObjective obj) {
- // TODO: support different types of watchlist other than flow watchlist
-
- return CompletableFuture.supplyAsync(
- () -> processIntObjective(obj, true),
- SharedExecutors.getPoolThreadExecutor()
- );
- }
-
- @Override
- public CompletableFuture<Boolean> removeIntObjective(IntObjective obj) {
- return CompletableFuture.supplyAsync(
- () -> processIntObjective(obj, false),
- SharedExecutors.getPoolThreadExecutor()
- );
- }
-
- @Override
- public CompletableFuture<Boolean> setupIntConfig(IntConfig config) {
- return CompletableFuture.supplyAsync(
- () -> setupIntReportInternal(config),
- SharedExecutors.getPoolThreadExecutor()
- );
- }
-
- private void populateInstTableEntry(PiTableId tableId, PiMatchFieldId matchFieldId,
- int matchValue, PiActionId actionId, ApplicationId appId) {
- PiCriterion instCriterion = PiCriterion.builder()
- .matchExact(matchFieldId, matchValue)
+ PiCriterion ingressCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.STANDARD_METADATA_INGRESS_PORT, port.toLong())
.build();
- TrafficSelector instSelector = DefaultTrafficSelector.builder()
- .matchPi(instCriterion)
+ TrafficSelector srcSelector = DefaultTrafficSelector.builder()
+ .matchPi(ingressCriterion)
.build();
- PiAction instAction = PiAction.builder()
- .withId(actionId)
+ PiAction setSourceAct = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SOURCE)
.build();
- TrafficTreatment instTreatment = DefaultTrafficTreatment.builder()
- .piTableAction(instAction)
+ TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder()
+ .piTableAction(setSourceAct)
.build();
-
- FlowRule instFlowRule = DefaultFlowRule.builder()
- .withSelector(instSelector)
- .withTreatment(instTreatment)
+ FlowRule srcFlowRule = DefaultFlowRule.builder()
+ .withSelector(srcSelector)
+ .withTreatment(srcTreatment)
+ .fromApp(appId)
.withPriority(DEFAULT_PRIORITY)
.makePermanent()
.forDevice(deviceId)
- .forTable(tableId)
- .fromApp(appId)
+ .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE)
.build();
+ flowRuleService.applyFlowRules(srcFlowRule);
+ return true;
+ }
- flowRuleService.applyFlowRules(instFlowRule);
+ @Override
+ public boolean setSinkPort(PortNumber port) {
+
+ if (!setupBehaviour()) {
+ return false;
+ }
+
+ PiCriterion egressCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.STANDARD_METADATA_EGRESS_PORT, port.toLong())
+ .build();
+ TrafficSelector sinkSelector = DefaultTrafficSelector.builder()
+ .matchPi(egressCriterion)
+ .build();
+ PiAction setSinkAct = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK)
+ .build();
+ TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder()
+ .piTableAction(setSinkAct)
+ .build();
+ FlowRule sinkFlowRule = DefaultFlowRule.builder()
+ .withSelector(sinkSelector)
+ .withTreatment(sinkTreatment)
+ .fromApp(appId)
+ .withPriority(DEFAULT_PRIORITY)
+ .makePermanent()
+ .forDevice(deviceId)
+ .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK)
+ .build();
+ flowRuleService.applyFlowRules(sinkFlowRule);
+ return true;
+ }
+
+ @Override
+ public boolean addIntObjective(IntObjective obj) {
+
+ if (!setupBehaviour()) {
+ return false;
+ }
+
+ return processIntObjective(obj, true);
+ }
+
+ @Override
+ public boolean removeIntObjective(IntObjective obj) {
+
+ if (!setupBehaviour()) {
+ return false;
+ }
+
+ return processIntObjective(obj, false);
+ }
+
+ @Override
+ public boolean setupIntConfig(IntConfig config) {
+
+ if (!setupBehaviour()) {
+ return false;
+ }
+
+ return setupIntReportInternal(config);
+ }
+
+ @Override
+ public void cleanup() {
+
+ if (!setupBehaviour()) {
+ return;
+ }
+
+ StreamSupport.stream(flowRuleService.getFlowEntries(
+ data().deviceId()).spliterator(), false)
+ .filter(f -> f.table().type() == TableId.Type.PIPELINE_INDEPENDENT)
+ .filter(f -> TABLES_TO_CLEANUP.contains((PiTableId) f.table()))
+ .forEach(flowRuleService::removeFlowRules);
+ }
+
+ @Override
+ public boolean supportsFunctionality(IntFunctionality functionality) {
+ // Sink not fully supported yet.
+ return functionality == IntFunctionality.SOURCE || functionality == IntFunctionality.TRANSIT;
}
private FlowRule buildWatchlistEntry(IntObjective obj) {
- coreService = handler().get(CoreService.class);
- appId = coreService.getAppId(PIPELINE_APP_NAME);
- if (appId == null) {
- log.warn("Application ID is null. Cannot initialize INT-pipeline.");
- return null;
- }
int instructionBitmap = buildInstructionBitmap(obj.metadataTypes());
PiActionParam maxHopParam = new PiActionParam(
FabricConstants.MAX_HOP,
- ImmutableByteSequence.copyFrom(MAXHOP));
+ copyFrom(MAXHOP));
PiActionParam instCntParam = new PiActionParam(
FabricConstants.INS_CNT,
- ImmutableByteSequence.copyFrom(Integer.bitCount(instructionBitmap)));
+ copyFrom(Integer.bitCount(instructionBitmap)));
PiActionParam inst0003Param = new PiActionParam(
FabricConstants.INS_MASK0003,
- ImmutableByteSequence.copyFrom((instructionBitmap >> 12) & 0xF));
+ copyFrom((instructionBitmap >> 12) & 0xF));
PiActionParam inst0407Param = new PiActionParam(
FabricConstants.INS_MASK0407,
- ImmutableByteSequence.copyFrom((instructionBitmap >> 8) & 0xF));
+ copyFrom((instructionBitmap >> 8) & 0xF));
PiAction intSourceAction = PiAction.builder()
- .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_SOURCE_INT_SOURCE_DSCP)
+ .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_INT_SOURCE_DSCP)
.withParameter(maxHopParam)
.withParameter(instCntParam)
.withParameter(inst0003Param)
@@ -372,13 +347,13 @@
}
return DefaultFlowRule.builder()
- .forDevice(this.data().deviceId())
+ .forDevice(deviceId)
.withSelector(sBuilder.build())
.withTreatment(instTreatment)
.withPriority(DEFAULT_PRIORITY)
- .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_SOURCE_TB_INT_SOURCE)
+ .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE)
.fromApp(appId)
- .withIdleTimeout(IDLE_TIMEOUT)
+ .makePermanent()
.build();
}
@@ -419,12 +394,12 @@
}
/**
- * Returns a subset of Criterion from given selector,
- * which is unsupported by this INT pipeline.
+ * Returns a subset of Criterion from given selector, which is unsupported
+ * by this INT pipeline.
*
* @param selector a traffic selector
- * @return a subset of Criterion from given selector, unsupported by this INT pipeline,
- * empty if all criteria are supported.
+ * @return a subset of Criterion from given selector, unsupported by this
+ * INT pipeline, empty if all criteria are supported.
*/
private Set<Criterion> unsupportedSelectors(TrafficSelector selector) {
return selector.criteria().stream()
@@ -433,11 +408,9 @@
}
private boolean processIntObjective(IntObjective obj, boolean install) {
- flowRuleService = handler().get(FlowRuleService.class);
- deviceId = this.data().deviceId();
if (install && !unsupportedSelectors(obj.selector()).isEmpty()) {
- log.warn("Device {} does not support criteria {} for INT.",
- deviceId, unsupportedSelectors(obj.selector()));
+ log.warn("Criteria {} not supported by {} for INT watchlist",
+ unsupportedSelectors(obj.selector()), deviceId);
return false;
}
@@ -459,44 +432,42 @@
}
private boolean setupIntReportInternal(IntConfig cfg) {
- flowRuleService = handler().get(FlowRuleService.class);
-
- FlowRule reportRule = buildReportEntry(cfg, PKT_INSTANCE_TYPE_INGRESS_CLONE);
- if (reportRule != null) {
- flowRuleService.applyFlowRules(reportRule);
- log.info("Report entry {} has been added to {}", reportRule, this.data().deviceId());
- return true;
- } else {
- log.warn("Failed to add report entry on {}", this.data().deviceId());
- return false;
- }
+ // Report not fully supported yet.
+ return true;
+ // FlowRule reportRule = buildReportEntry(cfg, PKT_INSTANCE_TYPE_INGRESS_CLONE);
+ // if (reportRule != null) {
+ // flowRuleService.applyFlowRules(reportRule);
+ // log.info("Report entry {} has been added to {}", reportRule, this.data().deviceId());
+ // return true;
+ // } else {
+ // log.warn("Failed to add report entry on {}", this.data().deviceId());
+ // return false;
+ // }
}
private FlowRule buildReportEntry(IntConfig cfg, int type) {
- coreService = handler().get(CoreService.class);
- appId = coreService.getAppId(PIPELINE_APP_NAME);
- if (appId == null) {
- log.warn("Application ID is null. Cannot build report entry.");
+
+ if (!setupBehaviour()) {
return null;
}
PiActionParam srcMacParam = new PiActionParam(
FabricConstants.SRC_MAC,
- ImmutableByteSequence.copyFrom(cfg.sinkMac().toBytes()));
+ copyFrom(cfg.sinkMac().toBytes()));
PiActionParam nextHopMacParam = new PiActionParam(
FabricConstants.MON_MAC,
- ImmutableByteSequence.copyFrom(cfg.collectorNextHopMac().toBytes()));
+ copyFrom(cfg.collectorNextHopMac().toBytes()));
PiActionParam srcIpParam = new PiActionParam(
FabricConstants.SRC_IP,
- ImmutableByteSequence.copyFrom(cfg.sinkIp().toOctets()));
+ copyFrom(cfg.sinkIp().toOctets()));
PiActionParam monIpParam = new PiActionParam(
FabricConstants.MON_IP,
- ImmutableByteSequence.copyFrom(cfg.collectorIp().toOctets()));
+ copyFrom(cfg.collectorIp().toOctets()));
PiActionParam monPortParam = new PiActionParam(
FabricConstants.MON_PORT,
- ImmutableByteSequence.copyFrom(cfg.collectorPort().toInt()));
+ copyFrom(cfg.collectorPort().toInt()));
PiAction reportAction = PiAction.builder()
- .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION)
+ .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION)
.withParameter(srcMacParam)
.withParameter(nextHopMacParam)
.withParameter(srcIpParam)
@@ -513,7 +484,7 @@
.withPriority(DEFAULT_PRIORITY)
.makePermanent()
.forDevice(this.data().deviceId())
- .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_REPORT_TB_GENERATE_REPORT)
+ .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT)
.build();
}