Allow SingleSwitchFibInstaller to support untagged interfaces.
Added support in OVSCorsaPipeline and SoftRouter.
Change-Id: I7242f0f26cbdf7d6d2205fc6f48458d604de5326
diff --git a/apps/routing/src/main/java/org/onosproject/routing/impl/SingleSwitchFibInstaller.java b/apps/routing/src/main/java/org/onosproject/routing/impl/SingleSwitchFibInstaller.java
index a70e270..29f063d 100644
--- a/apps/routing/src/main/java/org/onosproject/routing/impl/SingleSwitchFibInstaller.java
+++ b/apps/routing/src/main/java/org/onosproject/routing/impl/SingleSwitchFibInstaller.java
@@ -29,6 +29,7 @@
import org.onlab.packet.Ethernet;
import org.onlab.packet.IpAddress;
import org.onlab.packet.IpPrefix;
+import org.onlab.packet.VlanId;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.incubator.net.intf.Interface;
@@ -279,20 +280,23 @@
NextHop nextHop = new NextHop(entry.nextHopIp(), entry.nextHopMac(), groupKey);
- TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder()
.setEthSrc(egressIntf.mac())
- .setEthDst(nextHop.mac())
- .pushVlan()
- .setVlanId(egressIntf.vlan())
- .setVlanPcp((byte) 0)
- .setOutput(egressIntf.connectPoint().port())
- .build();
+ .setEthDst(nextHop.mac());
+
+ if (!egressIntf.vlan().equals(VlanId.NONE)) {
+ treatment.pushVlan()
+ .setVlanId(egressIntf.vlan())
+ .setVlanPcp((byte) 0);
+ }
+
+ treatment.setOutput(egressIntf.connectPoint().port());
int nextId = flowObjectiveService.allocateNextId();
NextObjective nextObjective = DefaultNextObjective.builder()
.withId(nextId)
- .addTreatment(treatment)
+ .addTreatment(treatment.build())
.withType(NextObjective.Type.SIMPLE)
.fromApp(appId)
.add(); // TODO add callbacks
diff --git a/drivers/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java b/drivers/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java
index bd49e68..03f63b1 100644
--- a/drivers/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java
+++ b/drivers/src/main/java/org/onosproject/driver/pipeline/SoftRouterPipeline.java
@@ -275,7 +275,9 @@
selector.matchVlanId(v.vlanId());
selector.matchEthDst(e.mac());
selector.matchEthType(Ethernet.TYPE_IPV4);
- treatment.popVlan();
+ if (!v.vlanId().equals(VlanId.NONE)) {
+ treatment.popVlan();
+ }
treatment.transition(FIB_TABLE); // all other IPs to the FIB table
FlowRule rule = DefaultFlowRule.builder()
.forDevice(deviceId)