alshabib
Committed by Gerrit Code Review

fix corsa pipeline divergence : need to differentiate between write and apply instructions.

Change-Id: I477d27d6e52a8e09744614e5f5aa843dd26331e0
...@@ -415,28 +415,6 @@ public class BgpRouter { ...@@ -415,28 +415,6 @@ public class BgpRouter {
415 FlowRuleOperations.Builder ops = FlowRuleOperations.builder(); 415 FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
416 FlowRule rule; 416 FlowRule rule;
417 417
418 - selector.matchEthType(Ethernet.TYPE_IPV4);
419 - treatment.transition(FlowRule.Type.VLAN);
420 -
421 - rule = new DefaultFlowRule(deviceId, selector.build(), treatment.build(), CONTROLLER_PRIORITY,
422 - appId, 0, true, FlowRule.Type.VLAN_MPLS);
423 -
424 - ops = install ? ops.add(rule) : ops.remove(rule);
425 -
426 - selector = DefaultTrafficSelector.builder();
427 - treatment = DefaultTrafficTreatment.builder();
428 -
429 - selector.matchEthType(Ethernet.TYPE_ARP);
430 - treatment.transition(FlowRule.Type.VLAN);
431 -
432 - rule = new DefaultFlowRule(deviceId, selector.build(),
433 - treatment.build(), CONTROLLER_PRIORITY,
434 - appId, 0, true, FlowRule.Type.VLAN_MPLS);
435 -
436 - ops = install ? ops.add(rule) : ops.remove(rule);
437 -
438 - selector = DefaultTrafficSelector.builder();
439 - treatment = DefaultTrafficTreatment.builder();
440 418
441 selector.matchEthType(Ethernet.TYPE_VLAN); 419 selector.matchEthType(Ethernet.TYPE_VLAN);
442 treatment.transition(FlowRule.Type.VLAN); 420 treatment.transition(FlowRule.Type.VLAN);
...@@ -447,18 +425,6 @@ public class BgpRouter { ...@@ -447,18 +425,6 @@ public class BgpRouter {
447 425
448 ops = install ? ops.add(rule) : ops.remove(rule); 426 ops = install ? ops.add(rule) : ops.remove(rule);
449 427
450 - //Drop rule
451 - selector = DefaultTrafficSelector.builder();
452 - treatment = DefaultTrafficTreatment.builder();
453 -
454 - treatment.drop();
455 -
456 - rule = new DefaultFlowRule(deviceId, selector.build(),
457 - treatment.build(), DROP_PRIORITY, appId,
458 - 0, true, FlowRule.Type.VLAN_MPLS);
459 -
460 - ops = install ? ops.add(rule) : ops.remove(rule);
461 -
462 flowService.apply(ops.build(new FlowRuleOperationsContext() { 428 flowService.apply(ops.build(new FlowRuleOperationsContext() {
463 @Override 429 @Override
464 public void onSuccess(FlowRuleOperations ops) { 430 public void onSuccess(FlowRuleOperations ops) {
...@@ -487,7 +453,7 @@ public class BgpRouter { ...@@ -487,7 +453,7 @@ public class BgpRouter {
487 treatment = DefaultTrafficTreatment.builder(); 453 treatment = DefaultTrafficTreatment.builder();
488 454
489 selector.matchVlanId(vid); 455 selector.matchVlanId(vid);
490 - treatment.popVlan(); 456 + treatment.stripVlan();
491 treatment.transition(Type.ETHER); 457 treatment.transition(Type.ETHER);
492 458
493 rule = new DefaultFlowRule(deviceId, selector.build(), 459 rule = new DefaultFlowRule(deviceId, selector.build(),
......
...@@ -21,15 +21,11 @@ import org.onlab.packet.IpAddress; ...@@ -21,15 +21,11 @@ import org.onlab.packet.IpAddress;
21 import org.onlab.packet.TCP; 21 import org.onlab.packet.TCP;
22 import org.onosproject.core.ApplicationId; 22 import org.onosproject.core.ApplicationId;
23 import org.onosproject.net.ConnectPoint; 23 import org.onosproject.net.ConnectPoint;
24 -import org.onosproject.net.flow.DefaultTrafficSelector;
25 import org.onosproject.net.flow.DefaultTrafficTreatment; 24 import org.onosproject.net.flow.DefaultTrafficTreatment;
26 -import org.onosproject.net.flow.FlowRule;
27 -import org.onosproject.net.flow.TrafficSelector;
28 import org.onosproject.net.flow.TrafficTreatment; 25 import org.onosproject.net.flow.TrafficTreatment;
29 import org.onosproject.net.packet.DefaultOutboundPacket; 26 import org.onosproject.net.packet.DefaultOutboundPacket;
30 import org.onosproject.net.packet.OutboundPacket; 27 import org.onosproject.net.packet.OutboundPacket;
31 import org.onosproject.net.packet.PacketContext; 28 import org.onosproject.net.packet.PacketContext;
32 -import org.onosproject.net.packet.PacketPriority;
33 import org.onosproject.net.packet.PacketProcessor; 29 import org.onosproject.net.packet.PacketProcessor;
34 import org.onosproject.net.packet.PacketService; 30 import org.onosproject.net.packet.PacketService;
35 import org.onosproject.routing.config.BgpPeer; 31 import org.onosproject.routing.config.BgpPeer;
...@@ -65,26 +61,6 @@ public class TunnellingConnectivityManager { ...@@ -65,26 +61,6 @@ public class TunnellingConnectivityManager {
65 61
66 public void start() { 62 public void start() {
67 packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 3); 63 packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 3);
68 -
69 - TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
70 -
71 - // Request packets with BGP port as their TCP source port
72 - selector.matchEthType(Ethernet.TYPE_IPV4);
73 - selector.matchIPProtocol(IPv4.PROTOCOL_TCP);
74 - selector.matchTcpSrc(BGP_PORT);
75 -
76 - packetService.requestPackets(selector.build(), PacketPriority.CONTROL,
77 - appId, FlowRule.Type.DEFAULT);
78 -
79 - selector = DefaultTrafficSelector.builder();
80 -
81 - // Request packets with BGP port as their TCP destination port
82 - selector.matchEthType(Ethernet.TYPE_IPV4);
83 - selector.matchIPProtocol(IPv4.PROTOCOL_TCP);
84 - selector.matchTcpDst(BGP_PORT);
85 -
86 - packetService.requestPackets(selector.build(), PacketPriority.CONTROL,
87 - appId, FlowRule.Type.DEFAULT);
88 } 64 }
89 65
90 public void stop() { 66 public void stop() {
......
...@@ -189,6 +189,10 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -189,6 +189,10 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
189 return add(Instructions.modVlanPcp(pcp)); 189 return add(Instructions.modVlanPcp(pcp));
190 } 190 }
191 191
192 + public Builder stripVlan() {
193 + return add(Instructions.stripVlanId());
194 + }
195 +
192 @Override 196 @Override
193 public Builder setIpSrc(IpAddress addr) { 197 public Builder setIpSrc(IpAddress addr) {
194 return add(Instructions.modL3Src(addr)); 198 return add(Instructions.modL3Src(addr));
......
...@@ -106,6 +106,12 @@ public interface TrafficTreatment { ...@@ -106,6 +106,12 @@ public interface TrafficTreatment {
106 public Builder setVlanPcp(Byte pcp); 106 public Builder setVlanPcp(Byte pcp);
107 107
108 /** 108 /**
109 + * Strips the vlan tag if there is one.
110 + * @return a treatment builder
111 + */
112 + public Builder stripVlan();
113 +
114 + /**
109 * Sets the src l3 address. 115 * Sets the src l3 address.
110 * 116 *
111 * @param addr an ip 117 * @param addr an ip
......
...@@ -130,6 +130,14 @@ public final class Instructions { ...@@ -130,6 +130,14 @@ public final class Instructions {
130 } 130 }
131 131
132 /** 132 /**
133 + * Strips the VLAN tag if one is present.
134 + * @return a L2 modification
135 + */
136 + public static L2ModificationInstruction stripVlanId() {
137 + return new StripVlanInstruction();
138 + }
139 +
140 + /**
133 * Creates a MPLS label modification. 141 * Creates a MPLS label modification.
134 * @param mplsLabel to set. 142 * @param mplsLabel to set.
135 * @return a L2 Modification 143 * @return a L2 Modification
......
...@@ -53,6 +53,11 @@ public abstract class L2ModificationInstruction implements Instruction { ...@@ -53,6 +53,11 @@ public abstract class L2ModificationInstruction implements Instruction {
53 VLAN_PCP, 53 VLAN_PCP,
54 54
55 /** 55 /**
56 + * Strips the vlan.
57 + */
58 + STRIP_VLAN,
59 +
60 + /**
56 * MPLS Label modification. 61 * MPLS Label modification.
57 */ 62 */
58 MPLS_LABEL, 63 MPLS_LABEL,
...@@ -273,6 +278,33 @@ public abstract class L2ModificationInstruction implements Instruction { ...@@ -273,6 +278,33 @@ public abstract class L2ModificationInstruction implements Instruction {
273 } 278 }
274 } 279 }
275 280
281 + public static final class StripVlanInstruction extends L2ModificationInstruction {
282 +
283 + @Override
284 + public L2SubType subtype() {
285 + return L2SubType.STRIP_VLAN;
286 + }
287 +
288 + @Override
289 + public String toString() {
290 + return subtype().toString();
291 + }
292 +
293 + @Override
294 + public int hashCode() {
295 + return Objects.hash(type(), subtype());
296 + }
297 +
298 + @Override
299 + public boolean equals(Object obj) {
300 + if (this == obj) {
301 + return true;
302 + }
303 +
304 + return false;
305 + }
306 + }
307 +
276 /** 308 /**
277 * Represents a VLAN POP modification instruction. 309 * Represents a VLAN POP modification instruction.
278 */ 310 */
......
...@@ -268,6 +268,9 @@ public class FlowEntryBuilder { ...@@ -268,6 +268,9 @@ public class FlowEntryBuilder {
268 case POP_VLAN: 268 case POP_VLAN:
269 builder.popVlan(); 269 builder.popVlan();
270 break; 270 break;
271 + case STRIP_VLAN:
272 + builder.stripVlan();
273 + break;
271 case SET_TP_DST: 274 case SET_TP_DST:
272 case SET_TP_SRC: 275 case SET_TP_SRC:
273 case POP_PBB: 276 case POP_PBB:
...@@ -280,7 +283,7 @@ public class FlowEntryBuilder { ...@@ -280,7 +283,7 @@ public class FlowEntryBuilder {
280 case SET_NW_TOS: 283 case SET_NW_TOS:
281 case SET_NW_TTL: 284 case SET_NW_TTL:
282 case SET_QUEUE: 285 case SET_QUEUE:
283 - case STRIP_VLAN: 286 +
284 case ENQUEUE: 287 case ENQUEUE:
285 default: 288 default:
286 log.warn("Action type {} not yet implemented.", act.getType()); 289 log.warn("Action type {} not yet implemented.", act.getType());
......
...@@ -207,6 +207,8 @@ public class FlowModBuilderVer10 extends FlowModBuilder { ...@@ -207,6 +207,8 @@ public class FlowModBuilderVer10 extends FlowModBuilder {
207 case VLAN_PCP: 207 case VLAN_PCP:
208 ModVlanPcpInstruction vlanPcp = (ModVlanPcpInstruction) l2m; 208 ModVlanPcpInstruction vlanPcp = (ModVlanPcpInstruction) l2m;
209 return factory().actions().setVlanPcp(VlanPcp.of(vlanPcp.vlanPcp())); 209 return factory().actions().setVlanPcp(VlanPcp.of(vlanPcp.vlanPcp()));
210 + case STRIP_VLAN:
211 + return factory().actions().stripVlan();
210 default: 212 default:
211 log.warn("Unimplemented action type {}.", l2m.subtype()); 213 log.warn("Unimplemented action type {}.", l2m.subtype());
212 break; 214 break;
......
...@@ -319,6 +319,8 @@ public class FlowModBuilderVer13 extends FlowModBuilder { ...@@ -319,6 +319,8 @@ public class FlowModBuilderVer13 extends FlowModBuilder {
319 (PushHeaderInstructions) l2m; 319 (PushHeaderInstructions) l2m;
320 return factory().actions().popMpls(EthType.of(popHeaderInstructions 320 return factory().actions().popMpls(EthType.of(popHeaderInstructions
321 .ethernetType())); 321 .ethernetType()));
322 + case STRIP_VLAN:
323 + return factory().actions().stripVlan();
322 case MPLS_LABEL: 324 case MPLS_LABEL:
323 ModMplsLabelInstruction mplsLabel = 325 ModMplsLabelInstruction mplsLabel =
324 (ModMplsLabelInstruction) l2m; 326 (ModMplsLabelInstruction) l2m;
......