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.openroadminterfaces.OpenRoadmInterfaces;
31 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
32 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
33 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
34 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
35 import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
36 import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener;
37 import org.opendaylight.transportpce.networkmodel.NetworkModelProvider;
38 import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl;
39 import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
40 import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
41 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
42 import org.opendaylight.transportpce.networkmodel.service.FrequenciesServiceImpl;
43 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
44 import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl;
45 import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl;
46 import org.opendaylight.transportpce.olm.OlmProvider;
47 import org.opendaylight.transportpce.olm.power.PowerMgmt;
48 import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
49 import org.opendaylight.transportpce.olm.service.OlmPowerService;
50 import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
51 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
52 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl;
53 import org.opendaylight.transportpce.pce.impl.PceProvider;
54 import org.opendaylight.transportpce.pce.service.PathComputationService;
55 import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
56 import org.opendaylight.transportpce.renderer.RendererProvider;
57 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface121;
58 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221;
59 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface710;
60 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
61 // Adding OTN interface
62 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface221;
63 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface710;
64 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
65 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
66 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
68 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
69 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
70 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
71 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
72 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
73 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
74 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
75 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
76 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
77 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
78 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
79 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
80 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
81 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
82 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
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.rev220630.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 networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
138 LOG.info("Creating network-model beans ...");
139 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
140 deviceTransactionManager, networkTransaction);
141 TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
142 lightyServices.getBindingDataBroker());
143 PortMapping portMapping = initPortMapping(lightyServices);
144 NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
145 portMapping, lightyServices.getBindingNotificationPublishService());
146 FrequenciesService networkModelWavelengthService =
147 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
148 NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
149 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
150 PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
151 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
152 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
153 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
155 LOG.info("Creating PCE beans ...");
156 // TODO: pass those parameters through command line
157 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
158 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
159 PathComputationService pathComputationService = new PathComputationServiceImpl(
161 lightyServices.getBindingNotificationPublishService(),
165 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
167 LOG.info("Creating OLM beans ...");
168 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
169 CrossConnect crossConnect = initCrossConnect(mappingUtils);
170 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
171 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
172 crossConnect, deviceTransactionManager, portMapping, olmtimer1, olmtimer2);
173 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
174 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
175 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
176 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
178 LOG.info("Creating renderer beans ...");
179 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
181 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
182 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
183 openRoadmInterfaces, crossConnect, portMapping);
184 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
185 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
186 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
187 otnDeviceRendererService, portMapping);
189 LOG.info("Creating service-handler beans ...");
190 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
191 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
192 lightyServices.getBindingNotificationPublishService(), portMapping);
193 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
194 lightyServices.getBindingDataBroker());
195 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
196 lightyServices.getBindingNotificationPublishService(), networkModelService);
197 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
198 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
199 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
200 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
201 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
202 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
203 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
204 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
205 lightyServices.getBindingNotificationPublishService());
206 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
207 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
208 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
209 networkModelListenerImpl, servicehandler);
211 LOG.info("Creating tapi beans ...");
212 TapiLink tapiLink = new TapiLink(networkTransaction);
213 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
214 deviceTransactionManager, tapiLink);
215 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
216 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
217 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
218 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
219 lightyServices.getBindingDataBroker());
220 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
221 networkTransaction, tapiLink);
222 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
223 tapilinkDiscoveryImpl, networkTransaction, tapiLink,
224 lightyServices.getBindingNotificationPublishService());
225 TapiNetconfTopologyListener tapiNetConfTopologyListener =
226 new TapiNetconfTopologyListener(tapiNetworkModelService);
227 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
228 TapiPortMappingListener tapiPortMappingListener =
229 new TapiPortMappingListener(tapiNetworkModelService);
230 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
231 new TapiNetworkModelListenerImpl(networkTransaction,
232 lightyServices.getBindingNotificationPublishService());
234 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
235 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
236 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
237 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
239 if (activateNbiNotification) {
240 LOG.info("Creating nbi-notifications beans ...");
241 nbiNotificationsProvider = new NbiNotificationsProvider(
242 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
243 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
249 protected boolean initProcedure() {
250 LOG.info("Initializing PCE provider ...");
252 LOG.info("Initializing network-model provider ...");
253 networkModelProvider.init();
254 LOG.info("Initializing OLM provider ...");
256 LOG.info("Initializing renderer provider ...");
257 rendererProvider.init();
258 LOG.info("Initializing service-handler provider ...");
259 servicehandlerProvider.init();
260 if (tapiProvider != null) {
261 LOG.info("Initializing tapi provider ...");
264 if (nbiNotificationsProvider != null) {
265 LOG.info("Initializing nbi-notifications provider ...");
266 nbiNotificationsProvider.init();
268 LOG.info("Init done.");
273 protected boolean stopProcedure() {
274 if (nbiNotificationsProvider != null) {
275 nbiNotificationsProvider.close();
276 LOG.info("Shutting down nbi-notifications provider ...");
278 if (tapiProvider != null) {
279 tapiProvider.close();
280 LOG.info("Shutting down service-handler provider ...");
282 servicehandlerProvider.close();
283 LOG.info("Shutting down renderer provider ...");
284 rendererProvider.close();
285 LOG.info("Shutting down OLM provider ...");
287 LOG.info("Shutting down network-model provider ...");
288 networkModelProvider.close();
289 LOG.info("Shutting down PCE provider ...");
291 LOG.info("Shutting down transaction providers ...");
292 deviceTransactionManager.preDestroy();
293 LOG.info("Shutdown done.");
297 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
298 NetworkTransactionService networkTransactionService,
299 ServiceDataStoreOperations serviceDataStoreOperations,
300 TapiNetconfTopologyListener tapiNetConfTopologyListener,
301 TapiPortMappingListener tapiPortMappingListener,
302 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
303 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
304 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
305 NotificationService notificationService, TapiOrLinkListener orLinkListener,
306 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
307 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
308 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
309 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
310 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
311 tapiNetworkModelListenerImpl);
314 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
315 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
316 PortMapping portMapping) {
317 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
318 otnDeviceRendererService);
319 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
320 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
321 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
323 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
324 rendererServiceOperations);
327 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
328 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
329 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
330 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
331 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
332 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
333 openRoadmInterfaces);
334 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
335 openRoadmInterfaces);
336 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
337 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
340 private PortMapping initPortMapping(LightyServices lightyServices) {
341 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
342 deviceTransactionManager);
343 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
344 deviceTransactionManager);
345 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
346 deviceTransactionManager);
347 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
348 portMappingVersion221, portMappingVersion121);
351 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
352 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
353 deviceTransactionManager);
354 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
355 deviceTransactionManager, portMapping);
356 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
357 deviceTransactionManager, portMapping);
358 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
359 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
362 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
363 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
364 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
365 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
366 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
367 crossConnectImpl710);