Move classify_table_index under the union 32/632/4
authorDamjan Marion <damarion@cisco.com>
Tue, 29 Mar 2016 11:06:36 +0000 (13:06 +0200)
committerGerrit Code Review <gerrit@fd.io>
Tue, 29 Mar 2016 12:50:53 +0000 (12:50 +0000)
Fields needed only by specific adj type should
be shared.

Change-Id: I59ee15a29d2f5f527f46910a1a63866b291734c7
Signed-off-by: Damjan Marion <damarion@cisco.com>
vnet/vnet/classify/ip_classify.c
vnet/vnet/ip/ip4_forward.c
vnet/vnet/ip/ip6_forward.c
vnet/vnet/ip/lookup.c
vnet/vnet/ip/lookup.h
vnet/vnet/mpls-gre/interface.c
vpp/api/api.c

index c922608..eff447b 100644 (file)
@@ -112,11 +112,11 @@ ip_classify_inline (vlib_main_t * vm,
         
       adj_index0 = vnet_buffer (b0)->ip.adj_index[VLIB_TX];
       adj0 = ip_get_adjacency (lm, adj_index0);
-      table_index0 = adj0->classify_table_index;
+      table_index0 = adj0->classify.table_index;
 
       adj_index1 = vnet_buffer (b1)->ip.adj_index[VLIB_TX];
       adj1 = ip_get_adjacency (lm, adj_index1);
-      table_index1 = adj1->classify_table_index;
+      table_index1 = adj1->classify.table_index;
 
       t0 = pool_elt_at_index (vcm->tables, table_index0);
 
@@ -156,7 +156,7 @@ ip_classify_inline (vlib_main_t * vm,
         
       adj_index0 = vnet_buffer (b0)->ip.adj_index[VLIB_TX];
       adj0 = ip_get_adjacency (lm, adj_index0);
-      table_index0 = adj0->classify_table_index;
+      table_index0 = adj0->classify.table_index;
 
       t0 = pool_elt_at_index (vcm->tables, table_index0);
       vnet_buffer(b0)->l2_classify.hash = 
index 0461983..6bfe1cf 100644 (file)
@@ -998,7 +998,7 @@ ip4_add_interface_routes (u32 sw_if_index,
   if (classify_table_index != (u32) ~0)
     {
       adj->lookup_next_index = IP_LOOKUP_NEXT_CLASSIFY;
-      adj->classify_table_index = classify_table_index;
+      adj->classify.table_index = classify_table_index;
     }
   else
     adj->lookup_next_index = IP_LOOKUP_NEXT_LOCAL;
index a478bab..3e8261a 100644 (file)
@@ -930,7 +930,7 @@ ip6_add_interface_routes (vnet_main_t * vnm, u32 sw_if_index,
   if (classify_table_index != (u32) ~0)
     {
       adj->lookup_next_index = IP_LOOKUP_NEXT_CLASSIFY;
-      adj->classify_table_index = classify_table_index;
+      adj->classify.table_index = classify_table_index;
     }
   else
     adj->lookup_next_index = IP_LOOKUP_NEXT_LOCAL;
index a6b037a..629c900 100644 (file)
@@ -132,7 +132,7 @@ ip_add_adjacency (ip_lookup_main_t * lm,
       adj[i].rewrite_header.sw_if_index = ~0;
       adj[i].explicit_fib_index = ~0;
       adj[i].mcast_group_index = ~0;
-      adj[i].classify_table_index = ~0;
+      adj[i].classify.table_index = ~0;
       adj[i].saved_lookup_next_index = 0;
 
       if (copy_adj)
@@ -958,7 +958,7 @@ u8 * format_ip_adjacency (u8 * s, va_list * args)
          break;
 
         case IP_LOOKUP_NEXT_CLASSIFY:
-            s = format (s, " table %d", adj->classify_table_index);
+            s = format (s, " table %d", adj->classify.table_index);
 
        default:
          break;
@@ -1072,7 +1072,7 @@ static uword unformat_ip_adjacency (unformat_input_t * input, va_list * args)
         (void) unformat (input, "%d", &adj->if_address_index);
       else if (next == IP_LOOKUP_NEXT_CLASSIFY)
         {
-          if (!unformat (input, "%d", &adj->classify_table_index))
+          if (!unformat (input, "%d", &adj->classify.table_index))
             {
               clib_warning ("classify adj must specify table index");
               return 0;
index 4286935..ba242ef 100644 (file)
@@ -129,11 +129,16 @@ typedef struct {
   i16 explicit_fib_index;
   u16 mcast_group_index;  
 
-  /* When classifying, start here */
-  u16 classify_table_index;
   /* Highest possible perf subgraph arc interposition, e.g. for ip6 ioam */
   u16 saved_lookup_next_index;
 
+  union {
+    /* IP_LOOKUP_NEXT_CLASSIFY only */
+    struct {
+      u16 table_index;
+    } classify;
+  };
+
   STRUCT_MARK(signature_end);
 
   /* Number of FIB entries sharing this adjacency */
index c345054..259211a 100644 (file)
@@ -1777,7 +1777,7 @@ int vnet_mpls_ethernet_add_del_policy_tunnel (u8 *dst,
   memset(&adj, 0, sizeof (adj));
   adj.explicit_fib_index = ~0;
   adj.lookup_next_index = IP_LOOKUP_NEXT_CLASSIFY;
-  adj.classify_table_index = classify_table_index;
+  adj.classify.table_index = classify_table_index;
     
   if (!l2_only)
     ip_add_adjacency (lm, &adj, 1 /* one adj */,
index f941f2f..9867b59 100644 (file)
@@ -929,8 +929,8 @@ static int ip4_add_del_route_t_handler (vl_api_ip_add_del_route_t *mp)
             ip_adjacency_t cadj;
             memset(&cadj, 0, sizeof(cadj));
             cadj.lookup_next_index = IP_LOOKUP_NEXT_CLASSIFY;
-            cadj.classify_table_index = ntohl(mp->classify_table_index);
-            if (pool_is_free_index (cm->tables, cadj.classify_table_index)) {
+            cadj.classify.table_index = ntohl(mp->classify_table_index);
+            if (pool_is_free_index (cm->tables, cadj.classify.table_index)) {
                 dsunlock(sm);
                 return VNET_API_ERROR_NO_SUCH_TABLE;
             }