alshabib

Refactored driver to use new FlowRule api.

Deprecated transition with table types and added api for transition with table ids.

Change-Id: Ifcf2d87d16810666d992e4d9f5ddca3d0da460be
...@@ -289,7 +289,7 @@ public class DefaultFlowRule implements FlowRule { ...@@ -289,7 +289,7 @@ public class DefaultFlowRule implements FlowRule {
289 return new Builder(); 289 return new Builder();
290 } 290 }
291 291
292 - private static final class Builder implements FlowRule.Builder { 292 + public static final class Builder implements FlowRule.Builder {
293 293
294 private FlowId flowId; 294 private FlowId flowId;
295 private Integer priority; 295 private Integer priority;
......
...@@ -328,7 +328,12 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -328,7 +328,12 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
328 328
329 @Override 329 @Override
330 public Builder transition(FlowRule.Type type) { 330 public Builder transition(FlowRule.Type type) {
331 - return add(Instructions.transition(type)); 331 + return add(Instructions.transition(type.ordinal()));
332 + }
333 +
334 + @Override
335 + public Builder transition(Integer tableId) {
336 + return add(Instructions.transition(tableId));
332 } 337 }
333 338
334 @Override 339 @Override
......
...@@ -230,9 +230,19 @@ public interface TrafficTreatment { ...@@ -230,9 +230,19 @@ public interface TrafficTreatment {
230 * @param type the table type 230 * @param type the table type
231 * @return a treatement builder 231 * @return a treatement builder
232 */ 232 */
233 + @Deprecated
233 public Builder transition(FlowRule.Type type); 234 public Builder transition(FlowRule.Type type);
234 235
235 /** 236 /**
237 + * Sets the next table id to transition to.
238 + *
239 + * @param tableId the table table
240 + * @return a treatement builder
241 + */
242 + public Builder transition(Integer tableId);
243 +
244 +
245 + /**
236 * Pops outermost VLAN tag. 246 * Pops outermost VLAN tag.
237 * 247 *
238 * @return a treatment builder. 248 * @return a treatment builder.
......
...@@ -22,11 +22,8 @@ import org.onlab.packet.MplsLabel; ...@@ -22,11 +22,8 @@ import org.onlab.packet.MplsLabel;
22 import org.onlab.packet.VlanId; 22 import org.onlab.packet.VlanId;
23 import org.onosproject.core.GroupId; 23 import org.onosproject.core.GroupId;
24 import org.onosproject.net.PortNumber; 24 import org.onosproject.net.PortNumber;
25 -import org.onosproject.net.flow.FlowRule;
26 import org.onosproject.net.flow.instructions.L0ModificationInstruction.L0SubType; 25 import org.onosproject.net.flow.instructions.L0ModificationInstruction.L0SubType;
27 import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction; 26 import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction;
28 -import org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType;
29 -import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
30 import org.onosproject.net.flow.instructions.L3ModificationInstruction.L3SubType; 27 import org.onosproject.net.flow.instructions.L3ModificationInstruction.L3SubType;
31 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction; 28 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
32 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction; 29 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction;
...@@ -36,12 +33,6 @@ import java.util.Objects; ...@@ -36,12 +33,6 @@ import java.util.Objects;
36 33
37 import static com.google.common.base.MoreObjects.toStringHelper; 34 import static com.google.common.base.MoreObjects.toStringHelper;
38 import static com.google.common.base.Preconditions.checkNotNull; 35 import static com.google.common.base.Preconditions.checkNotNull;
39 -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsLabelInstruction;
40 -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsTtlInstruction;
41 -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
42 -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanPcpInstruction;
43 -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.PopVlanInstruction;
44 -import static org.onosproject.net.flow.instructions.L2ModificationInstruction.PushHeaderInstructions;
45 36
46 /** 37 /**
47 * Factory class for creating various traffic treatment instructions. 38 * Factory class for creating various traffic treatment instructions.
...@@ -103,7 +94,8 @@ public final class Instructions { ...@@ -103,7 +94,8 @@ public final class Instructions {
103 */ 94 */
104 public static L2ModificationInstruction modL2Src(MacAddress addr) { 95 public static L2ModificationInstruction modL2Src(MacAddress addr) {
105 checkNotNull(addr, "Src l2 address cannot be null"); 96 checkNotNull(addr, "Src l2 address cannot be null");
106 - return new ModEtherInstruction(L2SubType.ETH_SRC, addr); 97 + return new L2ModificationInstruction.ModEtherInstruction(
98 + L2ModificationInstruction.L2SubType.ETH_SRC, addr);
107 } 99 }
108 100
109 /** 101 /**
...@@ -114,7 +106,8 @@ public final class Instructions { ...@@ -114,7 +106,8 @@ public final class Instructions {
114 */ 106 */
115 public static L2ModificationInstruction modL2Dst(MacAddress addr) { 107 public static L2ModificationInstruction modL2Dst(MacAddress addr) {
116 checkNotNull(addr, "Dst l2 address cannot be null"); 108 checkNotNull(addr, "Dst l2 address cannot be null");
117 - return new ModEtherInstruction(L2SubType.ETH_DST, addr); 109 + return new L2ModificationInstruction.ModEtherInstruction(
110 + L2ModificationInstruction.L2SubType.ETH_DST, addr);
118 } 111 }
119 112
120 /** 113 /**
...@@ -125,7 +118,7 @@ public final class Instructions { ...@@ -125,7 +118,7 @@ public final class Instructions {
125 */ 118 */
126 public static L2ModificationInstruction modVlanId(VlanId vlanId) { 119 public static L2ModificationInstruction modVlanId(VlanId vlanId) {
127 checkNotNull(vlanId, "VLAN id cannot be null"); 120 checkNotNull(vlanId, "VLAN id cannot be null");
128 - return new ModVlanIdInstruction(vlanId); 121 + return new L2ModificationInstruction.ModVlanIdInstruction(vlanId);
129 } 122 }
130 123
131 /** 124 /**
...@@ -136,7 +129,7 @@ public final class Instructions { ...@@ -136,7 +129,7 @@ public final class Instructions {
136 */ 129 */
137 public static L2ModificationInstruction modVlanPcp(Byte vlanPcp) { 130 public static L2ModificationInstruction modVlanPcp(Byte vlanPcp) {
138 checkNotNull(vlanPcp, "VLAN Pcp cannot be null"); 131 checkNotNull(vlanPcp, "VLAN Pcp cannot be null");
139 - return new ModVlanPcpInstruction(vlanPcp); 132 + return new L2ModificationInstruction.ModVlanPcpInstruction(vlanPcp);
140 } 133 }
141 134
142 /** 135 /**
...@@ -147,7 +140,7 @@ public final class Instructions { ...@@ -147,7 +140,7 @@ public final class Instructions {
147 */ 140 */
148 public static L2ModificationInstruction modMplsLabel(MplsLabel mplsLabel) { 141 public static L2ModificationInstruction modMplsLabel(MplsLabel mplsLabel) {
149 checkNotNull(mplsLabel, "MPLS label cannot be null"); 142 checkNotNull(mplsLabel, "MPLS label cannot be null");
150 - return new ModMplsLabelInstruction(mplsLabel); 143 + return new L2ModificationInstruction.ModMplsLabelInstruction(mplsLabel);
151 } 144 }
152 145
153 /** 146 /**
...@@ -156,7 +149,7 @@ public final class Instructions { ...@@ -156,7 +149,7 @@ public final class Instructions {
156 * @return a L2 Modification 149 * @return a L2 Modification
157 */ 150 */
158 public static L2ModificationInstruction decMplsTtl() { 151 public static L2ModificationInstruction decMplsTtl() {
159 - return new ModMplsTtlInstruction(); 152 + return new L2ModificationInstruction.ModMplsTtlInstruction();
160 } 153 }
161 154
162 /** 155 /**
...@@ -246,7 +239,8 @@ public final class Instructions { ...@@ -246,7 +239,8 @@ public final class Instructions {
246 * @return a L2 modification. 239 * @return a L2 modification.
247 */ 240 */
248 public static Instruction pushMpls() { 241 public static Instruction pushMpls() {
249 - return new PushHeaderInstructions(L2SubType.MPLS_PUSH, 242 + return new L2ModificationInstruction.PushHeaderInstructions(
243 + L2ModificationInstruction.L2SubType.MPLS_PUSH,
250 Ethernet.MPLS_UNICAST); 244 Ethernet.MPLS_UNICAST);
251 } 245 }
252 246
...@@ -256,7 +250,8 @@ public final class Instructions { ...@@ -256,7 +250,8 @@ public final class Instructions {
256 * @return a L2 modification. 250 * @return a L2 modification.
257 */ 251 */
258 public static Instruction popMpls() { 252 public static Instruction popMpls() {
259 - return new PushHeaderInstructions(L2SubType.MPLS_POP, 253 + return new L2ModificationInstruction.PushHeaderInstructions(
254 + L2ModificationInstruction.L2SubType.MPLS_POP,
260 Ethernet.MPLS_UNICAST); 255 Ethernet.MPLS_UNICAST);
261 } 256 }
262 257
...@@ -268,7 +263,8 @@ public final class Instructions { ...@@ -268,7 +263,8 @@ public final class Instructions {
268 */ 263 */
269 public static Instruction popMpls(Short etherType) { 264 public static Instruction popMpls(Short etherType) {
270 checkNotNull(etherType, "Ethernet type cannot be null"); 265 checkNotNull(etherType, "Ethernet type cannot be null");
271 - return new PushHeaderInstructions(L2SubType.MPLS_POP, etherType); 266 + return new L2ModificationInstruction.PushHeaderInstructions(
267 + L2ModificationInstruction.L2SubType.MPLS_POP, etherType);
272 } 268 }
273 269
274 /** 270 /**
...@@ -277,7 +273,8 @@ public final class Instructions { ...@@ -277,7 +273,8 @@ public final class Instructions {
277 * @return a L2 modification 273 * @return a L2 modification
278 */ 274 */
279 public static Instruction popVlan() { 275 public static Instruction popVlan() {
280 - return new PopVlanInstruction(L2SubType.VLAN_POP); 276 + return new L2ModificationInstruction.PopVlanInstruction(
277 + L2ModificationInstruction.L2SubType.VLAN_POP);
281 } 278 }
282 279
283 /** 280 /**
...@@ -286,18 +283,19 @@ public final class Instructions { ...@@ -286,18 +283,19 @@ public final class Instructions {
286 * @return a L2 modification 283 * @return a L2 modification
287 */ 284 */
288 public static Instruction pushVlan() { 285 public static Instruction pushVlan() {
289 - return new PushHeaderInstructions(L2SubType.VLAN_PUSH, Ethernet.TYPE_VLAN); 286 + return new L2ModificationInstruction.PushHeaderInstructions(
287 + L2ModificationInstruction.L2SubType.VLAN_PUSH, Ethernet.TYPE_VLAN);
290 } 288 }
291 289
292 /** 290 /**
293 - * Sends the packet to the table described in 'type'. 291 + * Sends the packet to the table id.
294 * 292 *
295 - * @param type flow rule table type 293 + * @param tableId flow rule table id
296 * @return table type transition instruction 294 * @return table type transition instruction
297 */ 295 */
298 - public static Instruction transition(FlowRule.Type type) { 296 + public static Instruction transition(Integer tableId) {
299 - checkNotNull(type, "Table type cannot be null"); 297 + checkNotNull(tableId, "Table id cannot be null");
300 - return new TableTypeTransition(type); 298 + return new TableTypeTransition(tableId);
301 } 299 }
302 300
303 /** 301 /**
...@@ -421,13 +419,12 @@ public final class Instructions { ...@@ -421,13 +419,12 @@ public final class Instructions {
421 } 419 }
422 } 420 }
423 421
424 - // FIXME: Temporary support for this. This should probably become it's own 422 +
425 - // type like other instructions.
426 public static class TableTypeTransition implements Instruction { 423 public static class TableTypeTransition implements Instruction {
427 - private final FlowRule.Type tableType; 424 + private final Integer tableId;
428 425
429 - TableTypeTransition(FlowRule.Type type) { 426 + TableTypeTransition(Integer tableId) {
430 - this.tableType = type; 427 + this.tableId = tableId;
431 } 428 }
432 429
433 @Override 430 @Override
...@@ -435,19 +432,19 @@ public final class Instructions { ...@@ -435,19 +432,19 @@ public final class Instructions {
435 return Type.TABLE; 432 return Type.TABLE;
436 } 433 }
437 434
438 - public FlowRule.Type tableType() { 435 + public Integer tableId() {
439 - return this.tableType; 436 + return this.tableId;
440 } 437 }
441 438
442 @Override 439 @Override
443 public String toString() { 440 public String toString() {
444 return toStringHelper(type().toString()) 441 return toStringHelper(type().toString())
445 - .add("tableType", this.tableType).toString(); 442 + .add("tableId", this.tableId).toString();
446 } 443 }
447 444
448 @Override 445 @Override
449 public int hashCode() { 446 public int hashCode() {
450 - return Objects.hash(type(), tableType); 447 + return Objects.hash(type(), tableId);
451 } 448 }
452 449
453 @Override 450 @Override
...@@ -457,7 +454,7 @@ public final class Instructions { ...@@ -457,7 +454,7 @@ public final class Instructions {
457 } 454 }
458 if (obj instanceof TableTypeTransition) { 455 if (obj instanceof TableTypeTransition) {
459 TableTypeTransition that = (TableTypeTransition) obj; 456 TableTypeTransition that = (TableTypeTransition) obj;
460 - return Objects.equals(tableType, that.tableType); 457 + return Objects.equals(tableId, that.tableId);
461 458
462 } 459 }
463 return false; 460 return false;
......
...@@ -36,7 +36,6 @@ import org.onosproject.net.flow.instructions.L2ModificationInstruction.PushHeade ...@@ -36,7 +36,6 @@ import org.onosproject.net.flow.instructions.L2ModificationInstruction.PushHeade
36 import org.onosproject.net.flow.instructions.L3ModificationInstruction; 36 import org.onosproject.net.flow.instructions.L3ModificationInstruction;
37 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction; 37 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
38 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction; 38 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction;
39 -import org.onosproject.openflow.controller.OpenFlowSwitch;
40 import org.projectfloodlight.openflow.protocol.OFFactory; 39 import org.projectfloodlight.openflow.protocol.OFFactory;
41 import org.projectfloodlight.openflow.protocol.OFFlowAdd; 40 import org.projectfloodlight.openflow.protocol.OFFlowAdd;
42 import org.projectfloodlight.openflow.protocol.OFFlowDelete; 41 import org.projectfloodlight.openflow.protocol.OFFlowDelete;
...@@ -238,38 +237,10 @@ public class FlowModBuilderVer13 extends FlowModBuilder { ...@@ -238,38 +237,10 @@ public class FlowModBuilderVer13 extends FlowModBuilder {
238 237
239 private OFInstruction buildTableGoto(Instructions.TableTypeTransition i) { 238 private OFInstruction buildTableGoto(Instructions.TableTypeTransition i) {
240 OFInstruction instruction = factory().instructions().gotoTable( 239 OFInstruction instruction = factory().instructions().gotoTable(
241 - TableId.of(getTableType(i.tableType()).ordinal())); 240 + TableId.of(i.tableId()));
242 return instruction; 241 return instruction;
243 } 242 }
244 243
245 - // FIXME: this has to go as well perhaps when we implement the SelectorService.
246 - private OpenFlowSwitch.TableType getTableType(FlowRule.Type type) {
247 - switch (type) {
248 -
249 - case DEFAULT:
250 - return OpenFlowSwitch.TableType.NONE;
251 - case IP:
252 - return OpenFlowSwitch.TableType.IP;
253 - case MPLS:
254 - return OpenFlowSwitch.TableType.MPLS;
255 - case ACL:
256 - return OpenFlowSwitch.TableType.ACL;
257 - case VLAN_MPLS:
258 - return OpenFlowSwitch.TableType.VLAN_MPLS;
259 - case VLAN:
260 - return OpenFlowSwitch.TableType.VLAN;
261 - case ETHER:
262 - return OpenFlowSwitch.TableType.ETHER;
263 - case COS:
264 - return OpenFlowSwitch.TableType.COS;
265 - case FIRST:
266 - return OpenFlowSwitch.TableType.FIRST;
267 - default:
268 - return OpenFlowSwitch.TableType.NONE;
269 - }
270 - }
271 -
272 -
273 private OFAction buildL0Modification(Instruction i) { 244 private OFAction buildL0Modification(Instruction i) {
274 L0ModificationInstruction l0m = (L0ModificationInstruction) i; 245 L0ModificationInstruction l0m = (L0ModificationInstruction) i;
275 switch (l0m.subtype()) { 246 switch (l0m.subtype()) {
......