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.device.DeviceTransactionManagerImpl;
20 import org.opendaylight.transportpce.common.mapping.MappingUtils;
21 import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
22 import org.opendaylight.transportpce.common.mapping.PortMapping;
23 import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
24 import org.opendaylight.transportpce.common.mapping.PortMappingVersion121;
25 import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
26 import org.opendaylight.transportpce.common.mapping.PortMappingVersion710;
27 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
28 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
29 import org.opendaylight.transportpce.common.network.RequestProcessor;
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.provisiondevice.DeviceRendererService;
64 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
65 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
67 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
68 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
69 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
70 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
71 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
72 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
73 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
74 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
75 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
76 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
77 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
78 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
79 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
80 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
81 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
82 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
83 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
84 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
85 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
86 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
87 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
88 import org.opendaylight.transportpce.tapi.utils.TapiListener;
89 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
90 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.TransportpceOlmService;
91 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
92 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.OrgOpenroadmServiceService;
93 import org.slf4j.Logger;
94 import org.slf4j.LoggerFactory;
97 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
98 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
99 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
101 // cannot use interface for DeviceTransactionManagerImpl
102 // because implementation has additional public methods ...
103 private final DeviceTransactionManagerImpl deviceTransactionManager;
104 private final NetworkTransactionService networkTransaction;
106 private final PceProvider pceProvider;
107 // network model beans
108 private final NetworkModelProvider networkModelProvider;
110 private final OlmProvider olmProvider;
112 private final RendererProvider rendererProvider;
114 private final TapiProvider tapiProvider;
115 // service-handler beans
116 private final ServicehandlerProvider servicehandlerProvider;
117 // nbi-notifications beans
118 private NbiNotificationsProvider nbiNotificationsProvider;
120 * List of publisher topics.
122 private final List<String> publisherTopicList =
123 Arrays.asList("PceListener", "ServiceHandlerOperations", "ServiceHandler", "RendererListener");
125 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification) {
126 LOG.info("Initializing transaction providers ...");
127 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
128 MAX_DURATION_TO_SUBMIT_TRANSACTION);
129 RequestProcessor requestProcessor = new RequestProcessor(lightyServices.getBindingDataBroker());
130 networkTransaction = new NetworkTransactionImpl(requestProcessor);
132 LOG.info("Creating network-model beans ...");
133 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
134 deviceTransactionManager, networkTransaction);
135 TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
136 lightyServices.getBindingDataBroker());
137 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
138 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils);
139 PortMapping portMapping = initPortMapping(lightyServices, openRoadmInterfaces);
140 NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
141 portMapping, lightyServices.getBindingNotificationPublishService());
142 FrequenciesService networkModelWavelengthService =
143 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
144 NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
145 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
146 PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
147 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
148 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
149 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
151 LOG.info("Creating PCE beans ...");
152 // TODO: pass those parameters through command line
153 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
154 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
155 PathComputationService pathComputationService = new PathComputationServiceImpl(
157 lightyServices.getBindingNotificationPublishService(),
161 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
163 LOG.info("Creating OLM beans ...");
164 CrossConnect crossConnect = initCrossConnect(mappingUtils);
165 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
166 crossConnect, deviceTransactionManager);
167 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
168 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
169 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerService);
170 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
172 LOG.info("Creating renderer beans ...");
173 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
175 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
176 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
177 openRoadmInterfaces, crossConnect, portMapping, networkModelService);
178 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
179 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
180 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
181 otnDeviceRendererService);
183 LOG.info("Creating service-handler beans ...");
184 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
185 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
186 lightyServices.getBindingNotificationPublishService());
187 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
188 lightyServices.getBindingDataBroker());
189 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
190 lightyServices.getBindingNotificationPublishService());
191 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
192 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
193 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
194 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
195 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
196 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
197 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations, "N/A");
198 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
199 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
200 serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
203 LOG.info("Creating tapi beans ...");
204 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(lightyServices.getBindingDataBroker(),
205 deviceTransactionManager);
206 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
207 .getBindingDataBroker());
208 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
209 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
210 .getBindingDataBroker());
211 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
213 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
214 tapilinkDiscoveryImpl, networkTransaction);
215 TapiNetconfTopologyListener tapiNetConfTopologyListener =
216 new TapiNetconfTopologyListener(tapiNetworkModelService);
217 TapiPortMappingListener tapiPortMappingListener =
218 new TapiPortMappingListener(tapiNetworkModelService);
220 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
221 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
222 tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService());
223 if (activateNbiNotification) {
224 LOG.info("Creating nbi-notifications beans ...");
225 nbiNotificationsProvider = new NbiNotificationsProvider(
226 publisherTopicList, null, null, lightyServices.getRpcProviderService(),
227 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
232 protected boolean initProcedure() {
233 LOG.info("Initializing PCE provider ...");
235 LOG.info("Initializing network-model provider ...");
236 networkModelProvider.init();
237 LOG.info("Initializing OLM provider ...");
239 LOG.info("Initializing renderer provider ...");
240 rendererProvider.init();
241 LOG.info("Initializing service-handler provider ...");
242 servicehandlerProvider.init();
243 LOG.info("Initializing tapi provider ...");
245 if (nbiNotificationsProvider != null) {
246 LOG.info("Initializing nbi-notifications provider ...");
247 nbiNotificationsProvider.init();
249 LOG.info("Init done.");
254 protected boolean stopProcedure() {
255 nbiNotificationsProvider.close();
256 LOG.info("Shutting down nbi-notifications provider ...");
257 tapiProvider.close();
258 LOG.info("Shutting down service-handler provider ...");
259 servicehandlerProvider.close();
260 LOG.info("Shutting down renderer provider ...");
261 rendererProvider.close();
262 LOG.info("Shutting down OLM provider ...");
264 LOG.info("Shutting down network-model provider ...");
265 networkModelProvider.close();
266 LOG.info("Shutting down PCE provider ...");
268 LOG.info("Shutting down transaction providers ...");
269 networkTransaction.close();
270 deviceTransactionManager.preDestroy();
271 LOG.info("Shutdown done.");
275 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
276 NetworkTransactionService networkTransactionService,
277 ServiceDataStoreOperations serviceDataStoreOperations,
278 TapiNetconfTopologyListener tapiNetConfTopologyListener,
279 TapiPortMappingListener tapiPortMappingListener,
280 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
281 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
282 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
283 NotificationService notificationService) {
284 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
285 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
286 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
287 rendererListenerImpl, serviceHandlerListenerImpl, notificationService);
290 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
291 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService) {
292 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
293 otnDeviceRendererService);
294 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
295 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
296 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
297 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
298 rendererServiceOperations);
301 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
302 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
303 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
304 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
305 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
306 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
307 openRoadmInterfaces);
308 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
309 openRoadmInterface710, openRoadmOtnInterface221);
312 private PortMapping initPortMapping(LightyServices lightyServices, OpenRoadmInterfaces openRoadmInterfaces) {
313 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
314 deviceTransactionManager, openRoadmInterfaces);
315 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
316 deviceTransactionManager, openRoadmInterfaces);
317 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
318 deviceTransactionManager, openRoadmInterfaces);
319 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
320 portMappingVersion221, portMappingVersion121);
323 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils) {
324 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
325 deviceTransactionManager);
326 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
327 deviceTransactionManager);
328 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
329 deviceTransactionManager);
330 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
331 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
334 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
335 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
336 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
337 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221);