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 PCE provider ...");
245 LOG.info("Initializing service-handler provider ...");
246 servicehandlerProvider.init();
247 if (tapiProvider != null) {
248 LOG.info("Initializing tapi provider ...");
251 if (nbiNotificationsProvider != null) {
252 LOG.info("Initializing nbi-notifications provider ...");
253 nbiNotificationsProvider.init();
255 LOG.info("Init done.");
260 protected boolean stopProcedure() {
261 if (nbiNotificationsProvider != null) {
262 nbiNotificationsProvider.close();
263 LOG.info("Shutting down nbi-notifications provider ...");
265 if (tapiProvider != null) {
266 tapiProvider.close();
267 LOG.info("Shutting down service-handler provider ...");
269 servicehandlerProvider.close();
270 LOG.info("Shutting down renderer provider ...");
271 rendererProvider.close();
272 LOG.info("Shutting down OLM provider ...");
274 LOG.info("Shutting down network-model provider ...");
275 networkModelProvider.close();
276 LOG.info("Shutting down PCE provider ...");
278 LOG.info("Shutting down transaction providers ...");
279 deviceTransactionManager.preDestroy();
280 LOG.info("Shutdown done.");
284 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
285 NetworkTransactionService networkTransactionService,
286 ServiceDataStoreOperations serviceDataStoreOperations,
287 TapiNetconfTopologyListener tapiNetConfTopologyListener,
288 TapiPortMappingListener tapiPortMappingListener,
289 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
290 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
291 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
292 NotificationService notificationService, TapiOrLinkListener orLinkListener,
293 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
294 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
295 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
296 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
297 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
298 tapiNetworkModelListenerImpl);
301 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
302 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
303 PortMapping portMapping) {
304 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
305 otnDeviceRendererService);
306 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
307 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
308 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
310 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererService,
311 otnDeviceRendererService, rendererServiceOperations);
314 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
315 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
316 return new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
319 private PortMapping initPortMapping(LightyServices lightyServices) {
320 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
321 deviceTransactionManager);
322 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
323 deviceTransactionManager);
324 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
325 deviceTransactionManager);
326 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
327 portMappingVersion221, portMappingVersion121);
330 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
331 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
332 deviceTransactionManager);
333 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
334 deviceTransactionManager, portMapping);
335 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
336 deviceTransactionManager, portMapping);
337 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
338 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
342 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
343 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
344 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
345 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
346 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
347 crossConnectImpl710);