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.servicehandler.impl.ServicehandlerImpl;
68 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
69 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
70 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
71 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
72 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
73 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
74 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
75 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
76 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
77 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
78 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
79 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
80 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
81 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
82 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
83 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
84 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
85 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
86 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
87 import org.opendaylight.transportpce.tapi.utils.TapiLink;
88 import org.opendaylight.transportpce.tapi.utils.TapiListener;
89 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
90 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
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.rev211210.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;
113 // service-handler beans
114 private final ServicehandlerProvider servicehandlerProvider;
116 private TapiProvider tapiProvider;
117 // nbi-notifications beans
118 private NbiNotificationsProvider nbiNotificationsProvider;
120 * List of publisher topics.
122 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
123 "ServiceHandler", "RendererListener");
124 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
126 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
127 String olmtimer1, String olmtimer2) {
128 LOG.info("Initializing transaction providers ...");
129 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
130 MAX_DURATION_TO_SUBMIT_TRANSACTION);
131 networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
133 LOG.info("Creating network-model beans ...");
134 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
135 deviceTransactionManager, networkTransaction);
136 PortMapping portMapping = initPortMapping(lightyServices);
137 NetworkModelService networkModelService = new NetworkModelServiceImpl(lightyServices.getBindingDataBroker(),
138 deviceTransactionManager, networkTransaction, portMapping,
139 lightyServices.getBindingNotificationPublishService());
140 FrequenciesService networkModelWavelengthService = new FrequenciesServiceImpl(
141 lightyServices.getBindingDataBroker());
142 new NetConfTopologyListener(networkModelService,
143 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
144 new PortMappingListener(networkModelService);
145 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
146 lightyServices.getRpcProviderService(), networkModelService, deviceTransactionManager, portMapping,
147 lightyServices.getNotificationService(), networkModelWavelengthService);
149 LOG.info("Creating PCE beans ...");
150 // TODO: pass those parameters through command line
151 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
152 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
153 PathComputationService pathComputationService = new PathComputationServiceImpl(
155 lightyServices.getBindingNotificationPublishService(),
159 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
161 LOG.info("Creating OLM beans ...");
162 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
163 CrossConnect crossConnect = initCrossConnect(mappingUtils);
164 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
165 PowerMgmt powerMgmt = new PowerMgmtImpl(openRoadmInterfaces, crossConnect, deviceTransactionManager,
166 portMapping, Long.valueOf(olmtimer1).longValue(), Long.valueOf(olmtimer2).longValue());
167 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
168 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
169 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
170 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
172 LOG.info("Creating renderer beans ...");
173 initOpenRoadmFactory(mappingUtils, openRoadmInterfaces, portMapping);
174 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
175 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaces, crossConnect,
176 mappingUtils, portMapping);
177 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(crossConnect,
178 openRoadmInterfaces, deviceTransactionManager, mappingUtils, portMapping);
179 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
180 otnDeviceRendererService, portMapping);
182 LOG.info("Creating service-handler beans ...");
183 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
184 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
185 lightyServices.getBindingNotificationPublishService(), portMapping);
186 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
187 lightyServices.getBindingDataBroker());
188 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
189 lightyServices.getBindingNotificationPublishService(), networkModelService);
190 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
191 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
192 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
193 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
194 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
195 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
196 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
197 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
198 lightyServices.getBindingNotificationPublishService());
199 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
200 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
201 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
202 networkModelListenerImpl, servicehandler);
204 LOG.info("Creating tapi beans ...");
205 TapiLink tapiLink = new TapiLink(networkTransaction);
206 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
207 deviceTransactionManager, tapiLink);
208 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
209 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
210 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
211 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
212 lightyServices.getBindingDataBroker());
213 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
214 networkTransaction, tapiLink);
215 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
216 tapilinkDiscoveryImpl, networkTransaction, tapiLink,
217 lightyServices.getBindingNotificationPublishService());
218 TapiNetconfTopologyListener tapiNetConfTopologyListener =
219 new TapiNetconfTopologyListener(tapiNetworkModelService);
220 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
221 TapiPortMappingListener tapiPortMappingListener =
222 new TapiPortMappingListener(tapiNetworkModelService);
223 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
224 new TapiNetworkModelListenerImpl(networkTransaction,
225 lightyServices.getBindingNotificationPublishService());
227 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
228 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
229 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
230 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
232 if (activateNbiNotification) {
233 LOG.info("Creating nbi-notifications beans ...");
234 nbiNotificationsProvider = new NbiNotificationsProvider(
235 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
236 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
242 protected boolean initProcedure() {
243 LOG.info("Initializing service-handler provider ...");
244 servicehandlerProvider.init();
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, 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);