ONOS-6078
Netconf : Active component
Change-Id: I147193091880c026e198fc723cfe054e5dbea69f
diff --git a/apps/netconf/BUCK b/apps/netconfsb/BUCK
similarity index 72%
rename from apps/netconf/BUCK
rename to apps/netconfsb/BUCK
index f4cc35c..907e4be 100644
--- a/apps/netconf/BUCK
+++ b/apps/netconfsb/BUCK
@@ -1,10 +1,10 @@
BUNDLES = [
- '//apps/netconf/client:onos-apps-netconf-client',
- '//apps/netconf/storeadapter:onos-apps-netconf-storeadapter',
+ '//apps/netconfsb/client:onos-apps-netconfsb-client',
+ '//apps/netconfsb/storeadapter:onos-apps-netconfsb-storeadapter',
]
onos_app (
- app_name = 'org.onosproject.netconf',
+ app_name = 'org.onosproject.netconfsb',
title = 'NETCONF Application Module',
category = 'Utility',
url = 'http://onosproject.org',
diff --git a/apps/netconf/client/BUCK b/apps/netconfsb/client/BUCK
similarity index 100%
rename from apps/netconf/client/BUCK
rename to apps/netconfsb/client/BUCK
diff --git a/apps/netconf/client/src/main/java/org/onosproject/netconf/client/NetconfTranslator.java b/apps/netconfsb/client/src/main/java/org/onosproject/netconf/client/NetconfTranslator.java
similarity index 100%
rename from apps/netconf/client/src/main/java/org/onosproject/netconf/client/NetconfTranslator.java
rename to apps/netconfsb/client/src/main/java/org/onosproject/netconf/client/NetconfTranslator.java
diff --git a/apps/netconf/client/src/main/java/org/onosproject/netconf/client/impl/NetconfTranslatorImpl.java b/apps/netconfsb/client/src/main/java/org/onosproject/netconf/client/impl/NetconfTranslatorImpl.java
similarity index 100%
rename from apps/netconf/client/src/main/java/org/onosproject/netconf/client/impl/NetconfTranslatorImpl.java
rename to apps/netconfsb/client/src/main/java/org/onosproject/netconf/client/impl/NetconfTranslatorImpl.java
diff --git a/apps/netconf/client/src/main/java/org/onosproject/netconf/client/impl/package-info.java b/apps/netconfsb/client/src/main/java/org/onosproject/netconf/client/impl/package-info.java
similarity index 100%
rename from apps/netconf/client/src/main/java/org/onosproject/netconf/client/impl/package-info.java
rename to apps/netconfsb/client/src/main/java/org/onosproject/netconf/client/impl/package-info.java
diff --git a/apps/netconf/client/src/main/java/org/onosproject/netconf/client/package-info.java b/apps/netconfsb/client/src/main/java/org/onosproject/netconf/client/package-info.java
similarity index 100%
rename from apps/netconf/client/src/main/java/org/onosproject/netconf/client/package-info.java
rename to apps/netconfsb/client/src/main/java/org/onosproject/netconf/client/package-info.java
diff --git a/apps/netconf/client/src/test/java/org/onosproject/netconf/client/NetconfTranslatorImplTest.java b/apps/netconfsb/client/src/test/java/org/onosproject/netconf/client/NetconfTranslatorImplTest.java
similarity index 100%
rename from apps/netconf/client/src/test/java/org/onosproject/netconf/client/NetconfTranslatorImplTest.java
rename to apps/netconfsb/client/src/test/java/org/onosproject/netconf/client/NetconfTranslatorImplTest.java
diff --git a/apps/netconf/storeadapter/BUCK b/apps/netconfsb/storeadapter/BUCK
similarity index 69%
rename from apps/netconf/storeadapter/BUCK
rename to apps/netconfsb/storeadapter/BUCK
index 8787855..6444a6c 100644
--- a/apps/netconf/storeadapter/BUCK
+++ b/apps/netconfsb/storeadapter/BUCK
@@ -3,7 +3,10 @@
'//lib:onos-yang-model',
'//lib:onos-yang-runtime',
'//apps/config:onos-apps-config',
- '//apps/netconf/client:onos-apps-netconf-client'
+ '//protocols/netconf/api:onos-protocols-netconf-api',
+ '//apps/netconfsb/client:onos-apps-netconfsb-client'
+
+
]
osgi_jar_with_tests (
@@ -11,12 +14,12 @@
)
BUNDLES = [
- '//apps/netconf/client:onos-apps-netconf-client',
- '//apps/netconf/storeadapter:onos-apps-netconf-storeadapter',
+ '//apps/netconfsb/client:onos-apps-netconfsb-client',
+ '//apps/netconfsb/storeadapter:onos-apps-netconfsb-storeadapter',
]
onos_app (
- app_name = 'org.onosproject.netconf',
+ app_name = 'org.onosproject.netconfsb',
title = 'NETCONF Application Module',
category = 'Utility',
url = 'http://onosproject.org',
diff --git a/apps/netconf/storeadapter/src/main/java/org/onosproject/netconf/storeadapter/NetconfYangListener.java b/apps/netconfsb/storeadapter/src/main/java/org/onosproject/netconf/storeadapter/NetconfActiveComponent.java
similarity index 66%
rename from apps/netconf/storeadapter/src/main/java/org/onosproject/netconf/storeadapter/NetconfYangListener.java
rename to apps/netconfsb/storeadapter/src/main/java/org/onosproject/netconf/storeadapter/NetconfActiveComponent.java
index e3c94c2..8d824f7 100644
--- a/apps/netconf/storeadapter/src/main/java/org/onosproject/netconf/storeadapter/NetconfYangListener.java
+++ b/apps/netconfsb/storeadapter/src/main/java/org/onosproject/netconf/storeadapter/NetconfActiveComponent.java
@@ -32,7 +32,12 @@
import org.onosproject.net.resource.Resource;
import org.onosproject.netconf.client.NetconfTranslator;
import org.onosproject.netconf.client.NetconfTranslator.OperationType;
+import org.onosproject.netconf.NetconfException;
+import org.onosproject.netconf.NetconfController;
+import java.net.URI;
+import java.net.URISyntaxException;
import org.onosproject.yang.model.DataNode;
+import org.onosproject.yang.model.LeafNode;
import org.onosproject.yang.model.ResourceId;
import org.onosproject.yang.runtime.DefaultResourceData;
import org.slf4j.Logger;
@@ -40,13 +45,14 @@
import java.io.IOException;
+
@Beta
@Component(immediate = true)
-public class NetconfYangListener implements DynamicConfigListener {
+public class NetconfActiveComponent implements DynamicConfigListener {
- private static final Logger log = LoggerFactory.getLogger(NetconfYangListener.class);
+ private static final Logger log = LoggerFactory.getLogger(NetconfActiveComponent.class);
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DynamicConfigService cfgServcie;
+ protected DynamicConfigService cfgService;
public static final String DEVNMSPACE = "namespace1";
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -55,35 +61,51 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected MastershipService mastershipService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected NetconfController controller;
+
private ResourceId resId = new ResourceId.Builder()
.addBranchPointSchema("device", DEVNMSPACE )
.build();
@Activate
protected void activate() {
- cfgServcie.addListener(this);
+ cfgService.addListener(this);
log.info("Started");
}
@Deactivate
protected void deactivate() {
- cfgServcie.removeListener(this);
+ cfgService.removeListener(this);
log.info("Stopped");
}
@Override
public boolean isRelevant(DynamicConfigEvent event) {
- if (event.subject().equals(resId) &&
- mastershipService.isLocalMaster(retrieveDeviceId(event.subject()))) {
- return true;
- } else {
+ if (event.subject().equals(resId)) {
+ return true;
+ } else {
return false;
}
}
+
+ public boolean isMaster(DeviceId deviceId) {
+ if (mastershipService.isLocalMaster(deviceId)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
@Override
public void event(DynamicConfigEvent event) {
Filter filt = new Filter();
- DataNode node = cfgServcie.readNode(event.subject(), filt);
- DeviceId deviceId = retrieveDeviceId(event.subject());
+ DataNode node = cfgService.readNode(event.subject(), filt);
+ DeviceId deviceId = getDeviceId(node);
+ if (!isMaster(deviceId)) {
+ log.info("NetConfListener: not master, ignoring config for {}", event.type());
+ return;
+ }
+ initiateConnection(deviceId);
switch (event.type()) {
case NODE_ADDED:
case NODE_UPDATED:
@@ -150,13 +172,46 @@
}
/**
- * Takes a resourceId corresponding to the provided event and uses it to
- * retrieve/generate a deviceId corresponding to the effected device.
- * @param resourceId the resourceId associated with the event
+ * Retrieves device id from Data node.
+ *
+ * @param node the node associated with the event
* @return the deviceId of the effected device
*/
- private DeviceId retrieveDeviceId(ResourceId resourceId) {
- /*TODO this requires a real implementation instead of a placeholder */
- return DeviceId.NONE;
+ public DeviceId getDeviceId(DataNode node) {
+ String[] temp;
+ String ip, port;
+ if (node.type() == DataNode.Type.SINGLE_INSTANCE_LEAF_VALUE_NODE) {
+ temp = ((LeafNode) node).asString().split("\\:");
+ if (temp.length != 3) {
+ throw new RuntimeException(new NetconfException("Invalid device id form, cannot apply"));
+ }
+ ip = temp[1];
+ port = temp[2];
+ } else {
+ throw new RuntimeException(new NetconfException("Invalid device id type, cannot apply"));
+ }
+ try {
+ return DeviceId.deviceId(new URI("netconf", ip + ":" + port, (String) null));
+ } catch (URISyntaxException var4) {
+ throw new IllegalArgumentException("Unable to build deviceID for device " + ip + ":" + port, var4);
+ }
+ }
+
+ /**
+ * Inititates a Netconf connection to the device.
+ *
+ * @param deviceId of the added device
+ */
+ private void initiateConnection(DeviceId deviceId) {
+ if (controller.getNetconfDevice(deviceId) == null) {
+ try {
+ //if (this.isReachable(deviceId)) {
+ this.controller.connectDevice(deviceId);
+ //}
+ } catch (Exception ex) {
+ throw new RuntimeException(new NetconfException("Can\'t " +
+ "connect to NETCONF device on " + deviceId + ":" + deviceId, ex));
+ }
+ }
}
}
\ No newline at end of file
diff --git a/apps/pom.xml b/apps/pom.xml
index ebd1d28..ac7b150 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -109,6 +109,16 @@
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-app-config</artifactId>
+ <version>1.10.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-netconf-api</artifactId>
+ <version>1.10.0-SNAPSHOT</version>
+ </dependency>
</dependencies>
<build>