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.TapiPceListenerImpl;
84 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
85 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
86 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
87 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
88 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
89 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
90 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
91 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
92 import org.opendaylight.transportpce.tapi.utils.TapiLink;
93 import org.opendaylight.transportpce.tapi.utils.TapiListener;
94 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
95 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
96 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
97 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
98 import org.slf4j.Logger;
99 import org.slf4j.LoggerFactory;
102 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
103 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
104 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
106 // cannot use interface for DeviceTransactionManagerImpl
107 // because implementation has additional public methods ...
108 private final DeviceTransactionManagerImpl deviceTransactionManager;
109 private final NetworkTransactionService networkTransaction;
111 private final PceProvider pceProvider;
112 // network model beans
113 private final NetworkModelProvider networkModelProvider;
115 private final OlmProvider olmProvider;
117 private final RendererProvider rendererProvider;
118 // service-handler beans
119 private final ServicehandlerProvider servicehandlerProvider;
121 private TapiProvider tapiProvider;
122 // nbi-notifications beans
123 private NbiNotificationsProvider nbiNotificationsProvider;
125 * List of publisher topics.
127 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
128 "ServiceHandler", "RendererListener");
129 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
131 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
132 String olmtimer1, String olmtimer2) {
133 LOG.info("Initializing transaction providers ...");
134 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
135 MAX_DURATION_TO_SUBMIT_TRANSACTION);
136 RequestProcessor requestProcessor = new RequestProcessor(lightyServices.getBindingDataBroker());
137 networkTransaction = new NetworkTransactionImpl(requestProcessor);
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, olmtimer1, olmtimer2);
174 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
175 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
176 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerService);
177 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
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 ServiceListener serviceListener = new ServiceListener(lightyServices.getBindingDataBroker(),
201 lightyServices.getBindingNotificationPublishService());
202 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
203 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
204 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
205 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
206 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
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());
218 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
219 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
220 .getBindingDataBroker());
221 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
222 networkTransaction, tapiLink);
223 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
224 tapilinkDiscoveryImpl, networkTransaction, tapiLink);
225 TapiNetconfTopologyListener tapiNetConfTopologyListener =
226 new TapiNetconfTopologyListener(tapiNetworkModelService);
227 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
228 TapiPortMappingListener tapiPortMappingListener =
229 new TapiPortMappingListener(tapiNetworkModelService);
231 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
232 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
233 tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService(),
236 if (activateNbiNotification) {
237 LOG.info("Creating nbi-notifications beans ...");
238 nbiNotificationsProvider = new NbiNotificationsProvider(
239 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
240 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
245 protected boolean initProcedure() {
246 LOG.info("Initializing PCE provider ...");
248 LOG.info("Initializing network-model provider ...");
249 networkModelProvider.init();
250 LOG.info("Initializing OLM provider ...");
252 LOG.info("Initializing renderer provider ...");
253 rendererProvider.init();
254 LOG.info("Initializing service-handler provider ...");
255 servicehandlerProvider.init();
256 if (tapiProvider != null) {
257 LOG.info("Initializing tapi provider ...");
260 if (nbiNotificationsProvider != null) {
261 LOG.info("Initializing nbi-notifications provider ...");
262 nbiNotificationsProvider.init();
264 LOG.info("Init done.");
269 protected boolean stopProcedure() {
270 if (nbiNotificationsProvider != null) {
271 nbiNotificationsProvider.close();
272 LOG.info("Shutting down nbi-notifications provider ...");
274 if (tapiProvider != null) {
275 tapiProvider.close();
276 LOG.info("Shutting down service-handler provider ...");
278 servicehandlerProvider.close();
279 LOG.info("Shutting down renderer provider ...");
280 rendererProvider.close();
281 LOG.info("Shutting down OLM provider ...");
283 LOG.info("Shutting down network-model provider ...");
284 networkModelProvider.close();
285 LOG.info("Shutting down PCE provider ...");
287 LOG.info("Shutting down transaction providers ...");
288 networkTransaction.close();
289 deviceTransactionManager.preDestroy();
290 LOG.info("Shutdown done.");
294 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
295 NetworkTransactionService networkTransactionService,
296 ServiceDataStoreOperations serviceDataStoreOperations,
297 TapiNetconfTopologyListener tapiNetConfTopologyListener,
298 TapiPortMappingListener tapiPortMappingListener,
299 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
300 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
301 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
302 NotificationService notificationService, TapiOrLinkListener orLinkListener) {
303 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
304 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
305 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
306 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener);
309 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
310 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
311 PortMapping portMapping) {
312 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
313 otnDeviceRendererService);
314 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
315 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
316 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
318 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
319 rendererServiceOperations);
322 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
323 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
324 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
325 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
326 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
327 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
328 openRoadmInterfaces);
329 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
330 openRoadmInterfaces);
331 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
332 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
335 private PortMapping initPortMapping(LightyServices lightyServices) {
336 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
337 deviceTransactionManager);
338 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
339 deviceTransactionManager);
340 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
341 deviceTransactionManager);
342 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
343 portMappingVersion221, portMappingVersion121);
346 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
347 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
348 deviceTransactionManager);
349 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
350 deviceTransactionManager, portMapping, portMapping.getPortMappingVersion221());
351 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
352 deviceTransactionManager, portMapping, portMapping.getPortMappingVersion710());
353 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
354 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
357 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
358 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
359 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
360 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
361 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
362 crossConnectImpl710);