X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fweb%2Fflows%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fflows%2Fweb%2FFlows.java;h=9c3c895916b03f88c579996d91d27c15b842776c;hp=8a7c3983d1cae6e7c2260c00dbdeb8d1263065f2;hb=d9d92fdda436c02a2e8558c9d30ca24b39475857;hpb=be240fcf2f3831c1b8f17aa1c8a9ec1f672fe701 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 8a7c3983d1..9c3c895916 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 @@ -14,11 +14,15 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import org.opendaylight.controller.forwardingrulesmanager.FlowConfig; import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager; +import org.opendaylight.controller.sal.action.Action; +import org.opendaylight.controller.sal.action.ActionType; +import org.opendaylight.controller.sal.action.SupportedFlowActions; import org.opendaylight.controller.sal.authorization.Privilege; import org.opendaylight.controller.sal.authorization.UserLevel; import org.opendaylight.controller.sal.core.Description; @@ -142,17 +146,17 @@ public class Flows implements IDaylightWeb { } 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(), + port.put( nodeConnector.getID().toString(), nodeConnectorName + "(" + nodeConnector.getNodeConnectorIDString() + ")"); } } @@ -212,7 +216,6 @@ 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, @@ -337,6 +340,83 @@ public class Flows implements IDaylightWeb { } } + @RequestMapping(value = "/valid-flows/{nodeId}") + @ResponseBody + public Object getValidActions(HttpServletRequest request, @RequestParam(required = false) String container, + @PathVariable("nodeId") String nodeId) { + 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"; + } + + ISwitchManager switchManager = (ISwitchManager) ServiceHelper.getInstance(ISwitchManager.class, containerName, this); + if (switchManager == null) { + return null; + } + + Map result = new TreeMap(); + + Node node = Node.fromString(nodeId); + SupportedFlowActions supportedFlows = (SupportedFlowActions) switchManager.getNodeProp(node, "supportedFlowActions"); + List> actions = supportedFlows.getActions(); + for (Class action : actions) { + if (action.isAssignableFrom(org.opendaylight.controller.sal.action.Drop.class)) { + result.put(ActionType.DROP.toString(), "Drop"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.Loopback.class)) { + result.put(ActionType.LOOPBACK.toString(), "Loopback"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.Flood.class)) { + result.put(ActionType.FLOOD.toString(), "Flood"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.FloodAll.class)) { + result.put(ActionType.FLOOD_ALL.toString(), "Flood All"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.Controller.class)) { + result.put(ActionType.CONTROLLER.toString(), "Controller"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SwPath.class)) { + result.put(ActionType.SW_PATH.toString(), "Software Path"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.HwPath.class)) { + result.put(ActionType.HW_PATH.toString(), "Hardware Path"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.Output.class)) { + result.put(ActionType.OUTPUT.toString(), "Output"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.Enqueue.class)) { + result.put(ActionType.ENQUEUE.toString(), "Enqueue"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetDlSrc.class)) { + result.put(ActionType.SET_DL_SRC.toString(), "Set Datalayer Source Address"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetDlDst.class)) { + result.put(ActionType.SET_DL_DST.toString(), "Set Datalayer Destination Address"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetVlanId.class)) { + result.put(ActionType.SET_VLAN_ID.toString(), "Set VLAN ID"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetVlanPcp.class)) { + result.put(ActionType.SET_VLAN_PCP.toString(), "Set VLAN Priority"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetVlanCfi.class)) { + result.put(ActionType.SET_VLAN_CFI.toString(), "Set VLAN CFI"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.PopVlan.class)) { + result.put(ActionType.POP_VLAN.toString(), "Pop VLAN"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.PushVlan.class)) { + result.put(ActionType.PUSH_VLAN.toString(), "Push VLAN"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetDlType.class)) { + result.put(ActionType.SET_DL_TYPE.toString(), "Set EtherType"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetNwSrc.class)) { + result.put(ActionType.SET_NW_SRC.toString(), "Set Network Source Address"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetNwDst.class)) { + result.put(ActionType.SET_NW_DST.toString(), "Set Network Destination Address"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetNwTos.class)) { + result.put(ActionType.SET_NW_TOS.toString(), "Modify ToS Bits"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetTpSrc.class)) { + result.put(ActionType.SET_TP_SRC.toString(), "Modify Transport Source Port"); + } else if (action.isAssignableFrom(org.opendaylight.controller.sal.action.SetTpDst.class)) { + result.put(ActionType.SET_TP_DST.toString(), "Modify Transport Destination Port"); + } + } + + return result; + } + + private boolean actionCompare(String name, ActionType type) { + return name.equals(type.getId().toLowerCase()); + } + private String getNodeDesc(Node node, ISwitchManager switchManager) { Description desc = (Description) switchManager.getNodeProp(node, Description.propertyName); String description = (desc == null) ? "" : desc.getValue();