VPP-68: L2 Rewrite: Support for chained classify tables 91/1091/3
authorPierre Pfister <ppfister@cisco.com>
Fri, 13 May 2016 06:47:06 +0000 (07:47 +0100)
committerDave Barach <openvpp@barachs.net>
Mon, 16 May 2016 12:12:01 +0000 (12:12 +0000)
The classifying capabilities are pretty limited if only a single table can be used.
This patch adds support for chained classify tables to L2 Rewrite feature.

Change-Id: Ib678fe2028f17b441adb75d85bf3e31185e42c59
Signed-off-by: Pierre Pfister <ppfister@cisco.com>
vnet/vnet/l2/l2_rw.c

index 8c62b88..93580c2 100644 (file)
@@ -197,6 +197,18 @@ l2_rw_node_fn(vlib_main_t * vm,
       e0 = vnet_classify_find_entry(t0, (u8 *) h0, hash0, now);
       e1 = vnet_classify_find_entry(t1, (u8 *) h1, hash1, now);
 
+      while (!e0 && (t0->next_table_index != ~0)) {
+          t0 = pool_elt_at_index(vcm->tables, t0->next_table_index);
+          hash0 = vnet_classify_hash_packet(t0, (u8 *)h0);
+          e0 = vnet_classify_find_entry(t0, (u8 *) h0, hash0, now);
+      }
+
+      while (!e1 && (t1->next_table_index != ~0)) {
+        t1 = pool_elt_at_index(vcm->tables, t1->next_table_index);
+        hash1 = vnet_classify_hash_packet(t1, (u8 *)h1);
+        e1 = vnet_classify_find_entry(t1, (u8 *) h1, hash1, now);
+      }
+
       rwe_index0 = e0?e0->opaque_index:config0->miss_index;
       rwe_index1 = e1?e1->opaque_index:config1->miss_index;
 
@@ -268,6 +280,12 @@ l2_rw_node_fn(vlib_main_t * vm,
       hash0 = vnet_classify_hash_packet(t0, (u8 *)h0);
       e0 = vnet_classify_find_entry(t0, (u8 *) h0, hash0, now);
 
+      while (!e0 && (t0->next_table_index != ~0)) {
+        t0 = pool_elt_at_index(vcm->tables, t0->next_table_index);
+        hash0 = vnet_classify_hash_packet(t0, (u8 *)h0);
+        e0 = vnet_classify_find_entry(t0, (u8 *) h0, hash0, now);
+      }
+
       rwe_index0 = e0?e0->opaque_index:config0->miss_index;
 
       if (rwe_index0 != ~0) {