diff options
Diffstat (limited to 'framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfaces.java')
-rw-r--r-- | framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfaces.java | 260 |
1 files changed, 0 insertions, 260 deletions
diff --git a/framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfaces.java b/framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfaces.java deleted file mode 100644 index 70ade23a..00000000 --- a/framework/src/onos/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfaces.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.pim.impl; - -import org.jboss.netty.util.Timeout; -import org.jboss.netty.util.TimerTask; -import org.onosproject.incubator.net.config.basics.ConfigException; -import org.onosproject.incubator.net.config.basics.InterfaceConfig; -import org.onosproject.incubator.net.intf.Interface; -import org.onosproject.incubator.net.intf.InterfaceService; -import org.onosproject.net.ConnectPoint; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -import org.onosproject.net.config.NetworkConfigEvent; -import org.onosproject.net.config.NetworkConfigListener; -import org.onosproject.net.config.NetworkConfigService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * PIMInterfaces is a collection of all neighbors we have received - * PIM hello messages from. The main structure is a HashMap indexed - * by ConnectPoint with another HashMap indexed on the PIM neighbors - * IPAddress, it contains all PIM neighbors attached on that ConnectPoint. - */ -public final class PIMInterfaces { - - private Logger log = LoggerFactory.getLogger("PIMInterfaces"); - - private static PIMInterfaces instance = null; - - // Used to listen to network configuration changes - private NetworkConfigService configService; - - // Used to access IP Interface definitions for our segment - private InterfaceService interfaceService; - - // Internal class used to listen for network configuration changes - private InternalConfigListener configListener = new InternalConfigListener(); - - // This is the global container for all PIM Interfaces indexed by ConnectPoints. - private Map<ConnectPoint, PIMInterface> interfaces = new HashMap<>(); - - // Default hello message interval - private int helloMessageInterval = 60; - - // Timer used to send hello messages on this interface - private Timeout helloTimer; - - // Required by a utility class - private PIMInterfaces() {} - - /** - * Get the instance of PIMInterfaces. Create the instance if needed. - * - * @return PIMInterface instance - */ - public static PIMInterfaces getInstance() { - if (null == instance) { - instance = new PIMInterfaces(); - } - return instance; - } - - // Initialize the services - public void initialize(NetworkConfigService cs, InterfaceService is) { - configService = cs; - interfaceService = is; - - // Initialize interfaces if they already exist - initInterfaces(); - - // Listen for network config changes - configService.addListener(configListener); - } - - /** - * Listener for network config events. - */ - private class InternalConfigListener implements NetworkConfigListener { - - private void updateInterfaces(InterfaceConfig config) { - Set<Interface> intfs; - try { - intfs = config.getInterfaces(); - } catch (ConfigException e) { - log.error(e.toString()); - return; - } - for (Interface intf : intfs) { - addInterface(intf); - } - } - - /** - * Remove the PIMInterface represented by the ConnectPoint. If the - * PIMInterface does not exist this function is a no-op. - * - * @param cp The connectPoint representing the PIMInterface to be removed. - */ - private void removeInterface(ConnectPoint cp) { - PIMInterfaces.this.removeInterface(cp); - } - - @Override - public void event(NetworkConfigEvent event) { - switch (event.type()) { - case CONFIG_ADDED: - case CONFIG_UPDATED: - log.debug("Config updated: " + event.toString() + "\n"); - if (event.configClass() == InterfaceConfig.class) { - InterfaceConfig config = - configService.getConfig((ConnectPoint) event.subject(), InterfaceConfig.class); - updateInterfaces(config); - } - break; - case CONFIG_REMOVED: - if (event.configClass() == InterfaceConfig.class) { - removeInterface((ConnectPoint) event.subject()); - } - break; - case CONFIG_REGISTERED: - case CONFIG_UNREGISTERED: - default: - break; - } - } - } - - // Configure interfaces if they already exist. - private void initInterfaces() { - Set<Interface> intfs = interfaceService.getInterfaces(); - for (Interface intf : intfs) { - log.debug("Adding interface: " + intf.toString() + "\n"); - addInterface(intf); - } - } - - /** - * Create a PIM Interface and add to our interfaces list. - * - * @param intf the interface to add - * @return the PIMInterface - */ - public PIMInterface addInterface(Interface intf) { - PIMInterface pif = new PIMInterface(intf); - interfaces.put(intf.connectPoint(), pif); - - // If we have added our first interface start the hello timer. - if (interfaces.size() == 1) { - startHelloTimer(); - } - - // Return this interface - return pif; - } - - /** - * Remove the PIMInterface from the given ConnectPoint. - * - * @param cp the ConnectPoint indexing the PIMInterface to be removed. - */ - public void removeInterface(ConnectPoint cp) { - if (interfaces.containsKey(cp)) { - interfaces.remove(cp); - } - - if (interfaces.size() == 0) { - PIMTimer.stop(); - } - } - - /** - * Return a collection of PIMInterfaces for use by the PIM Interface codec. - * - * @return the collection of PIMInterfaces - */ - public Collection<PIMInterface> getInterfaces() { - return interfaces.values(); - } - - /** - * Get the PIM Interface indexed by the given ConnectPoint. - * - * @param cp the connect point - * @return the PIMInterface if it exists, NULL if not - */ - public PIMInterface getInterface(ConnectPoint cp) { - return interfaces.get(cp); - } - - /** - * Return a string of PIMInterfaces for the cli command. - * - * @return a string representing PIM interfaces - */ - public String printInterfaces() { - String str = ""; - for (PIMInterface pi : interfaces.values()) { - str += pi.toString(); - } - return str; - } - - /* ---------------------------------- PIM Hello Timer ----------------------------------- */ - - /** - * Start a new hello timer for this interface. - */ - private void startHelloTimer() { - helloTimer = PIMTimer.getTimer().newTimeout( - new HelloTimer(), - helloMessageInterval, - TimeUnit.SECONDS); - - log.debug("Started Hello Timer"); - } - - /** - * This inner class handles transmitting a PIM hello message on this ConnectPoint. - */ - private final class HelloTimer implements TimerTask { - - HelloTimer() { - } - - @Override - public void run(Timeout timeout) throws Exception { - - log.debug("Running Hello Timer\n"); - // Technically we should not send all hello's in synch.. - for (PIMInterface pi : interfaces.values()) { - pi.sendHello(); - } - - // restart the hello timer - if (interfaces.size() > 0) { - startHelloTimer(); - } - } - } -}
\ No newline at end of file |