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.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.OpenRoadmInterfaceFactory;
58 // Adding OTN interface
59 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
60 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
61 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
63 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
64 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
65 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
66 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
67 import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
68 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
69 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
70 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
71 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
72 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
73 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
74 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
75 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
76 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
77 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
78 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
79 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
80 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
81 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
82 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
83 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
84 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
85 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
86 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
87 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
88 import org.opendaylight.transportpce.tapi.utils.TapiLink;
89 import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
90 import org.opendaylight.transportpce.tapi.utils.TapiListener;
91 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
92 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
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.rev211210.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;
115 // service-handler beans
116 private final ServicehandlerProvider servicehandlerProvider;
118 private TapiProvider tapiProvider;
119 // nbi-notifications beans
120 private NbiNotificationsProvider nbiNotificationsProvider;
122 * List of publisher topics.
124 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
125 "ServiceHandler", "RendererListener");
126 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
128 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
129 String olmtimer1, String olmtimer2) {
130 LOG.info("Initializing transaction providers ...");
131 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
132 MAX_DURATION_TO_SUBMIT_TRANSACTION);
133 networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
135 LOG.info("Creating network-model beans ...");
136 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
137 deviceTransactionManager, networkTransaction);
138 PortMapping portMapping = initPortMapping(lightyServices);
139 NetworkModelService networkModelService = new NetworkModelServiceImpl(lightyServices.getBindingDataBroker(),
140 deviceTransactionManager, networkTransaction, portMapping,
141 lightyServices.getBindingNotificationPublishService());
142 FrequenciesService networkModelWavelengthService = new FrequenciesServiceImpl(
143 lightyServices.getBindingDataBroker());
144 new NetConfTopologyListener(networkModelService,
145 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
146 new PortMappingListener(networkModelService);
147 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
148 lightyServices.getRpcProviderService(), networkModelService, deviceTransactionManager, portMapping,
149 lightyServices.getNotificationService(), networkModelWavelengthService);
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 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
165 CrossConnect crossConnect = initCrossConnect(mappingUtils);
166 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
167 PowerMgmt powerMgmt = new PowerMgmtImpl(openRoadmInterfaces, crossConnect, deviceTransactionManager,
168 portMapping, Long.valueOf(olmtimer1).longValue(), Long.valueOf(olmtimer2).longValue());
169 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
170 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
171 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
172 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
174 LOG.info("Creating renderer beans ...");
175 initOpenRoadmFactory(mappingUtils, openRoadmInterfaces, portMapping);
176 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
177 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaces, crossConnect,
178 mappingUtils, portMapping);
179 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(crossConnect,
180 openRoadmInterfaces, deviceTransactionManager, mappingUtils, portMapping);
181 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
182 otnDeviceRendererService, portMapping);
184 LOG.info("Creating service-handler beans ...");
185 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
186 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
187 lightyServices.getBindingNotificationPublishService(), portMapping);
188 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
189 lightyServices.getBindingDataBroker());
190 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
191 lightyServices.getBindingNotificationPublishService(), networkModelService);
192 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
193 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
194 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
195 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
196 ServicehandlerImpl servicehandler = new ServicehandlerImpl(pathComputationService, rendererServiceOperations,
197 lightyServices.getBindingNotificationPublishService(), pceListenerImpl, rendererListenerImpl,
198 networkModelListenerImpl, serviceDataStoreOperations);
199 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
200 lightyServices.getBindingNotificationPublishService());
201 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
202 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
203 serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
204 lightyServices.getBindingNotificationPublishService(), servicehandler, serviceListener);
206 LOG.info("Creating tapi beans ...");
207 TapiLink tapiLink = new TapiLinkImpl(networkTransaction);
208 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
209 deviceTransactionManager, tapiLink);
210 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
211 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
212 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
213 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
214 lightyServices.getBindingDataBroker());
215 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
216 networkTransaction, tapiLink);
217 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(networkTransaction,
218 deviceTransactionManager, tapiLink, lightyServices.getBindingNotificationPublishService());
219 TapiNetconfTopologyListener tapiNetConfTopologyListener =
220 new TapiNetconfTopologyListener(tapiNetworkModelService);
221 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
222 TapiPortMappingListener tapiPortMappingListener =
223 new TapiPortMappingListener(tapiNetworkModelService);
224 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
225 new TapiNetworkModelListenerImpl(networkTransaction,
226 lightyServices.getBindingNotificationPublishService());
228 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
229 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
230 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
231 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
233 if (activateNbiNotification) {
234 LOG.info("Creating nbi-notifications beans ...");
235 nbiNotificationsProvider = new NbiNotificationsProvider(
236 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
237 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
243 protected boolean initProcedure() {
244 if (tapiProvider != null) {
245 LOG.info("Initializing tapi provider ...");
248 if (nbiNotificationsProvider != null) {
249 LOG.info("Initializing nbi-notifications provider ...");
250 nbiNotificationsProvider.init();
252 LOG.info("Init done.");
257 protected boolean stopProcedure() {
258 if (nbiNotificationsProvider != null) {
259 nbiNotificationsProvider.close();
260 LOG.info("Shutting down nbi-notifications provider ...");
262 if (tapiProvider != null) {
263 tapiProvider.close();
264 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 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, TapiOrLinkListener orLinkListener,
290 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
291 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
292 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
293 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
294 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
295 tapiNetworkModelListenerImpl);
298 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
299 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
300 PortMapping portMapping) {
301 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
302 otnDeviceRendererService);
303 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
304 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
305 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
307 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererService,
308 otnDeviceRendererService, deviceRendererRPC,
309 new TransportPCEServicePathRPCImpl(rendererServiceOperations));
312 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
313 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
314 return new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
317 private PortMapping initPortMapping(LightyServices lightyServices) {
318 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
319 deviceTransactionManager);
320 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
321 deviceTransactionManager);
322 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
323 deviceTransactionManager);
324 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
325 portMappingVersion221, portMappingVersion121);
328 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
329 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
330 deviceTransactionManager);
331 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
332 deviceTransactionManager, portMapping);
333 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
334 deviceTransactionManager, portMapping);
335 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
336 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);