aboutsummaryrefslogtreecommitdiffstats
path: root/src/diag_msg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/diag_msg.c')
-rw-r--r--src/diag_msg.c50
1 files changed, 48 insertions, 2 deletions
diff --git a/src/diag_msg.c b/src/diag_msg.c
index 661d1d1..348cf2a 100644
--- a/src/diag_msg.c
+++ b/src/diag_msg.c
@@ -93,12 +93,12 @@ static void diag_rx_ext_msg_f(struct diag_instance *di, struct msgb *msgb)
}
msg = (struct ext_log_msg *) data;
- num_args = msg->num_args;
+ num_args = msg->hdr.num_args;
fmt = (const char *) msg->params + num_args*sizeof(msg->params[0]);
file = fmt + strlen(fmt) + 1;
printf("MSG(%u|%u|%s:%u): ", osmo_load16le(&msg->subsys_id),
- diag_ts_to_epoch(osmo_load64le(&msg->timestamp)),
+ diag_ts_to_epoch(osmo_load64le(&msg->hdr.timestamp)),
file, osmo_load16le(&msg->line_nr));
switch (num_args) {
case 0:
@@ -126,8 +126,54 @@ static void diag_rx_ext_msg_f(struct diag_instance *di, struct msgb *msgb)
fputc('\n', stdout);
}
+static void diag_rx_ext_msg_terse_f(struct diag_instance *di, struct msgb *msgb)
+{
+ const uint8_t *data = msgb_data(msgb);
+ const size_t len = msgb_length(msgb);
+ const struct qsr_ext_msg_terse *msg;
+ unsigned int num_args;
+
+ if (len < sizeof(struct qsr_ext_msg_terse)) {
+ printf("too short ext_log_msg.\n");
+ return;
+ }
+
+ msg = (struct qsr_ext_msg_terse *) data;
+ num_args = msg->hdr.num_args;
+
+ printf("MSG_QS(%u|%u|%08x:%u): ", osmo_load16le(&msg->subsys_id),
+ diag_ts_to_epoch(osmo_load64le(&msg->hdr.timestamp)),
+ osmo_load32le(&msg->hash), osmo_load16le(&msg->line_nr));
+ switch (num_args) {
+ case 0:
+ fputs("", stdout);
+ break;
+ case 1:
+ printf("%08x", osmo_load32le(&msg->params[0]));
+ break;
+ case 2:
+ printf("%08x %08x", osmo_load32le(&msg->params[0]),
+ osmo_load32le(&msg->params[1]));
+ break;
+ case 3:
+ printf("%08x %08x %08x", osmo_load32le(&msg->params[0]),
+ osmo_load32le(&msg->params[1]),
+ osmo_load32le(&msg->params[2]));
+ break;
+ case 4:
+ printf("%08x %08x %08x %08x", osmo_load32le(&msg->params[0]),
+ osmo_load32le(&msg->params[1]),
+ osmo_load32le(&msg->params[2]),
+ osmo_load32le(&msg->params[3]));
+ break;
+ }
+ fputc('\n', stdout);
+}
+
+
struct diag_cmd_dispatch_tbl cmd_tbl[] = {
{ DIAG_EXT_MSG_F, diag_rx_ext_msg_f },
+ { DIAG_QSR_EXT_MSG_TERSE_F, diag_rx_ext_msg_terse_f },
};
static __attribute__((constructor)) void on_dso_load_msg(void)