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/DefaultIsisController.java b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisController.java
index 0929db4..aa0b00f 100644
--- a/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisController.java
+++ b/protocols/isis/ctl/src/main/java/org/onosproject/isis/controller/impl/DefaultIsisController.java
@@ -16,6 +16,7 @@
package org.onosproject.isis.controller.impl;
import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.collect.Sets;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -24,12 +25,18 @@
import org.apache.felix.scr.annotations.Service;
import org.onosproject.isis.controller.IsisController;
import org.onosproject.isis.controller.IsisProcess;
+import org.onosproject.isis.controller.topology.IsisAgent;
+import org.onosproject.isis.controller.topology.IsisLink;
+import org.onosproject.isis.controller.topology.IsisLinkListener;
+import org.onosproject.isis.controller.topology.IsisRouter;
import org.onosproject.isis.controller.topology.IsisRouterListener;
import org.onosproject.net.driver.DriverService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
* Represents ISIS controller implementation.
@@ -42,10 +49,14 @@
private final Controller controller = new Controller();
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected DriverService driverService;
+ protected Set<IsisRouterListener> isisRouterListener = new HashSet<>();
+ protected Set<IsisLinkListener> isisLinkListener = Sets.newHashSet();
+ protected IsisAgent agent = new InternalDeviceConfig();
@Activate
public void activate() {
log.debug("ISISControllerImpl activate");
+ controller.setAgent(agent);
}
@Deactivate
@@ -55,6 +66,38 @@
}
@Override
+ public void addRouterListener(IsisRouterListener listener) {
+ if (!isisRouterListener.contains(listener)) {
+ this.isisRouterListener.add(listener);
+ }
+ }
+
+ @Override
+ public void removeRouterListener(IsisRouterListener listener) {
+ this.isisRouterListener.remove(listener);
+ }
+
+ @Override
+ public void addLinkListener(IsisLinkListener listener) {
+ isisLinkListener.add(listener);
+ }
+
+ @Override
+ public void removeLinkListener(IsisLinkListener listener) {
+ isisLinkListener.remove(listener);
+ }
+
+ @Override
+ public Set<IsisRouterListener> listener() {
+ return isisRouterListener;
+ }
+
+ @Override
+ public Set<IsisLinkListener> linkListener() {
+ return isisLinkListener;
+ }
+
+ @Override
public List<IsisProcess> allConfiguredProcesses() {
List<IsisProcess> processes = controller.getAllConfiguredProcesses();
return processes;
@@ -70,13 +113,37 @@
}
}
- @Override
- public void addRouterListener(IsisRouterListener isisRouterListener) {
- log.debug("IsisControllerImpl::addRouterListener...");
- }
+ /**
+ * Notifier for internal ISIS device and link changes.
+ */
+ private class InternalDeviceConfig implements IsisAgent {
+ @Override
+ public boolean addConnectedRouter(IsisRouter isisRouter) {
+ for (IsisRouterListener l : listener()) {
+ l.routerAdded(isisRouter);
+ }
+ return true;
+ }
- @Override
- public void removeRouterListener(IsisRouterListener isisRouterListener) {
- log.debug("IsisControllerImpl::removeRouterListener...");
+ @Override
+ public void removeConnectedRouter(IsisRouter isisRouter) {
+ for (IsisRouterListener l : listener()) {
+ l.routerRemoved(isisRouter);
+ }
+ }
+
+ @Override
+ public void addLink(IsisLink isisLink) {
+ for (IsisLinkListener l : linkListener()) {
+ l.addLink(isisLink);
+ }
+ }
+
+ @Override
+ public void deleteLink(IsisLink isisLink) {
+ for (IsisLinkListener l : linkListener()) {
+ l.deleteLink(isisLink);
+ }
+ }
}
}
\ No newline at end of file