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.TapiPortMappingListener;
91 import org.opendaylight.transportpce.tapi.utils.TapiLink;
92 import org.opendaylight.transportpce.tapi.utils.TapiListener;
93 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
94 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
95 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
96 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.OrgOpenroadmServiceService;
97 import org.slf4j.Logger;
98 import org.slf4j.LoggerFactory;
101 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
102 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
103 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
105 // cannot use interface for DeviceTransactionManagerImpl
106 // because implementation has additional public methods ...
107 private final DeviceTransactionManagerImpl deviceTransactionManager;
108 private final NetworkTransactionService networkTransaction;
110 private final PceProvider pceProvider;
111 // network model beans
112 private final NetworkModelProvider networkModelProvider;
114 private final OlmProvider olmProvider;
116 private final RendererProvider rendererProvider;
118 private final TapiProvider tapiProvider;
119 // service-handler beans
120 private final ServicehandlerProvider servicehandlerProvider;
121 // nbi-notifications beans
122 private NbiNotificationsProvider nbiNotificationsProvider;
124 * List of publisher topics.
126 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
127 "ServiceHandler", "RendererListener");
128 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
130 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification,
131 String olmtimer1, String olmtimer2) {
132 LOG.info("Initializing transaction providers ...");
133 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
134 MAX_DURATION_TO_SUBMIT_TRANSACTION);
135 RequestProcessor requestProcessor = new RequestProcessor(lightyServices.getBindingDataBroker());
136 networkTransaction = new NetworkTransactionImpl(requestProcessor);
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 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
144 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils);
145 PortMapping portMapping = initPortMapping(lightyServices, openRoadmInterfaces);
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 CrossConnect crossConnect = initCrossConnect(mappingUtils);
171 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
172 crossConnect, deviceTransactionManager, olmtimer1, olmtimer2);
173 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
174 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
175 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerService);
176 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
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, networkModelService);
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 ServiceListener serviceListener = new ServiceListener(lightyServices.getBindingDataBroker(),
200 lightyServices.getBindingNotificationPublishService());
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 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 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
213 deviceTransactionManager, tapiLink);
214 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
215 .getBindingDataBroker());
216 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
217 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
218 .getBindingDataBroker());
219 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
220 networkTransaction, tapiLink);
221 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
222 tapilinkDiscoveryImpl, networkTransaction, tapiLink);
223 TapiNetconfTopologyListener tapiNetConfTopologyListener =
224 new TapiNetconfTopologyListener(tapiNetworkModelService);
225 TapiPortMappingListener tapiPortMappingListener =
226 new TapiPortMappingListener(tapiNetworkModelService);
228 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
229 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
230 tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService());
231 if (activateNbiNotification) {
232 LOG.info("Creating nbi-notifications beans ...");
233 nbiNotificationsProvider = new NbiNotificationsProvider(
234 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
235 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
240 protected boolean initProcedure() {
241 LOG.info("Initializing PCE provider ...");
243 LOG.info("Initializing network-model provider ...");
244 networkModelProvider.init();
245 LOG.info("Initializing OLM provider ...");
247 LOG.info("Initializing renderer provider ...");
248 rendererProvider.init();
249 LOG.info("Initializing service-handler provider ...");
250 servicehandlerProvider.init();
251 LOG.info("Initializing tapi provider ...");
253 if (nbiNotificationsProvider != null) {
254 LOG.info("Initializing nbi-notifications provider ...");
255 nbiNotificationsProvider.init();
257 LOG.info("Init done.");
262 protected boolean stopProcedure() {
263 nbiNotificationsProvider.close();
264 LOG.info("Shutting down nbi-notifications provider ...");
265 tapiProvider.close();
266 LOG.info("Shutting down service-handler provider ...");
267 servicehandlerProvider.close();
268 LOG.info("Shutting down renderer provider ...");
269 rendererProvider.close();
270 LOG.info("Shutting down OLM provider ...");
272 LOG.info("Shutting down network-model provider ...");
273 networkModelProvider.close();
274 LOG.info("Shutting down PCE provider ...");
276 LOG.info("Shutting down transaction providers ...");
277 networkTransaction.close();
278 deviceTransactionManager.preDestroy();
279 LOG.info("Shutdown done.");
283 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
284 NetworkTransactionService networkTransactionService,
285 ServiceDataStoreOperations serviceDataStoreOperations,
286 TapiNetconfTopologyListener tapiNetConfTopologyListener,
287 TapiPortMappingListener tapiPortMappingListener,
288 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
289 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
290 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
291 NotificationService notificationService) {
292 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
293 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
294 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
295 rendererListenerImpl, serviceHandlerListenerImpl, notificationService);
298 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
299 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
300 PortMapping portMapping) {
301 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
302 otnDeviceRendererService);
303 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
304 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
305 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
307 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
308 rendererServiceOperations);
311 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
312 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
313 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
314 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
315 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
316 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
317 openRoadmInterfaces);
318 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
319 openRoadmInterfaces);
320 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
321 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
324 private PortMapping initPortMapping(LightyServices lightyServices, OpenRoadmInterfaces openRoadmInterfaces) {
325 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
326 deviceTransactionManager, openRoadmInterfaces);
327 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
328 deviceTransactionManager, openRoadmInterfaces);
329 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
330 deviceTransactionManager, openRoadmInterfaces);
331 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
332 portMappingVersion221, portMappingVersion121);
335 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils) {
336 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
337 deviceTransactionManager);
338 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
339 deviceTransactionManager);
340 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
341 deviceTransactionManager);
342 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
343 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
346 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
347 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
348 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
349 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
350 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
351 crossConnectImpl710);