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.rev170818.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 RequestProcessor requestProcessor = new RequestProcessor(lightyServices.getBindingDataBroker());
138 networkTransaction = new NetworkTransactionImpl(requestProcessor);
140 LOG.info("Creating network-model beans ...");
141 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
142 deviceTransactionManager, networkTransaction);
143 TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
144 lightyServices.getBindingDataBroker());
145 PortMapping portMapping = initPortMapping(lightyServices);
146 NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
147 portMapping, lightyServices.getBindingNotificationPublishService());
148 FrequenciesService networkModelWavelengthService =
149 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
150 NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
151 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
152 PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
153 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
154 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
155 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
157 LOG.info("Creating PCE beans ...");
158 // TODO: pass those parameters through command line
159 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
160 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
161 PathComputationService pathComputationService = new PathComputationServiceImpl(
163 lightyServices.getBindingNotificationPublishService(),
167 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
169 LOG.info("Creating OLM beans ...");
170 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
171 CrossConnect crossConnect = initCrossConnect(mappingUtils);
172 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
173 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
174 crossConnect, deviceTransactionManager, olmtimer1, olmtimer2);
175 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
176 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
177 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerService);
178 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
180 LOG.info("Creating renderer beans ...");
181 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
183 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
184 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
185 openRoadmInterfaces, crossConnect, portMapping);
186 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
187 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
188 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
189 otnDeviceRendererService, portMapping);
191 LOG.info("Creating service-handler beans ...");
192 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
193 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
194 lightyServices.getBindingNotificationPublishService(), portMapping);
195 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
196 lightyServices.getBindingDataBroker());
197 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
198 lightyServices.getBindingNotificationPublishService(), networkModelService);
199 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
200 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
201 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
202 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
203 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
204 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
205 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
206 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
207 lightyServices.getBindingNotificationPublishService());
208 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
209 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
210 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
211 networkModelListenerImpl, servicehandler);
213 LOG.info("Creating tapi beans ...");
214 TapiLink tapiLink = new TapiLink(networkTransaction);
215 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
216 deviceTransactionManager, tapiLink);
217 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
218 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
219 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
220 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
221 lightyServices.getBindingDataBroker());
222 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
223 networkTransaction, tapiLink);
224 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
225 tapilinkDiscoveryImpl, networkTransaction, tapiLink,
226 lightyServices.getBindingNotificationPublishService());
227 TapiNetconfTopologyListener tapiNetConfTopologyListener =
228 new TapiNetconfTopologyListener(tapiNetworkModelService);
229 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
230 TapiPortMappingListener tapiPortMappingListener =
231 new TapiPortMappingListener(tapiNetworkModelService);
232 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
233 new TapiNetworkModelListenerImpl(networkTransaction,
234 lightyServices.getBindingNotificationPublishService());
236 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
237 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
238 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
239 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
241 if (activateNbiNotification) {
242 LOG.info("Creating nbi-notifications beans ...");
243 nbiNotificationsProvider = new NbiNotificationsProvider(
244 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
245 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
251 protected boolean initProcedure() {
252 LOG.info("Initializing PCE provider ...");
254 LOG.info("Initializing network-model provider ...");
255 networkModelProvider.init();
256 LOG.info("Initializing OLM provider ...");
258 LOG.info("Initializing renderer provider ...");
259 rendererProvider.init();
260 LOG.info("Initializing service-handler provider ...");
261 servicehandlerProvider.init();
262 if (tapiProvider != null) {
263 LOG.info("Initializing tapi provider ...");
266 if (nbiNotificationsProvider != null) {
267 LOG.info("Initializing nbi-notifications provider ...");
268 nbiNotificationsProvider.init();
270 LOG.info("Init done.");
275 protected boolean stopProcedure() {
276 if (nbiNotificationsProvider != null) {
277 nbiNotificationsProvider.close();
278 LOG.info("Shutting down nbi-notifications provider ...");
280 if (tapiProvider != null) {
281 tapiProvider.close();
282 LOG.info("Shutting down service-handler provider ...");
284 servicehandlerProvider.close();
285 LOG.info("Shutting down renderer provider ...");
286 rendererProvider.close();
287 LOG.info("Shutting down OLM provider ...");
289 LOG.info("Shutting down network-model provider ...");
290 networkModelProvider.close();
291 LOG.info("Shutting down PCE provider ...");
293 LOG.info("Shutting down transaction providers ...");
294 networkTransaction.close();
295 deviceTransactionManager.preDestroy();
296 LOG.info("Shutdown done.");
300 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
301 NetworkTransactionService networkTransactionService,
302 ServiceDataStoreOperations serviceDataStoreOperations,
303 TapiNetconfTopologyListener tapiNetConfTopologyListener,
304 TapiPortMappingListener tapiPortMappingListener,
305 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
306 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
307 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
308 NotificationService notificationService, TapiOrLinkListener orLinkListener,
309 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
310 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
311 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
312 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
313 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
314 tapiNetworkModelListenerImpl);
317 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
318 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
319 PortMapping portMapping) {
320 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
321 otnDeviceRendererService);
322 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
323 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
324 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
326 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
327 rendererServiceOperations);
330 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
331 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
332 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
333 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
334 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
335 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
336 openRoadmInterfaces);
337 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
338 openRoadmInterfaces);
339 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
340 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
343 private PortMapping initPortMapping(LightyServices lightyServices) {
344 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
345 deviceTransactionManager);
346 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
347 deviceTransactionManager);
348 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
349 deviceTransactionManager);
350 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
351 portMappingVersion221, portMappingVersion121);
354 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
355 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
356 deviceTransactionManager);
357 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
358 deviceTransactionManager, portMapping, portMapping.getPortMappingVersion221());
359 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
360 deviceTransactionManager, portMapping, portMapping.getPortMappingVersion710());
361 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
362 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
365 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
366 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
367 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
368 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
369 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
370 crossConnectImpl710);