[ONOS-4228]Parase and set priority for sfc classification
Change-Id: I0e25465d47ad1bd6c6035ff309ef631b8ef7c75e
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultFlowClassifier.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultFlowClassifier.java
index fc360d8..4f3a5a0 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultFlowClassifier.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/DefaultFlowClassifier.java
@@ -34,6 +34,7 @@
private final String description;
private final String etherType;
private final String protocol;
+ private final int priority;
private final int minSrcPortRange;
private final int maxSrcPortRange;
private final int minDstPortRange;
@@ -47,6 +48,7 @@
private static final String TENANT_ID_NOT_NULL = "Tenant id can not be null.";
private static final String NAME_NOT_NULL = "Name can not be null.";
private static final String ETHER_TYPE_NOT_NULL = "Ether Type can not be null.";
+ private static final int DEFAULT_CLASSIFIER_PRIORITY = 0xFFFF;
/**
* Constructor to create default flow classifier.
@@ -57,6 +59,7 @@
* @param description flow classifier description
* @param etherType etherType
* @param protocol IP protocol
+ * @param priority priority for classification
* @param minSrcPortRange Minimum Source port range
* @param maxSrcPortRange Maximum Source port range
* @param minDstPortRange Minimum destination port range
@@ -67,15 +70,17 @@
* @param dstPort destination VirtualPort
*/
private DefaultFlowClassifier(FlowClassifierId flowClassifierId, TenantId tenantId, String name,
- String description, String etherType, String protocol, int minSrcPortRange, int maxSrcPortRange,
- int minDstPortRange, int maxDstPortRange, IpPrefix srcIpPrefix, IpPrefix dstIpPrefix,
- VirtualPortId srcPort, VirtualPortId dstPort) {
+ String description, String etherType, String protocol, int priority,
+ int minSrcPortRange, int maxSrcPortRange, int minDstPortRange, int maxDstPortRange,
+ IpPrefix srcIpPrefix, IpPrefix dstIpPrefix, VirtualPortId srcPort,
+ VirtualPortId dstPort) {
this.flowClassifierId = flowClassifierId;
this.tenantId = tenantId;
this.name = name;
this.description = description;
this.etherType = etherType;
this.protocol = protocol;
+ this.priority = priority;
this.minSrcPortRange = minSrcPortRange;
this.maxSrcPortRange = maxSrcPortRange;
this.minDstPortRange = minDstPortRange;
@@ -117,6 +122,11 @@
}
@Override
+ public int priority() {
+ return priority;
+ }
+
+ @Override
public int minSrcPortRange() {
return minSrcPortRange;
}
@@ -169,6 +179,8 @@
private String etherType;
private String protocol;
private boolean isProtocolSet = false;
+ private int priority;
+ private boolean isPrioritySet = false;
private int minSrcPortRange;
private boolean isMinSrcPortRangeSet = false;
private int maxSrcPortRange;
@@ -195,6 +207,7 @@
checkNotNull(etherType, ETHER_TYPE_NOT_NULL);
String description = null;
String protocol = null;
+ int priority = DEFAULT_CLASSIFIER_PRIORITY;
int minSrcPortRange = NULL_PORT;
int maxSrcPortRange = NULL_PORT;
int minDstPortRange = NULL_PORT;
@@ -210,6 +223,9 @@
if (isProtocolSet) {
protocol = this.protocol;
}
+ if (isPrioritySet) {
+ priority = this.priority;
+ }
if (isMinSrcPortRangeSet) {
minSrcPortRange = this.minSrcPortRange;
}
@@ -236,8 +252,8 @@
}
return new DefaultFlowClassifier(flowClassifierId, tenantId, name, description, etherType, protocol,
- minSrcPortRange, maxSrcPortRange, minDstPortRange, maxDstPortRange, srcIpPrefix, dstIpPrefix,
- srcPort, dstPort);
+ priority, minSrcPortRange, maxSrcPortRange, minDstPortRange,
+ maxDstPortRange, srcIpPrefix, dstIpPrefix, srcPort, dstPort);
}
@Override
@@ -279,6 +295,13 @@
}
@Override
+ public Builder setPriority(int priority) {
+ this.priority = priority;
+ this.isPrioritySet = true;
+ return this;
+ }
+
+ @Override
public Builder setMinSrcPortRange(int minSrcPortRange) {
this.minSrcPortRange = minSrcPortRange;
this.isMinSrcPortRangeSet = true;
@@ -354,6 +377,7 @@
&& Objects.equals(this.description, other.description)
&& Objects.equals(this.etherType, other.etherType)
&& Objects.equals(this.protocol, other.protocol)
+ && Objects.equals(this.priority, other.priority)
&& Objects.equals(this.minSrcPortRange, other.minSrcPortRange)
&& Objects.equals(this.maxSrcPortRange, other.maxSrcPortRange)
&& Objects.equals(this.minDstPortRange, other.minDstPortRange)
@@ -375,6 +399,7 @@
&& Objects.equals(this.description, flowClassifier.description())
&& Objects.equals(this.etherType, flowClassifier.etherType())
&& Objects.equals(this.protocol, flowClassifier.protocol())
+ && Objects.equals(this.priority, flowClassifier.priority())
&& Objects.equals(this.minSrcPortRange, flowClassifier.minSrcPortRange())
&& Objects.equals(this.maxSrcPortRange, flowClassifier.maxSrcPortRange())
&& Objects.equals(this.minDstPortRange, flowClassifier.minDstPortRange())
@@ -394,6 +419,7 @@
.add("Description", description)
.add("String", etherType)
.add("Protocol", protocol)
+ .add("Priority", priority)
.add("MinSrcPortRange", minSrcPortRange)
.add("MaxSrcPortRange", maxSrcPortRange)
.add("MinDstPortRange", minDstPortRange)
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java
index 26bf718..8903253 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/FlowClassifier.java
@@ -68,6 +68,13 @@
String protocol();
/**
+ * Returns priority.
+ *
+ * @return priority
+ */
+ int priority();
+
+ /**
* Returns minimum source port range.
*
* @return minimum source port range
@@ -193,6 +200,14 @@
Builder setProtocol(String protocol);
/**
+ * Sets priority.
+ *
+ * @param priority priority
+ * @return builder object by setting priority
+ */
+ Builder setPriority(int priority);
+
+ /**
* Set minimum source port range.
*
* @param minRange minimum source port range
diff --git a/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/DefaultFlowClassifierTest.java b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/DefaultFlowClassifierTest.java
index d312e80..fea2326 100644
--- a/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/DefaultFlowClassifierTest.java
+++ b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/DefaultFlowClassifierTest.java
@@ -46,6 +46,7 @@
final String description = "FlowClassifier1";
final String ethType = "IPv4";
final String protocol = "tcp";
+ final int priority = 65535;
final int minSrcPortRange = 5;
final int maxSrcPortRange = 10;
final int minDstPortRange = 5;
@@ -60,22 +61,25 @@
DefaultFlowClassifier.Builder flowClassifierBuilder = new DefaultFlowClassifier.Builder();
final FlowClassifier flowClassifier1 = flowClassifierBuilder.setFlowClassifierId(flowClassifierId)
.setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType)
- .setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange)
- .setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix)
- .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
+ .setProtocol(protocol).setPriority(priority).setMinSrcPortRange(minSrcPortRange)
+ .setMaxSrcPortRange(maxSrcPortRange).setMinDstPortRange(minDstPortRange)
+ .setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix).setDstIpPrefix(dstIpPrefix)
+ .setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
flowClassifierBuilder = new DefaultFlowClassifier.Builder();
final FlowClassifier sameAsFlowClassifier1 = flowClassifierBuilder.setFlowClassifierId(flowClassifierId)
.setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType)
- .setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange)
- .setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix)
- .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
+ .setProtocol(protocol).setPriority(priority).setMinSrcPortRange(minSrcPortRange)
+ .setMaxSrcPortRange(maxSrcPortRange).setMinDstPortRange(minDstPortRange)
+ .setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix).setDstIpPrefix(dstIpPrefix)
+ .setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
// Create different classifier object.
final String name2 = "FlowClassifier2";
final String description2 = "FlowClassifier2";
final String ethType2 = "IPv6";
final String protocol2 = "udp";
+ final int priority2 = 50000;
final int minSrcPortRange2 = 5;
final int maxSrcPortRange2 = 10;
final int minDstPortRange2 = 5;
@@ -92,7 +96,8 @@
.setTenantId(tenantId2).setName(name2).setDescription(description2).setEtherType(ethType2)
.setProtocol(protocol2).setMinSrcPortRange(minSrcPortRange2).setMaxSrcPortRange(maxSrcPortRange2)
.setMinDstPortRange(minDstPortRange2).setMaxDstPortRange(maxDstPortRange2).setSrcIpPrefix(srcIpPrefix2)
- .setDstIpPrefix(dstIpPrefix2).setSrcPort(virtualSrcPort2).setDstPort(virtualDstPort2).build();
+ .setDstIpPrefix(dstIpPrefix2).setSrcPort(virtualSrcPort2).setDstPort(virtualDstPort2)
+ .setPriority(priority2).build();
new EqualsTester().addEqualityGroup(flowClassifier1, sameAsFlowClassifier1).addEqualityGroup(flowClassifier2)
.testEquals();
@@ -107,6 +112,7 @@
final String description = "FlowClassifier";
final String ethType = "IPv4";
final String protocol = "tcp";
+ final int priority = 30000;
final int minSrcPortRange = 5;
final int maxSrcPortRange = 10;
final int minDstPortRange = 5;
@@ -123,7 +129,8 @@
.setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType)
.setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange)
.setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix)
- .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
+ .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort)
+ .setPriority(priority).build();
assertThat(flowClassifierId, is(flowClassifier.flowClassifierId()));
assertThat(tenantId, is(flowClassifier.tenantId()));
@@ -131,6 +138,7 @@
assertThat(description, is(flowClassifier.description()));
assertThat(ethType, is(flowClassifier.etherType()));
assertThat(protocol, is(flowClassifier.protocol()));
+ assertThat(priority, is(flowClassifier.priority()));
assertThat(minSrcPortRange, is(flowClassifier.minSrcPortRange()));
assertThat(maxSrcPortRange, is(flowClassifier.maxSrcPortRange()));
assertThat(minDstPortRange, is(flowClassifier.minDstPortRange()));