blob: d754a4a31087cc309cc6ac8885d05c492c0da23a [file] [log] [blame]
/**
* Copyright 2011, Big Switch Networks, Inc.
* Originally created by David Erickson & Rob Sherwood, 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 org.openflow.protocol.factory;
import org.jboss.netty.buffer.ChannelBuffer;
import org.openflow.protocol.vendor.OFVendorData;
import org.openflow.protocol.vendor.OFVendorDataType;
import org.openflow.protocol.vendor.OFVendorId;
/**
* The interface to factories used for parsing/creating OFVendorData instances.
* All methods are expected to be thread-safe.
*
* @author Rob Vaterlaus (rob.vaterlaus@bigswitch.com)
*/
public interface OFVendorDataFactory {
/**
* Retrieves an OFVendorData instance corresponding to the specified
* OFVendorId and OFVendorDataType. There are 3 possible cases for
* how this will be called:
*
* 1) If the vendor id in the OFVendor message is an unknown value,
* then this method is called with both vendorId and vendorDataType
* set to null. In this case typically the factory method should
* return an instance of OFGenericVendorData that just contains
* the raw byte array of the vendor data.
*
* 2) If the vendor id is known but no vendor data type has been
* registered for the data in the message, then vendorId is set to
* the appropriate OFVendorId instance and OFVendorDataType is set
* to null. This would typically be handled the same way as #1
*
* 3) If both the vendor id and and vendor data type are known, then
* typically you'd just call the method in OFVendorDataType to
* instantiate the appropriate subclass of OFVendorData.
*
* @param vendorId the vendorId of the containing OFVendor message
* @param vendorDataType the type of the OFVendorData to be retrieved
* @return an OFVendorData instance
*/
public OFVendorData getVendorData(OFVendorId vendorId,
OFVendorDataType vendorDataType);
/**
* Attempts to parse and return the OFVendorData contained in the given
* ChannelBuffer, beginning right after the vendor id.
* @param vendorId the vendor id that was parsed from the OFVendor message.
* @param data the ChannelBuffer from which to parse the vendor data
* @param length the length to the end of the enclosing message.
* @return an OFVendorData instance
*/
public OFVendorData parseVendorData(int vendorId, ChannelBuffer data,
int length);
}