blob: 772bf7d6c4575815cbd4b36a89ac53725549a5e5 [file] [log] [blame]
package net.onrc.onos.apps.sdnip.web;
import net.onrc.onos.apps.sdnip.ISdnIpService;
import net.onrc.onos.apps.sdnip.RestClient;
import org.restlet.resource.Delete;
import org.restlet.resource.Post;
import org.restlet.resource.ServerResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* REST handler for sending commands to SDN-IP. This interface is intended for
* operators or developers to change the route table of BGPd. There are
* interfaces for both sending new routes and deleting routes. This is
* not intended to be used during general operation. It is to have a way to
* influence BGPd's behavior for debugging.
*/
public class OutgoingRequestResource extends ServerResource {
private static final Logger log = LoggerFactory.getLogger(OutgoingRequestResource.class);
/**
* Handles a REST call to SDN-IP which gives a command to send a new route
* to BGPd.
*
* @return a String describing the result of the operation
*/
@Post
public String handlePostMethod() {
ISdnIpService sdnIp = (ISdnIpService) getContext().getAttributes().
get(ISdnIpService.class.getCanonicalName());
String routerId = (String) getRequestAttributes().get("routerid");
String prefix = (String) getRequestAttributes().get("prefix");
String mask = (String) getRequestAttributes().get("mask");
String nexthop = (String) getRequestAttributes().get("nexthop");
String bgpdRestIp = sdnIp.getBgpdRestIp();
// bgpdRestIp includes port number, e.g. 1.1.1.1:8080
RestClient.post("http://" + bgpdRestIp + "/wm/bgp/" + routerId + "/" + prefix + "/"
+ mask + "/" + nexthop);
String reply = "";
reply = "[POST: " + prefix + "/" + mask + ":" + nexthop + "/synch]";
log.info(reply);
return reply + "\n";
}
/**
* Handles a REST call to SDN-IP which gives a command to BGPd to delete a
* route from its route table.
*
* @return a String description of the result of the operation
*/
@Delete
public String handleDeleteMethod() {
ISdnIpService sdnIp = (ISdnIpService) getContext().getAttributes().
get(ISdnIpService.class.getCanonicalName());
String routerId = (String) getRequestAttributes().get("routerid");
String prefix = (String) getRequestAttributes().get("prefix");
String mask = (String) getRequestAttributes().get("mask");
String nextHop = (String) getRequestAttributes().get("nexthop");
StringBuilder reply = new StringBuilder();
String bgpdRestIp = sdnIp.getBgpdRestIp();
RestClient.delete("http://" + bgpdRestIp + "/wm/bgp/" + routerId + "/" + prefix + "/"
+ mask + "/" + nextHop);
reply.append("[DELE: ")
.append(prefix)
.append('/')
.append(mask)
.append(':')
.append(nextHop)
.append("/synch]");
log.info(reply.toString());
return reply.append("\n").toString();
}
}