Add device config change request using NetCfg
Change-Id: I01ae9caf298e606333ea31b2b480d744a2815c76
diff --git a/apps/odtn/service/src/main/java/org/onosproject/odtn/internal/DcsBasedTapiConnectionManager.java b/apps/odtn/service/src/main/java/org/onosproject/odtn/internal/DcsBasedTapiConnectionManager.java
index 6ddb662..b585506 100644
--- a/apps/odtn/service/src/main/java/org/onosproject/odtn/internal/DcsBasedTapiConnectionManager.java
+++ b/apps/odtn/service/src/main/java/org/onosproject/odtn/internal/DcsBasedTapiConnectionManager.java
@@ -17,15 +17,22 @@
package org.onosproject.odtn.internal;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
import org.onosproject.config.FailedException;
-import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.odtn.TapiResolver;
+import org.onosproject.odtn.behaviour.OdtnDeviceDescriptionDiscovery;
+import org.onosproject.odtn.utils.tapi.DcsBasedTapiObjectRefFactory;
+import org.onosproject.odtn.utils.tapi.TapiCepPair;
import org.onosproject.odtn.utils.tapi.TapiConnection;
import org.onosproject.odtn.utils.tapi.TapiNepPair;
import org.onosproject.odtn.utils.tapi.TapiCepRefHandler;
import org.onosproject.odtn.utils.tapi.TapiConnectionHandler;
+import org.onosproject.odtn.utils.tapi.TapiNepRef;
import org.onosproject.odtn.utils.tapi.TapiRouteHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,13 +42,15 @@
/**
* DCS-dependent Tapi connection manager implementation.
*/
-public class DcsBasedTapiConnectionManager implements TapiConnectionManager {
+public final class DcsBasedTapiConnectionManager implements TapiConnectionManager {
private final Logger log = LoggerFactory.getLogger(getClass());
protected TapiPathComputer connectionController;
- private DeviceService deviceService;
+ private TapiResolver resolver;
+ private NetworkConfigService netcfgService;
private List<DcsBasedTapiConnectionManager> connectionManagerList = new ArrayList<>();
+ private TapiConnection connection = null;
private TapiConnectionHandler connectionHandler = TapiConnectionHandler.create();
private Operation op = null;
@@ -51,10 +60,14 @@
DELETE
}
+ private DcsBasedTapiConnectionManager() {
+ }
+
public static DcsBasedTapiConnectionManager create() {
DcsBasedTapiConnectionManager self = new DcsBasedTapiConnectionManager();
self.connectionController = DefaultTapiPathComputer.create();
- self.deviceService = getService(DeviceService.class);
+ self.resolver = getService(TapiResolver.class);
+ self.netcfgService = getService(NetworkConfigService.class);
return self;
}
@@ -72,22 +85,20 @@
@Override
public void deleteConnection(TapiConnectionHandler connectionHandler) {
- // read target to be deleted
- this.connectionHandler = connectionHandler;
- this.connectionHandler.read();
- log.info("model: {}", connectionHandler.getModelObject());
-
deleteConnectionRecursively(connectionHandler);
}
@Override
public void apply() {
connectionManagerList.forEach(DcsBasedTapiConnectionManager::apply);
+
switch (op) {
case CREATE:
+ notifyDeviceConfigChange(true);
connectionHandler.add();
break;
case DELETE:
+ notifyDeviceConfigChange(false);
connectionHandler.remove();
break;
default:
@@ -96,6 +107,37 @@
}
/**
+ * Emit NetworkConfig event with parameters for device config,
+ * to notify configuration change to device drivers.
+ */
+ private void notifyDeviceConfigChange(boolean enable) {
+ if (!this.connection.getCeps().isSameNode()) {
+ return;
+ }
+
+ TapiNepRef left = this.connection.getCeps().left().getNepRef();
+ TapiNepRef right = this.connection.getCeps().right().getNepRef();
+
+ // update with latest data in DCS
+ left = resolver.getNepRef(left);
+ right = resolver.getNepRef(right);
+
+ AtomicReference<TapiNepRef> line = new AtomicReference<>();
+ AtomicReference<TapiNepRef> client = new AtomicReference<>();
+ Arrays.asList(left, right).forEach(nep -> {
+ if (nep.getPortType() == OdtnDeviceDescriptionDiscovery.OdtnPortType.LINE) {
+ line.set(nep);
+ }
+ if (nep.getPortType() == OdtnDeviceDescriptionDiscovery.OdtnPortType.CLIENT) {
+ client.set(nep);
+ }
+ });
+
+ DeviceConfigEventEmitter eventEmitter = DeviceConfigEventEmitter.create();
+ eventEmitter.emit(line.get(), client.get(), enable);
+ }
+
+ /**
* Generate TAPI connection and its under connections recursively
* and add them to creation queue.
*
@@ -104,6 +146,7 @@
private void createConnectionRecursively(TapiConnection connection) {
op = Operation.CREATE;
connectionManagerList.clear();
+ this.connection = connection;
TapiRouteHandler routeBuilder = TapiRouteHandler.create();
@@ -136,6 +179,16 @@
op = Operation.DELETE;
connectionManagerList.clear();
+ // read target to be deleted
+ connectionHandler.read();
+ log.info("model: {}", connectionHandler.getModelObject());
+
+ this.connection = TapiConnection.create(
+ TapiCepPair.create(
+ DcsBasedTapiObjectRefFactory.create(connectionHandler.getCeps().get(0)),
+ DcsBasedTapiObjectRefFactory.create(connectionHandler.getCeps().get(1)))
+ );
+
this.connectionHandler = connectionHandler;
this.connectionHandler.getLowerConnections().forEach(lowerConnectionHandler -> {
delegateConnectionDeletion(lowerConnectionHandler);
@@ -157,7 +210,7 @@
/**
* Delegate lower-connection deletion to other corresponding TapiConnectionManager of each Nodes.
*
- * @param connectionHandler connectionHandler of connection to be deleted
+ * @param connectionHandler connectionHandler of connection to be deleted
*/
private void delegateConnectionDeletion(TapiConnectionHandler connectionHandler) {
log.info("model: {}", connectionHandler.getModelObject());