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(
218 tapilinkDiscoveryImpl, networkTransaction, tapiLink,
219 lightyServices.getBindingNotificationPublishService());
220 TapiNetconfTopologyListener tapiNetConfTopologyListener =
221 new TapiNetconfTopologyListener(tapiNetworkModelService);
222 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
223 TapiPortMappingListener tapiPortMappingListener =
224 new TapiPortMappingListener(tapiNetworkModelService);
225 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
226 new TapiNetworkModelListenerImpl(networkTransaction,
227 lightyServices.getBindingNotificationPublishService());
229 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
230 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
231 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
232 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
234 if (activateNbiNotification) {
235 LOG.info("Creating nbi-notifications beans ...");
236 nbiNotificationsProvider = new NbiNotificationsProvider(
237 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
238 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
244 protected boolean initProcedure() {
245 if (tapiProvider != null) {
246 LOG.info("Initializing tapi provider ...");
249 if (nbiNotificationsProvider != null) {
250 LOG.info("Initializing nbi-notifications provider ...");
251 nbiNotificationsProvider.init();
253 LOG.info("Init done.");
258 protected boolean stopProcedure() {
259 if (nbiNotificationsProvider != null) {
260 nbiNotificationsProvider.close();
261 LOG.info("Shutting down nbi-notifications provider ...");
263 if (tapiProvider != null) {
264 tapiProvider.close();
265 LOG.info("Shutting down service-handler provider ...");
267 servicehandlerProvider.close();
268 LOG.info("Shutting down renderer provider ...");
269 rendererProvider.close();
270 LOG.info("Shutting down OLM provider ...");
272 LOG.info("Shutting down network-model provider ...");
273 networkModelProvider.close();
274 LOG.info("Shutting down PCE provider ...");
276 LOG.info("Shutting down transaction providers ...");
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, TapiOrLinkListener orLinkListener,
291 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
292 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
293 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
294 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
295 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
296 tapiNetworkModelListenerImpl);
299 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
300 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
301 PortMapping portMapping) {
302 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
303 otnDeviceRendererService);
304 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
305 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
306 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
308 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererService,
309 otnDeviceRendererService, deviceRendererRPC,
310 new TransportPCEServicePathRPCImpl(rendererServiceOperations));
313 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
314 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
315 return new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
318 private PortMapping initPortMapping(LightyServices lightyServices) {
319 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
320 deviceTransactionManager);
321 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
322 deviceTransactionManager);
323 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
324 deviceTransactionManager);
325 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
326 portMappingVersion221, portMappingVersion121);
329 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
330 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
331 deviceTransactionManager);
332 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
333 deviceTransactionManager, portMapping);
334 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
335 deviceTransactionManager, portMapping);
336 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
337 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
341 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
342 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
343 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
344 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
345 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
346 crossConnectImpl710);