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> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
126 "ServiceHandler", "RendererListener");
127 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
129 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification) {
130 LOG.info("Initializing transaction providers ...");
131 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
132 MAX_DURATION_TO_SUBMIT_TRANSACTION);
133 RequestProcessor requestProcessor = new RequestProcessor(lightyServices.getBindingDataBroker());
134 networkTransaction = new NetworkTransactionImpl(requestProcessor);
136 LOG.info("Creating network-model beans ...");
137 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
138 deviceTransactionManager, networkTransaction);
139 TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
140 lightyServices.getBindingDataBroker());
141 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
142 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils);
143 PortMapping portMapping = initPortMapping(lightyServices, openRoadmInterfaces);
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 CrossConnect crossConnect = initCrossConnect(mappingUtils);
169 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
170 crossConnect, deviceTransactionManager);
171 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
172 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
173 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerService);
174 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
176 LOG.info("Creating renderer beans ...");
177 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
179 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
180 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
181 openRoadmInterfaces, crossConnect, portMapping, networkModelService);
182 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
183 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
184 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
185 otnDeviceRendererService, portMapping);
187 LOG.info("Creating service-handler beans ...");
188 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
189 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
190 lightyServices.getBindingNotificationPublishService(), portMapping);
191 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
192 lightyServices.getBindingDataBroker());
193 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
194 lightyServices.getBindingNotificationPublishService(), networkModelService);
195 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
196 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
197 ServiceListener serviceListener = new ServiceListener(lightyServices.getBindingDataBroker(),
198 lightyServices.getBindingNotificationPublishService());
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 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
205 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
206 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
207 networkModelListenerImpl, servicehandler);
209 LOG.info("Creating tapi beans ...");
210 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(lightyServices.getBindingDataBroker(),
211 deviceTransactionManager);
212 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
213 .getBindingDataBroker());
214 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
215 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
216 .getBindingDataBroker());
217 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
219 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
220 tapilinkDiscoveryImpl, networkTransaction);
221 TapiNetconfTopologyListener tapiNetConfTopologyListener =
222 new TapiNetconfTopologyListener(tapiNetworkModelService);
223 TapiPortMappingListener tapiPortMappingListener =
224 new TapiPortMappingListener(tapiNetworkModelService);
226 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
227 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
228 tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService());
229 if (activateNbiNotification) {
230 LOG.info("Creating nbi-notifications beans ...");
231 nbiNotificationsProvider = new NbiNotificationsProvider(
232 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
233 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
238 protected boolean initProcedure() {
239 LOG.info("Initializing PCE provider ...");
241 LOG.info("Initializing network-model provider ...");
242 networkModelProvider.init();
243 LOG.info("Initializing OLM provider ...");
245 LOG.info("Initializing renderer provider ...");
246 rendererProvider.init();
247 LOG.info("Initializing service-handler provider ...");
248 servicehandlerProvider.init();
249 LOG.info("Initializing tapi provider ...");
251 if (nbiNotificationsProvider != null) {
252 LOG.info("Initializing nbi-notifications provider ...");
253 nbiNotificationsProvider.init();
255 LOG.info("Init done.");
260 protected boolean stopProcedure() {
261 nbiNotificationsProvider.close();
262 LOG.info("Shutting down nbi-notifications provider ...");
263 tapiProvider.close();
264 LOG.info("Shutting down service-handler provider ...");
265 servicehandlerProvider.close();
266 LOG.info("Shutting down renderer provider ...");
267 rendererProvider.close();
268 LOG.info("Shutting down OLM provider ...");
270 LOG.info("Shutting down network-model provider ...");
271 networkModelProvider.close();
272 LOG.info("Shutting down PCE provider ...");
274 LOG.info("Shutting down transaction providers ...");
275 networkTransaction.close();
276 deviceTransactionManager.preDestroy();
277 LOG.info("Shutdown done.");
281 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
282 NetworkTransactionService networkTransactionService,
283 ServiceDataStoreOperations serviceDataStoreOperations,
284 TapiNetconfTopologyListener tapiNetConfTopologyListener,
285 TapiPortMappingListener tapiPortMappingListener,
286 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
287 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
288 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
289 NotificationService notificationService) {
290 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
291 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
292 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
293 rendererListenerImpl, serviceHandlerListenerImpl, notificationService);
296 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
297 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
298 PortMapping portMapping) {
299 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
300 otnDeviceRendererService);
301 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
302 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
303 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
305 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
306 rendererServiceOperations);
309 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
310 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
311 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
312 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
313 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
314 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
315 openRoadmInterfaces);
316 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
317 openRoadmInterfaces);
318 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
319 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
322 private PortMapping initPortMapping(LightyServices lightyServices, OpenRoadmInterfaces openRoadmInterfaces) {
323 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
324 deviceTransactionManager, openRoadmInterfaces);
325 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
326 deviceTransactionManager, openRoadmInterfaces);
327 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
328 deviceTransactionManager, openRoadmInterfaces);
329 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
330 portMappingVersion221, portMappingVersion121);
333 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils) {
334 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
335 deviceTransactionManager);
336 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
337 deviceTransactionManager);
338 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
339 deviceTransactionManager);
340 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
341 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
344 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
345 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
346 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
347 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
348 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
349 crossConnectImpl710);