aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-01-07 21:21:35 +0100
committerHarald Welte <laforge@gnumonks.org>2017-01-08 16:04:01 +0100
commit5fa552cbd386b7e32f219648ae7a4e46bededa43 (patch)
tree3e8d2c20f0023c03b27fe780c869aaa22df7e5f3
parenta32c769bb7c71c71376cfb934082c07272cfe0c3 (diff)
separate diag_log_umts to diag_log_wcdma
Qualcomm differentiates between WCDMA (the access stratum) and UMTS (the non access stratum). Let's reflect that here. As an added bonus, we get working NAS protocol traces.
-rw-r--r--src/Makefile2
-rw-r--r--src/diag_log_gprs.c5
-rw-r--r--src/diag_log_umts.c19
-rw-r--r--src/diag_log_wcdma.c22
-rw-r--r--src/protocol/diag_log_umts.h29
-rw-r--r--src/protocol/diag_log_wcdma.h4
6 files changed, 65 insertions, 16 deletions
diff --git a/src/Makefile b/src/Makefile
index 525e784..cf325e6 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2,7 +2,7 @@ CPPFLAGS ?= -g -O0 -Wall `pkg-config --cflags libosmocore` `pkg-config --cflags
LIBS ?= `pkg-config --libs libosmocore` `pkg-config --libs qmi-glib`
all: osmo-qcdiag-log
-MODS_LOG = gprs_rlc.o gprs_mac.o diag_gsm.o diag_log.o diag_log_gsm.o diag_log_gprs.o diag_log_umts.o diag_log_qmi.o diag_dpl.o
+MODS_LOG = gprs_rlc.o gprs_mac.o diag_gsm.o diag_log.o diag_log_gsm.o diag_log_gprs.o diag_log_wcdma.o diag_log_umts.o diag_log_qmi.o diag_dpl.o
osmo-qcdiag-log: diagchar_hdlc.o diag_io.o osmo-qcdiag-log.o diag_msg.o protocol.o diag_cmd.o $(MODS_LOG)
$(CC) $(CPPFLAGS) -o $@ $^ $(LIBS)
diff --git a/src/diag_log_gprs.c b/src/diag_log_gprs.c
index 3a65ac0..00c2e13 100644
--- a/src/diag_log_gprs.c
+++ b/src/diag_log_gprs.c
@@ -169,6 +169,10 @@ static void handle_rlc_rel(struct log_hdr *lh, struct msgb *msg)
printf("RLC-%cL-RELEASE { tfi=%u, cause=%u }\n", ud, rli->tfi, rli->cause);
}
+static void handle_gmm_ota_msg(struct log_hdr *lh, struct msgb *msg)
+{
+ printf("GMM-OTA-MESSAGE { FIXME }\n");
+}
static const struct diag_log_dispatch_tbl log_tbl[] = {
{ GSM(LOG_GPRS_LLC_ME_INFO_C), handle_llc_me_info },
@@ -186,6 +190,7 @@ static const struct diag_log_dispatch_tbl log_tbl[] = {
{ GSM(LOG_GPRS_MAC_UL_TBF_RELEASE_C), handle_mac_ul_tbf_rel },
{ GSM(LOG_GPRS_RLC_UL_STATS_C), handle_rlc_ul_stats },
{ GSM(LOG_GPRS_RLC_DL_STATS_C), handle_rlc_dl_stats },
+ { GSM(LOG_GPRS_SM_GMM_OTA_MESSAGE_C), handle_gmm_ota_msg },
};
static __attribute__((constructor)) void on_dso_load_gprs(void)
diff --git a/src/diag_log_umts.c b/src/diag_log_umts.c
index 609e09d..4826548 100644
--- a/src/diag_log_umts.c
+++ b/src/diag_log_umts.c
@@ -1,25 +1,18 @@
#include <stdio.h>
#include "diag_log.h"
-#include "protocol/diag_log_gsm.h"
-#include "protocol/diag_log_wcdma.h"
+#include "protocol/diag_log_umts.h"
-static void handle_rrc_sig_msg(struct log_hdr *lh, struct msgb *msg)
+static void handle_nas_msg(struct log_hdr *lh, struct msgb *msg)
{
- struct diag_umts_rrc_msg *rrm = (struct diag_umts_rrc_msg *) msgb_data(msg);
+ struct diag_umts_nas_ota_msg *nas = (struct diag_umts_nas_ota_msg *) msgb_data(msg);
- printf("RRC: %u %u %u: %s\n", rrm->chan_type, rrm->rb_id, rrm->length,
- osmo_hexdump(msgb_data(msg), rrm->length));
-}
-
-static void handle_gmm_ota_msg(struct log_hdr *lh, struct msgb *msg)
-{
- /* FIXME */
+ printf("NAS: %cL %u: %s\n", nas->direction ? 'U':'D', nas->msg_length,
+ osmo_hexdump(msgb_data(msg), nas->msg_length));
}
static const struct diag_log_dispatch_tbl log_tbl[] = {
- { UMTS(LOG_WCDMA_SIGNALING_MSG_C), handle_rrc_sig_msg },
- { UMTS(LOG_GPRS_SM_GMM_OTA_MESSAGE_C), handle_gmm_ota_msg },
+ { UMTS(LOG_UMTS_NAS_OTA_MESSAGE_LOG_PACKET_C), handle_nas_msg },
};
static __attribute__((constructor)) void on_dso_load_umts(void)
diff --git a/src/diag_log_wcdma.c b/src/diag_log_wcdma.c
new file mode 100644
index 0000000..0c3b2b2
--- /dev/null
+++ b/src/diag_log_wcdma.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+
+#include "diag_log.h"
+#include "protocol/diag_log_gsm.h"
+#include "protocol/diag_log_wcdma.h"
+
+static void handle_rrc_sig_msg(struct log_hdr *lh, struct msgb *msg)
+{
+ struct diag_umts_rrc_msg *rrm = (struct diag_umts_rrc_msg *) msgb_data(msg);
+
+ printf("RRC: %u %u %u: %s\n", rrm->chan_type, rrm->rb_id, rrm->length,
+ osmo_hexdump(msgb_data(msg), rrm->length));
+}
+
+static const struct diag_log_dispatch_tbl log_tbl[] = {
+ { WCDMA(LOG_WCDMA_SIGNALING_MSG_C), handle_rrc_sig_msg },
+};
+
+static __attribute__((constructor)) void on_dso_load_umts(void)
+{
+ diag_log_reg_dispatch(log_tbl, ARRAY_SIZE(log_tbl));
+}
diff --git a/src/protocol/diag_log_umts.h b/src/protocol/diag_log_umts.h
new file mode 100644
index 0000000..e66b296
--- /dev/null
+++ b/src/protocol/diag_log_umts.h
@@ -0,0 +1,29 @@
+#pragma once
+
+#include <stdint.h>
+
+#define UMTS(x) (0x7000 + x)
+
+enum diag_log_code_umts {
+ LOG_UMTS_NAS_GMM_STATE_LOG_PACKET_C = 0x130,
+ LOG_UMTS_NAS_MM_STATE_LOG_PACKET_C = 0x131,
+ LOG_UMTS_NAS_REG_LOG_PACKET_C = 0x132,
+ LOG_UMTS_CS_CALL_SETUP_INFO_LOG_PACKET_C = 0x133,
+ LOG_UMTS_PS_CALL_INFO_LOG_PACKET_C = 0x134,
+ LOG_UMTS_MM_INFO_LOG_PACKET_C = 0x135,
+ LOG_UMTS_NAS_PS_CONNECTION_QOS_LOG_PACKET_C = 0x136,
+ LOG_UMTS_NAS_CS_CONNECTION_BC_LOG_PACKET_C = 0x137,
+ LOG_UMTS_NAS_UE_DYNAMIC_ID_LOG_PACKET_C = 0x138,
+ LOG_UMTS_NAS_UE_STATIC_ID_LOG_PACKET_C = 0x139,
+ LOG_UMTS_NAS_OTA_MESSAGE_LOG_PACKET_C = 0x13a,
+ LOG_UMTS_NAS_CFA_MESSAGE_LOG_PACKET_C = 0xa3b,
+ LOG_UMTS_NAS_ERROR_MESSAGE_LOG_PACKET_C = 0x13c,
+ LOG_UMTS_CS_CALL_RELEASE_INFO_LOG_PACKET_C = 0x13d,
+ LOG_UMTS_CS_CALL_CHANGE_INFO_LOG_PACKET_C = 0x13e,
+};
+
+struct diag_umts_nas_ota_msg {
+ uint8_t direction;
+ uint32_t msg_length;
+ uint8_t data[0];
+} __attribute__((packed));
diff --git a/src/protocol/diag_log_wcdma.h b/src/protocol/diag_log_wcdma.h
index 82a631a..0f7fd47 100644
--- a/src/protocol/diag_log_wcdma.h
+++ b/src/protocol/diag_log_wcdma.h
@@ -2,9 +2,9 @@
#include <stdint.h>
-#define UMTS(x) (0x4000 + x)
+#define WCDMA(x) (0x4000 + x)
-enum diag_log_code_umts {
+enum diag_log_code_wcdma {
LOG_WCDMA_RRC_STATES_C = 0x125,
LOG_WCDMA_RRC_PROTOCOL_ERRORS_C = 0x126,
LOG_WCDMA_CELL_ID_C = 0x127,