blob: 4447b7539e64b105b366928b1b3eef01f29da11c [file] [log] [blame]
/**
* Copyright 2011, Big Switch Networks, Inc.
* Originally created by David Erickson, Stanford University
*
* 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 net.floodlightcontroller.core;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.floodlightcontroller.core.internal.Controller.Counters;
import net.floodlightcontroller.core.module.IFloodlightService;
import net.onrc.onos.core.configmanager.INetworkConfigService;
import net.onrc.onos.core.packet.Ethernet;
import net.onrc.onos.core.util.OnosInstanceId;
import org.projectfloodlight.openflow.protocol.OFControllerRole;
import org.projectfloodlight.openflow.protocol.OFType;
/**
* The interface exposed by the core bundle that allows you to interact
* with connected switches.
*
* @author David Erickson (daviderickson@cs.stanford.edu)
*/
public interface IFloodlightProviderService extends IFloodlightService {
/**
* A value stored in the floodlight context containing a parsed packet
* representation of the payload of a packet-in message.
*/
public static final String CONTEXT_PI_PAYLOAD =
"net.floodlightcontroller.core.IFloodlightProvider.piPayload";
public static final String CONTEXT_PI_INPORT =
"net.floodlightcontroller.core.IFloodlightProvider.piInPort";;
/**
* The role of the controller as it pertains to a particular switch.
* Note that this definition of the role enum is different from the
* OF1.3 definition. It is maintained here to be backward compatible to
* earlier versions of the controller code. This enum is translated
* to the OF1.3 enum, before role messages are sent to the switch.
* See sendRoleRequestMessage method in OFSwitchImpl
*/
public static enum Role {
EQUAL(OFControllerRole.ROLE_EQUAL),
MASTER(OFControllerRole.ROLE_MASTER),
SLAVE(OFControllerRole.ROLE_SLAVE);
private final int nxRole;
private Role(OFControllerRole nxRole) {
this.nxRole = nxRole.ordinal();
}
/*
private static Map<Integer,Role> nxRoleToEnum
= new HashMap<Integer,Role>();
static {
for(Role r: Role.values())
nxRoleToEnum.put(r.toNxRole(), r);
}
public int toNxRole() {
return nxRole;
}
// Return the enum representing the given nxRole or null if no
// such role exists
public static Role fromNxRole(int nxRole) {
return nxRoleToEnum.get(nxRole);
}*/
}
/**
* A FloodlightContextStore object that can be used to retrieve the
* packet-in payload
*/
public static final FloodlightContextStore<Ethernet> bcStore =
new FloodlightContextStore<Ethernet>();
//************************
// Controller related
//************************
/**
* Get the current mapping of controller IDs to their IP addresses
* Returns a copy of the current mapping.
*
* @see IHAListener
*/
public Map<String, String> getControllerNodeIPs();
/**
* Return the controller start time in milliseconds
*
* @return
*/
public long getSystemStartTime();
/**
* Run the main I/O loop of the Controller.
*/
public void run();
// /**
// * Terminate the process
// */
// public void terminate();
//************************
// OF Message Listener related
//************************
/**
* Adds an OpenFlow message listener
*
* @param type The OFType the component wants to listen for
* @param listener The component that wants to listen for the message
*/
public void addOFMessageListener(OFType type, IOFMessageListener listener);
/**
* Removes an OpenFlow message listener
*
* @param type The OFType the component no long wants to listen for
* @param listener The component that no longer wants to receive the message
*/
public void removeOFMessageListener(OFType type, IOFMessageListener listener);
/**
* Return a non-modifiable list of all current listeners
*
* @return listeners
*/
public Map<OFType, List<IOFMessageListener>> getListeners();
//************************
// Switch & SwitchListener related
//************************
/**
* Returns an unmodifiable map of all actively connected OpenFlow switches. This doesn't
* contain switches that are connected but the controller's in the slave role.
*
* @return the set of actively connected switches
*/
public Map<Long, IOFSwitch> getSwitches();
/**
* Configure controller to always clear the flow table on the switch,
* when it connects to controller. This will be true for first time switch
* reconnect, as well as a switch re-attaching to Controller after HA
* switch over to ACTIVE role
*/
public void setAlwaysClearFlowsOnSwAdd(boolean value);
/**
* Gets the unique ID used to identify this ONOS instance in the cluster.
*
* @return ONOS Instance ID.
*/
public OnosInstanceId getOnosInstanceId();
/**
* Add a switch listener
*
* @param listener The module that wants to listen for events
*/
public void addOFSwitchListener(IOFSwitchListener listener);
/**
* Remove a switch listener
*
* @param listener The The module that no longer wants to listen for events
*/
public void removeOFSwitchListener(IOFSwitchListener listener);
Set<Long> getAllSwitchDpids();
IOFSwitch getSwitch(long dpid);
/**
* Record a switch event in in-memory debug-event
*
* @param switchDPID
* @param reason Reason for this event
* @param flushNow see debug-event flushing in IDebugEventService
*/
public void addSwitchEvent(long switchDPID, String reason, boolean flushNow);
Set<Long> getAllMasterSwitchDpids();
Set<Long> getAllEqualSwitchDpids();
IOFSwitch getMasterSwitch(long dpid);
IOFSwitch getEqualSwitch(long dpid);
void setAlwaysClearFlowsOnSwActivate(boolean value);
//************************
// Utility methods
//************************
/**
* Publish updates to Controller updates queue
*
* @param IUpdate
*/
public void publishUpdate(IUpdate update);
// /**
// * Re-injects an OFMessage back into the packet processing chain
// *
// * @param sw The switch to use for the message
// * @param msg the message to inject
// * @return True if successfully re-injected, false otherwise
// */
// public boolean injectOfMessage(IOFSwitch sw, OFMessage msg);
//
// /**
// * Re-injects an OFMessage back into the packet processing chain
// *
// * @param sw The switch to use for the message
// * @param msg the message to inject
// * @param bContext a floodlight context to use if required
// * @return True if successfully re-injected, false otherwise
// */
// public boolean injectOfMessage(IOFSwitch sw, OFMessage msg,
// FloodlightContext bContext);
//
// /**
// * Process written messages through the message listeners for the controller
// *
// * @param sw The switch being written to
// * @param m the message
// * @param bc any accompanying context object
// */
// public void handleOutgoingMessage(IOFSwitch sw, OFMessage m,
// FloodlightContext bc);
/**
* Return the default set of counters
* @return
*/
public Counters getCounters();
Map<String, Long> getMemory();
Long getUptime();
public INetworkConfigService getNetworkConfigService();
}