/* * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.protocol_plugin.openflow.internal; import org.apache.felix.dm.Component; import org.opendaylight.controller.protocol_plugin.openflow.IFlowProgrammerNotifier; import org.opendaylight.controller.sal.connection.IPluginOutConnectionService; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.flowprogrammer.Flow; import org.opendaylight.controller.sal.flowprogrammer.IPluginOutFlowProgrammerService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Flow Programmer Notifier class for relaying asynchronous messages received * from the network node to the listeners on the proper container */ public class FlowProgrammerNotifier implements IFlowProgrammerNotifier { protected static final Logger logger = LoggerFactory .getLogger(FlowProgrammerNotifier.class); private IPluginOutFlowProgrammerService salNotifier; private IPluginOutConnectionService connectionOutService; public FlowProgrammerNotifier() { salNotifier = null; } void init(Component c) { logger.debug("INIT called!"); } /** * Function called by the dependency manager when at least one dependency * become unsatisfied or when the component is shutting down because for * example bundle is being stopped. * */ void destroy() { logger.debug("DESTROY called!"); } /** * Function called by dependency manager after "init ()" is called and after * the services provided by the class are registered in the service registry * */ void start() { logger.debug("START called!"); } /** * Function called by the dependency manager before the services exported by * the component are unregistered, this will be followed by a "destroy ()" * calls * */ void stop() { logger.debug("STOP called!"); } public void setPluginOutFlowProgrammerService( IPluginOutFlowProgrammerService s) { this.salNotifier = s; } public void unsetPluginOutFlowProgrammerService( IPluginOutFlowProgrammerService s) { if (this.salNotifier == s) { this.salNotifier = null; } } @Override public void flowRemoved(Node node, Flow flow) { if (!connectionOutService.isLocal(node)) { logger.debug("flow removed will not be notified in a non-master controller for node "+node); return; } if (salNotifier != null) { salNotifier.flowRemoved(node, flow); } else { logger.warn("Unable to relay switch message to upper layer"); } } @Override public void flowErrorReported(Node node, long rid, Object err) { if (!connectionOutService.isLocal(node)) { logger.debug("flow error will not be notified in a non-master controller for node "+node); return; } if (salNotifier != null) { salNotifier.flowErrorReported(node, rid, err); } else { logger.warn("Unable to relay switch error message to upper layer"); } } void setIPluginOutConnectionService(IPluginOutConnectionService s) { connectionOutService = s; } void unsetIPluginOutConnectionService(IPluginOutConnectionService s) { if (connectionOutService == s) { connectionOutService = null; } } }