Move classify_table_index under the union
Fields needed only by specific adj type should be shared. Change-Id: I59ee15a29d2f5f527f46910a1a63866b291734c7 Signed-off-by: Damjan Marion <damarion@cisco.com>
This commit is contained in:

committed by
Gerrit Code Review

parent
b2ef4dde97
commit
f1bd8bec87
@ -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 =
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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 */,
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user