2 * Copyright (c) 2014, 2017 Ericsson India Global Services Pvt Ltd. and others. 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 http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.sfc.ofrenderer;
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
13 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
14 import org.opendaylight.sfc.ofrenderer.listeners.SfcOfRendererDataListener;
15 import org.opendaylight.sfc.ofrenderer.listeners.SfcOfRspDataListener;
16 import org.opendaylight.sfc.ofrenderer.listeners.SfcOfSfgDataListener;
17 import org.opendaylight.sfc.ofrenderer.openflow.SfcIpv4PacketInHandler;
18 import org.opendaylight.sfc.ofrenderer.openflow.SfcOfFlowProgrammerImpl;
19 import org.opendaylight.sfc.ofrenderer.openflow.SfcOfFlowProgrammerInterface;
20 import org.opendaylight.sfc.ofrenderer.processors.SfcOfRspProcessor;
21 import org.opendaylight.sfc.ofrenderer.utils.SfcOfBaseProviderUtils;
22 import org.opendaylight.sfc.ofrenderer.utils.SfcOfProviderUtils;
23 import org.opendaylight.sfc.ofrenderer.utils.SfcSynchronizer;
24 import org.opendaylight.sfc.util.openflow.writer.SfcOfFlowWriterImpl;
25 import org.opendaylight.yangtools.concepts.Registration;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
30 * Entry point for the sfc openflow renderer (blueprint-instantiated).
32 public final class SfcOfRenderer implements AutoCloseable {
33 private static final Logger LOG = LoggerFactory.getLogger(SfcOfRenderer.class);
35 private final SfcOfRspProcessor sfcOfRspProcessor;
36 private final SfcOfFlowProgrammerInterface sfcOfFlowProgrammer;
37 private final Registration pktInRegistration;
38 private final SfcSynchronizer sfcSynchronizer;
40 private SfcOfRspDataListener openflowRspDataListener;
41 private SfcOfSfgDataListener sfcOfSfgDataListener;
42 private SfcIpv4PacketInHandler packetInHandler;
43 private SfcOfRendererDataListener sfcOfRendererListener;
45 public SfcOfRenderer(DataBroker dataBroker, NotificationProviderService notificationService,
46 RpcProviderRegistry rpcProviderRegistry) {
47 LOG.info("SfcOfRenderer starting the SfcOfRenderer plugin...");
49 this.sfcSynchronizer = new SfcSynchronizer();
50 SfcOfFlowWriterImpl sfcofflowwriterimpl = new SfcOfFlowWriterImpl();
51 sfcofflowwriterimpl.setDataProvider(dataBroker);
52 this.sfcOfFlowProgrammer = new SfcOfFlowProgrammerImpl(sfcofflowwriterimpl);
53 SfcOfBaseProviderUtils sfcOfProviderUtils = new SfcOfProviderUtils();
54 this.sfcOfRspProcessor = new SfcOfRspProcessor(sfcOfFlowProgrammer, sfcOfProviderUtils, sfcSynchronizer,
55 rpcProviderRegistry, dataBroker);
57 this.openflowRspDataListener = new SfcOfRspDataListener(dataBroker, sfcOfRspProcessor);
58 this.sfcOfSfgDataListener = new SfcOfSfgDataListener(dataBroker, sfcOfFlowProgrammer, sfcOfProviderUtils);
59 this.sfcOfRendererListener = new SfcOfRendererDataListener(dataBroker, sfcOfFlowProgrammer, sfcSynchronizer);
61 this.packetInHandler = new SfcIpv4PacketInHandler((SfcOfFlowProgrammerImpl) sfcOfFlowProgrammer);
62 this.pktInRegistration = notificationService.registerNotificationListener(packetInHandler);
64 LOG.info("SfcOfRenderer successfully started the SfcOfRenderer plugin");
68 * Implemented from the AutoCloseable interface.
71 public void close() throws Exception {
72 LOG.info("SfcOfRenderer auto-closed");
74 if (sfcOfFlowProgrammer != null) {
75 sfcOfFlowProgrammer.shutdown();
77 if (pktInRegistration != null) {
78 pktInRegistration.close();
80 openflowRspDataListener.close();
82 openflowRspDataListener = null;