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.service.ServiceDataStoreOperations;
79 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
80 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
81 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
82 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
83 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
84 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
85 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
86 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
87 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
88 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
89 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
90 import org.opendaylight.transportpce.tapi.utils.TapiListener;
91 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
92 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
93 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
94 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.OrgOpenroadmServiceService;
95 import org.slf4j.Logger;
96 import org.slf4j.LoggerFactory;
99 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
100 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
101 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
103 // cannot use interface for DeviceTransactionManagerImpl
104 // because implementation has additional public methods ...
105 private final DeviceTransactionManagerImpl deviceTransactionManager;
106 private final NetworkTransactionService networkTransaction;
108 private final PceProvider pceProvider;
109 // network model beans
110 private final NetworkModelProvider networkModelProvider;
112 private final OlmProvider olmProvider;
114 private final RendererProvider rendererProvider;
116 private final TapiProvider tapiProvider;
117 // service-handler beans
118 private final ServicehandlerProvider servicehandlerProvider;
119 // nbi-notifications beans
120 private NbiNotificationsProvider nbiNotificationsProvider;
122 * List of publisher topics.
124 private final List<String> publisherTopicList =
125 Arrays.asList("PceListener", "ServiceHandlerOperations", "ServiceHandler", "RendererListener");
127 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification) {
128 LOG.info("Initializing transaction providers ...");
129 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
130 MAX_DURATION_TO_SUBMIT_TRANSACTION);
131 RequestProcessor requestProcessor = new RequestProcessor(lightyServices.getBindingDataBroker());
132 networkTransaction = new NetworkTransactionImpl(requestProcessor);
134 LOG.info("Creating network-model beans ...");
135 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
136 deviceTransactionManager, networkTransaction);
137 TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
138 lightyServices.getBindingDataBroker());
139 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
140 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils);
141 PortMapping portMapping = initPortMapping(lightyServices, openRoadmInterfaces);
142 NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
143 portMapping, lightyServices.getBindingNotificationPublishService());
144 FrequenciesService networkModelWavelengthService =
145 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
146 NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
147 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
148 PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
149 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
150 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
151 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
153 LOG.info("Creating PCE beans ...");
154 // TODO: pass those parameters through command line
155 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
156 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
157 PathComputationService pathComputationService = new PathComputationServiceImpl(
159 lightyServices.getBindingNotificationPublishService(),
163 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
165 LOG.info("Creating OLM beans ...");
166 CrossConnect crossConnect = initCrossConnect(mappingUtils);
167 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
168 crossConnect, deviceTransactionManager);
169 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
170 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
171 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerService);
172 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
174 LOG.info("Creating renderer beans ...");
175 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
177 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
178 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
179 openRoadmInterfaces, crossConnect, portMapping, networkModelService);
180 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
181 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
182 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
183 otnDeviceRendererService, portMapping);
185 LOG.info("Creating service-handler beans ...");
186 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
187 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
188 lightyServices.getBindingNotificationPublishService(), portMapping);
189 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
190 lightyServices.getBindingDataBroker());
191 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
192 lightyServices.getBindingNotificationPublishService());
193 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
194 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
195 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
196 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
197 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
198 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
199 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations, "N/A");
200 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
201 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
202 serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
205 LOG.info("Creating tapi beans ...");
206 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(lightyServices.getBindingDataBroker(),
207 deviceTransactionManager);
208 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
209 .getBindingDataBroker());
210 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
211 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
212 .getBindingDataBroker());
213 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
215 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
216 tapilinkDiscoveryImpl, networkTransaction);
217 TapiNetconfTopologyListener tapiNetConfTopologyListener =
218 new TapiNetconfTopologyListener(tapiNetworkModelService);
219 TapiPortMappingListener tapiPortMappingListener =
220 new TapiPortMappingListener(tapiNetworkModelService);
222 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
223 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
224 tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService());
225 if (activateNbiNotification) {
226 LOG.info("Creating nbi-notifications beans ...");
227 nbiNotificationsProvider = new NbiNotificationsProvider(
228 publisherTopicList, null, null, lightyServices.getRpcProviderService(),
229 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
234 protected boolean initProcedure() {
235 LOG.info("Initializing PCE provider ...");
237 LOG.info("Initializing network-model provider ...");
238 networkModelProvider.init();
239 LOG.info("Initializing OLM provider ...");
241 LOG.info("Initializing renderer provider ...");
242 rendererProvider.init();
243 LOG.info("Initializing service-handler provider ...");
244 servicehandlerProvider.init();
245 LOG.info("Initializing tapi provider ...");
247 if (nbiNotificationsProvider != null) {
248 LOG.info("Initializing nbi-notifications provider ...");
249 nbiNotificationsProvider.init();
251 LOG.info("Init done.");
256 protected boolean stopProcedure() {
257 nbiNotificationsProvider.close();
258 LOG.info("Shutting down nbi-notifications provider ...");
259 tapiProvider.close();
260 LOG.info("Shutting down service-handler provider ...");
261 servicehandlerProvider.close();
262 LOG.info("Shutting down renderer provider ...");
263 rendererProvider.close();
264 LOG.info("Shutting down OLM provider ...");
266 LOG.info("Shutting down network-model provider ...");
267 networkModelProvider.close();
268 LOG.info("Shutting down PCE provider ...");
270 LOG.info("Shutting down transaction providers ...");
271 networkTransaction.close();
272 deviceTransactionManager.preDestroy();
273 LOG.info("Shutdown done.");
277 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
278 NetworkTransactionService networkTransactionService,
279 ServiceDataStoreOperations serviceDataStoreOperations,
280 TapiNetconfTopologyListener tapiNetConfTopologyListener,
281 TapiPortMappingListener tapiPortMappingListener,
282 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
283 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
284 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
285 NotificationService notificationService) {
286 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
287 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
288 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
289 rendererListenerImpl, serviceHandlerListenerImpl, notificationService);
292 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
293 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
294 PortMapping portMapping) {
295 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
296 otnDeviceRendererService);
297 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
298 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
299 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
301 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
302 rendererServiceOperations);
305 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
306 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
307 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
308 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
309 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
310 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
311 openRoadmInterfaces);
312 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
313 openRoadmInterfaces);
314 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
315 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
318 private PortMapping initPortMapping(LightyServices lightyServices, OpenRoadmInterfaces openRoadmInterfaces) {
319 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
320 deviceTransactionManager, openRoadmInterfaces);
321 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
322 deviceTransactionManager, openRoadmInterfaces);
323 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
324 deviceTransactionManager, openRoadmInterfaces);
325 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
326 portMappingVersion221, portMappingVersion121);
329 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils) {
330 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
331 deviceTransactionManager);
332 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
333 deviceTransactionManager);
334 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
335 deviceTransactionManager);
336 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
337 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
340 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
341 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
342 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
343 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
344 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
345 crossConnectImpl710);