| /** |
| * 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); |
| } |