| package net.floodlightcontroller.core.web; |
| |
| import java.util.concurrent.ConcurrentHashMap; |
| |
| import org.restlet.data.Status; |
| import org.restlet.resource.Post; |
| import org.restlet.resource.ServerResource; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| import net.floodlightcontroller.core.OFMessageFilterManager; |
| |
| public class PacketTraceResource extends ServerResource { |
| protected static Logger log = LoggerFactory.getLogger(PacketTraceResource.class); |
| |
| public static class FilterParameters { |
| |
| protected String sessionId = null; |
| protected String mac = null; |
| protected Integer period = null; |
| protected String direction = null; |
| protected String output = null; |
| |
| public String getSessionId() { |
| return sessionId; |
| } |
| public void setSessionId(String sessionId) { |
| this.sessionId = sessionId; |
| } |
| public String getMac() { |
| return mac; |
| } |
| public void setMac(String mac) { |
| this.mac = mac; |
| } |
| public Integer getPeriod() { |
| return period; |
| } |
| public void setPeriod(Integer period) { |
| this.period = period; |
| } |
| public String getDirection() { |
| return direction; |
| } |
| public void setDirection(String direction) { |
| this.direction = direction; |
| } |
| public String getOutput() { |
| return output; |
| } |
| public void setOutput(String output) { |
| this.output = output; |
| } |
| |
| public String toString() { |
| return "SessionID: " + sessionId + |
| "\tmac" + mac + |
| "\tperiod" + period + |
| "\tdirection" + direction + |
| "\toutput" + output; |
| } |
| } |
| |
| public static class PacketTraceOutput { |
| protected String sessionId = null; |
| |
| public String getSessionId() { |
| return sessionId; |
| } |
| |
| public void setSessionId(String sessionId) { |
| this.sessionId = sessionId; |
| } |
| } |
| |
| @Post("json") |
| public PacketTraceOutput packettrace(FilterParameters fp) { |
| |
| ConcurrentHashMap <String,String> filter = new ConcurrentHashMap<String,String> (); |
| String sid = null; |
| PacketTraceOutput output = new PacketTraceOutput(); |
| OFMessageFilterManager manager = |
| (OFMessageFilterManager)getContext() |
| .getAttributes(). |
| get(OFMessageFilterManager.class.getCanonicalName()); |
| |
| if (manager == null) { |
| sid = null; |
| setStatus(Status.SERVER_ERROR_SERVICE_UNAVAILABLE); |
| } |
| |
| if (fp.getSessionId() != null) { |
| filter.put("sessionId", fp.getSessionId()); |
| } |
| if (fp.getMac() != null) { |
| filter.put("mac", fp.getMac()); |
| } |
| if (fp.getDirection() != null) { |
| filter.put("direction", fp.getDirection()); |
| } |
| |
| if (filter.isEmpty()) { |
| setStatus(Status.CLIENT_ERROR_BAD_REQUEST); |
| } else { |
| if (log.isDebugEnabled()) { |
| log.debug ("Call setupFilter: sid:{} filter:{}, period:{}", |
| new Object[] {fp.getSessionId(), filter, |
| fp.getPeriod()*1000}); |
| } |
| sid = manager.setupFilter(fp.getSessionId(), filter, |
| fp.getPeriod()*1000); |
| output.setSessionId(sid); |
| setStatus(Status.SUCCESS_OK); |
| } |
| |
| return output; |
| } |
| } |