Harald Welte | 5fa552c | 2017-01-07 21:21:35 +0100 | [diff] [blame] | 1 | #include <stdio.h> |
| 2 | |
Harald Welte | 7b113a2 | 2017-01-09 21:34:03 +0100 | [diff] [blame^] | 3 | #include <osmocom/core/utils.h> |
| 4 | |
Harald Welte | 5fa552c | 2017-01-07 21:21:35 +0100 | [diff] [blame] | 5 | #include "diag_log.h" |
| 6 | #include "protocol/diag_log_gsm.h" |
| 7 | #include "protocol/diag_log_wcdma.h" |
| 8 | |
Harald Welte | 7b113a2 | 2017-01-09 21:34:03 +0100 | [diff] [blame^] | 9 | static const struct value_string rrc_states[] = { |
| 10 | { DIAG_UMTS_RRC_STATE_DISCONNECTED, "DISCONNETED" }, |
| 11 | { DIAG_UMTS_RRC_STATE_CONNETING, "CONNECTING" }, |
| 12 | { DIAG_UMTS_RRC_STATE_CELL_FACH, "CELL_FACH" }, |
| 13 | { DIAG_UMTS_RRC_STATE_CELL_DCH, "CELL_DCH" }, |
| 14 | { DIAG_UMTS_RRC_STATE_CELL_PCH, "CELL_PCH" }, |
| 15 | { DIAG_UMTS_RRC_STATE_URA_PCH, "URA_PCH" }, |
| 16 | { 0, NULL } |
| 17 | }; |
| 18 | |
| 19 | static const struct value_string rrc_procedures[] = { |
| 20 | { DIAG_UMTS_RRC_PROC_CSP, "Cell Selection" }, |
| 21 | { DIAG_UMTS_RRC_PROC_SIB, "SIB Processing" }, |
| 22 | { DIAG_UMTS_RRC_PROC_PG2, "Paging Type 2" }, |
| 23 | { DIAG_UMTS_RRC_PROC_MCMR, "Measurement Control Reporting" }, |
| 24 | { DIAG_UMTS_RRC_PROC_RCE, "RRC Connection Establishment" }, |
| 25 | { DIAG_UMTS_RRC_PROC_RCR, "RRC Connection Release" }, |
| 26 | { DIAG_UMTS_RRC_PROC_UECI, "UE Capability Information" }, |
| 27 | { DIAG_UMTS_RRC_PROC_UECE, "UE Capability Enquiry" }, |
| 28 | { DIAG_UMTS_RRC_PROC_IDT, "Initial Direct Transfer" }, |
| 29 | { DIAG_UMTS_RRC_PROC_UDT, "Uplink Direct Transfer" }, |
| 30 | { DIAG_UMTS_RRC_PROC_DDT, "Downlink Direct Transfer" }, |
| 31 | { DIAG_UMTS_RRC_PROC_SCR, "Signaling Connection Release" }, |
| 32 | { DIAG_UMTS_RRC_PROC_SCRR, "Signalling connection Release Request" }, |
| 33 | { DIAG_UMTS_RRC_PROC_CC, "Counter Check" }, |
| 34 | { DIAG_UMTS_RRC_PROC_RBE, "Radio Bearer Establishment" }, |
| 35 | { DIAG_UMTS_RRC_PROC_RBRC, "Radio Bearer Re-configuration" }, |
| 36 | { DIAG_UMTS_RRC_PROC_RBR, "Radio Bearer Release" }, |
| 37 | { DIAG_UMTS_RRC_PROC_TCR, "Transport Channel Re-configuration" }, |
| 38 | { DIAG_UMTS_RRC_PROC_PCR, "Physical Channel Re-configuration" }, |
| 39 | { DIAG_UMTS_RRC_PROC_TFC, "Transport Format Combination Control" }, |
| 40 | { DIAG_UMTS_RRC_PROC_CU, "Cell Update" }, |
| 41 | { DIAG_UMTS_RRC_PROC_UU, "URA Update" }, |
| 42 | { DIAG_UMTS_RRC_PROC_UMI, "UTRAN Mobility Information" }, |
| 43 | { DIAG_UMTS_RRC_PROC_ASU, "Active Set Update" }, |
| 44 | { DIAG_UMTS_RRC_PROC_ISHFU, "Inter-System Handover from UTRAN" }, |
| 45 | { DIAG_UMTS_RRC_PROC_USHTU, "Inter-System Handover to UTRAN" }, |
| 46 | { DIAG_UMTS_RRC_PROC_ISCFU, "Inter-System Cell Reselection from UTRAN" }, |
| 47 | { DIAG_UMTS_RRC_PROC_ISCTU, "Inter-System Cell Reselection to UTRAN" }, |
| 48 | { DIAG_UMTS_RRC_PROC_PG1, "Paging Type 1" }, |
| 49 | { DIAG_UMTS_RRC_PROC_SMC, "Security Mode Command" }, |
| 50 | { 0, NULL } |
| 51 | }; |
| 52 | |
| 53 | static const struct value_string rrc_fail_causes[] = { |
| 54 | { DIAG_UMTS_RRC_FAIL_CFG_UNSUP, "Configuration Unsupported" }, |
| 55 | { DIAG_UMTS_RRC_FAIL_PHY_CHAN_FAIL, "Physical Channel Failure" }, |
| 56 | { DIAG_UMTS_RRC_FAIL_INCOMP_SIM_RECONF, "Incompatible Simultaneous Reconfig" }, |
| 57 | { DIAG_UMTS_RRC_FAIL_PROT_ERR, "Protocol Error" }, |
| 58 | { DIAG_UMTS_RRC_FAIL_COMP_RT_ERR, "Compressed Mode Runtime Error" }, |
| 59 | { DIAG_UTMS_RRC_FAIL_CELL_RESEL, "Cell Reselection" }, |
| 60 | { DIAG_UMTS_RRC_FAIL_INVAL_CFG, "Invalid Configuration" }, |
| 61 | { DIAG_UMTS_RRC_FAIL_CFG_INCOMPLETE, "Configuration Incomplete" }, |
| 62 | { DIAG_UMTS_RRC_FAIL_UNSUP_MEAS, "Unsupported Measurement" }, |
| 63 | { 0, NULL } |
| 64 | }; |
| 65 | |
| 66 | static const struct value_string rrc_prot_errs[] = { |
| 67 | { DIAG_UMTS_RRC_PERR_ASN1_ENC_ERR, "ASN.1 violation / encoding error" }, |
| 68 | { DIAG_UMTS_RRC_PERR_BAD_MSG_TYPE, "Not existing or not implemented message type" }, |
| 69 | { DIAG_UMTS_RRC_PERR_IMCOMP_RX_STATE, "Message incompatible with Rx state" }, |
| 70 | { DIAG_UMTS_RRC_PERR_BAD_IE, "IE Value not understood" }, |
| 71 | { DIAG_UMTS_RRC_PERR_COND_IE_ERR, "Conditional IE error" }, |
| 72 | { DIAG_UMTS_RRC_PERR_BAD_MSG_EXT, "Message extension not undersetood" }, |
| 73 | { 0, NULL } |
| 74 | }; |
| 75 | |
| 76 | static const struct value_string rrc_chan_types[] = { |
| 77 | { DIAG_UMTS_RRC_CHT_UL_CCCH, "CCCH(Uplink)" }, |
| 78 | { DIAG_UMTS_RRC_CHT_UL_DCCH, "DCCH(Uplink)" }, |
| 79 | { DIAG_UMTS_RRC_CHT_DL_CCCH, "CCCH(Downlink)" }, |
| 80 | { DIAG_UMTS_RRC_CHT_DL_DCCH, "DCCH(Downlink)" }, |
| 81 | { DIAG_UMTS_RRC_CHT_DL_BCCH_BCH,"BCCH/BCH" }, |
| 82 | { DIAG_UMTS_RRC_CHT_DL_BCCH_FACH, "BCCH/FACH" }, |
| 83 | { DIAG_UMTS_RRC_CHT_DL_PCCH, "PCCH" }, |
| 84 | { 0, NULL } |
| 85 | }; |
| 86 | |
Harald Welte | 5fa552c | 2017-01-07 21:21:35 +0100 | [diff] [blame] | 87 | static void handle_rrc_sig_msg(struct log_hdr *lh, struct msgb *msg) |
| 88 | { |
| 89 | struct diag_umts_rrc_msg *rrm = (struct diag_umts_rrc_msg *) msgb_data(msg); |
| 90 | |
Harald Welte | 7b113a2 | 2017-01-09 21:34:03 +0100 | [diff] [blame^] | 91 | printf("RRC: %s %u %u: %s\n", |
| 92 | get_value_string(rrc_chan_types, rrm->chan_type), |
| 93 | rrm->rb_id, rrm->length, |
Harald Welte | 5fa552c | 2017-01-07 21:21:35 +0100 | [diff] [blame] | 94 | osmo_hexdump(msgb_data(msg), rrm->length)); |
| 95 | } |
| 96 | |
| 97 | static const struct diag_log_dispatch_tbl log_tbl[] = { |
| 98 | { WCDMA(LOG_WCDMA_SIGNALING_MSG_C), handle_rrc_sig_msg }, |
| 99 | }; |
| 100 | |
| 101 | static __attribute__((constructor)) void on_dso_load_umts(void) |
| 102 | { |
| 103 | diag_log_reg_dispatch(log_tbl, ARRAY_SIZE(log_tbl)); |
| 104 | } |