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