| package net.floodlightcontroller.flowcache; |
| |
| import org.openflow.protocol.OFMatchWithSwDpid; |
| |
| import net.floodlightcontroller.core.FloodlightContext; |
| import net.floodlightcontroller.core.FloodlightContextStore; |
| import net.floodlightcontroller.core.IOFSwitch; |
| import net.floodlightcontroller.devicemanager.SwitchPort; |
| import net.floodlightcontroller.core.module.IFloodlightService; |
| |
| /** |
| * The Interface IFlowCache. |
| * <p> |
| * public interface APIs to Big Switch Flow-Cache Service. Flow-Cache maintains |
| * the network-level flows that are currently deployed in the underlying |
| * network. The flow cache can be queried using various filters by using the |
| * corresponding APIs. |
| * |
| * @author subrata |
| * |
| */ |
| public interface IFlowCacheService extends IFloodlightService { |
| |
| public static final String FLOWCACHE_APP_NAME = |
| "net.floodlightcontroller.flowcache.appName"; |
| public static final String FLOWCACHE_APP_INSTANCE_NAME = |
| "net.floodlightcontroller.flowcache.appInstanceName"; |
| |
| /** |
| * The flow cache query event type indicating the event that triggered the |
| * query. The callerOpaqueObj can be keyed based on this event type |
| */ |
| public static enum FCQueryEvType { |
| /** The GET query. Flows need not be reconciled for this query type */ |
| GET, |
| /** A new App was added. */ |
| APP_ADDED, |
| /** An App was deleted. */ |
| APP_DELETED, |
| /** Interface rule of an app was modified */ |
| APP_INTERFACE_RULE_CHANGED, |
| /** Some App configuration was changed */ |
| APP_CONFIG_CHANGED, |
| /** An ACL was added */ |
| ACL_ADDED, |
| /** An ACL was deleted */ |
| ACL_DELETED, |
| /** An ACL rule was added */ |
| ACL_RULE_ADDED, |
| /** An ACL rule was deleted */ |
| ACL_RULE_DELETED, |
| /** ACL configuration was changed */ |
| ACL_CONFIG_CHANGED, |
| /** device had moved to a different port in the network */ |
| DEVICE_MOVED, |
| /** device's property had changed, such as tag assignment */ |
| DEVICE_PROPERTY_CHANGED, |
| /** Link down */ |
| LINK_DOWN, |
| /** Periodic scan of switch flow table */ |
| PERIODIC_SCAN, |
| } |
| |
| /** |
| * A FloodlightContextStore object that can be used to interact with the |
| * FloodlightContext information about flowCache. |
| */ |
| public static final FloodlightContextStore<String> fcStore = |
| new FloodlightContextStore<String>(); |
| |
| /** |
| * Submit a flow cache query with query parameters specified in FCQueryObj |
| * object. The query object can be created using one of the newFCQueryObj |
| * helper functions in IFlowCache interface. |
| * <p> |
| * The queried flows are returned via the flowQueryRespHandler() callback |
| * that the caller must implement. The caller can match the query with |
| * the response using unique callerOpaqueData which remains unchanged |
| * in the request and response callback. |
| * |
| * @see com.bigswitch.floodlight.flowcache#flowQueryRespHandler |
| * @param query the flow cache query object as input |
| * |
| */ |
| public void submitFlowCacheQuery(FCQueryObj query); |
| |
| /** |
| * Deactivates all flows in the flow cache for which the source switch |
| * matches the given switchDpid. Note that the flows are NOT deleted |
| * from the cache. |
| * |
| * @param switchDpid Data-path identifier of the source switch |
| */ |
| public void deactivateFlowCacheBySwitch(long switchDpid); |
| |
| /** |
| * Deletes all flows in the flow cache for which the source switch |
| * matches the given switchDpid. |
| * |
| * @param switchDpid Data-path identifier of the source switch |
| */ |
| public void deleteFlowCacheBySwitch(long switchDpid); |
| |
| /** |
| * Add a flow to the flow-cache - called when a flow-mod is about to be |
| * written to a set of switches. If it returns false then it should not |
| * be written to the switches. If it returns true then the cookie returned |
| * should be used for the flow mod sent to the switches. |
| * |
| * @param appInstName Application instance name |
| * @param ofm openflow match object |
| * @param cookie openflow-mod cookie |
| * @param swPort SwitchPort object |
| * @param priority openflow match priority |
| * @param action action taken on the matched packets (PERMIT or DENY) |
| * @return true: flow should be written to the switch(es) |
| * false: flow should not be written to the switch(es). false is |
| * returned, for example, when the flow was recently |
| * written to the flow-cache and hence it is dampened to |
| * avoid frequent writes of the same flow to the switches |
| * This case can typically arise for the flows written at the |
| * internal ports as they are heavily wild-carded. |
| */ |
| public boolean addFlow(String appInstName, OFMatchWithSwDpid ofm, |
| Long cookie, long srcSwDpid, |
| short inPort, short priority, byte action); |
| |
| /** |
| * Add a flow to the flow-cache - called when a flow-mod is about to be |
| * written to a set of switches. If it returns false then it should not |
| * be written to the switches. If it returns true then the cookie returned |
| * should be used for the flow mod sent to the switches. |
| * |
| * @param cntx the cntx |
| * @param ofm the ofm |
| * @param cookie the cookie |
| * @param swPort the sw port |
| * @param priority the priority |
| * @param action the action |
| * @return true: flow should be written to the switch(es) |
| * false: flow should not be written to the switch(es). false is |
| * returned, for example, when the flow was recently |
| * written to the flow-cache and hence it is dampened to |
| * avoid frequent writes of the same flow to the switches |
| * This case can typically arise for the flows written at the |
| * internal ports as they are heavily wild-carded. |
| */ |
| public boolean addFlow(FloodlightContext cntx, OFMatchWithSwDpid ofm, |
| Long cookie, SwitchPort swPort, |
| short priority, byte action); |
| |
| /** |
| * Move the specified flow from its current application instance to a |
| * different application instance. This API can be used when a flow moves |
| * to a different application instance when the application instance |
| * configuration changes or when a device moves to a different part in |
| * the network that belongs to a different application instance. |
| * <p> |
| * Note that, if the flow was not found in the current application |
| * instance then the flow is not moved to the new application instance. |
| * |
| * @param ofMRc the object containing the flow match and new application |
| * instance name. |
| * @return true is the flow was found in the flow cache in the current |
| * application instance; false if the flow was not found in the flow-cache |
| * in the current application instance. |
| */ |
| public boolean moveFlowToDifferentApplInstName(OFMatchReconcile ofMRc); |
| |
| /** |
| * Delete all flow from the specified switch |
| * @param sw |
| */ |
| public void deleteAllFlowsAtASourceSwitch(IOFSwitch sw); |
| |
| /** |
| * Post a request to update flowcache from a switch. |
| * This is an asynchronous operation. |
| * It queries the switch for stats and updates the flowcache asynchronously |
| * with the response. |
| * @param swDpid |
| * @param delay_ms |
| */ |
| public void querySwitchFlowTable(long swDpid); |
| } |