[AETHER-38] Extract pipeline-dependent code from current T3 implementation
- Exposes some ofdpa specific tables and types
- Introduces a new driver behavior PipelineTraceable
- OfdpaPipelineTraceable is the first implementation of the
new driver behavior
- New abstractions are introduced to encapsulate the input/output
of the traceables processing
- Implements some basic unit tests for Ofdpa implementation
Change-Id: I89d3fdeda445983ec7ebfa9ebb78afb1c6d3fd8f
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java
index 70aafd4..a020a64 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java
@@ -251,6 +251,18 @@
}
/**
+ * Determines whether this pipeline requires second VLAN entry in VLAN table.
+ * OF-DPA hardware requires one VLAN filtering rule and one VLAN assignment
+ * flow in the VLAN table in the case of untagged packets. Software emulations
+ * just use one flow.
+ *
+ * @return true if required
+ */
+ public boolean requireSecondVlanTableEntry() {
+ return true;
+ }
+
+ /**
* Determines whether in-port should be matched on in TMAC table rules.
*
* @return true if match on in-port should be programmed
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaGroupHandlerUtility.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaGroupHandlerUtility.java
index afab73f..93967cb 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaGroupHandlerUtility.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaGroupHandlerUtility.java
@@ -68,16 +68,16 @@
* L2 Flood Groups have <4bits-4><12bits-vlanId><16bits-index>
* L3 VPN Groups have <4bits-9><4bits-2><24bits-index>
*/
- static final int L2_INTERFACE_TYPE = 0x00000000;
+ public static final int L2_INTERFACE_TYPE = 0x00000000;
static final int L2_UNFILTERED_TYPE = 0xb0000000;
static final int L3_INTERFACE_TYPE = 0x50000000;
static final int L3_UNICAST_TYPE = 0x20000000;
- static final int L3_MULTICAST_TYPE = 0x60000000;
+ public static final int L3_MULTICAST_TYPE = 0x60000000;
static final int MPLS_INTERFACE_TYPE = 0x90000000;
static final int MPLS_L3VPN_SUBTYPE = 0x92000000;
static final int L3_ECMP_TYPE = 0x70000000;
- static final int L2_FLOOD_TYPE = 0x40000000;
- static final int L2_MULTICAST_TYPE = 0x30000000;
+ public static final int L2_FLOOD_TYPE = 0x40000000;
+ public static final int L2_MULTICAST_TYPE = 0x30000000;
static final int L2_LB_TYPE = 0xc0000000;
static final int TYPE_MASK = 0x0fffffff;
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaPipelineUtility.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaPipelineUtility.java
index 242ab47..020629d 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaPipelineUtility.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaPipelineUtility.java
@@ -54,19 +54,19 @@
}
// Ofdpa specific tables number
- static final int PORT_TABLE = 0;
- static final int VLAN_TABLE = 10;
+ public static final int PORT_TABLE = 0;
+ public static final int VLAN_TABLE = 10;
static final int VLAN_1_TABLE = 11;
static final int MPLS_L2_PORT_FLOW_TABLE = 13;
static final int MPLS_L2_PORT_PCP_TRUST_FLOW_TABLE = 16;
- static final int TMAC_TABLE = 20;
- static final int UNICAST_ROUTING_TABLE = 30;
- static final int MULTICAST_ROUTING_TABLE = 40;
- static final int MPLS_TABLE_0 = 23;
- static final int MPLS_TABLE_1 = 24;
- static final int MPLS_L3_TYPE_TABLE = 27;
- static final int MPLS_TYPE_TABLE = 29;
- static final int BRIDGING_TABLE = 50;
+ public static final int TMAC_TABLE = 20;
+ public static final int UNICAST_ROUTING_TABLE = 30;
+ public static final int MULTICAST_ROUTING_TABLE = 40;
+ public static final int MPLS_TABLE_0 = 23;
+ public static final int MPLS_TABLE_1 = 24;
+ public static final int MPLS_L3_TYPE_TABLE = 27;
+ public static final int MPLS_TYPE_TABLE = 29;
+ public static final int BRIDGING_TABLE = 50;
public static final int ACL_TABLE = 60;
static final int EGRESS_VLAN_FLOW_TABLE = 210;
static final int EGRESS_DSCP_PCP_REMARK_FLOW_TABLE = 230;
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java
index 7e43cab..0d79dcd 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java
@@ -109,7 +109,7 @@
* This is a non-OFDPA table to emulate OFDPA packet in behavior.
* VLAN will be popped before punting if the VLAN is internally assigned.
*/
- private static final int PUNT_TABLE = 63;
+ public static final int PUNT_TABLE = 63;
/**
* A static indirect group that pop vlan and punt to controller.
@@ -117,7 +117,7 @@
* The purpose of using a group instead of immediate action is that this
* won't affect another copy on the data plane when write action exists.
*/
- private static final int POP_VLAN_PUNT_GROUP_ID = 0xd0000000;
+ public static final int POP_VLAN_PUNT_GROUP_ID = 0xd0000000;
/**
* Executor for group checker thread that checks pop vlan punt group.
@@ -145,6 +145,11 @@
}
@Override
+ public boolean requireSecondVlanTableEntry() {
+ return false;
+ }
+
+ @Override
protected void initDriverId() {
driverId = coreService.registerApplication(
"org.onosproject.driver.OvsOfdpaPipeline");