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.listeners.PortMappingListener;
39 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
40 import org.opendaylight.transportpce.networkmodel.service.FrequenciesServiceImpl;
41 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
42 import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl;
43 import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl;
44 import org.opendaylight.transportpce.olm.OlmProvider;
45 import org.opendaylight.transportpce.olm.power.PowerMgmt;
46 import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
47 import org.opendaylight.transportpce.olm.service.OlmPowerService;
48 import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
49 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
50 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl;
51 import org.opendaylight.transportpce.pce.impl.PceProvider;
52 import org.opendaylight.transportpce.pce.service.PathComputationService;
53 import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
54 import org.opendaylight.transportpce.renderer.RendererProvider;
55 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
56 // Adding OTN interface
57 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
58 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
59 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
61 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
62 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
63 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
64 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
65 import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
66 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
67 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
68 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
69 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
70 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
71 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
72 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
73 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
74 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
75 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
76 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
77 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
78 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
79 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
80 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
81 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
82 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
83 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
84 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
85 import org.opendaylight.transportpce.tapi.utils.TapiLink;
86 import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
87 import org.opendaylight.transportpce.tapi.utils.TapiListener;
88 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
89 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
90 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
91 import org.slf4j.Logger;
92 import org.slf4j.LoggerFactory;
95 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
96 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
97 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
99 // cannot use interface for DeviceTransactionManagerImpl
100 // because implementation has additional public methods ...
101 private final DeviceTransactionManagerImpl deviceTransactionManager;
102 private final NetworkTransactionService networkTransaction;
104 private final PceProvider pceProvider;
105 // network model beans
106 private final NetworkModelProvider networkModelProvider;
108 private final OlmProvider olmProvider;
110 private final RendererProvider rendererProvider;
111 // service-handler beans
112 private final ServicehandlerProvider servicehandlerProvider;
114 private TapiProvider tapiProvider;
115 // nbi-notifications beans
116 private NbiNotificationsProvider nbiNotificationsProvider;
118 * List of publisher topics.
120 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
121 "ServiceHandler", "RendererListener");
122 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
124 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
125 String olmtimer1, String olmtimer2) {
126 LOG.info("Initializing transaction providers ...");
127 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
128 MAX_DURATION_TO_SUBMIT_TRANSACTION);
129 networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
131 LOG.info("Creating network-model beans ...");
132 PortMapping portMapping = initPortMapping(lightyServices);
133 NetworkModelService networkModelService = new NetworkModelServiceImpl(lightyServices.getBindingDataBroker(),
134 deviceTransactionManager, networkTransaction, portMapping,
135 lightyServices.getBindingNotificationPublishService());
136 FrequenciesService networkModelWavelengthService = new FrequenciesServiceImpl(
137 lightyServices.getBindingDataBroker());
138 new NetConfTopologyListener(networkModelService,
139 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
140 new PortMappingListener(networkModelService);
141 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
142 lightyServices.getRpcProviderService(), networkModelService, deviceTransactionManager, portMapping,
143 lightyServices.getNotificationService(), networkModelWavelengthService);
145 LOG.info("Creating PCE beans ...");
146 // TODO: pass those parameters through command line
147 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
148 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
149 PathComputationService pathComputationService = new PathComputationServiceImpl(
151 lightyServices.getBindingNotificationPublishService(),
155 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
157 LOG.info("Creating OLM beans ...");
158 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
159 CrossConnect crossConnect = initCrossConnect(mappingUtils);
160 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
161 PowerMgmt powerMgmt = new PowerMgmtImpl(openRoadmInterfaces, crossConnect, deviceTransactionManager,
162 portMapping, Long.valueOf(olmtimer1).longValue(), Long.valueOf(olmtimer2).longValue());
163 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
164 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
165 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
166 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
168 LOG.info("Creating renderer beans ...");
169 initOpenRoadmFactory(mappingUtils, openRoadmInterfaces, portMapping);
170 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
171 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaces, crossConnect,
172 mappingUtils, portMapping);
173 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(crossConnect,
174 openRoadmInterfaces, deviceTransactionManager, mappingUtils, portMapping);
175 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
176 otnDeviceRendererService, portMapping);
178 LOG.info("Creating service-handler beans ...");
179 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
180 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
181 lightyServices.getBindingNotificationPublishService(), portMapping);
182 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
183 lightyServices.getBindingDataBroker());
184 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
185 lightyServices.getBindingNotificationPublishService(), networkModelService);
186 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
187 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
188 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
189 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
190 ServicehandlerImpl servicehandler = new ServicehandlerImpl(pathComputationService, rendererServiceOperations,
191 lightyServices.getBindingNotificationPublishService(), pceListenerImpl, rendererListenerImpl,
192 networkModelListenerImpl, serviceDataStoreOperations);
193 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
194 lightyServices.getBindingNotificationPublishService());
195 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
196 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
197 serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
198 lightyServices.getBindingNotificationPublishService(), servicehandler, serviceListener);
200 LOG.info("Creating tapi beans ...");
201 TapiLink tapiLink = new TapiLinkImpl(networkTransaction);
202 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
203 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
204 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
205 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
206 lightyServices.getBindingDataBroker());
207 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
208 networkTransaction, tapiLink);
209 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(networkTransaction,
210 deviceTransactionManager, tapiLink, lightyServices.getBindingNotificationPublishService());
211 TapiNetconfTopologyListener tapiNetConfTopologyListener =
212 new TapiNetconfTopologyListener(tapiNetworkModelService);
213 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
214 TapiPortMappingListener tapiPortMappingListener =
215 new TapiPortMappingListener(tapiNetworkModelService);
216 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
217 new TapiNetworkModelListenerImpl(networkTransaction,
218 lightyServices.getBindingNotificationPublishService());
220 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
221 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
222 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
223 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
225 if (activateNbiNotification) {
226 LOG.info("Creating nbi-notifications beans ...");
227 nbiNotificationsProvider = new NbiNotificationsProvider(
228 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
229 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
235 protected boolean initProcedure() {
236 if (tapiProvider != null) {
237 LOG.info("Initializing tapi provider ...");
240 if (nbiNotificationsProvider != null) {
241 LOG.info("Initializing nbi-notifications provider ...");
242 nbiNotificationsProvider.init();
244 LOG.info("Init done.");
249 protected boolean stopProcedure() {
250 if (nbiNotificationsProvider != null) {
251 nbiNotificationsProvider.close();
252 LOG.info("Shutting down nbi-notifications provider ...");
254 if (tapiProvider != null) {
255 tapiProvider.close();
256 LOG.info("Shutting down service-handler provider ...");
258 servicehandlerProvider.close();
259 LOG.info("Shutting down renderer provider ...");
260 rendererProvider.close();
261 LOG.info("Shutting down OLM provider ...");
263 LOG.info("Shutting down network-model provider ...");
264 networkModelProvider.close();
265 LOG.info("Shutting down PCE provider ...");
267 LOG.info("Shutting down transaction providers ...");
268 deviceTransactionManager.preDestroy();
269 LOG.info("Shutdown done.");
273 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
274 NetworkTransactionService networkTransactionService,
275 ServiceDataStoreOperations serviceDataStoreOperations,
276 TapiNetconfTopologyListener tapiNetConfTopologyListener,
277 TapiPortMappingListener tapiPortMappingListener,
278 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
279 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
280 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
281 NotificationService notificationService, TapiOrLinkListener orLinkListener,
282 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
283 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
284 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
285 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
286 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
287 tapiNetworkModelListenerImpl);
290 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
291 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
292 PortMapping portMapping) {
293 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
294 otnDeviceRendererService);
295 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
296 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
297 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
299 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererService,
300 otnDeviceRendererService, deviceRendererRPC,
301 new TransportPCEServicePathRPCImpl(rendererServiceOperations));
304 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
305 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
306 return new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
309 private PortMapping initPortMapping(LightyServices lightyServices) {
310 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
311 deviceTransactionManager);
312 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
313 deviceTransactionManager);
314 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
315 deviceTransactionManager);
316 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
317 portMappingVersion221, portMappingVersion121);
320 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
321 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
322 deviceTransactionManager);
323 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
324 deviceTransactionManager, portMapping);
325 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
326 deviceTransactionManager, portMapping);
327 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
328 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
332 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
333 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
334 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
335 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
336 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
337 crossConnectImpl710);