diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-01-09 21:34:03 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-01-09 21:34:03 +0100 |
commit | 7b113a2d33c5a7bcd53f83f8df73b6a579bee56f (patch) | |
tree | 50f0f7ada84c7459ad01936bb385a1776bbc9228 | |
parent | 280bb05a61c5ab8afcab058446b4a11b7ef93814 (diff) |
WIP: More WCDMA/RRC decoding
-rw-r--r-- | src/diag_log_wcdma.c | 84 | ||||
-rw-r--r-- | src/protocol/diag_log_wcdma.h | 77 |
2 files changed, 160 insertions, 1 deletions
diff --git a/src/diag_log_wcdma.c b/src/diag_log_wcdma.c index 0c3b2b2..858e857 100644 --- a/src/diag_log_wcdma.c +++ b/src/diag_log_wcdma.c @@ -1,14 +1,96 @@ #include <stdio.h> +#include <osmocom/core/utils.h> + #include "diag_log.h" #include "protocol/diag_log_gsm.h" #include "protocol/diag_log_wcdma.h" +static const struct value_string rrc_states[] = { + { DIAG_UMTS_RRC_STATE_DISCONNECTED, "DISCONNETED" }, + { DIAG_UMTS_RRC_STATE_CONNETING, "CONNECTING" }, + { DIAG_UMTS_RRC_STATE_CELL_FACH, "CELL_FACH" }, + { DIAG_UMTS_RRC_STATE_CELL_DCH, "CELL_DCH" }, + { DIAG_UMTS_RRC_STATE_CELL_PCH, "CELL_PCH" }, + { DIAG_UMTS_RRC_STATE_URA_PCH, "URA_PCH" }, + { 0, NULL } +}; + +static const struct value_string rrc_procedures[] = { + { DIAG_UMTS_RRC_PROC_CSP, "Cell Selection" }, + { DIAG_UMTS_RRC_PROC_SIB, "SIB Processing" }, + { DIAG_UMTS_RRC_PROC_PG2, "Paging Type 2" }, + { DIAG_UMTS_RRC_PROC_MCMR, "Measurement Control Reporting" }, + { DIAG_UMTS_RRC_PROC_RCE, "RRC Connection Establishment" }, + { DIAG_UMTS_RRC_PROC_RCR, "RRC Connection Release" }, + { DIAG_UMTS_RRC_PROC_UECI, "UE Capability Information" }, + { DIAG_UMTS_RRC_PROC_UECE, "UE Capability Enquiry" }, + { DIAG_UMTS_RRC_PROC_IDT, "Initial Direct Transfer" }, + { DIAG_UMTS_RRC_PROC_UDT, "Uplink Direct Transfer" }, + { DIAG_UMTS_RRC_PROC_DDT, "Downlink Direct Transfer" }, + { DIAG_UMTS_RRC_PROC_SCR, "Signaling Connection Release" }, + { DIAG_UMTS_RRC_PROC_SCRR, "Signalling connection Release Request" }, + { DIAG_UMTS_RRC_PROC_CC, "Counter Check" }, + { DIAG_UMTS_RRC_PROC_RBE, "Radio Bearer Establishment" }, + { DIAG_UMTS_RRC_PROC_RBRC, "Radio Bearer Re-configuration" }, + { DIAG_UMTS_RRC_PROC_RBR, "Radio Bearer Release" }, + { DIAG_UMTS_RRC_PROC_TCR, "Transport Channel Re-configuration" }, + { DIAG_UMTS_RRC_PROC_PCR, "Physical Channel Re-configuration" }, + { DIAG_UMTS_RRC_PROC_TFC, "Transport Format Combination Control" }, + { DIAG_UMTS_RRC_PROC_CU, "Cell Update" }, + { DIAG_UMTS_RRC_PROC_UU, "URA Update" }, + { DIAG_UMTS_RRC_PROC_UMI, "UTRAN Mobility Information" }, + { DIAG_UMTS_RRC_PROC_ASU, "Active Set Update" }, + { DIAG_UMTS_RRC_PROC_ISHFU, "Inter-System Handover from UTRAN" }, + { DIAG_UMTS_RRC_PROC_USHTU, "Inter-System Handover to UTRAN" }, + { DIAG_UMTS_RRC_PROC_ISCFU, "Inter-System Cell Reselection from UTRAN" }, + { DIAG_UMTS_RRC_PROC_ISCTU, "Inter-System Cell Reselection to UTRAN" }, + { DIAG_UMTS_RRC_PROC_PG1, "Paging Type 1" }, + { DIAG_UMTS_RRC_PROC_SMC, "Security Mode Command" }, + { 0, NULL } +}; + +static const struct value_string rrc_fail_causes[] = { + { DIAG_UMTS_RRC_FAIL_CFG_UNSUP, "Configuration Unsupported" }, + { DIAG_UMTS_RRC_FAIL_PHY_CHAN_FAIL, "Physical Channel Failure" }, + { DIAG_UMTS_RRC_FAIL_INCOMP_SIM_RECONF, "Incompatible Simultaneous Reconfig" }, + { DIAG_UMTS_RRC_FAIL_PROT_ERR, "Protocol Error" }, + { DIAG_UMTS_RRC_FAIL_COMP_RT_ERR, "Compressed Mode Runtime Error" }, + { DIAG_UTMS_RRC_FAIL_CELL_RESEL, "Cell Reselection" }, + { DIAG_UMTS_RRC_FAIL_INVAL_CFG, "Invalid Configuration" }, + { DIAG_UMTS_RRC_FAIL_CFG_INCOMPLETE, "Configuration Incomplete" }, + { DIAG_UMTS_RRC_FAIL_UNSUP_MEAS, "Unsupported Measurement" }, + { 0, NULL } +}; + +static const struct value_string rrc_prot_errs[] = { + { DIAG_UMTS_RRC_PERR_ASN1_ENC_ERR, "ASN.1 violation / encoding error" }, + { DIAG_UMTS_RRC_PERR_BAD_MSG_TYPE, "Not existing or not implemented message type" }, + { DIAG_UMTS_RRC_PERR_IMCOMP_RX_STATE, "Message incompatible with Rx state" }, + { DIAG_UMTS_RRC_PERR_BAD_IE, "IE Value not understood" }, + { DIAG_UMTS_RRC_PERR_COND_IE_ERR, "Conditional IE error" }, + { DIAG_UMTS_RRC_PERR_BAD_MSG_EXT, "Message extension not undersetood" }, + { 0, NULL } +}; + +static const struct value_string rrc_chan_types[] = { + { DIAG_UMTS_RRC_CHT_UL_CCCH, "CCCH(Uplink)" }, + { DIAG_UMTS_RRC_CHT_UL_DCCH, "DCCH(Uplink)" }, + { DIAG_UMTS_RRC_CHT_DL_CCCH, "CCCH(Downlink)" }, + { DIAG_UMTS_RRC_CHT_DL_DCCH, "DCCH(Downlink)" }, + { DIAG_UMTS_RRC_CHT_DL_BCCH_BCH,"BCCH/BCH" }, + { DIAG_UMTS_RRC_CHT_DL_BCCH_FACH, "BCCH/FACH" }, + { DIAG_UMTS_RRC_CHT_DL_PCCH, "PCCH" }, + { 0, NULL } +}; + 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, + printf("RRC: %s %u %u: %s\n", + get_value_string(rrc_chan_types, rrm->chan_type), + rrm->rb_id, rrm->length, osmo_hexdump(msgb_data(msg), rrm->length)); } diff --git a/src/protocol/diag_log_wcdma.h b/src/protocol/diag_log_wcdma.h index 26e7986..f728f64 100644 --- a/src/protocol/diag_log_wcdma.h +++ b/src/protocol/diag_log_wcdma.h @@ -25,6 +25,83 @@ enum diag_umts_rrc_chtype { DIAG_UMTS_RRC_CHT_DL_PCCH = 6, }; +enum diag_umts_rrc_state { + DIAG_UMTS_RRC_STATE_DISCONNECTED = 0, + DIAG_UMTS_RRC_STATE_CONNETING = 1, + DIAG_UMTS_RRC_STATE_CELL_FACH = 2, + DIAG_UMTS_RRC_STATE_CELL_DCH = 3, + DIAG_UMTS_RRC_STATE_CELL_PCH = 4, + DIAG_UMTS_RRC_STATE_URA_PCH = 5, + DIAG_UMTS_RRC_STATE_WILDCARD = 6, +}; + +/* LOG_WCDMA_RRC_STATES_C */ +struct diag_umts_rrc_state_msg { + uint8_t rrc_state; +} __attribute__((packed)); + +enum diag_umts_rrc_procedure { + DIAG_UMTS_RRC_PROC_CSP = 0, + DIAG_UMTS_RRC_PROC_SIB = 1, + DIAG_UMTS_RRC_PROC_PG2 = 2, + DIAG_UMTS_RRC_PROC_MCMR = 3, + DIAG_UMTS_RRC_PROC_RCE = 4, + DIAG_UMTS_RRC_PROC_RCR = 5, + DIAG_UMTS_RRC_PROC_UECI = 6, + DIAG_UMTS_RRC_PROC_UECE = 7, + DIAG_UMTS_RRC_PROC_IDT = 8, + DIAG_UMTS_RRC_PROC_UDT = 9, + DIAG_UMTS_RRC_PROC_DDT = 10, + DIAG_UMTS_RRC_PROC_SCR = 11, + DIAG_UMTS_RRC_PROC_SCRR = 12, + DIAG_UMTS_RRC_PROC_CC = 13, + DIAG_UMTS_RRC_PROC_RBE = 14, + DIAG_UMTS_RRC_PROC_RBRC = 15, + DIAG_UMTS_RRC_PROC_RBR = 16, + DIAG_UMTS_RRC_PROC_TCR = 17, + DIAG_UMTS_RRC_PROC_PCR = 18, + DIAG_UMTS_RRC_PROC_TFC = 19, + DIAG_UMTS_RRC_PROC_CU = 20, + DIAG_UMTS_RRC_PROC_UU = 21, + DIAG_UMTS_RRC_PROC_UMI = 22, + DIAG_UMTS_RRC_PROC_ASU = 23, + DIAG_UMTS_RRC_PROC_ISHFU = 24, + DIAG_UMTS_RRC_PROC_USHTU = 25, + DIAG_UMTS_RRC_PROC_ISCFU = 26, + DIAG_UMTS_RRC_PROC_ISCTU = 27, + DIAG_UMTS_RRC_PROC_PG1 = 28, + DIAG_UMTS_RRC_PROC_SMC = 29, +}; + +enum diag_umts_rrc_fail_cause { + DIAG_UMTS_RRC_FAIL_CFG_UNSUP = 0, + DIAG_UMTS_RRC_FAIL_PHY_CHAN_FAIL = 1, + DIAG_UMTS_RRC_FAIL_INCOMP_SIM_RECONF = 2, + DIAG_UMTS_RRC_FAIL_PROT_ERR = 3, + DIAG_UMTS_RRC_FAIL_COMP_RT_ERR = 4, + DIAG_UTMS_RRC_FAIL_CELL_RESEL = 5, + DIAG_UMTS_RRC_FAIL_INVAL_CFG = 6, + DIAG_UMTS_RRC_FAIL_CFG_INCOMPLETE = 7, + DIAG_UMTS_RRC_FAIL_UNSUP_MEAS = 8, +}; + +enum diag_umts_rrc_prot_err { + DIAG_UMTS_RRC_PERR_ASN1_ENC_ERR = 0, + DIAG_UMTS_RRC_PERR_BAD_MSG_TYPE = 1, + DIAG_UMTS_RRC_PERR_IMCOMP_RX_STATE = 2, + DIAG_UMTS_RRC_PERR_BAD_IE = 3, + DIAG_UMTS_RRC_PERR_COND_IE_ERR = 4, + DIAG_UMTS_RRC_PERR_BAD_MSG_EXT = 5, +}; + +/* LOG_WCDMA_RRC_PROTOCOL_ERRORS_C */ +struct diag_umts_rrc_prot_err_msg { + uint8_t rrc_state; + uint8_t rrc_procedure; + uint8_t failure_cause; + uint8_t prot_err_cause; +} __attribute__((packed)); + /* LOG_WCDMA_SIGNALING_MSG_C */ struct diag_umts_rrc_msg { uint8_t chan_type; |