Improve api trace replay consistency checking
Change-Id: I2c4b9646d53e4c008ccbe6d09c6a683c776c1f60 Signed-off-by: Dave Barach <dave@barachs.net>
This commit is contained in:

committed by
Florin Coras

parent
87df12d5de
commit
dfbee41b16
@ -189,6 +189,9 @@ typedef struct
|
||||
|
||||
char *region_name;
|
||||
char *root_path;
|
||||
|
||||
/* Replay in progress? */
|
||||
int replay_in_progress;
|
||||
} api_main_t;
|
||||
|
||||
extern api_main_t api_main;
|
||||
|
@ -890,6 +890,9 @@ vl_msg_api_process_file (vlib_main_t * vm, u8 * filename,
|
||||
msg += size;
|
||||
}
|
||||
|
||||
if (which == REPLAY)
|
||||
am->replay_in_progress = 1;
|
||||
|
||||
for (; i <= last_index; i++)
|
||||
{
|
||||
trace_cfg_t *cfgp;
|
||||
@ -914,6 +917,7 @@ vl_msg_api_process_file (vlib_main_t * vm, u8 * filename,
|
||||
vlib_cli_output (vm, "Ugh: msg id %d no trace config\n", msg_id);
|
||||
munmap (hp, file_size);
|
||||
vec_free (tmpbuf);
|
||||
am->replay_in_progress = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -937,6 +941,7 @@ vl_msg_api_process_file (vlib_main_t * vm, u8 * filename,
|
||||
vlib_cli_output (vm, "Ugh: msg id %d no endian swap\n", msg_id);
|
||||
munmap (hp, file_size);
|
||||
vec_free (tmpbuf);
|
||||
am->replay_in_progress = 0;
|
||||
return;
|
||||
}
|
||||
endian_fp = am->msg_endian_handlers[msg_id];
|
||||
@ -1038,6 +1043,7 @@ vl_msg_api_process_file (vlib_main_t * vm, u8 * filename,
|
||||
|
||||
munmap (hp, file_size);
|
||||
vec_free (tmpbuf);
|
||||
am->replay_in_progress = 0;
|
||||
}
|
||||
|
||||
u8 *
|
||||
|
@ -1249,6 +1249,8 @@ vl_api_show_plugin_command (vlib_main_t * vm,
|
||||
for (i = 0; i < vec_len (rp); i++)
|
||||
vlib_cli_output (vm, "%U", format_api_msg_range, rp + i);
|
||||
|
||||
vec_free (rp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1369,9 +1371,37 @@ vl_api_rpc_call_main_thread (void *fp, u8 * data, u32 data_length)
|
||||
static void
|
||||
vl_api_trace_plugin_msg_ids_t_handler (vl_api_trace_plugin_msg_ids_t * mp)
|
||||
{
|
||||
/* Do nothing. We just want to trace the message */
|
||||
}
|
||||
api_main_t *am = &api_main;
|
||||
vl_api_msg_range_t *rp;
|
||||
uword *p;
|
||||
|
||||
/* Noop (except for tracing) during normal operation */
|
||||
if (am->replay_in_progress == 0)
|
||||
return;
|
||||
|
||||
p = hash_get_mem (am->msg_range_by_name, mp->plugin_name);
|
||||
if (p == 0)
|
||||
{
|
||||
clib_warning ("WARNING: traced plugin '%s' not in current image",
|
||||
mp->plugin_name);
|
||||
return;
|
||||
}
|
||||
|
||||
rp = vec_elt_at_index (am->msg_ranges, p[0]);
|
||||
if (rp->first_msg_id != clib_net_to_host_u16 (mp->first_msg_id))
|
||||
{
|
||||
clib_warning ("WARNING: traced plugin '%s' first message id %d not %d",
|
||||
mp->plugin_name, clib_net_to_host_u16 (mp->first_msg_id),
|
||||
rp->first_msg_id);
|
||||
}
|
||||
|
||||
if (rp->last_msg_id != clib_net_to_host_u16 (mp->last_msg_id))
|
||||
{
|
||||
clib_warning ("WARNING: traced plugin '%s' last message id %d not %d",
|
||||
mp->plugin_name, clib_net_to_host_u16 (mp->last_msg_id),
|
||||
rp->last_msg_id);
|
||||
}
|
||||
}
|
||||
|
||||
#define foreach_rpc_api_msg \
|
||||
_(RPC_CALL,rpc_call) \
|
||||
|
Reference in New Issue
Block a user