X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fweb%2Fflows%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fflows%2Fweb%2FFlows.java;h=259ffde4b447e1d5d8c916ff96a26ee38198b3bf;hb=de12565a7795af98788f8150eb0072f9c985f4a1;hp=9444360eecb7d7ae4a6e084a4fde8512c7b5ed71;hpb=0d8516471e3ee70a8bc9f02d046c5c0a20db01b1;p=controller.git diff --git a/opendaylight/web/flows/src/main/java/org/opendaylight/controller/flows/web/Flows.java b/opendaylight/web/flows/src/main/java/org/opendaylight/controller/flows/web/Flows.java index 9444360eec..259ffde4b4 100644 --- a/opendaylight/web/flows/src/main/java/org/opendaylight/controller/flows/web/Flows.java +++ b/opendaylight/web/flows/src/main/java/org/opendaylight/controller/flows/web/Flows.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.flows.web; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -51,8 +52,11 @@ public class Flows implements IDaylightWeb { private static final String WEB_ID = "flows"; private static final short WEB_ORDER = 2; + private final Gson gson; + public Flows() { ServiceHelper.registerGlobalService(IDaylightWeb.class, this, null); + gson = new Gson(); } @Override @@ -83,20 +87,20 @@ public class Flows implements IDaylightWeb { // Derive the privilege this user has on the current container String userName = request.getUserPrincipal().getName(); Privilege privilege = DaylightWebUtil.getContainerPrivilege(userName, containerName, this); - if (privilege == Privilege.NONE) { + if (privilege == Privilege.NONE) { return null; } // fetch frm - IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper - .getInstance(IForwardingRulesManager.class, containerName, this); + IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper.getInstance( + IForwardingRulesManager.class, containerName, this); if (frm == null) { return null; } // fetch sm - ISwitchManager switchManager = (ISwitchManager) ServiceHelper - .getInstance(ISwitchManager.class, containerName, this); + ISwitchManager switchManager = (ISwitchManager) ServiceHelper.getInstance(ISwitchManager.class, containerName, + this); if (switchManager == null) { return null; } @@ -114,7 +118,7 @@ public class Flows implements IDaylightWeb { flowSet.add(entry); } - Map output = new HashMap(2); + Map output = new HashMap(2); output.put("flows", flowSet); output.put("privilege", privilege); return output; @@ -131,27 +135,25 @@ public class Flows implements IDaylightWeb { return null; } - ISwitchManager switchManager = (ISwitchManager) ServiceHelper - .getInstance(ISwitchManager.class, containerName, this); + ISwitchManager switchManager = (ISwitchManager) ServiceHelper.getInstance(ISwitchManager.class, containerName, + this); if (switchManager == null) { return null; } Map nodes = new HashMap(); - Map port; + Map port; for (Switch node : switchManager.getNetworkDevices()) { - port = new HashMap(); // new port + port = new HashMap(); // new port Set nodeConnectorSet = node.getNodeConnectors(); if (nodeConnectorSet != null) { for (NodeConnector nodeConnector : nodeConnectorSet) { - String nodeConnectorName = ((Name) switchManager - .getNodeConnectorProp(nodeConnector, - Name.NamePropName)).getValue(); - port.put((Short) nodeConnector.getID(), nodeConnectorName - + "(" + nodeConnector.getNodeConnectorIDString() - + ")"); + String nodeConnectorName = ((Name) switchManager.getNodeConnectorProp(nodeConnector, + Name.NamePropName)).getValue(); + port.put( nodeConnector.getID().toString(), + nodeConnectorName + "(" + nodeConnector.getNodeConnectorIDString() + ")"); } } @@ -180,13 +182,13 @@ public class Flows implements IDaylightWeb { return null; } - ISwitchManager switchManager = (ISwitchManager) ServiceHelper - .getInstance(ISwitchManager.class, containerName, this); + ISwitchManager switchManager = (ISwitchManager) ServiceHelper.getInstance(ISwitchManager.class, containerName, + this); if (switchManager == null) { return null; } - IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper - .getInstance(IForwardingRulesManager.class, containerName, this); + IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper.getInstance( + IForwardingRulesManager.class, containerName, this); if (frm == null) { return null; } @@ -199,8 +201,7 @@ public class Flows implements IDaylightWeb { List flows = frm.getStaticFlows(node); String nodeDesc = node.toString(); - SwitchConfig config = switchManager.getSwitchConfig(node - .toString()); + SwitchConfig config = switchManager.getSwitchConfig(node.toString()); if ((config != null) && (config.getProperty(Description.propertyName) != null)) { nodeDesc = ((Description) config.getProperty(Description.propertyName)).getValue(); } @@ -211,12 +212,12 @@ public class Flows implements IDaylightWeb { return nodes; } + @RequestMapping(value = "/flow", method = RequestMethod.POST) @ResponseBody - public String actionFlow(@RequestParam(required = true) String action, - @RequestParam(required = false) String body, - @RequestParam(required = true) String nodeId, - HttpServletRequest request, @RequestParam(required = false) String container) { + public String actionFlow(@RequestParam(required = true) String action, @RequestParam(required = false) String body, + @RequestParam(required = true) String nodeId, HttpServletRequest request, + @RequestParam(required = false) String container) { String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; // Authorization check @@ -225,32 +226,40 @@ public class Flows implements IDaylightWeb { return "Operation not authorized"; } - IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper - .getInstance(IForwardingRulesManager.class, containerName, this); + IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper.getInstance( + IForwardingRulesManager.class, containerName, this); if (frm == null) { return null; } - Gson gson = new Gson(); FlowConfig flow = gson.fromJson(body, FlowConfig.class); + Node node = Node.fromString(nodeId); flow.setNode(node); + Status result = new Status(StatusCode.BADREQUEST, "Invalid request"); if (action.equals("add")) { result = frm.addStaticFlow(flow); - DaylightWebUtil.auditlog("Flow", userName, "added", flow.getName(), containerName); + if (result.isSuccess()) { + DaylightWebUtil.auditlog("Flow Entry", userName, "added", flow.getName() + " on Node " + + DaylightWebUtil.getNodeDesc(node, containerName, this), containerName); + } + } else if (action.equals("edit")){ + result = frm.modifyStaticFlow(flow); + if (result.isSuccess()) { + DaylightWebUtil.auditlog("Flow Entry", userName, "updated", flow.getName() + " on Node " + + DaylightWebUtil.getNodeDesc(node, containerName, this), containerName); + } } - return (result.isSuccess()) ? StatusCode.SUCCESS.toString() : result - .getDescription(); + return (result.isSuccess()) ? StatusCode.SUCCESS.toString() : result.getDescription(); } @RequestMapping(value = "/flow/{nodeId}/{name:.*}", method = RequestMethod.POST) @ResponseBody - public String removeFlow(@PathVariable("nodeId") String nodeId, - @PathVariable("name") String name, - @RequestParam(required = true) String action, - HttpServletRequest request, @RequestParam(required = false) String container) { + public String removeFlow(@PathVariable("nodeId") String nodeId, @PathVariable("name") String name, + @RequestParam(required = true) String action, HttpServletRequest request, + @RequestParam(required = false) String container) { String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; // Authorization check @@ -259,8 +268,8 @@ public class Flows implements IDaylightWeb { return "Operation not authorized"; } - IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper - .getInstance(IForwardingRulesManager.class, containerName, this); + IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper.getInstance( + IForwardingRulesManager.class, containerName, this); if (frm == null) { return null; } @@ -272,20 +281,60 @@ public class Flows implements IDaylightWeb { } if (action.equals("remove")) { result = frm.removeStaticFlow(name, node); - if(result.isSuccess()) { - DaylightWebUtil.auditlog("Flow", userName, "removed", name, containerName); + if (result.isSuccess()) { + DaylightWebUtil.auditlog("Flow Entry", userName, "removed", + name + " on Node " + DaylightWebUtil.getNodeDesc(node, containerName, this), containerName); } } else if (action.equals("toggle")) { result = frm.toggleStaticFlowStatus(name, node); - if(result.isSuccess()) { - DaylightWebUtil.auditlog("Flow", userName, "toggled", name, containerName); + if (result.isSuccess()) { + DaylightWebUtil.auditlog("Flow Entry", userName, "toggled", + name + " on Node " + DaylightWebUtil.getNodeDesc(node, containerName, this), containerName); } } else { result = new Status(StatusCode.BADREQUEST, "Unknown action"); } - return (result.isSuccess()) ? StatusCode.SUCCESS.toString() : result - .getDescription(); + return (result.isSuccess()) ? StatusCode.SUCCESS.toString() : result.getDescription(); + } + + @SuppressWarnings("unchecked") + @RequestMapping(value = "/flow/deleteFlows", method = RequestMethod.POST) + @ResponseBody + public String removeSelectedFlows(@RequestParam(required = false) String body, HttpServletRequest request, + @RequestParam(required = false) String container) { + String containerName = (container == null) ? GlobalConstants.DEFAULT.toString() : container; + + // Authorization check + String userName = request.getUserPrincipal().getName(); + if (DaylightWebUtil.getContainerPrivilege(userName, containerName, this) != Privilege.WRITE) { + return "Operation not authorized"; + } + IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper.getInstance( + IForwardingRulesManager.class, containerName, this); + if (frm == null) { + return "Forwarding Rules Manager is not available"; + } + + List> flowList = new ArrayList>(); + flowList = gson.fromJson(body, flowList.getClass()); + Status result = new Status(StatusCode.BADREQUEST, "Invalid request"); + String status = ""; + for (Map flowEntry : flowList) { + Node node = Node.fromString(flowEntry.get("node")); + result = frm.removeStaticFlow(flowEntry.get("name"), node); + if (result.isSuccess()) { + DaylightWebUtil.auditlog("Flow Entry", userName, "removed", flowEntry.get("name") + " on Node " + + DaylightWebUtil.getNodeDesc(node, containerName, this), containerName); + } else { + status = flowEntry.get("name") + ", " + status; + } + } + if (!status.equals("")) { + return "Could not remove " + status.substring(0, status.length() - 2) + " Flow(s)"; + } else { + return "Success"; + } } private String getNodeDesc(Node node, ISwitchManager switchManager) {