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.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
91 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
92 import org.slf4j.Logger;
93 import org.slf4j.LoggerFactory;
96 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
97 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
98 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
100 // cannot use interface for DeviceTransactionManagerImpl
101 // because implementation has additional public methods ...
102 private final DeviceTransactionManagerImpl deviceTransactionManager;
103 private final NetworkTransactionService networkTransaction;
105 private final PceProvider pceProvider;
106 // network model beans
107 private final NetworkModelProvider networkModelProvider;
109 private final OlmProvider olmProvider;
111 private final RendererProvider rendererProvider;
112 // service-handler beans
113 private final ServicehandlerProvider servicehandlerProvider;
115 private TapiProvider tapiProvider;
116 // nbi-notifications beans
117 private NbiNotificationsProvider nbiNotificationsProvider;
119 * List of publisher topics.
121 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
122 "ServiceHandler", "RendererListener");
123 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
125 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
126 String olmtimer1, String olmtimer2) {
127 LOG.info("Initializing transaction providers ...");
128 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
129 MAX_DURATION_TO_SUBMIT_TRANSACTION);
130 networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
132 LOG.info("Creating network-model beans ...");
133 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
134 deviceTransactionManager, networkTransaction);
135 PortMapping portMapping = initPortMapping(lightyServices);
136 NetworkModelService networkModelService = new NetworkModelServiceImpl(lightyServices.getBindingDataBroker(),
137 deviceTransactionManager, networkTransaction, portMapping,
138 lightyServices.getBindingNotificationPublishService());
139 FrequenciesService networkModelWavelengthService = new FrequenciesServiceImpl(
140 lightyServices.getBindingDataBroker());
141 new NetConfTopologyListener(networkModelService,
142 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
143 new PortMappingListener(networkModelService);
144 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
145 lightyServices.getRpcProviderService(), networkModelService, deviceTransactionManager, portMapping,
146 lightyServices.getNotificationService(), networkModelWavelengthService);
148 LOG.info("Creating PCE beans ...");
149 // TODO: pass those parameters through command line
150 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
151 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
152 PathComputationService pathComputationService = new PathComputationServiceImpl(
154 lightyServices.getBindingNotificationPublishService(),
158 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
160 LOG.info("Creating OLM beans ...");
161 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
162 CrossConnect crossConnect = initCrossConnect(mappingUtils);
163 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
164 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
165 crossConnect, deviceTransactionManager, portMapping, olmtimer1, olmtimer2);
166 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
167 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
168 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
169 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
171 LOG.info("Creating renderer beans ...");
172 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces, portMapping);
173 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
174 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaces, crossConnect,
175 mappingUtils, portMapping);
176 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
177 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
178 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
179 otnDeviceRendererService, portMapping);
181 LOG.info("Creating service-handler beans ...");
182 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
183 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
184 lightyServices.getBindingNotificationPublishService(), portMapping);
185 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
186 lightyServices.getBindingDataBroker());
187 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
188 lightyServices.getBindingNotificationPublishService(), networkModelService);
189 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
190 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
191 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
192 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
193 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
194 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
195 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
196 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
197 lightyServices.getBindingNotificationPublishService());
198 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
199 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
200 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
201 networkModelListenerImpl, servicehandler);
203 LOG.info("Creating tapi beans ...");
204 TapiLink tapiLink = new TapiLink(networkTransaction);
205 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
206 deviceTransactionManager, tapiLink);
207 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
208 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
209 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
210 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
211 lightyServices.getBindingDataBroker());
212 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
213 networkTransaction, tapiLink);
214 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
215 tapilinkDiscoveryImpl, networkTransaction, tapiLink,
216 lightyServices.getBindingNotificationPublishService());
217 TapiNetconfTopologyListener tapiNetConfTopologyListener =
218 new TapiNetconfTopologyListener(tapiNetworkModelService);
219 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
220 TapiPortMappingListener tapiPortMappingListener =
221 new TapiPortMappingListener(tapiNetworkModelService);
222 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
223 new TapiNetworkModelListenerImpl(networkTransaction,
224 lightyServices.getBindingNotificationPublishService());
226 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
227 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
228 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
229 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
231 if (activateNbiNotification) {
232 LOG.info("Creating nbi-notifications beans ...");
233 nbiNotificationsProvider = new NbiNotificationsProvider(
234 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
235 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
241 protected boolean initProcedure() {
242 LOG.info("Initializing PCE provider ...");
244 LOG.info("Initializing OLM provider ...");
246 LOG.info("Initializing renderer provider ...");
247 rendererProvider.init();
248 LOG.info("Initializing service-handler provider ...");
249 servicehandlerProvider.init();
250 if (tapiProvider != null) {
251 LOG.info("Initializing tapi provider ...");
254 if (nbiNotificationsProvider != null) {
255 LOG.info("Initializing nbi-notifications provider ...");
256 nbiNotificationsProvider.init();
258 LOG.info("Init done.");
263 protected boolean stopProcedure() {
264 if (nbiNotificationsProvider != null) {
265 nbiNotificationsProvider.close();
266 LOG.info("Shutting down nbi-notifications provider ...");
268 if (tapiProvider != null) {
269 tapiProvider.close();
270 LOG.info("Shutting down service-handler provider ...");
272 servicehandlerProvider.close();
273 LOG.info("Shutting down renderer provider ...");
274 rendererProvider.close();
275 LOG.info("Shutting down OLM provider ...");
277 LOG.info("Shutting down network-model provider ...");
278 networkModelProvider.close();
279 LOG.info("Shutting down PCE provider ...");
281 LOG.info("Shutting down transaction providers ...");
282 deviceTransactionManager.preDestroy();
283 LOG.info("Shutdown done.");
287 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
288 NetworkTransactionService networkTransactionService,
289 ServiceDataStoreOperations serviceDataStoreOperations,
290 TapiNetconfTopologyListener tapiNetConfTopologyListener,
291 TapiPortMappingListener tapiPortMappingListener,
292 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
293 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
294 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
295 NotificationService notificationService, TapiOrLinkListener orLinkListener,
296 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
297 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
298 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
299 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
300 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
301 tapiNetworkModelListenerImpl);
304 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
305 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
306 PortMapping portMapping) {
307 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
308 otnDeviceRendererService);
309 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
310 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
311 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
313 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
314 rendererServiceOperations);
317 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
318 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
319 return new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
322 private PortMapping initPortMapping(LightyServices lightyServices) {
323 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
324 deviceTransactionManager);
325 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
326 deviceTransactionManager);
327 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
328 deviceTransactionManager);
329 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
330 portMappingVersion221, portMappingVersion121);
333 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
334 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
335 deviceTransactionManager);
336 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
337 deviceTransactionManager, portMapping);
338 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
339 deviceTransactionManager, portMapping);
340 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
341 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
345 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
346 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
347 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
348 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
349 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
350 crossConnectImpl710);