package net.onrc.onos.ofcontroller.core;

import java.util.List;

import net.floodlightcontroller.core.IOFSwitch;

import org.openflow.protocol.OFPhysicalPort;

public interface ISwitchStorage extends INetMapStorage {
	
	public enum SwitchState {
		INACTIVE,
		ACTIVE
	}
	
	/*
	 * Initialize
	 */
	public void init(final String dbStore, final String conf);

	/*
	 * Update the switch details
	 */
	public boolean updateSwitch(String dpid, SwitchState state, DM_OPERATION op);
	/*
	 * Add a switch and all its associated ports
	 */
	public boolean addSwitch(IOFSwitch sw);
	/*
	 * Add a switch
	 */
	public boolean addSwitch(String dpid);
	/*
	 * Delete switch and associated ports
	 */
	public boolean deleteSwitch(String dpid);
	/*
	 * Deactivate the switch and associated ports
	 */
	public boolean deactivateSwitch(String dpid);
	/*
	 * Update the port details
	 */
	public boolean updatePort(String dpid, short port, int state, String desc);
	/*
	 * Associate a port on switch
	 */
	public boolean addPort(String dpid, OFPhysicalPort port);
	/*
	 * Delete a port on a switch by num
	 */
	public boolean deletePort(String dpid, short port);
	/**
	 * Get list of all ports on the switch specified by given DPID.
	 *
	 * @param dpid DPID of desired switch.
	 * @return List of port IDs. Empty list if no port was found.
	 */
	public List<Short> getPorts(String dpid);
}
