Phaneendra Manda
Committed by Gerrit Code Review

[ONOS-4228]Parase and set priority for sfc classification

Change-Id: I0e25465d47ad1bd6c6035ff309ef631b8ef7c75e
...@@ -223,19 +223,19 @@ public class FlowClassifierInstallerImpl implements FlowClassifierInstallerServi ...@@ -223,19 +223,19 @@ public class FlowClassifierInstallerImpl implements FlowClassifierInstallerServi
223 // Send the packet to controller 223 // Send the packet to controller
224 TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder(); 224 TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
225 treatment.setOutput(PortNumber.CONTROLLER); 225 treatment.setOutput(PortNumber.CONTROLLER);
226 - sendServiceFunctionClassifier(selector, treatment, deviceId, type); 226 + sendServiceFunctionClassifier(selector, treatment, deviceId, type, flowClassifier.priority());
227 } else if (deviceId.equals(deviceIdfromPortPair)) { 227 } else if (deviceId.equals(deviceIdfromPortPair)) {
228 // classifier and source device are in the same OVS. So directly send packet to first port pair 228 // classifier and source device are in the same OVS. So directly send packet to first port pair
229 TrafficTreatment.Builder treatment = packTrafficTreatment(deviceId, port, nshDstPort, 229 TrafficTreatment.Builder treatment = packTrafficTreatment(deviceId, port, nshDstPort,
230 nshSpiId, flowClassifier, true); 230 nshSpiId, flowClassifier, true);
231 // Build forwarding objective and send to OVS. 231 // Build forwarding objective and send to OVS.
232 - sendServiceFunctionClassifier(selector, treatment, deviceId, type); 232 + sendServiceFunctionClassifier(selector, treatment, deviceId, type, flowClassifier.priority());
233 } else { 233 } else {
234 // classifier and source device are not in the same OVS. Send packet on vlan Tunnel 234 // classifier and source device are not in the same OVS. Send packet on vlan Tunnel
235 TrafficTreatment.Builder treatment = packTrafficTreatment(deviceId, port, nshDstPort, 235 TrafficTreatment.Builder treatment = packTrafficTreatment(deviceId, port, nshDstPort,
236 nshSpiId, flowClassifier, false); 236 nshSpiId, flowClassifier, false);
237 // Build forwarding objective and send to OVS. 237 // Build forwarding objective and send to OVS.
238 - sendServiceFunctionClassifier(selector, treatment, deviceId, type); 238 + sendServiceFunctionClassifier(selector, treatment, deviceId, type, flowClassifier.priority());
239 239
240 // At the other device get the packet from vlan and send to first port pair 240 // At the other device get the packet from vlan and send to first port pair
241 TrafficSelector.Builder selectorDst = DefaultTrafficSelector.builder(); 241 TrafficSelector.Builder selectorDst = DefaultTrafficSelector.builder();
...@@ -244,7 +244,8 @@ public class FlowClassifierInstallerImpl implements FlowClassifierInstallerServi ...@@ -244,7 +244,8 @@ public class FlowClassifierInstallerImpl implements FlowClassifierInstallerServi
244 TrafficTreatment.Builder treatmentDst = DefaultTrafficTreatment.builder(); 244 TrafficTreatment.Builder treatmentDst = DefaultTrafficTreatment.builder();
245 Host hostDst = hostService.getHost(HostId.hostId(srcMacAddress)); 245 Host hostDst = hostService.getHost(HostId.hostId(srcMacAddress));
246 treatmentDst.setOutput(hostDst.location().port()); 246 treatmentDst.setOutput(hostDst.location().port());
247 - sendServiceFunctionClassifier(selectorDst, treatmentDst, deviceIdfromPortPair, type); 247 + sendServiceFunctionClassifier(selectorDst, treatmentDst, deviceIdfromPortPair, type,
248 + flowClassifier.priority());
248 } 249 }
249 } 250 }
250 return host.location(); 251 return host.location();
...@@ -383,14 +384,15 @@ public class FlowClassifierInstallerImpl implements FlowClassifierInstallerServi ...@@ -383,14 +384,15 @@ public class FlowClassifierInstallerImpl implements FlowClassifierInstallerServi
383 * @param treatment traffic treatment 384 * @param treatment traffic treatment
384 * @param deviceId device id 385 * @param deviceId device id
385 * @param type operation type 386 * @param type operation type
387 + * @param priority priority of classifier
386 */ 388 */
387 public void sendServiceFunctionClassifier(TrafficSelector.Builder selector, TrafficTreatment.Builder treatment, 389 public void sendServiceFunctionClassifier(TrafficSelector.Builder selector, TrafficTreatment.Builder treatment,
388 - DeviceId deviceId, Objective.Operation type) { 390 + DeviceId deviceId, Objective.Operation type, int priority) {
389 log.info("Sending flow to service function classifier. Selector {}, Treatment {}", 391 log.info("Sending flow to service function classifier. Selector {}, Treatment {}",
390 selector.toString(), treatment.toString()); 392 selector.toString(), treatment.toString());
391 ForwardingObjective.Builder objective = DefaultForwardingObjective.builder().withTreatment(treatment.build()) 393 ForwardingObjective.Builder objective = DefaultForwardingObjective.builder().withTreatment(treatment.build())
392 .withSelector(selector.build()).fromApp(appId).makePermanent().withFlag(Flag.VERSATILE) 394 .withSelector(selector.build()).fromApp(appId).makePermanent().withFlag(Flag.VERSATILE)
393 - .withPriority(FLOW_CLASSIFIER_PRIORITY); 395 + .withPriority(priority);
394 396
395 if (type.equals(Objective.Operation.ADD)) { 397 if (type.equals(Objective.Operation.ADD)) {
396 log.debug("flowClassifierRules-->ADD"); 398 log.debug("flowClassifierRules-->ADD");
......
...@@ -34,6 +34,7 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -34,6 +34,7 @@ public final class DefaultFlowClassifier implements FlowClassifier {
34 private final String description; 34 private final String description;
35 private final String etherType; 35 private final String etherType;
36 private final String protocol; 36 private final String protocol;
37 + private final int priority;
37 private final int minSrcPortRange; 38 private final int minSrcPortRange;
38 private final int maxSrcPortRange; 39 private final int maxSrcPortRange;
39 private final int minDstPortRange; 40 private final int minDstPortRange;
...@@ -47,6 +48,7 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -47,6 +48,7 @@ public final class DefaultFlowClassifier implements FlowClassifier {
47 private static final String TENANT_ID_NOT_NULL = "Tenant id can not be null."; 48 private static final String TENANT_ID_NOT_NULL = "Tenant id can not be null.";
48 private static final String NAME_NOT_NULL = "Name can not be null."; 49 private static final String NAME_NOT_NULL = "Name can not be null.";
49 private static final String ETHER_TYPE_NOT_NULL = "Ether Type can not be null."; 50 private static final String ETHER_TYPE_NOT_NULL = "Ether Type can not be null.";
51 + private static final int DEFAULT_CLASSIFIER_PRIORITY = 0xFFFF;
50 52
51 /** 53 /**
52 * Constructor to create default flow classifier. 54 * Constructor to create default flow classifier.
...@@ -57,6 +59,7 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -57,6 +59,7 @@ public final class DefaultFlowClassifier implements FlowClassifier {
57 * @param description flow classifier description 59 * @param description flow classifier description
58 * @param etherType etherType 60 * @param etherType etherType
59 * @param protocol IP protocol 61 * @param protocol IP protocol
62 + * @param priority priority for classification
60 * @param minSrcPortRange Minimum Source port range 63 * @param minSrcPortRange Minimum Source port range
61 * @param maxSrcPortRange Maximum Source port range 64 * @param maxSrcPortRange Maximum Source port range
62 * @param minDstPortRange Minimum destination port range 65 * @param minDstPortRange Minimum destination port range
...@@ -67,15 +70,17 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -67,15 +70,17 @@ public final class DefaultFlowClassifier implements FlowClassifier {
67 * @param dstPort destination VirtualPort 70 * @param dstPort destination VirtualPort
68 */ 71 */
69 private DefaultFlowClassifier(FlowClassifierId flowClassifierId, TenantId tenantId, String name, 72 private DefaultFlowClassifier(FlowClassifierId flowClassifierId, TenantId tenantId, String name,
70 - String description, String etherType, String protocol, int minSrcPortRange, int maxSrcPortRange, 73 + String description, String etherType, String protocol, int priority,
71 - int minDstPortRange, int maxDstPortRange, IpPrefix srcIpPrefix, IpPrefix dstIpPrefix, 74 + int minSrcPortRange, int maxSrcPortRange, int minDstPortRange, int maxDstPortRange,
72 - VirtualPortId srcPort, VirtualPortId dstPort) { 75 + IpPrefix srcIpPrefix, IpPrefix dstIpPrefix, VirtualPortId srcPort,
76 + VirtualPortId dstPort) {
73 this.flowClassifierId = flowClassifierId; 77 this.flowClassifierId = flowClassifierId;
74 this.tenantId = tenantId; 78 this.tenantId = tenantId;
75 this.name = name; 79 this.name = name;
76 this.description = description; 80 this.description = description;
77 this.etherType = etherType; 81 this.etherType = etherType;
78 this.protocol = protocol; 82 this.protocol = protocol;
83 + this.priority = priority;
79 this.minSrcPortRange = minSrcPortRange; 84 this.minSrcPortRange = minSrcPortRange;
80 this.maxSrcPortRange = maxSrcPortRange; 85 this.maxSrcPortRange = maxSrcPortRange;
81 this.minDstPortRange = minDstPortRange; 86 this.minDstPortRange = minDstPortRange;
...@@ -117,6 +122,11 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -117,6 +122,11 @@ public final class DefaultFlowClassifier implements FlowClassifier {
117 } 122 }
118 123
119 @Override 124 @Override
125 + public int priority() {
126 + return priority;
127 + }
128 +
129 + @Override
120 public int minSrcPortRange() { 130 public int minSrcPortRange() {
121 return minSrcPortRange; 131 return minSrcPortRange;
122 } 132 }
...@@ -169,6 +179,8 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -169,6 +179,8 @@ public final class DefaultFlowClassifier implements FlowClassifier {
169 private String etherType; 179 private String etherType;
170 private String protocol; 180 private String protocol;
171 private boolean isProtocolSet = false; 181 private boolean isProtocolSet = false;
182 + private int priority;
183 + private boolean isPrioritySet = false;
172 private int minSrcPortRange; 184 private int minSrcPortRange;
173 private boolean isMinSrcPortRangeSet = false; 185 private boolean isMinSrcPortRangeSet = false;
174 private int maxSrcPortRange; 186 private int maxSrcPortRange;
...@@ -195,6 +207,7 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -195,6 +207,7 @@ public final class DefaultFlowClassifier implements FlowClassifier {
195 checkNotNull(etherType, ETHER_TYPE_NOT_NULL); 207 checkNotNull(etherType, ETHER_TYPE_NOT_NULL);
196 String description = null; 208 String description = null;
197 String protocol = null; 209 String protocol = null;
210 + int priority = DEFAULT_CLASSIFIER_PRIORITY;
198 int minSrcPortRange = NULL_PORT; 211 int minSrcPortRange = NULL_PORT;
199 int maxSrcPortRange = NULL_PORT; 212 int maxSrcPortRange = NULL_PORT;
200 int minDstPortRange = NULL_PORT; 213 int minDstPortRange = NULL_PORT;
...@@ -210,6 +223,9 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -210,6 +223,9 @@ public final class DefaultFlowClassifier implements FlowClassifier {
210 if (isProtocolSet) { 223 if (isProtocolSet) {
211 protocol = this.protocol; 224 protocol = this.protocol;
212 } 225 }
226 + if (isPrioritySet) {
227 + priority = this.priority;
228 + }
213 if (isMinSrcPortRangeSet) { 229 if (isMinSrcPortRangeSet) {
214 minSrcPortRange = this.minSrcPortRange; 230 minSrcPortRange = this.minSrcPortRange;
215 } 231 }
...@@ -236,8 +252,8 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -236,8 +252,8 @@ public final class DefaultFlowClassifier implements FlowClassifier {
236 } 252 }
237 253
238 return new DefaultFlowClassifier(flowClassifierId, tenantId, name, description, etherType, protocol, 254 return new DefaultFlowClassifier(flowClassifierId, tenantId, name, description, etherType, protocol,
239 - minSrcPortRange, maxSrcPortRange, minDstPortRange, maxDstPortRange, srcIpPrefix, dstIpPrefix, 255 + priority, minSrcPortRange, maxSrcPortRange, minDstPortRange,
240 - srcPort, dstPort); 256 + maxDstPortRange, srcIpPrefix, dstIpPrefix, srcPort, dstPort);
241 } 257 }
242 258
243 @Override 259 @Override
...@@ -279,6 +295,13 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -279,6 +295,13 @@ public final class DefaultFlowClassifier implements FlowClassifier {
279 } 295 }
280 296
281 @Override 297 @Override
298 + public Builder setPriority(int priority) {
299 + this.priority = priority;
300 + this.isPrioritySet = true;
301 + return this;
302 + }
303 +
304 + @Override
282 public Builder setMinSrcPortRange(int minSrcPortRange) { 305 public Builder setMinSrcPortRange(int minSrcPortRange) {
283 this.minSrcPortRange = minSrcPortRange; 306 this.minSrcPortRange = minSrcPortRange;
284 this.isMinSrcPortRangeSet = true; 307 this.isMinSrcPortRangeSet = true;
...@@ -354,6 +377,7 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -354,6 +377,7 @@ public final class DefaultFlowClassifier implements FlowClassifier {
354 && Objects.equals(this.description, other.description) 377 && Objects.equals(this.description, other.description)
355 && Objects.equals(this.etherType, other.etherType) 378 && Objects.equals(this.etherType, other.etherType)
356 && Objects.equals(this.protocol, other.protocol) 379 && Objects.equals(this.protocol, other.protocol)
380 + && Objects.equals(this.priority, other.priority)
357 && Objects.equals(this.minSrcPortRange, other.minSrcPortRange) 381 && Objects.equals(this.minSrcPortRange, other.minSrcPortRange)
358 && Objects.equals(this.maxSrcPortRange, other.maxSrcPortRange) 382 && Objects.equals(this.maxSrcPortRange, other.maxSrcPortRange)
359 && Objects.equals(this.minDstPortRange, other.minDstPortRange) 383 && Objects.equals(this.minDstPortRange, other.minDstPortRange)
...@@ -375,6 +399,7 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -375,6 +399,7 @@ public final class DefaultFlowClassifier implements FlowClassifier {
375 && Objects.equals(this.description, flowClassifier.description()) 399 && Objects.equals(this.description, flowClassifier.description())
376 && Objects.equals(this.etherType, flowClassifier.etherType()) 400 && Objects.equals(this.etherType, flowClassifier.etherType())
377 && Objects.equals(this.protocol, flowClassifier.protocol()) 401 && Objects.equals(this.protocol, flowClassifier.protocol())
402 + && Objects.equals(this.priority, flowClassifier.priority())
378 && Objects.equals(this.minSrcPortRange, flowClassifier.minSrcPortRange()) 403 && Objects.equals(this.minSrcPortRange, flowClassifier.minSrcPortRange())
379 && Objects.equals(this.maxSrcPortRange, flowClassifier.maxSrcPortRange()) 404 && Objects.equals(this.maxSrcPortRange, flowClassifier.maxSrcPortRange())
380 && Objects.equals(this.minDstPortRange, flowClassifier.minDstPortRange()) 405 && Objects.equals(this.minDstPortRange, flowClassifier.minDstPortRange())
...@@ -394,6 +419,7 @@ public final class DefaultFlowClassifier implements FlowClassifier { ...@@ -394,6 +419,7 @@ public final class DefaultFlowClassifier implements FlowClassifier {
394 .add("Description", description) 419 .add("Description", description)
395 .add("String", etherType) 420 .add("String", etherType)
396 .add("Protocol", protocol) 421 .add("Protocol", protocol)
422 + .add("Priority", priority)
397 .add("MinSrcPortRange", minSrcPortRange) 423 .add("MinSrcPortRange", minSrcPortRange)
398 .add("MaxSrcPortRange", maxSrcPortRange) 424 .add("MaxSrcPortRange", maxSrcPortRange)
399 .add("MinDstPortRange", minDstPortRange) 425 .add("MinDstPortRange", minDstPortRange)
......
...@@ -68,6 +68,13 @@ public interface FlowClassifier { ...@@ -68,6 +68,13 @@ public interface FlowClassifier {
68 String protocol(); 68 String protocol();
69 69
70 /** 70 /**
71 + * Returns priority.
72 + *
73 + * @return priority
74 + */
75 + int priority();
76 +
77 + /**
71 * Returns minimum source port range. 78 * Returns minimum source port range.
72 * 79 *
73 * @return minimum source port range 80 * @return minimum source port range
...@@ -193,6 +200,14 @@ public interface FlowClassifier { ...@@ -193,6 +200,14 @@ public interface FlowClassifier {
193 Builder setProtocol(String protocol); 200 Builder setProtocol(String protocol);
194 201
195 /** 202 /**
203 + * Sets priority.
204 + *
205 + * @param priority priority
206 + * @return builder object by setting priority
207 + */
208 + Builder setPriority(int priority);
209 +
210 + /**
196 * Set minimum source port range. 211 * Set minimum source port range.
197 * 212 *
198 * @param minRange minimum source port range 213 * @param minRange minimum source port range
......
...@@ -46,6 +46,7 @@ public class DefaultFlowClassifierTest { ...@@ -46,6 +46,7 @@ public class DefaultFlowClassifierTest {
46 final String description = "FlowClassifier1"; 46 final String description = "FlowClassifier1";
47 final String ethType = "IPv4"; 47 final String ethType = "IPv4";
48 final String protocol = "tcp"; 48 final String protocol = "tcp";
49 + final int priority = 65535;
49 final int minSrcPortRange = 5; 50 final int minSrcPortRange = 5;
50 final int maxSrcPortRange = 10; 51 final int maxSrcPortRange = 10;
51 final int minDstPortRange = 5; 52 final int minDstPortRange = 5;
...@@ -60,22 +61,25 @@ public class DefaultFlowClassifierTest { ...@@ -60,22 +61,25 @@ public class DefaultFlowClassifierTest {
60 DefaultFlowClassifier.Builder flowClassifierBuilder = new DefaultFlowClassifier.Builder(); 61 DefaultFlowClassifier.Builder flowClassifierBuilder = new DefaultFlowClassifier.Builder();
61 final FlowClassifier flowClassifier1 = flowClassifierBuilder.setFlowClassifierId(flowClassifierId) 62 final FlowClassifier flowClassifier1 = flowClassifierBuilder.setFlowClassifierId(flowClassifierId)
62 .setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType) 63 .setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType)
63 - .setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange) 64 + .setProtocol(protocol).setPriority(priority).setMinSrcPortRange(minSrcPortRange)
64 - .setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix) 65 + .setMaxSrcPortRange(maxSrcPortRange).setMinDstPortRange(minDstPortRange)
65 - .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build(); 66 + .setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix).setDstIpPrefix(dstIpPrefix)
67 + .setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
66 68
67 flowClassifierBuilder = new DefaultFlowClassifier.Builder(); 69 flowClassifierBuilder = new DefaultFlowClassifier.Builder();
68 final FlowClassifier sameAsFlowClassifier1 = flowClassifierBuilder.setFlowClassifierId(flowClassifierId) 70 final FlowClassifier sameAsFlowClassifier1 = flowClassifierBuilder.setFlowClassifierId(flowClassifierId)
69 .setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType) 71 .setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType)
70 - .setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange) 72 + .setProtocol(protocol).setPriority(priority).setMinSrcPortRange(minSrcPortRange)
71 - .setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix) 73 + .setMaxSrcPortRange(maxSrcPortRange).setMinDstPortRange(minDstPortRange)
72 - .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build(); 74 + .setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix).setDstIpPrefix(dstIpPrefix)
75 + .setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build();
73 76
74 // Create different classifier object. 77 // Create different classifier object.
75 final String name2 = "FlowClassifier2"; 78 final String name2 = "FlowClassifier2";
76 final String description2 = "FlowClassifier2"; 79 final String description2 = "FlowClassifier2";
77 final String ethType2 = "IPv6"; 80 final String ethType2 = "IPv6";
78 final String protocol2 = "udp"; 81 final String protocol2 = "udp";
82 + final int priority2 = 50000;
79 final int minSrcPortRange2 = 5; 83 final int minSrcPortRange2 = 5;
80 final int maxSrcPortRange2 = 10; 84 final int maxSrcPortRange2 = 10;
81 final int minDstPortRange2 = 5; 85 final int minDstPortRange2 = 5;
...@@ -92,7 +96,8 @@ public class DefaultFlowClassifierTest { ...@@ -92,7 +96,8 @@ public class DefaultFlowClassifierTest {
92 .setTenantId(tenantId2).setName(name2).setDescription(description2).setEtherType(ethType2) 96 .setTenantId(tenantId2).setName(name2).setDescription(description2).setEtherType(ethType2)
93 .setProtocol(protocol2).setMinSrcPortRange(minSrcPortRange2).setMaxSrcPortRange(maxSrcPortRange2) 97 .setProtocol(protocol2).setMinSrcPortRange(minSrcPortRange2).setMaxSrcPortRange(maxSrcPortRange2)
94 .setMinDstPortRange(minDstPortRange2).setMaxDstPortRange(maxDstPortRange2).setSrcIpPrefix(srcIpPrefix2) 98 .setMinDstPortRange(minDstPortRange2).setMaxDstPortRange(maxDstPortRange2).setSrcIpPrefix(srcIpPrefix2)
95 - .setDstIpPrefix(dstIpPrefix2).setSrcPort(virtualSrcPort2).setDstPort(virtualDstPort2).build(); 99 + .setDstIpPrefix(dstIpPrefix2).setSrcPort(virtualSrcPort2).setDstPort(virtualDstPort2)
100 + .setPriority(priority2).build();
96 101
97 new EqualsTester().addEqualityGroup(flowClassifier1, sameAsFlowClassifier1).addEqualityGroup(flowClassifier2) 102 new EqualsTester().addEqualityGroup(flowClassifier1, sameAsFlowClassifier1).addEqualityGroup(flowClassifier2)
98 .testEquals(); 103 .testEquals();
...@@ -107,6 +112,7 @@ public class DefaultFlowClassifierTest { ...@@ -107,6 +112,7 @@ public class DefaultFlowClassifierTest {
107 final String description = "FlowClassifier"; 112 final String description = "FlowClassifier";
108 final String ethType = "IPv4"; 113 final String ethType = "IPv4";
109 final String protocol = "tcp"; 114 final String protocol = "tcp";
115 + final int priority = 30000;
110 final int minSrcPortRange = 5; 116 final int minSrcPortRange = 5;
111 final int maxSrcPortRange = 10; 117 final int maxSrcPortRange = 10;
112 final int minDstPortRange = 5; 118 final int minDstPortRange = 5;
...@@ -123,7 +129,8 @@ public class DefaultFlowClassifierTest { ...@@ -123,7 +129,8 @@ public class DefaultFlowClassifierTest {
123 .setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType) 129 .setTenantId(tenantId).setName(name).setDescription(description).setEtherType(ethType)
124 .setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange) 130 .setProtocol(protocol).setMinSrcPortRange(minSrcPortRange).setMaxSrcPortRange(maxSrcPortRange)
125 .setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix) 131 .setMinDstPortRange(minDstPortRange).setMaxDstPortRange(maxDstPortRange).setSrcIpPrefix(srcIpPrefix)
126 - .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort).build(); 132 + .setDstIpPrefix(dstIpPrefix).setSrcPort(virtualSrcPort).setDstPort(virtualDstPort)
133 + .setPriority(priority).build();
127 134
128 assertThat(flowClassifierId, is(flowClassifier.flowClassifierId())); 135 assertThat(flowClassifierId, is(flowClassifier.flowClassifierId()));
129 assertThat(tenantId, is(flowClassifier.tenantId())); 136 assertThat(tenantId, is(flowClassifier.tenantId()));
...@@ -131,6 +138,7 @@ public class DefaultFlowClassifierTest { ...@@ -131,6 +138,7 @@ public class DefaultFlowClassifierTest {
131 assertThat(description, is(flowClassifier.description())); 138 assertThat(description, is(flowClassifier.description()));
132 assertThat(ethType, is(flowClassifier.etherType())); 139 assertThat(ethType, is(flowClassifier.etherType()));
133 assertThat(protocol, is(flowClassifier.protocol())); 140 assertThat(protocol, is(flowClassifier.protocol()));
141 + assertThat(priority, is(flowClassifier.priority()));
134 assertThat(minSrcPortRange, is(flowClassifier.minSrcPortRange())); 142 assertThat(minSrcPortRange, is(flowClassifier.minSrcPortRange()));
135 assertThat(maxSrcPortRange, is(flowClassifier.maxSrcPortRange())); 143 assertThat(maxSrcPortRange, is(flowClassifier.maxSrcPortRange()));
136 assertThat(minDstPortRange, is(flowClassifier.minDstPortRange())); 144 assertThat(minDstPortRange, is(flowClassifier.minDstPortRange()));
......
...@@ -40,6 +40,7 @@ public final class FlowClassifierCodec extends JsonCodec<FlowClassifier> { ...@@ -40,6 +40,7 @@ public final class FlowClassifierCodec extends JsonCodec<FlowClassifier> {
40 private static final String DESCRIPTION = "description"; 40 private static final String DESCRIPTION = "description";
41 private static final String ETHER_TYPE = "ethertype"; 41 private static final String ETHER_TYPE = "ethertype";
42 private static final String PROTOCOL = "protocol"; 42 private static final String PROTOCOL = "protocol";
43 + private static final String PRIORITY = "priority";
43 private static final String MIN_SRC_PORT_RANGE = "source_port_range_min"; 44 private static final String MIN_SRC_PORT_RANGE = "source_port_range_min";
44 private static final String MAX_SRC_PORT_RANGE = "source_port_range_max"; 45 private static final String MAX_SRC_PORT_RANGE = "source_port_range_max";
45 private static final String MIN_DST_PORT_RANGE = "destination_port_range_min"; 46 private static final String MIN_DST_PORT_RANGE = "destination_port_range_min";
...@@ -79,6 +80,9 @@ public final class FlowClassifierCodec extends JsonCodec<FlowClassifier> { ...@@ -79,6 +80,9 @@ public final class FlowClassifierCodec extends JsonCodec<FlowClassifier> {
79 resultBuilder.setProtocol(protocol); 80 resultBuilder.setProtocol(protocol);
80 } 81 }
81 82
83 + int priority = (json.get(PRIORITY)).asInt();
84 + resultBuilder.setPriority(priority);
85 +
82 int minSrcPortRange = (json.get(MIN_SRC_PORT_RANGE)).asInt(); 86 int minSrcPortRange = (json.get(MIN_SRC_PORT_RANGE)).asInt();
83 resultBuilder.setMinSrcPortRange(minSrcPortRange); 87 resultBuilder.setMinSrcPortRange(minSrcPortRange);
84 88
...@@ -123,6 +127,7 @@ public final class FlowClassifierCodec extends JsonCodec<FlowClassifier> { ...@@ -123,6 +127,7 @@ public final class FlowClassifierCodec extends JsonCodec<FlowClassifier> {
123 .put(DESCRIPTION, flowClassifier.description()) 127 .put(DESCRIPTION, flowClassifier.description())
124 .put(ETHER_TYPE, flowClassifier.etherType()) 128 .put(ETHER_TYPE, flowClassifier.etherType())
125 .put(PROTOCOL, flowClassifier.protocol()) 129 .put(PROTOCOL, flowClassifier.protocol())
130 + .put(PRIORITY, flowClassifier.priority())
126 .put(MIN_SRC_PORT_RANGE, flowClassifier.minSrcPortRange()) 131 .put(MIN_SRC_PORT_RANGE, flowClassifier.minSrcPortRange())
127 .put(MAX_SRC_PORT_RANGE, flowClassifier.maxSrcPortRange()) 132 .put(MAX_SRC_PORT_RANGE, flowClassifier.maxSrcPortRange())
128 .put(MIN_DST_PORT_RANGE, flowClassifier.minDstPortRange()) 133 .put(MIN_DST_PORT_RANGE, flowClassifier.minDstPortRange())
......
...@@ -65,8 +65,9 @@ public class FlowClassifierResourceTest extends VtnResourceTest { ...@@ -65,8 +65,9 @@ public class FlowClassifierResourceTest extends VtnResourceTest {
65 VirtualPortId dstPortId1 = VirtualPortId.portId("aef3478a-4a56-2a6e-cd3a-9dee4e2ec345"); 65 VirtualPortId dstPortId1 = VirtualPortId.portId("aef3478a-4a56-2a6e-cd3a-9dee4e2ec345");
66 66
67 final MockFlowClassifier flowClassifier1 = new MockFlowClassifier(flowClassifierId1, tenantId1, "flowClassifier1", 67 final MockFlowClassifier flowClassifier1 = new MockFlowClassifier(flowClassifierId1, tenantId1, "flowClassifier1",
68 - "Mock flow classifier", "IPv4", "IP", 1001, 1500, 68 + "Mock flow classifier", "IPv4", "IP", 10000,
69 - 5001, 6000, IpPrefix.valueOf("1.1.1.1/16"), 69 + 1001, 1500, 5001, 6000,
70 + IpPrefix.valueOf("1.1.1.1/16"),
70 IpPrefix.valueOf("22.12.34.45/16"), 71 IpPrefix.valueOf("22.12.34.45/16"),
71 srcPortId1, dstPortId1); 72 srcPortId1, dstPortId1);
72 73
...@@ -81,6 +82,7 @@ public class FlowClassifierResourceTest extends VtnResourceTest { ...@@ -81,6 +82,7 @@ public class FlowClassifierResourceTest extends VtnResourceTest {
81 private final String description; 82 private final String description;
82 private final String etherType; 83 private final String etherType;
83 private final String protocol; 84 private final String protocol;
85 + private final int priority;
84 private final int minSrcPortRange; 86 private final int minSrcPortRange;
85 private final int maxSrcPortRange; 87 private final int maxSrcPortRange;
86 private final int minDstPortRange; 88 private final int minDstPortRange;
...@@ -91,15 +93,17 @@ public class FlowClassifierResourceTest extends VtnResourceTest { ...@@ -91,15 +93,17 @@ public class FlowClassifierResourceTest extends VtnResourceTest {
91 private final VirtualPortId dstPort; 93 private final VirtualPortId dstPort;
92 94
93 public MockFlowClassifier(FlowClassifierId flowClassifierId, TenantId tenantId, String name, 95 public MockFlowClassifier(FlowClassifierId flowClassifierId, TenantId tenantId, String name,
94 - String description, String etherType, String protocol, int minSrcPortRange, 96 + String description, String etherType, String protocol, int priority,
95 - int maxSrcPortRange, int minDstPortRange, int maxDstPortRange, IpPrefix srcIpPrefix, 97 + int minSrcPortRange, int maxSrcPortRange, int minDstPortRange, int maxDstPortRange,
96 - IpPrefix dstIpPrefix, VirtualPortId srcPort, VirtualPortId dstPort) { 98 + IpPrefix srcIpPrefix, IpPrefix dstIpPrefix, VirtualPortId srcPort,
99 + VirtualPortId dstPort) {
97 this.flowClassifierId = flowClassifierId; 100 this.flowClassifierId = flowClassifierId;
98 this.tenantId = tenantId; 101 this.tenantId = tenantId;
99 this.name = name; 102 this.name = name;
100 this.description = description; 103 this.description = description;
101 this.etherType = etherType; 104 this.etherType = etherType;
102 this.protocol = protocol; 105 this.protocol = protocol;
106 + this.priority = priority;
103 this.minSrcPortRange = minSrcPortRange; 107 this.minSrcPortRange = minSrcPortRange;
104 this.maxSrcPortRange = maxSrcPortRange; 108 this.maxSrcPortRange = maxSrcPortRange;
105 this.minDstPortRange = minDstPortRange; 109 this.minDstPortRange = minDstPortRange;
...@@ -142,6 +146,11 @@ public class FlowClassifierResourceTest extends VtnResourceTest { ...@@ -142,6 +146,11 @@ public class FlowClassifierResourceTest extends VtnResourceTest {
142 } 146 }
143 147
144 @Override 148 @Override
149 + public int priority() {
150 + return priority;
151 + }
152 +
153 + @Override
145 public int minSrcPortRange() { 154 public int minSrcPortRange() {
146 return minSrcPortRange; 155 return minSrcPortRange;
147 } 156 }
......
...@@ -89,6 +89,7 @@ public class FlowClassifierCodecTest { ...@@ -89,6 +89,7 @@ public class FlowClassifierCodecTest {
89 assertThat(flowClassifier.tenantId().toString(), is(tenantId.toString())); 89 assertThat(flowClassifier.tenantId().toString(), is(tenantId.toString()));
90 assertThat(flowClassifier.description(), is("flow classifier")); 90 assertThat(flowClassifier.description(), is("flow classifier"));
91 assertThat(flowClassifier.protocol(), is("tcp")); 91 assertThat(flowClassifier.protocol(), is("tcp"));
92 + assertThat(flowClassifier.priority(), is(65535));
92 assertThat(flowClassifier.minSrcPortRange(), is(22)); 93 assertThat(flowClassifier.minSrcPortRange(), is(22));
93 assertThat(flowClassifier.maxSrcPortRange(), is(4000)); 94 assertThat(flowClassifier.maxSrcPortRange(), is(4000));
94 assertThat(flowClassifier.minDstPortRange(), is(80)); 95 assertThat(flowClassifier.minDstPortRange(), is(80));
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
5 "description": "flow classifier", 5 "description": "flow classifier",
6 "ethertype": "IPv4", 6 "ethertype": "IPv4",
7 "protocol": "tcp", 7 "protocol": "tcp",
8 + "priority": 10000,
8 "source_port_range_min": 22, "source_port_range_max": 4000, 9 "source_port_range_min": 22, "source_port_range_max": 4000,
9 "destination_port_range_min": 80, "destination_port_range_max": 80, 10 "destination_port_range_min": 80, "destination_port_range_max": 80,
10 "source_ip_prefix": "1.1.1.1/16" , "destination_ip_prefix": "22.12.34.45/16", 11 "source_ip_prefix": "1.1.1.1/16" , "destination_ip_prefix": "22.12.34.45/16",
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
5 "description": "flow classifier", 5 "description": "flow classifier",
6 "ethertype": "IPv4", 6 "ethertype": "IPv4",
7 "protocol": "tcp", 7 "protocol": "tcp",
8 + "priority": 65535,
8 "source_port_range_min": 22, "source_port_range_max": 4000, 9 "source_port_range_min": 22, "source_port_range_max": 4000,
9 "destination_port_range_min": 80, "destination_port_range_max": 80, 10 "destination_port_range_min": 80, "destination_port_range_max": 80,
10 "source_ip_prefix": "1.1.1.1/16" , "destination_ip_prefix": "22.12.34.45/16" 11 "source_ip_prefix": "1.1.1.1/16" , "destination_ip_prefix": "22.12.34.45/16"
......