/**
*    Copyright 2011, Big Switch Networks, Inc. 
* 
*    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.Map;

/**
 *
 *
 * @author Shudong Zhou
 */
public interface IInfoProvider {

    /**
     * Called when rest API requests information of a particular type
     * @param type
     * @return
     */
    public Map<String, Object> getInfo(String type);
}
