ISIS protocol manual merge from 1.6 due to cherry pick merge conflict
Change-Id: I6c3abf6a83ddaeba76293dc7864fcec88e9b4e7e
diff --git a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/Controller.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/Controller.java
index 7cd7785..406d09c 100644
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/Controller.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/Controller.java
@@ -30,6 +30,9 @@
import org.onosproject.isis.controller.IsisNetworkType;
import org.onosproject.isis.controller.IsisProcess;
import org.onosproject.isis.controller.IsisRouterType;
+import org.onosproject.isis.controller.topology.IsisAgent;
+import org.onosproject.isis.controller.topology.IsisLink;
+import org.onosproject.isis.controller.topology.IsisRouter;
import org.onosproject.isis.io.util.IsisConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,6 +46,7 @@
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import static org.onlab.util.Tools.groupedThreads;
@@ -64,15 +68,29 @@
private ScheduledExecutorService connectExecutor = null;
private int connectRetryCounter = 0;
private int connectRetryTime;
+ private ScheduledFuture future = null;
+ private IsisAgent agent;
/**
* Deactivates ISIS controller.
*/
public void isisDeactivate() {
+ disconnectExecutor();
+ processes = null;
peerExecFactory.shutdown();
}
/**
+ * Sets ISIS agent.
+ *
+ * @param agent ISIS agent instance
+ */
+ public void setAgent(IsisAgent agent) {
+ this.agent = agent;
+ }
+
+
+ /**
* Updates the processes configuration.
*
* @param jsonNode json node instance
@@ -134,17 +152,17 @@
peerBootstrap.setOption("keepAlive", true);
peerBootstrap.setOption("receiveBufferSize", Controller.BUFFER_SIZE);
peerBootstrap.setOption("receiveBufferSizePredictorFactory",
- new FixedReceiveBufferSizePredictorFactory(
- Controller.BUFFER_SIZE));
+ new FixedReceiveBufferSizePredictorFactory(
+ Controller.BUFFER_SIZE));
peerBootstrap.setOption("receiveBufferSizePredictor",
- new AdaptiveReceiveBufferSizePredictor(64, 1024, 65536));
+ new AdaptiveReceiveBufferSizePredictor(64, 1024, 65536));
peerBootstrap.setOption("child.keepAlive", true);
peerBootstrap.setOption("child.tcpNoDelay", true);
peerBootstrap.setOption("child.sendBufferSize", Controller.BUFFER_SIZE);
peerBootstrap.setOption("child.receiveBufferSize", Controller.BUFFER_SIZE);
peerBootstrap.setOption("child.receiveBufferSizePredictorFactory",
- new FixedReceiveBufferSizePredictorFactory(
- Controller.BUFFER_SIZE));
+ new FixedReceiveBufferSizePredictorFactory(
+ Controller.BUFFER_SIZE));
peerBootstrap.setOption("child.reuseAddress", true);
isisChannelHandler = new IsisChannelHandler(this, processes);
@@ -236,8 +254,8 @@
continue;
}
isisInterface.setIntermediateSystemName(jsonNode1
- .path(IsisConstants.INTERMEDIATESYSTEMNAME)
- .asText());
+ .path(IsisConstants.INTERMEDIATESYSTEMNAME)
+ .asText());
String systemId = jsonNode1.path(IsisConstants.SYSTEMID).asText();
if (isValidSystemId(systemId)) {
isisInterface.setSystemId(systemId);
@@ -462,7 +480,8 @@
*/
public void disconnectExecutor() {
if (connectExecutor != null) {
- connectExecutor.shutdown();
+ future.cancel(true);
+ connectExecutor.shutdownNow();
connectExecutor = null;
}
}
@@ -480,10 +499,55 @@
* @param retryDelay retry delay
*/
private void scheduleConnectionRetry(long retryDelay) {
- if (this.connectExecutor == null) {
- this.connectExecutor = Executors.newSingleThreadScheduledExecutor();
+ if (connectExecutor == null) {
+ connectExecutor = Executors.newSingleThreadScheduledExecutor();
}
- this.connectExecutor.schedule(new ConnectionRetry(), retryDelay, TimeUnit.MINUTES);
+ future = connectExecutor.schedule(new ConnectionRetry(), retryDelay, TimeUnit.MINUTES);
+ }
+
+ /**
+ * Adds device details.
+ *
+ * @param isisRouter ISIS router instance
+ */
+ public void addDeviceDetails(IsisRouter isisRouter) {
+ agent.addConnectedRouter(isisRouter);
+ }
+
+ /**
+ * Removes device details.
+ *
+ * @param isisRouter Isis router instance
+ */
+ public void removeDeviceDetails(IsisRouter isisRouter) {
+ agent.removeConnectedRouter(isisRouter);
+ }
+
+ /**
+ * Adds link details.
+ *
+ * @param isisLink ISIS link instance
+ */
+ public void addLinkDetails(IsisLink isisLink) {
+ agent.addLink(isisLink);
+ }
+
+ /**
+ * Removes link details.
+ *
+ * @param isisLink ISIS link instance
+ */
+ public void removeLinkDetails(IsisLink isisLink) {
+ agent.deleteLink(isisLink);
+ }
+
+ /**
+ * Returns the isisAgent instance.
+ *
+ * @return agent
+ */
+ public IsisAgent agent() {
+ return this.agent;
}
/**
@@ -503,7 +567,7 @@
if (!future.isSuccess()) {
connectRetryCounter++;
log.error("Connection failed, ConnectRetryCounter {} remote host {}", connectRetryCounter,
- IsisConstants.SHOST);
+ IsisConstants.SHOST);
/*
* Reconnect to peer on failure is exponential till 4 mins, later on retry after every 4
* mins.
@@ -517,7 +581,7 @@
isisChannelHandler.sentConfigPacket(configPacket);
connectRetryCounter++;
log.info("Connected to remote host {}, Connect Counter {}", IsisConstants.SHOST,
- connectRetryCounter);
+ connectRetryCounter);
disconnectExecutor();
return;