X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fcontainermanager%2Fapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcontainermanager%2FContainerFlowConfig.java;h=9740a9259833c0ef9d60ad821eaea1e0ee723aef;hb=90e562e3dcc64e46a657ef4ab3047b2b709339c7;hp=2520172d8959a62f5a7fb2af37826c0a27a59dd9;hpb=65ab4ccadb216b12d773ec4113ae241be30d3eb7;p=controller.git diff --git a/opendaylight/containermanager/api/src/main/java/org/opendaylight/controller/containermanager/ContainerFlowConfig.java b/opendaylight/containermanager/api/src/main/java/org/opendaylight/controller/containermanager/ContainerFlowConfig.java index 2520172d89..9740a92598 100644 --- a/opendaylight/containermanager/api/src/main/java/org/opendaylight/controller/containermanager/ContainerFlowConfig.java +++ b/opendaylight/containermanager/api/src/main/java/org/opendaylight/controller/containermanager/ContainerFlowConfig.java @@ -55,6 +55,10 @@ public class ContainerFlowConfig implements Serializable { @XmlElement private String name; + /** The vlan. */ + @XmlElement + private String dlVlan; + /** The network Source. */ @XmlElement private String nwSrc; @@ -101,6 +105,7 @@ public class ContainerFlowConfig implements Serializable { 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; @@ -109,9 +114,21 @@ public class ContainerFlowConfig implements Serializable { //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; @@ -130,6 +147,15 @@ public class ContainerFlowConfig implements Serializable { 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. * @@ -192,6 +218,7 @@ public class ContainerFlowConfig implements Serializable { 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()); @@ -221,7 +248,7 @@ public class ContainerFlowConfig implements Serializable { 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; @@ -280,6 +307,21 @@ public class ContainerFlowConfig implements Serializable { 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. @@ -361,6 +403,21 @@ public class ContainerFlowConfig implements Serializable { 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. * @@ -522,7 +579,11 @@ public class ContainerFlowConfig implements Serializable { 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; } @@ -547,6 +608,26 @@ public class ContainerFlowConfig implements Serializable { 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 * @@ -637,6 +718,9 @@ public class ContainerFlowConfig implements Serializable { List matches = new ArrayList(); 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]); @@ -690,7 +774,7 @@ public class ContainerFlowConfig implements Serializable { */ @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 + "}"; } }