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.TapiListener;
92 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
93 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
94 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
95 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.OrgOpenroadmServiceService;
96 import org.slf4j.Logger;
97 import org.slf4j.LoggerFactory;
100 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
101 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
102 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
104 // cannot use interface for DeviceTransactionManagerImpl
105 // because implementation has additional public methods ...
106 private final DeviceTransactionManagerImpl deviceTransactionManager;
107 private final NetworkTransactionService networkTransaction;
109 private final PceProvider pceProvider;
110 // network model beans
111 private final NetworkModelProvider networkModelProvider;
113 private final OlmProvider olmProvider;
115 private final RendererProvider rendererProvider;
117 private final TapiProvider tapiProvider;
118 // service-handler beans
119 private final ServicehandlerProvider servicehandlerProvider;
120 // nbi-notifications beans
121 private NbiNotificationsProvider nbiNotificationsProvider;
123 * List of publisher topics.
125 private final List<String> publisherTopicList = Arrays.asList("PceListener", "ServiceHandlerOperations",
126 "ServiceHandler", "RendererListener");
127 private final List<String> publisherTopicAlarmList = Arrays.asList("ServiceListener");
129 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification,
130 String olmtimer1, String olmtimer2) {
131 LOG.info("Initializing transaction providers ...");
132 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
133 MAX_DURATION_TO_SUBMIT_TRANSACTION);
134 RequestProcessor requestProcessor = new RequestProcessor(lightyServices.getBindingDataBroker());
135 networkTransaction = new NetworkTransactionImpl(requestProcessor);
137 LOG.info("Creating network-model beans ...");
138 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
139 deviceTransactionManager, networkTransaction);
140 TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
141 lightyServices.getBindingDataBroker());
142 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
143 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils);
144 PortMapping portMapping = initPortMapping(lightyServices, openRoadmInterfaces);
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 CrossConnect crossConnect = initCrossConnect(mappingUtils);
170 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
171 crossConnect, deviceTransactionManager, olmtimer1, olmtimer2);
172 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
173 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
174 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerService);
175 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
177 LOG.info("Creating renderer beans ...");
178 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
180 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
181 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
182 openRoadmInterfaces, crossConnect, portMapping, networkModelService);
183 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
184 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
185 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
186 otnDeviceRendererService, portMapping);
188 LOG.info("Creating service-handler beans ...");
189 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
190 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
191 lightyServices.getBindingNotificationPublishService(), portMapping);
192 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
193 lightyServices.getBindingDataBroker());
194 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
195 lightyServices.getBindingNotificationPublishService(), networkModelService);
196 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
197 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
198 ServiceListener serviceListener = new ServiceListener(lightyServices.getBindingDataBroker(),
199 lightyServices.getBindingNotificationPublishService());
200 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
201 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
202 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
203 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
204 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations, "N/A");
205 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
206 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
207 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
208 networkModelListenerImpl, servicehandler);
210 LOG.info("Creating tapi beans ...");
211 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(lightyServices.getBindingDataBroker(),
212 deviceTransactionManager);
213 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
214 .getBindingDataBroker());
215 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
216 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
217 .getBindingDataBroker());
218 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
220 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
221 tapilinkDiscoveryImpl, networkTransaction);
222 TapiNetconfTopologyListener tapiNetConfTopologyListener =
223 new TapiNetconfTopologyListener(tapiNetworkModelService);
224 TapiPortMappingListener tapiPortMappingListener =
225 new TapiPortMappingListener(tapiNetworkModelService);
227 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
228 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
229 tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService());
230 if (activateNbiNotification) {
231 LOG.info("Creating nbi-notifications beans ...");
232 nbiNotificationsProvider = new NbiNotificationsProvider(
233 publisherTopicList, publisherTopicAlarmList, null, null, lightyServices.getRpcProviderService(),
234 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
239 protected boolean initProcedure() {
240 LOG.info("Initializing PCE provider ...");
242 LOG.info("Initializing network-model provider ...");
243 networkModelProvider.init();
244 LOG.info("Initializing OLM provider ...");
246 LOG.info("Initializing renderer provider ...");
247 rendererProvider.init();
248 LOG.info("Initializing service-handler provider ...");
249 servicehandlerProvider.init();
250 LOG.info("Initializing tapi provider ...");
252 if (nbiNotificationsProvider != null) {
253 LOG.info("Initializing nbi-notifications provider ...");
254 nbiNotificationsProvider.init();
256 LOG.info("Init done.");
261 protected boolean stopProcedure() {
262 nbiNotificationsProvider.close();
263 LOG.info("Shutting down nbi-notifications provider ...");
264 tapiProvider.close();
265 LOG.info("Shutting down service-handler provider ...");
266 servicehandlerProvider.close();
267 LOG.info("Shutting down renderer provider ...");
268 rendererProvider.close();
269 LOG.info("Shutting down OLM provider ...");
271 LOG.info("Shutting down network-model provider ...");
272 networkModelProvider.close();
273 LOG.info("Shutting down PCE provider ...");
275 LOG.info("Shutting down transaction providers ...");
276 networkTransaction.close();
277 deviceTransactionManager.preDestroy();
278 LOG.info("Shutdown done.");
282 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
283 NetworkTransactionService networkTransactionService,
284 ServiceDataStoreOperations serviceDataStoreOperations,
285 TapiNetconfTopologyListener tapiNetConfTopologyListener,
286 TapiPortMappingListener tapiPortMappingListener,
287 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
288 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
289 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
290 NotificationService notificationService) {
291 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
292 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
293 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
294 rendererListenerImpl, serviceHandlerListenerImpl, notificationService);
297 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
298 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
299 PortMapping portMapping) {
300 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
301 otnDeviceRendererService);
302 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
303 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
304 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
306 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
307 rendererServiceOperations);
310 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
311 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
312 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
313 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
314 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
315 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
316 openRoadmInterfaces);
317 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
318 openRoadmInterfaces);
319 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
320 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
323 private PortMapping initPortMapping(LightyServices lightyServices, OpenRoadmInterfaces openRoadmInterfaces) {
324 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
325 deviceTransactionManager, openRoadmInterfaces);
326 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
327 deviceTransactionManager, openRoadmInterfaces);
328 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
329 deviceTransactionManager, openRoadmInterfaces);
330 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
331 portMappingVersion221, portMappingVersion121);
334 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils) {
335 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
336 deviceTransactionManager);
337 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
338 deviceTransactionManager);
339 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
340 deviceTransactionManager);
341 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
342 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
345 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
346 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
347 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
348 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
349 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
350 crossConnectImpl710);