WIP: More WCDMA/RRC decoding

This commit is contained in:
Harald Welte 2017-01-09 21:34:03 +01:00
parent 280bb05a61
commit 7b113a2d33
2 changed files with 160 additions and 1 deletions

View File

@ -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));
}

View File

@ -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;