2 * Copyright (c) 2018 Pantheon Technologies s.r.o. All Rights Reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at https://www.eclipse.org/legal/epl-v10.html
8 package io.lighty.controllers.tpce.module;
10 import io.lighty.core.controller.api.AbstractLightyModule;
11 import io.lighty.core.controller.api.LightyServices;
12 import java.util.Arrays;
13 import java.util.List;
14 import org.opendaylight.mdsal.binding.api.NotificationService;
15 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
16 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
17 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
18 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221;
19 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl710;
20 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
21 import org.opendaylight.transportpce.common.mapping.MappingUtils;
22 import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
23 import org.opendaylight.transportpce.common.mapping.PortMapping;
24 import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
25 import org.opendaylight.transportpce.common.mapping.PortMappingVersion121;
26 import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
27 import org.opendaylight.transportpce.common.mapping.PortMappingVersion710;
28 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
29 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
30 import org.opendaylight.transportpce.common.network.RequestProcessor;
31 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
32 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
33 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
34 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
35 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
36 import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
37 import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener;
38 import org.opendaylight.transportpce.networkmodel.NetworkModelProvider;
39 import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl;
40 import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
41 import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
42 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
43 import org.opendaylight.transportpce.networkmodel.service.FrequenciesServiceImpl;
44 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
45 import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl;
46 import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl;
47 import org.opendaylight.transportpce.olm.OlmProvider;
48 import org.opendaylight.transportpce.olm.power.PowerMgmt;
49 import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
50 import org.opendaylight.transportpce.olm.service.OlmPowerService;
51 import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
52 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
53 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl;
54 import org.opendaylight.transportpce.pce.impl.PceProvider;
55 import org.opendaylight.transportpce.pce.service.PathComputationService;
56 import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
57 import org.opendaylight.transportpce.renderer.RendererProvider;
58 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface121;
59 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221;
60 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface710;
61 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
62 // Adding OTN interface
63 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface221;
64 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface710;
65 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
66 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
67 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
69 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
70 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
71 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
72 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
73 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
74 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
75 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
76 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
77 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
78 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
79 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
80 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
81 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
82 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
83 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
84 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
85 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
86 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
87 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
88 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
89 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
90 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
91 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
92 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
93 import org.opendaylight.transportpce.tapi.utils.TapiLink;
94 import org.opendaylight.transportpce.tapi.utils.TapiListener;
95 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
96 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
97 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
98 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
99 import org.slf4j.Logger;
100 import org.slf4j.LoggerFactory;
103 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
104 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
105 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
107 // cannot use interface for DeviceTransactionManagerImpl
108 // because implementation has additional public methods ...
109 private final DeviceTransactionManagerImpl deviceTransactionManager;
110 private final NetworkTransactionService networkTransaction;
112 private final PceProvider pceProvider;
113 // network model beans
114 private final NetworkModelProvider networkModelProvider;
116 private final OlmProvider olmProvider;
118 private final RendererProvider rendererProvider;
119 // service-handler beans
120 private final ServicehandlerProvider servicehandlerProvider;
122 private TapiProvider tapiProvider;
123 // nbi-notifications beans
124 private NbiNotificationsProvider nbiNotificationsProvider;
126 * List of publisher topics.
128 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
129 "ServiceHandler", "RendererListener");
130 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
132 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
133 String olmtimer1, String olmtimer2) {
134 LOG.info("Initializing transaction providers ...");
135 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
136 MAX_DURATION_TO_SUBMIT_TRANSACTION);
137 networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
139 LOG.info("Creating network-model beans ...");
140 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
141 deviceTransactionManager, networkTransaction);
142 TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
143 lightyServices.getBindingDataBroker());
144 PortMapping portMapping = initPortMapping(lightyServices);
145 NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
146 portMapping, lightyServices.getBindingNotificationPublishService());
147 FrequenciesService networkModelWavelengthService =
148 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
149 NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
150 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
151 PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
152 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
153 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
154 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
156 LOG.info("Creating PCE beans ...");
157 // TODO: pass those parameters through command line
158 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
159 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
160 PathComputationService pathComputationService = new PathComputationServiceImpl(
162 lightyServices.getBindingNotificationPublishService(),
166 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
168 LOG.info("Creating OLM beans ...");
169 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
170 CrossConnect crossConnect = initCrossConnect(mappingUtils);
171 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
172 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
173 crossConnect, deviceTransactionManager, portMapping, olmtimer1, olmtimer2);
174 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
175 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
176 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
177 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
179 LOG.info("Creating renderer beans ...");
180 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
182 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
183 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
184 openRoadmInterfaces, crossConnect, portMapping);
185 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
186 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
187 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
188 otnDeviceRendererService, portMapping);
190 LOG.info("Creating service-handler beans ...");
191 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
192 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
193 lightyServices.getBindingNotificationPublishService(), portMapping);
194 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
195 lightyServices.getBindingDataBroker());
196 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
197 lightyServices.getBindingNotificationPublishService(), networkModelService);
198 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
199 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
200 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
201 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
202 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
203 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
204 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
205 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
206 lightyServices.getBindingNotificationPublishService());
207 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
208 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
209 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
210 networkModelListenerImpl, servicehandler);
212 LOG.info("Creating tapi beans ...");
213 TapiLink tapiLink = new TapiLink(networkTransaction);
214 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
215 deviceTransactionManager, tapiLink);
216 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
217 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
218 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
219 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
220 lightyServices.getBindingDataBroker());
221 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
222 networkTransaction, tapiLink);
223 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
224 tapilinkDiscoveryImpl, networkTransaction, tapiLink,
225 lightyServices.getBindingNotificationPublishService());
226 TapiNetconfTopologyListener tapiNetConfTopologyListener =
227 new TapiNetconfTopologyListener(tapiNetworkModelService);
228 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
229 TapiPortMappingListener tapiPortMappingListener =
230 new TapiPortMappingListener(tapiNetworkModelService);
231 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
232 new TapiNetworkModelListenerImpl(networkTransaction,
233 lightyServices.getBindingNotificationPublishService());
235 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
236 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
237 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
238 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
240 if (activateNbiNotification) {
241 LOG.info("Creating nbi-notifications beans ...");
242 nbiNotificationsProvider = new NbiNotificationsProvider(
243 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
244 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
250 protected boolean initProcedure() {
251 LOG.info("Initializing PCE provider ...");
253 LOG.info("Initializing network-model provider ...");
254 networkModelProvider.init();
255 LOG.info("Initializing OLM provider ...");
257 LOG.info("Initializing renderer provider ...");
258 rendererProvider.init();
259 LOG.info("Initializing service-handler provider ...");
260 servicehandlerProvider.init();
261 if (tapiProvider != null) {
262 LOG.info("Initializing tapi provider ...");
265 if (nbiNotificationsProvider != null) {
266 LOG.info("Initializing nbi-notifications provider ...");
267 nbiNotificationsProvider.init();
269 LOG.info("Init done.");
274 protected boolean stopProcedure() {
275 if (nbiNotificationsProvider != null) {
276 nbiNotificationsProvider.close();
277 LOG.info("Shutting down nbi-notifications provider ...");
279 if (tapiProvider != null) {
280 tapiProvider.close();
281 LOG.info("Shutting down service-handler provider ...");
283 servicehandlerProvider.close();
284 LOG.info("Shutting down renderer provider ...");
285 rendererProvider.close();
286 LOG.info("Shutting down OLM provider ...");
288 LOG.info("Shutting down network-model provider ...");
289 networkModelProvider.close();
290 LOG.info("Shutting down PCE provider ...");
292 LOG.info("Shutting down transaction providers ...");
293 networkTransaction.close();
294 deviceTransactionManager.preDestroy();
295 LOG.info("Shutdown done.");
299 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
300 NetworkTransactionService networkTransactionService,
301 ServiceDataStoreOperations serviceDataStoreOperations,
302 TapiNetconfTopologyListener tapiNetConfTopologyListener,
303 TapiPortMappingListener tapiPortMappingListener,
304 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
305 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
306 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
307 NotificationService notificationService, TapiOrLinkListener orLinkListener,
308 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
309 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
310 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
311 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
312 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
313 tapiNetworkModelListenerImpl);
316 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
317 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
318 PortMapping portMapping) {
319 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
320 otnDeviceRendererService);
321 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
322 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
323 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
325 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
326 rendererServiceOperations);
329 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
330 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
331 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
332 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
333 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
334 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
335 openRoadmInterfaces);
336 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
337 openRoadmInterfaces);
338 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
339 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
342 private PortMapping initPortMapping(LightyServices lightyServices) {
343 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
344 deviceTransactionManager);
345 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
346 deviceTransactionManager);
347 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
348 deviceTransactionManager);
349 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
350 portMappingVersion221, portMappingVersion121);
353 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
354 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
355 deviceTransactionManager);
356 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
357 deviceTransactionManager, portMapping);
358 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
359 deviceTransactionManager, portMapping);
360 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
361 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
364 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
365 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
366 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
367 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
368 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
369 crossConnectImpl710);