X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fclassify%2Fclassify_api.c;h=03d04298c7a6e5155f096ebe4139eba36bfd9e14;hb=82b62bbf58bc3d1143a359d8f58f7be2f473cddd;hp=98f4366bf9ec335ff1be5faefabbbf0e0d5c2e08;hpb=f324dec0a371431f9326f67e920630579741da3c;p=vpp.git diff --git a/src/vnet/classify/classify_api.c b/src/vnet/classify/classify_api.c index 98f4366bf9e..03d04298c7a 100644 --- a/src/vnet/classify/classify_api.c +++ b/src/vnet/classify/classify_api.c @@ -71,8 +71,6 @@ _(skip_n_vectors) \ _(match_n_vectors) \ _(next_table_index) \ _(miss_next_index) \ -_(current_data_flag) \ -_(current_data_offset) \ _(mask_len) static void vl_api_classify_add_del_table_t_handler @@ -112,6 +110,9 @@ static void vl_api_classify_add_del_table_t_handler table_index = ~0; } + u8 current_data_flag = mp->current_data_flag; + i16 current_data_offset = clib_net_to_host_i16 (mp->current_data_offset); + rv = vnet_classify_add_del_table (cm, mp->mask, nbuckets, memory_size, skip_n_vectors, match_n_vectors, @@ -125,9 +126,9 @@ out: if (rv == 0 && mp->is_add) { t = pool_elt_at_index (cm->tables, table_index); - rmp->skip_n_vectors = ntohl(t->skip_n_vectors); - rmp->match_n_vectors = ntohl(t->match_n_vectors); - rmp->new_table_index = ntohl(table_index); + rmp->skip_n_vectors = htonl(t->skip_n_vectors); + rmp->match_n_vectors = htonl(t->match_n_vectors); + rmp->new_table_index = htonl(table_index); } else { @@ -229,12 +230,22 @@ vl_api_policer_classify_dump_t_handler (vl_api_policer_classify_dump_t * mp) policer_classify_main_t *pcm = &policer_classify_main; u32 *vec_tbl; int i; + u32 filter_sw_if_index; reg = vl_api_client_index_to_registration (mp->client_index); if (!reg) return; - vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type]; + filter_sw_if_index = ntohl (mp->sw_if_index); + if (filter_sw_if_index + >= vec_len (pcm->classify_table_index_by_sw_if_index[mp->type])) + return; + + if (filter_sw_if_index != ~0) + vec_tbl = + &pcm->classify_table_index_by_sw_if_index[mp->type][filter_sw_if_index]; + else + vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type]; if (vec_len (vec_tbl)) { @@ -505,12 +516,22 @@ vl_api_flow_classify_dump_t_handler (vl_api_flow_classify_dump_t * mp) flow_classify_main_t *pcm = &flow_classify_main; u32 *vec_tbl; int i; + u32 filter_sw_if_index; reg = vl_api_client_index_to_registration (mp->client_index); if (!reg) return; - vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type]; + filter_sw_if_index = ntohl (mp->sw_if_index); + if (filter_sw_if_index + >= vec_len (pcm->classify_table_index_by_sw_if_index[mp->type])) + return; + + if (filter_sw_if_index != ~0) + vec_tbl = + &pcm->classify_table_index_by_sw_if_index[mp->type][filter_sw_if_index]; + else + vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type]; if (vec_len (vec_tbl)) { @@ -657,7 +678,7 @@ setup_message_id_table (api_main_t * am) static clib_error_t * classify_api_hookup (vlib_main_t * vm) { - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); #define _(N,n) \ vl_msg_api_set_handlers(VL_API_##N, #n, \