@XmlElement
private String name;
+ /** The vlan. */
+ @XmlElement
+ private String dlVlan;
+
/** The network Source. */
@XmlElement
private String nwSrc;
public ContainerFlowConfig(String name, String srcIP, String dstIP, String proto, String srcPort,
String dstPort) {
this.name = name;
+ this.dlVlan = null;
this.nwSrc = srcIP;
this.nwDst = dstIP;
this.protocol = proto;
//this.unidirectional = false;
}
+ public ContainerFlowConfig(String name, String dlVlan, String srcIP, String dstIP, String proto, String srcPort,
+ String dstPort) {
+ this.name = name;
+ this.dlVlan = dlVlan;
+ this.nwSrc = srcIP;
+ this.nwDst = dstIP;
+ this.protocol = proto;
+ this.tpSrc = srcPort;
+ this.tpDst = dstPort;
+ }
+
public ContainerFlowConfig(ContainerFlowConfig containerFlowConfig) {
this.name = containerFlowConfig.name;
+ this.dlVlan = containerFlowConfig.dlVlan;
this.nwSrc = containerFlowConfig.nwSrc;
this.nwDst = containerFlowConfig.nwDst;
this.protocol = containerFlowConfig.protocol;
return name;
}
+ /**
+ * Returns the vlan id.
+ *
+ * @return the Vlan Id
+ */
+ public String getVlan() {
+ return (dlVlan == null || dlVlan.isEmpty()) ? null : dlVlan;
+ }
+
/**
* Returns the Source IP Address.
*
result = prime * result
+ ((protocol == null) ? 0 : protocol.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((dlVlan == null) ? 0 : dlVlan.hashCode());
result = prime * result + ((nwDst == null) ? 0 : nwDst.hashCode());
result = prime * result + ((tpDst == null) ? 0 : tpDst.hashCode());
result = prime * result + ((nwSrc == null) ? 0 : nwSrc.hashCode());
return false;
}
ContainerFlowConfig other = (ContainerFlowConfig) obj;
- if (matchName(other) && matchSrcIP(other)
+ if (matchName(other) && matchDlVlan(other) && matchSrcIP(other)
&& matchDstIP(other) && matchProtocol(other)
&& matchSrcPort(other) && matchDstPort(other)) {
return true;
return name.equals(flowSpec.name);
}
+ /**
+ * Match Source IP Address.
+ *
+ * @param flowSpec Flow Specification
+ * @return true, if successful
+ */
+ private boolean matchDlVlan(ContainerFlowConfig flowSpec) {
+ if (dlVlan == flowSpec.dlVlan) {
+ return true;
+ }
+ if (dlVlan == null || flowSpec.dlVlan == null) {
+ return false;
+ }
+ return dlVlan.equals(flowSpec.dlVlan);
+ }
/**
* Match Source IP Address.
return this.tpDst.equals(flowSpec.tpDst);
}
+ /**
+ * Returns the vlan id number
+ *
+ * @return the vlan id number
+ */
+ public Short getVlanId() {
+ Short vlan = 0;
+ try {
+ vlan = Short.parseShort(dlVlan);
+ } catch (NumberFormatException e) {
+
+ }
+ return vlan;
+ }
+
/**
* Returns the Source IP Address mask length.
*
if (!hasValidName()) {
return new Status(StatusCode.BADREQUEST, "Invalid name");
}
- Status status = validateIPs();
+ Status status = validateVlan();
+ if (!status.isSuccess()) {
+ return status;
+ }
+ status = validateIPs();
if (!status.isSuccess()) {
return status;
}
return (name != null && !name.isEmpty() && name.matches(regexName));
}
+ /**
+ * Validates the vlan number
+ *
+ * @return the result of the check as Status object
+ */
+ private Status validateVlan() {
+ if (dlVlan != null) {
+ short vlanId = 0;
+ try {
+ vlanId = Short.parseShort(dlVlan);
+ } catch (NumberFormatException e) {
+ return new Status(StatusCode.BADREQUEST, "Invalid vlan id");
+ }
+ if (vlanId < 0 || vlanId > 0xfff) {
+ return new Status(StatusCode.BADREQUEST, "Invalid vlan id");
+ }
+ }
+ return new Status(StatusCode.SUCCESS);
+ }
+
/**
* Validates the network addresses, checks syntax and semantic
*
List<Match> matches = new ArrayList<Match>();
Match match = new Match();
+ if (this.dlVlan != null && !this.dlVlan.isEmpty()) {
+ match.setField(MatchType.DL_VLAN, this.getVlanId());
+ }
if (this.nwSrc != null && !this.nwSrc.trim().isEmpty()) {
String parts[] = this.nwSrc.split("/");
InetAddress ip = NetUtils.parseInetAddress(parts[0]);
*/
@Override
public String toString() {
- return "Container Flow={name:" + name + " nwSrc:" + nwSrc + " nwDst:" + nwDst + " " + "protocol:" + protocol
+ return "Container Flow={name:" + name + " dlVlan:" + dlVlan + " nwSrc:" + nwSrc + " nwDst:" + nwDst + " " + "protocol:" + protocol
+ " tpSrc:" + tpSrc + " tpDst:" + tpDst + "}";
}
}