[ONOS-4849] NETCONF function for FUJITSU OLT #6
- Add alart command for FUJITSU OLT
volt-notification-alertfilter <netconf:target>
volt-notification-setalertfilter <netconf:target> <alert-severity>
volt-notification-subscribe <netconf:target> {disable}
- Update fujitsu-drivers.xml and shell-config.xml in FUJITSU directory
- Apply Yuta's and Andrea's suggestion to startSubscription method and other methods which related to startSubscription method.
-> Remove startSubscriptionConnection() and createSubscriptionString() method in 4th patch-set.
-> Modify cosmetic issue related to Static-string.
-> Update "No replay" to "No reply" in VoltGetPonLinksCommand.java
Change-Id: I2c8d5484ea0ff9f0b1b970fe8b183bec12193c46
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
index e359641..fde6bc2 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
@@ -16,6 +16,7 @@
package org.onosproject.netconf.ctl;
+import com.google.common.annotations.Beta;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import com.google.common.base.Preconditions;
@@ -66,8 +67,8 @@
private static final String WITH_DEFAULT_CLOSE = "</with-defaults>";
private static final String DEFAULT_OPERATION_OPEN = "<default-operation>";
private static final String DEFAULT_OPERATION_CLOSE = "</default-operation>";
- private static final String FILTER_OPEN = "<filter type=\"subtree\">";
- private static final String FILTER_CLOSE = "</filter>";
+ private static final String SUBTREE_FILTER_OPEN = "<filter type=\"subtree\">";
+ private static final String SUBTREE_FILTER_CLOSE = "</filter>";
private static final String EDIT_CONFIG_OPEN = "<edit-config>";
private static final String EDIT_CONFIG_CLOSE = "</edit-config>";
private static final String TARGET_OPEN = "<target>";
@@ -80,6 +81,8 @@
"xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"";
private static final String NETCONF_WITH_DEFAULTS_NAMESPACE =
"xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults\"";
+ private static final String SUBSCRIPTION_SUBTREE_FILTER_OPEN =
+ "<filter xmlns:base10=\"urn:ietf:params:xml:ns:netconf:base:1.0\" base10:type=\"subtree\">";
private final AtomicInteger messageIdInteger = new AtomicInteger(0);
private Connection netconfConnection;
@@ -157,11 +160,13 @@
}
}
- private void startSubscriptionConnection() throws NetconfException {
+
+ @Beta
+ private void startSubscriptionConnection(String filterSchema) throws NetconfException {
if (!serverCapabilities.contains("interleave")) {
throw new NetconfException("Device" + deviceInfo + "does not support interleave");
}
- String reply = sendRequest(createSubscriptionString());
+ String reply = sendRequest(createSubscriptionString(filterSchema));
if (!checkReply(reply)) {
throw new NetconfException("Subscription not successful with device "
+ deviceInfo + " with reply " + reply);
@@ -169,18 +174,37 @@
subscriptionConnected = true;
}
+ @Override
public void startSubscription() throws NetconfException {
if (!subscriptionConnected) {
- startSubscriptionConnection();
+ startSubscriptionConnection(null);
}
streamHandler.setEnableNotifications(true);
}
- private String createSubscriptionString() {
+ @Beta
+ @Override
+ public void startSubscription(String filterSchema) throws NetconfException {
+ if (!subscriptionConnected) {
+ startSubscriptionConnection(filterSchema);
+ }
+ streamHandler.setEnableNotifications(true);
+ }
+
+ @Beta
+ private String createSubscriptionString(String filterSchema) {
StringBuilder subscriptionbuffer = new StringBuilder();
subscriptionbuffer.append("<rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n");
subscriptionbuffer.append(" <create-subscription\n");
subscriptionbuffer.append("xmlns=\"urn:ietf:params:xml:ns:netconf:notification:1.0\">\n");
+ // FIXME Only subtree filtering supported at the moment.
+ if (filterSchema != null) {
+ subscriptionbuffer.append(" ");
+ subscriptionbuffer.append(SUBSCRIPTION_SUBTREE_FILTER_OPEN).append(NEW_LINE);
+ subscriptionbuffer.append(filterSchema).append(NEW_LINE);
+ subscriptionbuffer.append(" ");
+ subscriptionbuffer.append(SUBTREE_FILTER_CLOSE).append(NEW_LINE);
+ }
subscriptionbuffer.append(" </create-subscription>\n");
subscriptionbuffer.append("</rpc>\n");
subscriptionbuffer.append(ENDPATTERN);
@@ -323,9 +347,9 @@
rpc.append(NETCONF_BASE_NAMESPACE).append(">\n");
rpc.append(GET_OPEN).append(NEW_LINE);
if (filterSchema != null) {
- rpc.append(FILTER_OPEN).append(NEW_LINE);
+ rpc.append(SUBTREE_FILTER_OPEN).append(NEW_LINE);
rpc.append(filterSchema).append(NEW_LINE);
- rpc.append(FILTER_CLOSE).append(NEW_LINE);
+ rpc.append(SUBTREE_FILTER_CLOSE).append(NEW_LINE);
}
if (withDefaultsMode != null) {
rpc.append(WITH_DEFAULT_OPEN).append(NETCONF_WITH_DEFAULTS_NAMESPACE).append(">");
@@ -577,7 +601,9 @@
}
CompletableFuture<String> completedReply =
replies.get(messageId.get());
- completedReply.complete(event.getMessagePayload());
+ if (completedReply != null) {
+ completedReply.complete(event.getMessagePayload());
+ }
}
}
}