fix corsa pipeline divergence : need to differentiate between write and apply instructions.
Change-Id: I477d27d6e52a8e09744614e5f5aa843dd26331e0
diff --git a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
index aed558b..c1b4a18 100644
--- a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
+++ b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
@@ -415,28 +415,6 @@
FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
FlowRule rule;
- selector.matchEthType(Ethernet.TYPE_IPV4);
- treatment.transition(FlowRule.Type.VLAN);
-
- rule = new DefaultFlowRule(deviceId, selector.build(), treatment.build(), CONTROLLER_PRIORITY,
- appId, 0, true, FlowRule.Type.VLAN_MPLS);
-
- ops = install ? ops.add(rule) : ops.remove(rule);
-
- selector = DefaultTrafficSelector.builder();
- treatment = DefaultTrafficTreatment.builder();
-
- selector.matchEthType(Ethernet.TYPE_ARP);
- treatment.transition(FlowRule.Type.VLAN);
-
- rule = new DefaultFlowRule(deviceId, selector.build(),
- treatment.build(), CONTROLLER_PRIORITY,
- appId, 0, true, FlowRule.Type.VLAN_MPLS);
-
- ops = install ? ops.add(rule) : ops.remove(rule);
-
- selector = DefaultTrafficSelector.builder();
- treatment = DefaultTrafficTreatment.builder();
selector.matchEthType(Ethernet.TYPE_VLAN);
treatment.transition(FlowRule.Type.VLAN);
@@ -447,18 +425,6 @@
ops = install ? ops.add(rule) : ops.remove(rule);
- //Drop rule
- selector = DefaultTrafficSelector.builder();
- treatment = DefaultTrafficTreatment.builder();
-
- treatment.drop();
-
- rule = new DefaultFlowRule(deviceId, selector.build(),
- treatment.build(), DROP_PRIORITY, appId,
- 0, true, FlowRule.Type.VLAN_MPLS);
-
- ops = install ? ops.add(rule) : ops.remove(rule);
-
flowService.apply(ops.build(new FlowRuleOperationsContext() {
@Override
public void onSuccess(FlowRuleOperations ops) {
@@ -487,7 +453,7 @@
treatment = DefaultTrafficTreatment.builder();
selector.matchVlanId(vid);
- treatment.popVlan();
+ treatment.stripVlan();
treatment.transition(Type.ETHER);
rule = new DefaultFlowRule(deviceId, selector.build(),
diff --git a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java
index 51b96cc..270a4da 100644
--- a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java
+++ b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java
@@ -21,15 +21,11 @@
import org.onlab.packet.TCP;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flow.TrafficTreatment;
import org.onosproject.net.packet.DefaultOutboundPacket;
import org.onosproject.net.packet.OutboundPacket;
import org.onosproject.net.packet.PacketContext;
-import org.onosproject.net.packet.PacketPriority;
import org.onosproject.net.packet.PacketProcessor;
import org.onosproject.net.packet.PacketService;
import org.onosproject.routing.config.BgpPeer;
@@ -65,26 +61,6 @@
public void start() {
packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 3);
-
- TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
-
- // Request packets with BGP port as their TCP source port
- selector.matchEthType(Ethernet.TYPE_IPV4);
- selector.matchIPProtocol(IPv4.PROTOCOL_TCP);
- selector.matchTcpSrc(BGP_PORT);
-
- packetService.requestPackets(selector.build(), PacketPriority.CONTROL,
- appId, FlowRule.Type.DEFAULT);
-
- selector = DefaultTrafficSelector.builder();
-
- // Request packets with BGP port as their TCP destination port
- selector.matchEthType(Ethernet.TYPE_IPV4);
- selector.matchIPProtocol(IPv4.PROTOCOL_TCP);
- selector.matchTcpDst(BGP_PORT);
-
- packetService.requestPackets(selector.build(), PacketPriority.CONTROL,
- appId, FlowRule.Type.DEFAULT);
}
public void stop() {
diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
index f20d6cc..75f7f7f 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
@@ -189,6 +189,10 @@
return add(Instructions.modVlanPcp(pcp));
}
+ public Builder stripVlan() {
+ return add(Instructions.stripVlanId());
+ }
+
@Override
public Builder setIpSrc(IpAddress addr) {
return add(Instructions.modL3Src(addr));
diff --git a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
index 9926751..1d2f7f4 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
@@ -106,6 +106,12 @@
public Builder setVlanPcp(Byte pcp);
/**
+ * Strips the vlan tag if there is one.
+ * @return a treatment builder
+ */
+ public Builder stripVlan();
+
+ /**
* Sets the src l3 address.
*
* @param addr an ip
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
index 7c3c24e..afbae7d 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
@@ -130,6 +130,14 @@
}
/**
+ * Strips the VLAN tag if one is present.
+ * @return a L2 modification
+ */
+ public static L2ModificationInstruction stripVlanId() {
+ return new StripVlanInstruction();
+ }
+
+ /**
* Creates a MPLS label modification.
* @param mplsLabel to set.
* @return a L2 Modification
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java
index 4702266..2a93b45 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java
@@ -53,6 +53,11 @@
VLAN_PCP,
/**
+ * Strips the vlan.
+ */
+ STRIP_VLAN,
+
+ /**
* MPLS Label modification.
*/
MPLS_LABEL,
@@ -273,6 +278,33 @@
}
}
+ public static final class StripVlanInstruction extends L2ModificationInstruction {
+
+ @Override
+ public L2SubType subtype() {
+ return L2SubType.STRIP_VLAN;
+ }
+
+ @Override
+ public String toString() {
+ return subtype().toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(type(), subtype());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ return false;
+ }
+ }
+
/**
* Represents a VLAN POP modification instruction.
*/
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
index 16960a4..9cfe5d8 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
@@ -268,6 +268,9 @@
case POP_VLAN:
builder.popVlan();
break;
+ case STRIP_VLAN:
+ builder.stripVlan();
+ break;
case SET_TP_DST:
case SET_TP_SRC:
case POP_PBB:
@@ -280,7 +283,7 @@
case SET_NW_TOS:
case SET_NW_TTL:
case SET_QUEUE:
- case STRIP_VLAN:
+
case ENQUEUE:
default:
log.warn("Action type {} not yet implemented.", act.getType());
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java
index 584f448..39694b4 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java
@@ -207,6 +207,8 @@
case VLAN_PCP:
ModVlanPcpInstruction vlanPcp = (ModVlanPcpInstruction) l2m;
return factory().actions().setVlanPcp(VlanPcp.of(vlanPcp.vlanPcp()));
+ case STRIP_VLAN:
+ return factory().actions().stripVlan();
default:
log.warn("Unimplemented action type {}.", l2m.subtype());
break;
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
index 1a423a9..c8b63b4 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
@@ -319,6 +319,8 @@
(PushHeaderInstructions) l2m;
return factory().actions().popMpls(EthType.of(popHeaderInstructions
.ethernetType()));
+ case STRIP_VLAN:
+ return factory().actions().stripVlan();
case MPLS_LABEL:
ModMplsLabelInstruction mplsLabel =
(ModMplsLabelInstruction) l2m;