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.rev190531.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;
119 private final TapiProvider tapiProvider;
120 // service-handler beans
121 private final ServicehandlerProvider servicehandlerProvider;
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,
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 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
145 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils);
146 PortMapping portMapping = initPortMapping(lightyServices, openRoadmInterfaces);
147 NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
148 portMapping, lightyServices.getBindingNotificationPublishService());
149 FrequenciesService networkModelWavelengthService =
150 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
151 NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
152 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
153 PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
154 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
155 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
156 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
158 LOG.info("Creating PCE beans ...");
159 // TODO: pass those parameters through command line
160 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
161 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
162 PathComputationService pathComputationService = new PathComputationServiceImpl(
164 lightyServices.getBindingNotificationPublishService(),
168 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
170 LOG.info("Creating OLM beans ...");
171 CrossConnect crossConnect = initCrossConnect(mappingUtils);
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, networkModelService);
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 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
214 deviceTransactionManager, tapiLink);
215 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
216 .getBindingDataBroker());
217 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
218 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
219 .getBindingDataBroker());
220 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
221 networkTransaction, tapiLink);
222 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
223 tapilinkDiscoveryImpl, networkTransaction, tapiLink);
224 TapiNetconfTopologyListener tapiNetConfTopologyListener =
225 new TapiNetconfTopologyListener(tapiNetworkModelService);
226 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
227 TapiPortMappingListener tapiPortMappingListener =
228 new TapiPortMappingListener(tapiNetworkModelService);
230 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
231 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
232 tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService(),
234 if (activateNbiNotification) {
235 LOG.info("Creating nbi-notifications beans ...");
236 nbiNotificationsProvider = new NbiNotificationsProvider(
237 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
238 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
243 protected boolean initProcedure() {
244 LOG.info("Initializing PCE provider ...");
246 LOG.info("Initializing network-model provider ...");
247 networkModelProvider.init();
248 LOG.info("Initializing OLM provider ...");
250 LOG.info("Initializing renderer provider ...");
251 rendererProvider.init();
252 LOG.info("Initializing service-handler provider ...");
253 servicehandlerProvider.init();
254 LOG.info("Initializing tapi provider ...");
256 if (nbiNotificationsProvider != null) {
257 LOG.info("Initializing nbi-notifications provider ...");
258 nbiNotificationsProvider.init();
260 LOG.info("Init done.");
265 protected boolean stopProcedure() {
266 nbiNotificationsProvider.close();
267 LOG.info("Shutting down nbi-notifications provider ...");
268 tapiProvider.close();
269 LOG.info("Shutting down service-handler provider ...");
270 servicehandlerProvider.close();
271 LOG.info("Shutting down renderer provider ...");
272 rendererProvider.close();
273 LOG.info("Shutting down OLM provider ...");
275 LOG.info("Shutting down network-model provider ...");
276 networkModelProvider.close();
277 LOG.info("Shutting down PCE provider ...");
279 LOG.info("Shutting down transaction providers ...");
280 networkTransaction.close();
281 deviceTransactionManager.preDestroy();
282 LOG.info("Shutdown done.");
286 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
287 NetworkTransactionService networkTransactionService,
288 ServiceDataStoreOperations serviceDataStoreOperations,
289 TapiNetconfTopologyListener tapiNetConfTopologyListener,
290 TapiPortMappingListener tapiPortMappingListener,
291 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
292 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
293 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
294 NotificationService notificationService, TapiOrLinkListener orLinkListener) {
295 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
296 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
297 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
298 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener);
301 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
302 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
303 PortMapping portMapping) {
304 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
305 otnDeviceRendererService);
306 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
307 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
308 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
310 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
311 rendererServiceOperations);
314 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
315 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
316 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
317 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
318 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
319 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
320 openRoadmInterfaces);
321 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
322 openRoadmInterfaces);
323 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
324 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
327 private PortMapping initPortMapping(LightyServices lightyServices, OpenRoadmInterfaces openRoadmInterfaces) {
328 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
329 deviceTransactionManager, openRoadmInterfaces);
330 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
331 deviceTransactionManager, openRoadmInterfaces);
332 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
333 deviceTransactionManager, openRoadmInterfaces);
334 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
335 portMappingVersion221, portMappingVersion121);
338 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils) {
339 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
340 deviceTransactionManager);
341 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
342 deviceTransactionManager);
343 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
344 deviceTransactionManager);
345 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
346 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
349 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
350 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
351 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
352 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
353 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
354 crossConnectImpl710);