decode L2 channel type
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 @@
 	{ 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 @@
 {
 	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 @@
 {
 	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 @@
 	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;