blob: 9cafc4c9343052781b37cf034f2c4f3091b19d3c [file] [log] [blame]
tejeshwer degala3fe1ed52016-04-22 17:04:01 +05301/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
tejeshwer degala3fe1ed52016-04-22 17:04:01 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.isis.controller.impl;
17
18import com.fasterxml.jackson.databind.JsonNode;
sunish vk7bdf4d42016-06-24 12:29:43 +053019import com.google.common.collect.Sets;
tejeshwer degala3fe1ed52016-04-22 17:04:01 +053020import org.apache.felix.scr.annotations.Activate;
21import org.apache.felix.scr.annotations.Component;
22import org.apache.felix.scr.annotations.Deactivate;
23import org.apache.felix.scr.annotations.Reference;
24import org.apache.felix.scr.annotations.ReferenceCardinality;
25import org.apache.felix.scr.annotations.Service;
26import org.onosproject.isis.controller.IsisController;
27import org.onosproject.isis.controller.IsisProcess;
sunish vk7bdf4d42016-06-24 12:29:43 +053028import org.onosproject.isis.controller.topology.IsisAgent;
29import org.onosproject.isis.controller.topology.IsisLink;
30import org.onosproject.isis.controller.topology.IsisLinkListener;
31import org.onosproject.isis.controller.topology.IsisRouter;
tejeshwer degala3fe1ed52016-04-22 17:04:01 +053032import org.onosproject.isis.controller.topology.IsisRouterListener;
33import org.onosproject.net.driver.DriverService;
34import org.slf4j.Logger;
35import org.slf4j.LoggerFactory;
36
sunish vk7bdf4d42016-06-24 12:29:43 +053037import java.util.HashSet;
tejeshwer degala3fe1ed52016-04-22 17:04:01 +053038import java.util.List;
sunish vk7bdf4d42016-06-24 12:29:43 +053039import java.util.Set;
tejeshwer degala3fe1ed52016-04-22 17:04:01 +053040
41/**
42 * Represents ISIS controller implementation.
43 */
44@Component(immediate = true)
45@Service
46public class DefaultIsisController implements IsisController {
47
Ray Milkey9c9cde42018-01-12 14:22:06 -080048 private static final Logger log = LoggerFactory.getLogger(DefaultIsisController.class);
tejeshwer degala3fe1ed52016-04-22 17:04:01 +053049 private final Controller controller = new Controller();
50 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
51 protected DriverService driverService;
sunish vk7bdf4d42016-06-24 12:29:43 +053052 protected Set<IsisRouterListener> isisRouterListener = new HashSet<>();
53 protected Set<IsisLinkListener> isisLinkListener = Sets.newHashSet();
54 protected IsisAgent agent = new InternalDeviceConfig();
tejeshwer degala3fe1ed52016-04-22 17:04:01 +053055
56 @Activate
57 public void activate() {
58 log.debug("ISISControllerImpl activate");
sunish vk7bdf4d42016-06-24 12:29:43 +053059 controller.setAgent(agent);
tejeshwer degala3fe1ed52016-04-22 17:04:01 +053060 }
61
62 @Deactivate
63 public void deactivate() {
64 controller.isisDeactivate();
65 log.debug("ISISControllerImpl deActivate");
66 }
67
68 @Override
sunish vk7bdf4d42016-06-24 12:29:43 +053069 public void addRouterListener(IsisRouterListener listener) {
70 if (!isisRouterListener.contains(listener)) {
71 this.isisRouterListener.add(listener);
72 }
73 }
74
75 @Override
76 public void removeRouterListener(IsisRouterListener listener) {
77 this.isisRouterListener.remove(listener);
78 }
79
80 @Override
81 public void addLinkListener(IsisLinkListener listener) {
82 isisLinkListener.add(listener);
83 }
84
85 @Override
86 public void removeLinkListener(IsisLinkListener listener) {
87 isisLinkListener.remove(listener);
88 }
89
90 @Override
91 public Set<IsisRouterListener> listener() {
92 return isisRouterListener;
93 }
94
95 @Override
96 public Set<IsisLinkListener> linkListener() {
97 return isisLinkListener;
98 }
99
100 @Override
tejeshwer degala3fe1ed52016-04-22 17:04:01 +0530101 public List<IsisProcess> allConfiguredProcesses() {
102 List<IsisProcess> processes = controller.getAllConfiguredProcesses();
103 return processes;
104 }
105
106 @Override
107 public void updateConfig(JsonNode jsonNode) {
108 log.debug("updateConfig::IsisList::processes::{}", jsonNode);
109 try {
110 controller.updateConfig(jsonNode);
111 } catch (Exception e) {
112 log.debug("Error::updateConfig::{}", e.getMessage());
113 }
114 }
115
sunish vk7bdf4d42016-06-24 12:29:43 +0530116 /**
117 * Notifier for internal ISIS device and link changes.
118 */
119 private class InternalDeviceConfig implements IsisAgent {
120 @Override
121 public boolean addConnectedRouter(IsisRouter isisRouter) {
122 for (IsisRouterListener l : listener()) {
123 l.routerAdded(isisRouter);
124 }
125 return true;
126 }
tejeshwer degala3fe1ed52016-04-22 17:04:01 +0530127
sunish vk7bdf4d42016-06-24 12:29:43 +0530128 @Override
129 public void removeConnectedRouter(IsisRouter isisRouter) {
130 for (IsisRouterListener l : listener()) {
131 l.routerRemoved(isisRouter);
132 }
133 }
134
135 @Override
136 public void addLink(IsisLink isisLink) {
137 for (IsisLinkListener l : linkListener()) {
138 l.addLink(isisLink);
139 }
140 }
141
142 @Override
143 public void deleteLink(IsisLink isisLink) {
144 for (IsisLinkListener l : linkListener()) {
145 l.deleteLink(isisLink);
146 }
147 }
tejeshwer degala3fe1ed52016-04-22 17:04:01 +0530148 }
149}