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.TapiListener;
90 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
91 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
92 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
93 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
94 import org.slf4j.Logger;
95 import org.slf4j.LoggerFactory;
98 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
99 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
100 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
102 // cannot use interface for DeviceTransactionManagerImpl
103 // because implementation has additional public methods ...
104 private final DeviceTransactionManagerImpl deviceTransactionManager;
105 private final NetworkTransactionService networkTransaction;
107 private final PceProvider pceProvider;
108 // network model beans
109 private final NetworkModelProvider networkModelProvider;
111 private final OlmProvider olmProvider;
113 private final RendererProvider rendererProvider;
114 // service-handler beans
115 private final ServicehandlerProvider servicehandlerProvider;
117 private TapiProvider tapiProvider;
118 // nbi-notifications beans
119 private NbiNotificationsProvider nbiNotificationsProvider;
121 * List of publisher topics.
123 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
124 "ServiceHandler", "RendererListener");
125 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
127 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
128 String olmtimer1, String olmtimer2) {
129 LOG.info("Initializing transaction providers ...");
130 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
131 MAX_DURATION_TO_SUBMIT_TRANSACTION);
132 networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
134 LOG.info("Creating network-model beans ...");
135 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
136 deviceTransactionManager, networkTransaction);
137 PortMapping portMapping = initPortMapping(lightyServices);
138 NetworkModelService networkModelService = new NetworkModelServiceImpl(lightyServices.getBindingDataBroker(),
139 deviceTransactionManager, networkTransaction, portMapping,
140 lightyServices.getBindingNotificationPublishService());
141 FrequenciesService networkModelWavelengthService = new FrequenciesServiceImpl(
142 lightyServices.getBindingDataBroker());
143 new NetConfTopologyListener(networkModelService,
144 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
145 new PortMappingListener(networkModelService);
146 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
147 lightyServices.getRpcProviderService(), networkModelService, deviceTransactionManager, portMapping,
148 lightyServices.getNotificationService(), networkModelWavelengthService);
150 LOG.info("Creating PCE beans ...");
151 // TODO: pass those parameters through command line
152 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
153 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
154 PathComputationService pathComputationService = new PathComputationServiceImpl(
156 lightyServices.getBindingNotificationPublishService(),
160 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
162 LOG.info("Creating OLM beans ...");
163 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
164 CrossConnect crossConnect = initCrossConnect(mappingUtils);
165 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
166 PowerMgmt powerMgmt = new PowerMgmtImpl(openRoadmInterfaces, crossConnect, deviceTransactionManager,
167 portMapping, Long.valueOf(olmtimer1).longValue(), Long.valueOf(olmtimer2).longValue());
168 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
169 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
170 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
171 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
173 LOG.info("Creating renderer beans ...");
174 initOpenRoadmFactory(mappingUtils, openRoadmInterfaces, portMapping);
175 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
176 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaces, crossConnect,
177 mappingUtils, portMapping);
178 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(crossConnect,
179 openRoadmInterfaces, deviceTransactionManager, mappingUtils, portMapping);
180 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
181 otnDeviceRendererService, portMapping);
183 LOG.info("Creating service-handler beans ...");
184 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
185 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
186 lightyServices.getBindingNotificationPublishService(), portMapping);
187 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
188 lightyServices.getBindingDataBroker());
189 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
190 lightyServices.getBindingNotificationPublishService(), networkModelService);
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(pathComputationService, rendererServiceOperations,
196 lightyServices.getBindingNotificationPublishService(), pceListenerImpl, rendererListenerImpl,
197 networkModelListenerImpl, serviceDataStoreOperations);
198 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
199 lightyServices.getBindingNotificationPublishService());
200 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
201 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
202 serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
203 lightyServices.getBindingNotificationPublishService(), servicehandler, serviceListener);
205 LOG.info("Creating tapi beans ...");
206 TapiLink tapiLink = new TapiLink(networkTransaction);
207 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
208 deviceTransactionManager, tapiLink);
209 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
210 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
211 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
212 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
213 lightyServices.getBindingDataBroker());
214 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
215 networkTransaction, tapiLink);
216 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
217 tapilinkDiscoveryImpl, networkTransaction, tapiLink,
218 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);