Add netcfg for INT
Use network config subsystem to handle such configs
Change-Id: I8ec14d31c30e3d1d8cd2c703d8db5535bb8b5cd4
diff --git a/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/SimpleIntManager.java b/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/SimpleIntManager.java
index 906efd8..48a7a24 100644
--- a/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/SimpleIntManager.java
+++ b/apps/inbandtelemetry/impl/src/main/java/org/onosproject/inbandtelemetry/impl/SimpleIntManager.java
@@ -21,6 +21,7 @@
import org.onlab.util.SharedScheduledExecutors;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
+import org.onosproject.net.behaviour.inbandtelemetry.IntReportConfig;
import org.onosproject.net.behaviour.inbandtelemetry.IntMetadataType;
import org.onosproject.net.behaviour.inbandtelemetry.IntDeviceConfig;
import org.onosproject.inbandtelemetry.api.IntIntent;
@@ -34,6 +35,12 @@
import org.onosproject.net.DeviceId;
import org.onosproject.net.MastershipRole;
import org.onosproject.net.PortNumber;
+import org.onosproject.net.config.ConfigFactory;
+import org.onosproject.net.config.NetworkConfigEvent;
+import org.onosproject.net.config.NetworkConfigListener;
+import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.basics.SubjectFactories;
import org.onosproject.net.device.DeviceEvent;
import org.onosproject.net.device.DeviceListener;
import org.onosproject.net.device.DeviceService;
@@ -108,6 +115,12 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY)
private HostService hostService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ private NetworkConfigService netcfgService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ private NetworkConfigRegistry netcfgRegistry;
+
private final Striped<Lock> deviceLocks = Striped.lock(10);
private final ConcurrentMap<DeviceId, ScheduledFuture<?>> scheduledDeviceTasks = Maps.newConcurrentMap();
@@ -127,6 +140,16 @@
private final InternalIntStartedListener intStartedListener = new InternalIntStartedListener();
private final InternalDeviceToConfigureListener devicesToConfigureListener =
new InternalDeviceToConfigureListener();
+ private final NetworkConfigListener appConfigListener = new IntAppConfigListener();
+
+ private final ConfigFactory<ApplicationId, IntReportConfig> intAppConfigFactory =
+ new ConfigFactory<>(SubjectFactories.APP_SUBJECT_FACTORY,
+ IntReportConfig.class, "report") {
+ @Override
+ public IntReportConfig createConfig() {
+ return new IntReportConfig();
+ }
+ };
@Activate
public void activate() {
@@ -185,6 +208,9 @@
hostService.addListener(hostListener);
deviceService.addListener(deviceListener);
+ netcfgRegistry.registerConfigFactory(intAppConfigFactory);
+ netcfgService.addListener(appConfigListener);
+
startInt();
log.info("Started", appId.id());
}
@@ -524,4 +550,35 @@
}
}
}
+
+ private class IntAppConfigListener implements NetworkConfigListener {
+
+ @Override
+ public void event(NetworkConfigEvent event) {
+ switch (event.type()) {
+ case CONFIG_ADDED:
+ case CONFIG_UPDATED:
+ event.config()
+ .map(config -> (IntReportConfig) config)
+ .ifPresent(config -> {
+ IntDeviceConfig intDeviceConfig = IntDeviceConfig.builder()
+ .withMinFlowHopLatencyChangeNs(config.minFlowHopLatencyChangeNs())
+ .withCollectorPort(config.collectorPort())
+ .withCollectorIp(config.collectorIp())
+ .enabled(true)
+ .build();
+ setConfig(intDeviceConfig);
+ });
+ break;
+ // TODO: Support removing INT config.
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public boolean isRelevant(NetworkConfigEvent event) {
+ return event.configClass() == IntReportConfig.class;
+ }
+ }
}