package org.opennaas.extensions.opendaylight.vtn.capability;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.opennaas.extensions.opendaylight.vtn.model.Boundary;
import org.opennaas.extensions.opendaylight.vtn.model.OpenDaylightvBridge;
import org.opennaas.extensions.opendaylight.vtn.model.PortMap;
import org.opennaas.extensions.opendaylight.vtn.model.vLink;
import org.opennaas.extensions.opendaylight.vtn.protocol.client.wrappers.BoundaryWrapper;
import org.opennaas.extensions.opendaylight.vtn.protocol.client.wrappers.LogicalPortsOFFlowsWrapper;
import org.opennaas.extensions.opendaylight.vtn.protocol.client.wrappers.vBridgeInterfacesWrapper;
import org.opennaas.extensions.opendaylight.vtn.protocol.client.wrappers.vBridgesWrapper;
import org.opennaas.extensions.opendaylight.vtn.protocol.client.wrappers.vLinksWrapper;
/**
*
* @author Josep Batallé (josep.batalle@i2cat.net)
*
*/
@Path("/")
public interface IVTNCapability {
/**
* ODL Code values:
* (https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_(VTN):VTN_Coordinator:RestApi)
*/
/**
* Create a new VTN
*
* @param vtnName
* @return will be one of the HTML Code values defined in ODL
*/
@Path("/vtns/{vtn-name}")
@GET
public Response createVTN(@PathParam("vtn-name") String vtnName);
/**
* Remove a VTN
*
* @param vtnName
* @return will be one of the HTML Code values defined in ODL
*/
@Path("/vtns/{vtn-name}")
@DELETE
public Response removeVTN(@PathParam("vtn-name") String vtnName);
/**
* Create controller
*
* @param name
* @param ipaddr
* @param type
* @param description
* @return
*/
@Path("/controller/{name}/{ipaddr}/{type}/{description}")
@GET
public Response createController(@PathParam("name") String name, @PathParam("ipaddr") String ipaddr, @PathParam("type") String type, @PathParam("description") String description);
/**
* Create vBridge
*
* @param vtnName
* @param vBridge
* @param ctrl
* @param domain
* @return
*/
@Path("/vtns/{vtn-name}/vbridges/{vbr}/{ctrl}/{domain}")
@GET
public Response createvBridge(@PathParam("vtn-name") String vtnName, @PathParam("vbr") String vBridge,
@PathParam("ctrl") String ctrl, @PathParam("domain") String domain);
@Path("/vtns/{vtn-name}/vbridges/{vbr}/interfaces/{iface}")
@GET
public Response createInterfaces(@PathParam("vtn-name") String vtnName, @PathParam("vbr") String vBridge, @PathParam("iface") String iface);
@Path("/boundaries/{id}/{ctrl1}/{domain1}/{port1}/{ctrl1}/{domain1}/{port1}")
@GET
public Response createBoundary(@PathParam("id") String id, @PathParam("ctrl1") String ctrl1,
@PathParam("domain1") String domain1, @PathParam("port1") String port1, @PathParam("ctrl2") String ctrl2,
@PathParam("domain2") String domain2, @PathParam("port2") String port2);
@Path("/vtns/{vtn-name}/vlink/{vlink-name}/{vnode1}/{if1}/{vnode2}/{if2}/{bound-id}/{vlan-id}")
@GET
public Response createvLink(@PathParam("vtn-name") String vtnName, @PathParam("vlink-name") String vlinkName,
@PathParam("vnode1") String vnode1, @PathParam("if1") String if1, @PathParam("vnode2") String vnode2,
@PathParam("if2") String if2, @PathParam("bound-id") String boundId, @PathParam("vlan-id") String vlanId);
@Path("/mapport/{vtn-name}/{vbr}/{iface}/{logical-port}")
@GET
public Response mapPort(@PathParam("vtn-name") String vtnName, @PathParam("vbr") String vBridge,
@PathParam("iface") String iface, @PathParam("logical-port") String port);
@Path("/mapport/{vtn-name}/{vbr}/{iface}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public PortMap mapPort(@PathParam("vtn-name") String vtnName, @PathParam("vbr") String vBridge, @PathParam("iface") String iface);
@Path("/logicports/{ctrl}/{domain}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public LogicalPortsOFFlowsWrapper getLogicalPorts(@PathParam("ctrl") String ctrl, @PathParam("domain") String domain);
@Path("/checkportmap")
@GET
public void checkPortMap();
@Path("/vbridge/{vtn-name}/{vbr}")
@GET
public OpenDaylightvBridge getvBridge(@PathParam("vtn-name") String vtnName, @PathParam("vbr") String vBridge);
@Path("/vbridges/{vtn-name}")
@GET
public vBridgesWrapper getvBridges(@PathParam("vtn-name") String vtnName);
@Path("/interfaces/{vtn-name}/{vbr}")
@GET
public vBridgeInterfacesWrapper getInterfaces(@PathParam("vtn-name") String vtnName, @PathParam("vbr") String vBridge);
@Path("/boundary/{bound}")
@GET
public Boundary getBoundary(@PathParam("bound") String bound);
@Path("/boundaries")
@GET
public BoundaryWrapper getBoundaries();
@Path("/vlink/{vtn-name}/{vlink}")
@GET
public vLink getvLink(@PathParam("vtn-name") String vtnName, @PathParam("vlink") String bound);
@Path("/vlinks/{vtn-name}")
@GET
public vLinksWrapper getvLinks(@PathParam("vtn-name") String vtnName);
/**
* Set coordinator address. IP address and port
*
* @param address
* @param port
* @return
*/
@Path("/coordinator/{address}/{port}")
@GET
public Response coordinatorAddress(@PathParam("address") String address, @PathParam("port") String port);
@Path("/ipreq/{DPID}/{Port}")
@GET
public Response ipreq(@PathParam("DPID") String DPID, @PathParam("Port") String Port);
@Path("/updateInterfaces")
@GET
public void updateInterfaces();
@Path("/update")
@GET
public void update();
@Path("/cleanvtn")
@GET
public void cleanVTN();
}