aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-01-21 11:15:50 +0100
committerHarald Welte <laforge@gnumonks.org>2017-01-21 11:15:50 +0100
commit1570b9f38b70184647b4f759df5701e0cf213c4d (patch)
tree34589242aee72b250dfad85d62f0d67827e6913e
parent0512d9d2664fb0893aa4c096767f4e08d0362acb (diff)
decode L2 channel type
-rw-r--r--src/diag_gsm.c12
-rw-r--r--src/diag_log_gsm.c11
-rw-r--r--src/protocol/diag_log_gsm.h12
3 files changed, 31 insertions, 4 deletions
diff --git a/src/diag_gsm.c b/src/diag_gsm.c
index 594150c..79d896f 100644
--- a/src/diag_gsm.c
+++ b/src/diag_gsm.c
@@ -127,6 +127,18 @@ const struct value_string diag_gsm_l2_event_vals[] = {
{ 0, NULL }
};
+const struct value_string diag_gsm_l2_chantype_vals[] = {
+ { DIAG_L2_CHT_DCCH, "DCCH" },
+ { DIAG_L2_CHT_BCCH, "BCCH" },
+ { DIAG_L2_CHT_L2_RACH, "RACH" },
+ { DIAG_L2_CHT_CCCH, "CCCH" },
+ { DIAG_L2_CHT_SACCH, "SACCH" },
+ { DIAG_L2_CHT_SDCCH, "SDCCH" },
+ { DIAG_L2_CHT_FACCH_F, "FACCH/F" },
+ { DIAG_L2_CHT_FACCH_H, "FACCH/H" },
+ { 0, NULL }
+};
+
/* GSM_GPRS_LOG_PACKET_REQ_F */
struct diag_gsm_log_packet_req {
uint16_t code;
diff --git a/src/diag_log_gsm.c b/src/diag_log_gsm.c
index 40290b6..fff1a5c 100644
--- a/src/diag_log_gsm.c
+++ b/src/diag_log_gsm.c
@@ -26,8 +26,9 @@ static void handle_rr_sig_msg(struct log_hdr *lh, struct msgb *msg)
{
struct diag_gsm_rr_msg *rm = (struct diag_gsm_rr_msg *) msgb_data(msg);
- printf("RR: %02x %02x %u: %s\n", rm->chan_type, rm->msg_type,
- rm->length, osmo_hexdump(msgb_data(msg), rm->length));
+ printf("RR: %s %02x %u: %s\n",
+ get_value_string(diag_gsm_l2_chantype_vals, rm->chan_type & 0x7f),
+ rm->msg_type, rm->length, osmo_hexdump(msgb_data(msg), rm->length));
}
static void handle_rr_state_msg(struct log_hdr *lh, struct msgb *msg)
@@ -84,8 +85,10 @@ static void handle_l2_transm_status(struct log_hdr *lh, struct msgb *msg)
{
struct diag_gsm_l2_transm_status *lts = (struct diag_gsm_l2_transm_status *) msgb_data(msg);
- printf("L2-TRANSM-STATUS { sapi=%u, chan_type=%u, vs=%u, va=%u, vr=%u, retrans_ctr=%u, seq_err=%u, frame_type=%u, msg_entries=%u, seg_entries=%u }\n",
- lts->sapi, lts->channel_type, lts->vs, lts->va, lts->vr, lts->retrans_ctr,
+ printf("L2-TRANSM-STATUS { sapi=%u, chan_type=%s, vs=%u, va=%u, vr=%u, retrans_ctr=%u, seq_err=%u, frame_type=%u, msg_entries=%u, seg_entries=%u }\n",
+ lts->sapi,
+ get_value_string(diag_gsm_l2_chantype_vals, lts->channel_type),
+ lts->vs, lts->va, lts->vr, lts->retrans_ctr,
lts->seq_err, lts->frame_type, lts->msg_entries, lts->seg_entries);
}
diff --git a/src/protocol/diag_log_gsm.h b/src/protocol/diag_log_gsm.h
index a648014..5492160 100644
--- a/src/protocol/diag_log_gsm.h
+++ b/src/protocol/diag_log_gsm.h
@@ -333,6 +333,18 @@ struct diag_gsm_l2_state {
uint8_t l2_event;
} __attribute__ ((packed));
+enum diag_gsm_l2_chantype {
+ DIAG_L2_CHT_DCCH = 0,
+ DIAG_L2_CHT_BCCH = 1,
+ DIAG_L2_CHT_L2_RACH = 2,
+ DIAG_L2_CHT_CCCH = 3,
+ DIAG_L2_CHT_SACCH = 4,
+ DIAG_L2_CHT_SDCCH = 5,
+ DIAG_L2_CHT_FACCH_F = 6,
+ DIAG_L2_CHT_FACCH_H = 7,
+};
+const struct value_string diag_gsm_l2_chantype_vals[9];
+
struct diag_gsm_l2_transm_status {
uint8_t sapi;
uint8_t channel_type;