public class FlowConfig implements Serializable {
private static final long serialVersionUID = 1L;
private static final Logger log = LoggerFactory.getLogger(FlowConfig.class);
- public static final String staticFlowsGroup = "**StaticFlows";
- public static final String internalStaticFlowsGroup = "**InternalStaticFlows";
- public static final String internalStaticFlowBegin = "**";
+ private static final String NAMEREGEX = "^[a-zA-Z0-9]+$";
+ private static final String STATICFLOWGROUP = "__StaticFlows__";
+ public static final String INTERNALSTATICFLOWGROUP = "__InternalStaticFlows__";
+ public static final String INTERNALSTATICFLOWBEGIN = "__";
+ public static final String INTERNALSTATICFLOWEND = "__";
private boolean dynamic;
private String status;
}
public boolean isInternalFlow() {
- // Controller generated static flows have name starting with "**"
- return (this.name != null && this.name.startsWith(FlowConfig.internalStaticFlowBegin));
+ return (this.name != null &&
+ this.name.startsWith(FlowConfig.INTERNALSTATICFLOWBEGIN) &&
+ this.name.endsWith(FlowConfig.INTERNALSTATICFLOWEND));
}
public String getName() {
public boolean isTpPortValid(String tpPort) {
int port = Integer.decode(tpPort);
- return ((port > 0) && (port <= 0xffff));
+ return ((port >= 0) && (port <= 0xffff));
}
public boolean isTimeoutValid(String timeout) {
Switch sw = null;
try {
- if (name == null || name.trim().isEmpty()) {
+ if (name == null || name.trim().isEmpty() || !name.matches(FlowConfig.NAMEREGEX)) {
return new Status(StatusCode.BADREQUEST, "Invalid name");
}
Short port = Short.decode(ingressPort);
if (isPortValid(sw, port) == false) {
String msg = String.format("Ingress port %d is not valid for the Switch", port);
- if ((container != null) && !container.getName().equals(GlobalConstants.DEFAULT.toString())) {
- msg += " in Container " + container.getName();
+ if (!containerName.equals(GlobalConstants.DEFAULT.toString())) {
+ msg += " in Container " + containerName;
}
return new Status(StatusCode.BADREQUEST, msg);
}
Short port = Short.parseShort(n.group(1));
if (isPortValid(sw, port) == false) {
String msg = String.format("Output port %d is not valid for this switch", port);
- if ((container != null)
- && !container.getName().equals(GlobalConstants.DEFAULT.toString())) {
- msg += " in Container " + container.getName();
+ if (!containerName.equals(GlobalConstants.DEFAULT.toString())) {
+ msg += " in Container " + containerName;
}
return new Status(StatusCode.BADREQUEST, msg);
}
// Check src IP
sstr = Pattern.compile(ActionType.FLOOD.toString()).matcher(actiongrp);
if (sstr.matches()) {
- if (container != null) {
+ if (!containerName.equals(GlobalConstants.DEFAULT.toString())) {
return new Status(StatusCode.BADREQUEST, String.format(
- "flood is not allowed in container %s", container.getName()));
+ "flood is not allowed in container %s", containerName));
}
continue;
}
}
// Check against the container flow
Status status;
- if ((container != null) && !(status = conflictWithContainerFlow(container)).isSuccess()) {
+ if (!containerName.equals(GlobalConstants.DEFAULT.toString()) && !(status = conflictWithContainerFlow(container)).isSuccess()) {
return status;
}
} catch (NumberFormatException e) {
}
public FlowEntry getFlowEntry() {
- return new FlowEntry(FlowConfig.staticFlowsGroup, this.name, this.getFlow(), this.getNode());
+ String group = this.isInternalFlow() ? FlowConfig.INTERNALSTATICFLOWGROUP : FlowConfig.STATICFLOWGROUP;
+ return new FlowEntry(group, this.name, this.getFlow(), this.getNode());
}
public Flow getFlow() {